Nuxt 4

SSR profile, prerendered for GitHub Pages.

This site is a Nuxt 4 app with Nitro on the server, Vue 3 in the browser, and a single content layer in shared/ so dev SSR and static publish stay in sync.

Stack

  • Nuxt 4 — app router, layouts, file-based pages
  • Vue 3 — composition API, script setup, Pug templates
  • Nitro — SSR server, API routes, GitHub Pages preset
  • TypeScript — shared types across app and server
  • Pug + SCSS — templates and the nocturnal atelier visual system

Layout

apps/portfolio/
  app/              pages, layouts, components, composables, SCSS
  server/api/       Nitro GET routes
  shared/           profile, practice, experience content
  nuxt.config.ts    SSR, prerender, head meta

Data flow

  1. Content is authored in shared/ as typed modules.
  2. Nitro exposes the same data at /api/profile, /api/practice, /api/experience.
  3. Composables (useProfile, usePractice, useExperience) fetch those routes during SSR.
  4. pnpm build:pages prerenders HTML + JSON payloads for GitHub Pages at the domain root.

Deploy

development runs CI (typecheck + build). A squash PR promotes tomain, which publishes through GitHub Actions. Manual deploy is available from the Actions tab.

View apps/portfolio on GitHub