Most AWS frontend journeys begin with the same honest instinct: keep the first version simple. A build pipeline pushes static assets, S3 holds the files, CloudFront handles TLS and caching, and the team ships. For a genuinely static site, that decision is still excellent. It is cheap to operate, easy to explain, and fast all over the world. The problem appears later. The frontend starts asking for behavior that is no longer static: deeper routing, request-time rendering, image or runtime optimizations, environment-specific configuration, or production controls that need to look like the rest of the platform. At that point, the hosting model is no longer a packaging detail. It becomes architecture. The mistake is usually not starting with CloudFront + S3. The mistake is keeping a static-hosting model after the frontend begins to need request-time behavior, runtime configuration, or deployment controls that look like the rest of the production platform.…