Multilingual (de/en) Nuxt site with @nuxt/content, SEO/i18n, and feature-based components.
- Nuxt 3 + TypeScript, Tailwind CSS
- @nuxt/content for Markdown/data collections (blog, sponsors, timeline, etc.)
- @nuxtjs/i18n, @nuxtjs/seo, @nuxtjs/sitemap, nuxt-schema-org
- FontAwesome (brands/solid) + @nuxt/image (Cloudflare provider)
content/— localized collections (blog_{locale},sponsors_{locale}, etc.)components/features/— navigation, footer, sponsoring, OpenCollective, home sectionscomponents/base/— primitives (buttons, typography, icons)layouts/— shared layout chromepages/— route-driven pagesi18n/locales/— locale message files
- Install:
pnpm install - Dev:
pnpm dev - Build:
pnpm build - Preview:
pnpm preview - Generate (SSG):
pnpm generate
- Blog posts live under
content/blog/{locale}/. Frontmatter supportstitle,description,slug,pubDate,canonical,alternates,sitemap, etc. - Sponsors:
content/sponsors/{locale}/home.jsonsupportsname,url,description,badge, plus optionallogo(URL) oricon("fab cloudflare"style). - Schema for all collections lives in
content.config.ts.
usePageSeo+useHomeSeoprovide canonical/hreflang and social meta.- Sitemap is auto-generated with i18n-aware content source and alternates.
- Schema.org via
nuxt-schema-org; site config fromnuxt.config.ts.
- Semantic-release on main with conventional commits. Run
pnpm release(with push access) to publish tags/changelog. - Footer version is pulled from
package.json(appConfig.version).
- Use 2-space indentation and
<script setup lang="ts">. - Prefer feature components under
components/features/and shared primitives incomponents/base/. - Keep diffs small; follow existing naming (
PascalCase.vue, route-based pages).