docs: map existing codebase
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
# External Integrations
|
||||
|
||||
**Analysis Date:** 2026-04-10
|
||||
|
||||
## APIs & External Services
|
||||
|
||||
**Analytics:**
|
||||
- Google Analytics / Google Tag Manager via `nuxt-gtag` ^4.1.0
|
||||
- SDK/Client: `nuxt-gtag` Nuxt module
|
||||
- Auth: `NUXT_PUBLIC_GTAG_ID` env var (public runtime config)
|
||||
- Enabled only in production: `enabled: import.meta.env.NODE_ENV === 'production'`
|
||||
- Config in `nuxt.config.ts` under `gtag:` and `runtimeConfig.public.gtag`
|
||||
|
||||
## Data Storage
|
||||
|
||||
**Databases:**
|
||||
- None — all portfolio data is static (TypeScript data files in `app/data/`)
|
||||
|
||||
**File Storage:**
|
||||
- Local filesystem only — images served from `public/` or via `@nuxt/image`
|
||||
|
||||
**Caching:**
|
||||
- None — Nuxt SSR per-request rendering
|
||||
|
||||
## Authentication & Identity
|
||||
|
||||
**Auth Provider:**
|
||||
- None — no user authentication required for this portfolio site
|
||||
|
||||
## Email
|
||||
|
||||
**SMTP Email (Contact Form):**
|
||||
- Provider: Any SMTP-compatible server (configured at runtime)
|
||||
- Implementation: `nodemailer` ^8.0.5 in server API route `app/api/contact.post.ts`
|
||||
- Validation: `zod` ^4.3.6 validates request body server-side
|
||||
- Auth env vars:
|
||||
- `NUXT_SMTP_HOST` - SMTP server hostname
|
||||
- `NUXT_SMTP_USER` - SMTP credentials username
|
||||
- `NUXT_SMTP_PASS` - SMTP credentials password
|
||||
- `NUXT_SMTP_TO` - Destination email address for contact messages
|
||||
|
||||
## SEO & Discoverability
|
||||
|
||||
**Sitemap:**
|
||||
- `@nuxtjs/sitemap` ^8.0.12 — automatic XML sitemap generation
|
||||
- Base URL: `https://killiandalcin.fr` (configured in `nuxt.config.ts` under `site:`)
|
||||
- Site name: "Killian' DAL-CIN - Developpeur Full Stack"
|
||||
|
||||
## Monitoring & Observability
|
||||
|
||||
**Error Tracking:**
|
||||
- None detected
|
||||
|
||||
**Logs:**
|
||||
- Standard Node.js stdout/stderr (captured by Docker/host)
|
||||
|
||||
## CI/CD & Deployment
|
||||
|
||||
**Hosting:**
|
||||
- Self-hosted Docker container on VPS
|
||||
- Image: `node:22-alpine` (multi-stage build)
|
||||
- Container port: 3000
|
||||
- Reverse proxy: Traefik
|
||||
- TLS via Let's Encrypt (`certresolver=public`)
|
||||
- Wildcard cert covering `killiandalcin.fr` and `*.killiandalcin.fr`
|
||||
- www → non-www permanent redirect middleware
|
||||
- Config via Docker labels in `docker-compose.yml`
|
||||
|
||||
**CI Pipeline:**
|
||||
- None detected — manual Docker image build and deploy
|
||||
|
||||
**Build process:**
|
||||
1. `docker build` — runs `npm ci` + `nuxt build` in `node:22-alpine`
|
||||
2. Output `.output/` copied to runtime stage
|
||||
3. `docker-compose up` starts the container with runtime env vars
|
||||
|
||||
## Internationalization
|
||||
|
||||
**i18n Provider:**
|
||||
- `@nuxtjs/i18n` ^10.2.4
|
||||
- Strategy: `prefix_except_default` (French at `/`, English at `/en/`)
|
||||
- Default locale: `fr`
|
||||
- Supported locales: `fr` (fr-FR), `en` (en-US)
|
||||
- Locale files: `i18n/locales/fr.json`, `i18n/locales/en.json`
|
||||
- Browser detection: cookie-based (`i18n_redirected`) for SSR safety
|
||||
|
||||
## Image Optimization
|
||||
|
||||
**Provider:**
|
||||
- `@nuxt/image` ^2.0.0
|
||||
- Default provider: local (no external image CDN configured)
|
||||
- Images served from `public/`
|
||||
|
||||
## Webhooks & Callbacks
|
||||
|
||||
**Incoming:**
|
||||
- `POST /api/contact` — contact form submission endpoint (`app/api/contact.post.ts`)
|
||||
|
||||
**Outgoing:**
|
||||
- None
|
||||
|
||||
## Environment Configuration
|
||||
|
||||
**Required env vars (production):**
|
||||
- `NUXT_SMTP_HOST` - SMTP server hostname
|
||||
- `NUXT_SMTP_USER` - SMTP username
|
||||
- `NUXT_SMTP_PASS` - SMTP password
|
||||
- `NUXT_SMTP_TO` - Contact form recipient email
|
||||
- `NUXT_PUBLIC_GTAG_ID` - Google Analytics tag ID
|
||||
- `PORTFOLIO_URL` - Primary domain (used in Traefik labels)
|
||||
- `PORTFOLIO_URL_WWW` - WWW variant (used in Traefik www-redirect rule)
|
||||
|
||||
**Secrets location:**
|
||||
- Passed as Docker environment variables at runtime (not committed to repo)
|
||||
- `docker-compose.yml` reads from host environment via `${VAR_NAME}` syntax
|
||||
|
||||
---
|
||||
|
||||
*Integration audit: 2026-04-10*
|
||||
Reference in New Issue
Block a user