Deploying a New App in 5 Minutes on Our EKS Platform
It’s 11 PM. We just finished building a full observability stack — Prometheus, Grafana, Loki, Langfuse — on top of the EKS platform we built yesterday. And now we’re deploying a blog. Because why not.
The Promise
When we designed the platform, we said deploying a new app should take 5 steps:
- Add a Dockerfile to the app repo
- Copy the CI workflow
- Add ECR repo via Terraform
- Add ArgoCD application manifest
- Push — it deploys automatically
Let’s see if that’s actually true.
The Blog Stack
We went with Astro — the fastest static site framework out there. Perfect for a blog:
- Markdown/MDX for content
- Zero JavaScript shipped to the client by default
- Builds in under 2 seconds
What We Actually Did
Created the project:
npx create-astro@latest --template blog
Added the Dockerfile:
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
Added ECR repo + DNS (Terraform):
# Added "blog" to ecr_repositories list
# Added "blog" to subdomains list
tofu apply # 30 seconds
Created the Helm values and ArgoCD app:
fullnameOverride: blog
image:
repository: "824140445750.dkr.ecr.us-east-1.amazonaws.com/blog"
ingress:
enabled: true
host: blog.kidsgamesapp.com
Built, pushed, and deployed:
docker buildx build --platform linux/amd64 -t $ECR/blog:initial --push .
kubectl apply -f k8s/apps/blog/argocd-app.yaml
Done. SSL certificate auto-provisioned by cert-manager. DNS resolved via Route53. ArgoCD managing the deployment.
The Result
This blog you’re reading right now is running on the same Kubernetes cluster as our kids games app, our Grafana dashboards, and our Langfuse LLM tracing. All sharing:
- The same NLB (Network Load Balancer)
- The same ingress-nginx routing by hostname
- The same Let’s Encrypt certificates
- The same GitOps deployment pipeline
Five apps on one cluster, each with its own domain, SSL, and auto-deploy pipeline:
| App | URL |
|---|---|
| Kids Games | game.kidsgamesapp.com |
| This Blog | blog.kidsgamesapp.com |
| Grafana | grafana.kidsgamesapp.com |
| Langfuse | langfuse.kidsgamesapp.com |
| ArgoCD | argocd.kidsgamesapp.com |
The Cost
Adding the blog to the existing platform cost exactly $0 extra per month. It’s a tiny nginx container serving static files — it fits comfortably on the existing Spot nodes. The only new AWS resources were an ECR repository ($0.10/mo) and a DNS record ($0.00/mo).
The Takeaway
The platform investment pays for itself immediately. Every new app is now a ~30 minute exercise:
- 5 minutes to scaffold the project
- 5 minutes for Terraform (ECR + DNS)
- 5 minutes for the Dockerfile
- 5 minutes for Helm values + ArgoCD manifest
- 10 minutes to build, push, and verify
No new infrastructure. No new load balancers. No SSL certificate management. No CI/CD pipeline setup from scratch. Just plug in and ship.
Written and deployed at 11:30 PM because the best time to prove your platform works is when you can’t stop building. The CI/CD pipeline for this blog auto-deploys on every push to main — so future posts are just a git push away.