Minimal starter without styling: Nuxt 3 + @nuxt/content (Markdown), @nuxtjs/i18n, Decap CMS admin, GitHub OAuth endpoints for Vercel.
- Nuxt 3 + Nitro (Vercel preset)
- @nuxt/content for Markdown in
content/with locales subfolders - @nuxtjs/i18n with locales: en (default), de, ru
- Decap CMS at
/admin/with i18n enabled collections - GitHub OAuth flow via server endpoints under
/api/oauth/*
npm installnpm run devIn a separate terminal, run:
npx netlify-cms-proxy-serverThis starts a proxy server on port 8081 that allows Decap CMS to edit local files directly without GitHub integration.
- Website: http://localhost:3000
- Admin panel: http://localhost:3000/admin/
- Language switching:
- EN: http://localhost:3000 (default)
- DE: http://localhost:3000/de
- RU: http://localhost:3000/ru
With local_backend: true in config.yml and the proxy server running:
- Click "Login" in the admin panel (no GitHub authentication needed)
- Edit content directly, changes save to local files
- Perfect for development and testing
For production deployment, you'll need GitHub OAuth:
-
Create a GitHub OAuth App:
- Homepage URL:
https://your-app.vercel.app - Authorization callback URL:
https://your-app.vercel.app/api/oauth/callback
- Homepage URL:
-
Set environment variables:
GITHUB_CLIENT_ID= your OAuth app client IDGITHUB_CLIENT_SECRET= your OAuth app client secretOAUTH_REDIRECT_URL=https://your-app.vercel.app(optional)
-
For production, disable local backend in
config.yml:# Comment out for production: # local_backend: true backend: name: github repo: your-github-user/your-repo branch: main
This project is fully compatible with Vercel:
- Push to GitHub and import the repo in Vercel
- Vercel auto-detects Nuxt - no additional configuration needed
- Set environment variables in Vercel → Project Settings → Environment Variables:
GITHUB_CLIENT_IDGITHUB_CLIENT_SECRETOAUTH_REDIRECT_URL(optional)
- OAuth endpoints work on Vercel - the custom
/api/oauth/*handlers are built for Vercel's serverless functions - Disable local_backend in production by commenting out
local_backend: trueinconfig.yml - The proxy server is NOT needed in production - it's only for local development
- Content edits go directly to GitHub - changes are committed to your repo automatically
content/
├── en/
│ ├── home.md # English homepage
│ └── _texts.md # English global texts (header/footer)
├── de/
│ ├── home.md # German homepage
│ └── _texts.md # German global texts
└── ru/
├── home.md # Russian homepage
└── _texts.md # Russian global texts
public/admin/
├── index.html # Decap CMS interface
└── config.yml # CMS configuration
server/api/oauth/
├── auth.get.ts # GitHub OAuth initiation
└── callback.get.ts # GitHub OAuth callback handler
- Creates/edits files in
content/{locale}/{slug}.md - Each page has
titleandbodyfields - Supports all three languages (en/de/ru)
- Edits
content/{locale}/_texts.mdfiles - Contains
headerandfooterfields - Automatically updates site header/footer
- Check browser console for errors
- Verify GitHub OAuth app settings (callback URL must match exactly)
- Ensure your GitHub account has write access to the repository
- Try local mode first to isolate the issue
- Make sure
npx netlify-cms-proxy-serveris running in a separate terminal - Check that port 8081 is not blocked
- Restart both dev server and proxy server if needed
- Nuxt 3 - Vue.js framework
- @nuxt/content - Git-based headless CMS
- @nuxtjs/i18n - Internationalization
- Decap CMS - Admin interface
- Vercel - Deployment platform