How it's built
Version 1 of this portfolio is a static site (SSG) on CloudFront/S3, with a small serverless API for contact and admin — scale-to-zero by default.
Browser → CDN for pages; API Gateway → Lambda for contact leads.
Browser FR / EN
CloudFront
S3 (HTML / assets)API Gateway → Lambda
DynamoDBSES
Stack
Static generation keeps pages cheap; only contact/admin needs compute.
| Layer | Technology | Why |
|---|---|---|
| CDN / hosting | CloudFront · S3 | Global cache, TLS, low cost at low traffic |
| Web | Next.js SSG · next-intl | SSG + i18n; no Node server 24/7 |
| Content | Markdown in-repo (build-time) | Markdown compiled at CI build time |
| HTTP API | API Gateway HTTP API | Managed front door, throttling, JWT |
| Contact / admin | Lambda · Node/TypeScript | Leads, SES mail, availability, admin JWT |
| Data | DynamoDB (on-demand) | On-demand table for leads — pay per request |
| Amazon SES | Transactional notifications to the site owner |
V0 → V1 mapping
Same product content; cheaper runtime shape. Infra lives in the ega-v1-infra-tf repository.
| V0 (Compose / EC2) | V1 (serverless) |
|---|---|
| EC2 + Traefik + Compose (V0) | CloudFront + S3 (this site) |
| content-service (Go) | Markdown at build (no runtime content API) |
| api-gateway + contact-service | API Gateway + Lambda |
| Postgres + Redis | DynamoDB + API GW throttling |
| Mailpit | SES |
