ce7cd19fef
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3.5 KiB
3.5 KiB
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-gtagNuxt module - Auth:
NUXT_PUBLIC_GTAG_IDenv var (public runtime config) - Enabled only in production:
enabled: import.meta.env.NODE_ENV === 'production' - Config in
nuxt.config.tsundergtag:andruntimeConfig.public.gtag
- SDK/Client:
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
SMTP Email (Contact Form):
- Provider: Any SMTP-compatible server (configured at runtime)
- Implementation:
nodemailer^8.0.5 in server API routeapp/api/contact.post.ts - Validation:
zod^4.3.6 validates request body server-side - Auth env vars:
NUXT_SMTP_HOST- SMTP server hostnameNUXT_SMTP_USER- SMTP credentials usernameNUXT_SMTP_PASS- SMTP credentials passwordNUXT_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 innuxt.config.tsundersite:) - 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.frand*.killiandalcin.fr - www → non-www permanent redirect middleware
- Config via Docker labels in
docker-compose.yml
- TLS via Let's Encrypt (
CI Pipeline:
- None detected — manual Docker image build and deploy
Build process:
docker build— runsnpm ci+nuxt buildinnode:22-alpine- Output
.output/copied to runtime stage docker-compose upstarts 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 hostnameNUXT_SMTP_USER- SMTP usernameNUXT_SMTP_PASS- SMTP passwordNUXT_SMTP_TO- Contact form recipient emailNUXT_PUBLIC_GTAG_ID- Google Analytics tag IDPORTFOLIO_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.ymlreads from host environment via${VAR_NAME}syntax
Integration audit: 2026-04-10