3.4 KiB
3.4 KiB
Technology Stack
Analysis Date: 2026-04-10
Languages
Primary:
- TypeScript ~5.8.0 - Full application (strict mode enforced via
nuxt.config.ts) - HTML5 - Server-rendered markup via Nuxt SSR
Secondary:
- CSS - Styling via Tailwind CSS v4 (
app/assets/css/main.css)
Runtime
Environment:
- Node.js 22 (Alpine) - Development, build, and production server
Package Manager:
- pnpm (primary —
pnpm-lock.yamlpresent) - npm also supported (used in Dockerfile via
npm ci) - Lockfile: both
pnpm-lock.yamlandpackage-lock.jsonpresent
Frameworks
Core:
- Nuxt 4 (
^4.0.0) - SSR framework,compatibilityVersion: 4set innuxt.config.ts - Vue (latest) - Component framework
- Vue Router (latest) - File-based routing via Nuxt
Nuxt Modules:
@nuxt/ui^3.0.0 - Component library (Tailwind v4 based, configured inapp.config.ts)@nuxtjs/i18n^10.2.4 - Internationalization with FR/EN support@nuxtjs/sitemap^8.0.12 - Automatic sitemap generationnuxt-gtag^4.1.0 - Google Analytics/Google Tag Manager integration@nuxt/image^2.0.0 - Optimized image handling@nuxt/eslint^1.15.2 - ESLint integration
Build/Dev:
- Tailwind CSS ^4.2.2 (devDependency — compiled at build time)
- ESLint (via
@nuxt/eslint) - Config:eslint.config.mjs - TypeScript ~5.8.0 - Compiler and type checking via
nuxt typecheck
Key Dependencies
Critical:
nuxt^4.0.0 - Core framework with SSR engine@nuxt/ui^3.0.0 - Provides all UI primitives (buttons, forms, modals, etc.)@nuxtjs/i18n^10.2.4 - Multilingual routing (frdefault,enprefixed via/en/)zod^4.3.6 - Schema validation (used in server API routes for contact form)
Infrastructure:
nodemailer^8.0.5 - SMTP email sending from server API (app/api/contact.post.ts)@types/nodemailer^8.0.0 - Type definitions for nodemailer
Configuration
Environment:
- No
.envcommitted; secrets passed at runtime via Docker environment variables - Key runtime config variables (defined in
nuxt.config.tsruntimeConfig):NUXT_SMTP_HOST- SMTP server hostnameNUXT_SMTP_USER- SMTP usernameNUXT_SMTP_PASS- SMTP passwordNUXT_SMTP_TO- Recipient email addressNUXT_PUBLIC_GTAG_ID- Google Analytics tag ID
Build:
nuxt.config.ts- Main Nuxt configuration (SSR enabled, modules, i18n, color mode, sitemap)app.config.ts- App-level UI config (primary color:brand)tsconfig.json+tsconfig.app.json+tsconfig.node.json- TypeScript project referenceseslint.config.mjs- ESLint flat config
Key nuxt.config.ts settings:
ssr: true— SSR always enabledcolorMode.storage: 'cookie'— SSR-safe theme persistencei18n.detectBrowserLanguage.useCookie: true— SSR-safe locale detectiontypescript.strict: true— Strict TypeScript mode
Platform Requirements
Development:
- Node.js 22+
- pnpm (or npm)
Production:
- Docker with Node.js 22 Alpine image
- SSR server runs on port 3000 (
node .output/server/index.mjs) - Reverse proxy: Traefik (TLS termination, www redirect, routing)
Scripts & Commands
pnpm dev # Start dev server with HMR
pnpm build # Build SSR bundle → .output/
pnpm generate # Static generation (SSG mode)
pnpm preview # Preview built output
pnpm lint # Run ESLint
pnpm typecheck # Run nuxt typecheck (vue-tsc)
Stack analysis: 2026-04-10