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.)layers/<domain>/— one Nuxt layer per domain:base(shared primitives — buttons, typography, icons),content-core,blog,community-poi,team,home,sponsoring,opencollective,navigation,footer. Each layer holds its owncomponents/,composables/,utils/andtypes.ts.layouts/— shared layout chromepages/— route-driven pagesi18n/locales/— locale message files
- Install:
pnpm install - Dev:
pnpm dev - Build:
pnpm build - Preview:
pnpm preview(nuxt preview) - Serve the build in workerd via wrangler:
pnpm preview:prod(port 8787; runNODE_ENV=production pnpm buildfirst) - Tests:
pnpm test; lint:pnpm lint; types:pnpm typecheck
- 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.
- The site runs as the Cloudflare Worker
launchpad(Nitro presetcloudflare_module, SSR), deployed by Cloudflare Workers Builds from the Git integration — not by GitHub Actions. Production branch ismain. - There is no
wrangler.toml: Nitro generates the wrangler config fromnuxt.config.ts($production.nitro.cloudflare,deployConfig: true). The D1 bindingDBbacks @nuxt/content. - Images are served through Cloudflare Images at
img.onelitefeather.net.NUXT_IMAGE_PROVIDERandWORKERS_CIare build-time variables in Workers Builds. - Pull request previews come from Workers Builds preview URLs.
pnpm generate(SSG) is not part of the deployment path. SeeAGENTS.md(Deploy) for the required Workers Builds settings.
- Releases are managed by release-please (
.github/workflows/release-please.yml,release-please-config.json). Commits onmainfollow Conventional Commits; release-please keeps a release PR up to date with the version bump andCHANGELOG.md. - Merging the release PR tags the release and publishes the GitHub Release; the workflow then fast-forwards the
releasebranch to the tag. - Footer version is pulled from
package.json(appConfig.version).
- Use 2-space indentation and
<script setup lang="ts">. - Prefer domain components under
layers/<domain>/components/and shared primitives inlayers/base/components/. - Keep diffs small; follow existing naming (
PascalCase.vue, route-based pages).