Skip to the content.

SAM infrastructure (test / production)

API Gateway HTTP API → Nitro aws_lambda (nodejs24.x) → DynamoDB, plus CDN for hashed static assets (NUXT_APP_CDN_URL).

Test CDN: shared HyperActivity/portfolio stack shared-cdn-test (https://d3sr1gndi209fc.cloudfront.net, bucket shared-cdn-test-assets-305052780274, sync without --delete). See shared CDN note below.

Production CDN: stack-owned private S3 + CloudFront (OAC) until a shared production cutover is requested.

Operations (install SAM CLI, deploy, Windows notes): infra/sam/README.md

CI/CD: cicd.md · CDN behavior: web/features/cdn-guide.md · Dry-run public sync: npm run sam:sync:dryrun / --shared

Layout

Path Role
infra/sam/template.yaml Lambda, HTTP API, DynamoDB, S3, CloudFront
infra/sam/samconfig.toml test / prod profiles
infra/sam/.aws-sam/build-src/server Staged Nitro server (Lambda CodeUri)
infra/sam/.aws-sam/build-src/public Staged .output/public (S3 sync / CDN)

Website HTML/API and CDN assets do not share a host: pages hit execute-api; hashed files and favicon.ico hit *.cloudfront.net. Lambda does not ship .output/public (nitro.serveStatic: false on aws_lambda). SAM stages build-src/server (CodeUri) and build-src/public (S3 sync) separately; GET/HEAD for static extensions on the API host 302 to the CDN origin.

Shared test CDN (HyperActivity + portfolio)

Cutover (2026-08-21): test NUXT_APP_CDN_URL / sync target is the shared CloudFormation stack owned in HyperActivity (infra/sam/shared-cdn.yaml). No per-project prefix. Do not destroy shared-cdn-test from this repo. Do not aws s3 sync --delete that bucket. Production stays on portfolio-prod CDN.

Historical agent brief: agents/shared-cdn-handoff.md.

Commands

npm run sam:build
npm run sam:sync:dryrun
npm run sam:deploy:test
npm run sam:deploy:prod

Region: see samconfig.toml (currently us-west-2). GitHub CD uses OIDC (AWS_ROLE_ARN) and Environments test / production.