npx latex-resume-cliI got tired of manually tweaking my resume for every job application. So I built this.
It's a resume editor that runs on AWS. Tell it what you want in plain English ("add 2 years at Google doing Kubernetes stuff") and an AI generates the LaTeX for you. The whole thing costs $0 when you're not using it.
You: "Add 2 years at Google doing Kubernetes stuff"
↓
AI generates LaTeX patch → compiles PDF → you preview it
↓
Accept → auto-commits to GitHub
The backend spins up when you need it, shuts down after 10 minutes of inactivity. No always-on servers burning money.
Everything runs in one Docker container on ECS Fargate Spot:
- Bun - handles API requests, serves the frontend
- Next.js - static export, bundled into the container
- TeX Live - pdflatex + latexmk for compilation
- Cloudflare Tunnel - exposes the service without paying for a load balancer
Lambda would've been the obvious choice, but TeX Live is huge (~2GB). Fitting it into a Lambda layer is a pain. With Docker I just apt-get install what I need and move on.
Fargate Spot is ~70% cheaper than regular Fargate. I only run for a few minutes at a time, so Spot interruptions are a non-issue.
No API keys to rotate. Bedrock runs in my VPC, auth is handled by IAM. Qwen on Bedrock is pay-per-token - way cheaper than a ChatGPT subscription for occasional resume tweaks.
- Idle - Nothing running. Cost: $0
- You visit the site - Lambda wakes up ECS (~45-60s cold start)
- You edit - Backend is live
- 10 min idle - Container kills itself. Back to $0
There's a failsafe: if AWS costs hit 80% of your monthly budget ($4 out of $5 by default), a Lambda automatically:
- Stops all ECS tasks
- Disables the wakeup Lambda (sets concurrency to 0)
This prevents runaway costs. To re-enable, just reset the Lambda concurrency in the AWS console.
- AWS account with admin access
- Cloudflare account (free tier works)
- Terraform installed
-
Fork/clone this repo
-
Add GitHub secrets:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
-
Configure Terraform:
cd terraform cp terraform.tfvars.example terraform.tfvars # edit with your values
-
Deploy:
terraform init terraform apply
-
Push to
main- GitHub Actions builds the image, pushes to ECR
github_token = "ghp_..." # for committing resume changes
repo_owner = "your-username"
repo_name = "your-repo"
cloudflare_tunnel_token = "eyJ..." # from Cloudflare Zero Trust
budget_alert_email = "you@example.com" # budget notification email- Run
npx latex-resume-cli(or go to your Cloudflare tunnel URL) - Wait ~60s for Fargate to spin up
- Type what you want changed
- Preview the PDF
- Accept → commits to GitHub
├── compute/ # Bun backend
├── web/ # Next.js frontend (static export)
├── terraform/ # All the infrastructure
├── lambda_src/ # Wake up, stop, and budget kill Lambdas
├── cli/ # The npx command
├── resume.tex # Your resume
└── Dockerfile # Everything bundled
Built by Vishal Shaji