Lessons from Building a Full Invoice App for the Price of a Netflix Subscription
Like a lot of devs, I built a side project that scratched a personal itch: an invoice generator. But instead of going full SaaS startup mode, I treated it as a challenge—build something clean, useful, and fast, with a real login system, server-side PDF generation, and as little overhead as possible. The result is InvoiceDen, a React-based web app hosted on Cloudflare Pages, with backend functionality on an EC2 instance, all for about $8/month. Here’s what I learned architecting it on a shoestring budget — and how you can do something similar without spinning up Kubernetes or draining your wallet. ⚙️ The Stack The app is split into a classic frontend + backend setup, but optimized for cost and simplicity. Frontend: React app hosted on Cloudflare Pages Static deploys, global CDN, zero dollars Backend: Small server on a tiny EC2 instance Handles login, PDF generation, and basic routing Auth: Email/password login using bcrypt + sessions No Firebase, no OAuth maze PDFs: Generated on the server using pdfkit Outputs a clean PDF based on user inputs and invoice state Despite being a “small project,” it touches almost every part of a typical web stack.

Like a lot of devs, I built a side project that scratched a personal itch: an invoice generator. But instead of going full SaaS startup mode, I treated it as a challenge—build something clean, useful, and fast, with a real login system, server-side PDF generation, and as little overhead as possible.
The result is InvoiceDen, a React-based web app hosted on Cloudflare Pages, with backend functionality on an EC2 instance, all for about $8/month.
Here’s what I learned architecting it on a shoestring budget — and how you can do something similar without spinning up Kubernetes or draining your wallet.
⚙️ The Stack
The app is split into a classic frontend + backend setup, but optimized for cost and simplicity.
-
Frontend: React app hosted on Cloudflare Pages
- Static deploys, global CDN, zero dollars
-
Backend: Small server on a tiny EC2 instance
- Handles login, PDF generation, and basic routing
-
Auth: Email/password login using bcrypt + sessions
- No Firebase, no OAuth maze
-
PDFs: Generated on the server using pdfkit
- Outputs a clean PDF based on user inputs and invoice state
Despite being a “small project,” it touches almost every part of a typical web stack.