AWS serverless stack for static sites: Vite, S3, CloudFront, CodePipeline
This review examines a serverless AWS architecture for a production company website, detailing the chosen tools and the rationale behind opting for specific services like Vite over Next.js and…
This review examines a serverless AWS architecture for a production company website, detailing the chosen tools and the rationale behind opting for specific services like Vite over Next.js and S3/CloudFront over Amplify/Vercel.
TL;DR
Best for: Indie founders or small teams building static marketing websites or simple web applications that require a robust, scalable, and cost-effective serverless infrastructure on AWS, prioritizing control and direct service integration over managed platforms. Skip if: Your project requires server-side rendering (SSR), complex backend logic beyond a simple API, or you prefer a fully managed, opinionated platform like Vercel or Amplify for faster initial setup at potentially higher long-term cost or less granular control. Bottom line: This stack offers a well-justified, performant, and maintainable foundation for static web content on AWS, leveraging core services for maximum control and efficiency.
METHODOLOGY
This v0 review draws on the founder's published claims in the article "Building a Production Company Website on AWS — Project Overview" on dev.to. Independent benchmarks are pending. Update cadence: re-tested when claims diverge from observed behavior.
The review covers the specific AWS services and frontend technologies selected by the author, Josh Blair, for a production company website, as detailed in his project overview article published on dev.to on 2026-05-21. We analyze the architecture diagrams, the listed tech stack, and the explicit design decisions provided by the author, particularly the justifications for choosing certain tools over alternatives. What's covered includes the rationale for using React 18 + Vite + TypeScript + Tailwind CSS v4 for the frontend, Amazon S3 + CloudFront for hosting, Route 53 + ACM for DNS/TLS, GitHub + AWS CodePipeline + CodeBuild for CI/CD, API Gateway + AWS Lambda (Python) + DynamoDB + SES for the contact API, and AWS CloudFormation + AWS SAM for Infrastructure as Code. What's not covered in this v0 review includes independent performance benchmarks, long-term workflow efficiency, specific cost analyses beyond general AWS pricing models, or edge cases not addressed in the overview article.
WHAT IT DOES
This project outlines a fully serverless AWS stack designed for a production company website, specifically for a software and cloud consulting business. The architecture emphasizes automation, scalability, and cost-efficiency by leveraging core AWS services.
Frontend and Hosting Choices
The frontend is built with React 18, Vite, TypeScript, and Tailwind CSS v4. This combination is chosen for its ability to produce a clean static build (a dist/ directory) that can be served directly from Amazon S3. CloudFront acts as the Content Delivery Network (CDN), providing global caching and improved performance. DNS management is handled by Route 53, with SSL/TLS certificates provided by AWS Certificate Manager (ACM).
Automated CI/CD Pipeline
Central to the stack is an automated CI/CD pipeline using GitHub, AWS CodePipeline, and CodeBuild. Every push to the main branch on GitHub automatically triggers a full build and deployment process. CodeBuild compiles the frontend assets, and CodePipeline orchestrates the deployment to S3 and CloudFront, ensuring continuous delivery of updates.
Serverless Contact Form API
For backend functionality, such as a contact form, the stack employs a serverless API. This includes API Gateway (HTTP) for endpoint management, AWS Lambda (Python) for processing requests, Amazon DynamoDB for data storage, and Amazon SES for email delivery. AWS SAM (Serverless Application Model) is used for deploying these serverless components, defining the infrastructure as code alongside CloudFormation.
WHAT'S INTERESTING / WHAT'S NOT
What's interesting here is the explicit, well-reasoned tool choice justification for a common web development scenario: a static marketing site. The author directly addresses why they chose Vite over Next.js and S3/CloudFront over Amplify or Vercel. For Vite, the argument centers on its efficiency for static builds and faster local development iteration when server-side rendering (SSR) is not a requirement. This is a pragmatic choice for many indie founders whose marketing sites do not need the complexity of a full-stack framework like Next.js.
The decision to use S3/CloudFront directly, rather than higher-level platforms like Amplify or Vercel, highlights a preference for granular control and cost optimization. While Amplify and Vercel offer convenience, they abstract away much of the underlying infrastructure. By using S3 and CloudFront, the author gains direct control over caching, origin access, and CDN configurations, which can be crucial for fine-tuning performance and managing costs at scale. This approach also demonstrates a deeper understanding and utilization of core AWS services, aligning with the author's professional background.
What's less interesting, or rather, what's missing from this initial overview, is a detailed cost analysis. While the author implies cost-effectiveness through direct AWS service usage, specific figures for different traffic tiers or a comparison against Amplify/Vercel's pricing models would strengthen the argument. The article also doesn't delve into specific performance metrics (e.g., Lighthouse scores, cold start times for Lambda) or how the chosen stack handles internationalization or more complex SEO requirements beyond basic static site principles. These are common considerations for production websites that would benefit from further exploration.
PRICING
This stack leverages Amazon Web Services (AWS) and open-source tools. Pricing for AWS services is usage-based, following a pay-as-you-go model. Many AWS services, including S3, CloudFront, Lambda, API Gateway, DynamoDB, and SES, offer a free tier for new and existing customers, subject to specific usage limits. For instance, AWS Lambda includes 1 million free requests and 400,000 GB-seconds of compute time per month. Amazon S3 offers 5GB of standard storage, 20,000 Get Requests, and 2,000 Put Requests per month. CloudFront provides 1TB of data transfer out and 10 million HTTP/S requests per month. Exceeding these limits incurs standard AWS charges. The frontend tools (React, Vite, TypeScript, Tailwind CSS) are open-source and free to use. Pricing snapshot date: 2026-05-21, based on current AWS pricing models.
VERDICT
This serverless AWS stack is an excellent choice for indie founders and small teams focused on building static marketing websites or simple web applications. The explicit preference for Vite over Next.js for static builds, and S3/CloudFront over Amplify/Vercel, is well-justified by the need for direct control, cost efficiency, and performance tuning without the overhead of server-side rendering. This setup provides a robust, scalable, and highly customizable foundation, making it ideal for those who want to deeply understand and manage their infrastructure on AWS. It allows for fine-grained optimization and avoids vendor lock-in associated with more opinionated platforms, provided the team has the AWS expertise to manage it.
WHAT WE'D TEST NEXT
Our next steps would involve a comprehensive cost-benefit analysis across various traffic profiles. We would benchmark the total monthly cost of this AWS stack against equivalent deployments on platforms like Vercel and AWS Amplify, considering different data transfer volumes and request counts. We would also conduct performance testing, specifically measuring frontend load times, Lighthouse scores, and the cold start latency of the Lambda function for the contact API. Further investigation into the CI/CD pipeline's deployment speed and rollback capabilities under different scenarios would also be valuable. Finally, we would explore the maintainability and complexity of managing CloudFormation/SAM templates for larger, more dynamic projects compared to higher-level abstractions.
Every claim ties to a primary source. See our methodology.