My Complete Tech Stack for Building SaaS Alone in 2025
The exact tools I use to build, deploy, and market SaaS products as a solo developer. Django, React, Docker, Astro, and N8N for automation.
People always ask what tools I use to build products alone.
Here's everything. The complete stack I use to build, deploy, and market SaaS products as a solo developer. No team, no dedicated DevOps, no marketing department. Just these tools and a lot of late nights.
- Backend: Django + Django REST Framework
- Frontend: React (or Next.js for some projects)
- Deployment: Docker Compose on a VPS
- Landing Page & Blog: Astro (for SEO)
- Automation: N8N for social media and workflows
- Database: PostgreSQL
Why This Stack Works for Solo Development
Before I dive into each tool, here's the philosophy.
Boring technology wins.
I'm not using the newest framework that launched last month. I'm not chasing trends. I use tools that are stable, well-documented, and have been around long enough that every problem I hit has a Stack Overflow answer.
Optimize for speed, not scale.
I'm building for hundreds or thousands of users, not millions. I don't need to architect for Netflix-level traffic. I need to ship features fast and iterate based on feedback.
Minimize cognitive load.
The fewer technologies I have to context-switch between, the faster I move. Django handles most backend concerns. React handles the frontend. That's the core. Everything else is supporting infrastructure.
Let's break it down.
Backend: Django + Django REST Framework
Django is my home base.
I've tried other frameworks. Flask, FastAPI, Express, Rails. They're all fine. But Django's "batteries included" philosophy means I spend less time configuring and more time building.
Why Django for solo SaaS..
Admin panel for free. Django's built-in admin saves me weeks of development time. I don't have to build an internal dashboard to manage users, content, or data. It's just there.
ORM that makes sense. Django's ORM is intuitive. Migrations are straightforward. I can modify my data models and deploy changes without fear.
Authentication out of the box. User registration, login, password reset, permissions. All built in. I extend it when needed, but I don't build it from scratch.
Django REST Framework sits on top for API development. Serializers, viewsets, authentication. It's the standard for Django APIs and it's excellent.
My typical Django setup..
- Django 5.x
- Django REST Framework for APIs
- PostgreSQL database
- Celery + Redis for background tasks
- JWT authentication for API access
# My typical Django project structure
project/
├── apps/
│ ├── users/ # Custom user model, auth
│ ├── core/ # Shared utilities
│ └── [feature]/ # Feature-specific apps
├── config/
│ ├── settings/
│ │ ├── base.py
│ │ ├── dev.py
│ │ └── prod.py
│ └── urls.py
└── manage.py
Django isn't the fastest framework. It's not the most "modern." But for solo development, the productivity gains are unmatched.
Frontend: React
For the interactive parts of my apps, React is the choice.
I know Vue. I've used Svelte. They're great. But React has the largest ecosystem, the most job opportunities, and I'm fastest with it.
Why React specifically..
Component libraries. Need a date picker? There are 50 options. Need a rich text editor? Dozens of choices. React's ecosystem means I'm rarely building UI primitives from scratch.
Hiring potential. If I ever need to bring someone on, React developers are easier to find than Svelte developers. The talent pool matters.
Familiarity. I've been writing React for years. I know the patterns, the pitfalls, the best practices. That muscle memory is valuable.
My React setup..
- Vite for development and building (fast, simple)
- React Router for navigation
- Zustand or Context for state management (Redux is overkill for most solo projects)
- Tailwind CSS for styling
- React Query for data fetching
I keep it simple. No elaborate state management architectures. No complex folder structures. Just components, hooks, and utilities.
Deployment: Docker Compose
No Kubernetes. No AWS ECS. No serverless complexity.
Just Docker Compose on a VPS.
Here's my typical production setup..
# docker-compose.prod.yml
version: '3.8'
services:
web:
build: .
environment:
- DATABASE_URL=postgres://...
depends_on:
- db
- redis
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:alpine
volumes:
postgres_data:
Why this works for solo development..
One command deployment. docker-compose up -d and everything runs. No clicking through AWS consoles. No YAML files spread across 12 different services.
Portable. I can run the same setup locally and in production. What works on my machine works on the server.
Cheap. A $20-40/month VPS handles way more traffic than I'll see for years. No per-request pricing. No surprise bills.
Easy to understand. When something breaks at 2 AM, I can actually debug it. No layers of abstraction hiding what's happening.
I use DigitalOcean or Hetzner for hosting. Both have been reliable. I set up SSL with Let's Encrypt and Certbot. It's not glamorous, but it works.
Landing Page & Blog: Astro
This is the secret weapon for SEO.
Your SaaS needs organic traffic. Paid ads are expensive. Social media is unreliable. But content marketing, SEO, blog posts that rank on Google? That's sustainable traffic that compounds over time.
Astro is perfect for this.
Why Astro for landing pages and blogs..
Zero JavaScript by default. Google likes fast pages. Astro ships HTML. Your Lighthouse scores will be excellent without any optimization work.
Markdown/MDX support. Writing blog posts in Markdown is fast. MDX lets you embed components when needed. Content management without a CMS.
Static generation. Blog posts are generated at build time. No server, no database, just static files served from a CDN.
Island architecture. When you need interactivity (a pricing calculator, a signup form), you add it as an "island" without shipping JavaScript for the whole page.
My Astro setup for SaaS..
- Homepage with value proposition
- Features page
- Pricing page
- Blog with regular content for SEO
- Docs (if needed)
The marketing site and blog are completely separate from the app. Different deployment, different concerns. The Astro site brings people in through organic search. The app converts them into users.
This blog you're reading right now runs on Astro.
Automation: N8N
Here's the thing about solo development. You can't do everything manually.
Social media posts, email sequences, data syncing, notifications. If you're doing these by hand, you're wasting hours every week.
N8N is my automation backbone.
What I automate with N8N..
Social media posting. New blog post goes live, N8N creates posts for Twitter, LinkedIn, wherever. I don't log into each platform manually.
Email workflows. User signs up, trigger a welcome sequence. User hasn't logged in for a week, send a re-engagement email. All automated.
Data syncing. Move data between services. Update a spreadsheet when something happens in the app. Connect tools that don't have native integrations.
Monitoring alerts. Server health checks, error notifications, uptime monitoring. N8N pings me when something needs attention.
Why N8N over Zapier or Make..
Self-hosted. I run N8N on my own server. No per-task pricing. No monthly limits. Pay once for the server, automate unlimited workflows.
More powerful. N8N has code nodes, complex branching, better debugging. It's built for developers, not just no-code users.
Free and open source. The core product costs nothing. I just need the server resources to run it.
Setting up N8N takes a bit more work than signing up for Zapier. But the long-term savings (both money and time) are worth it.
Database: PostgreSQL
Not MySQL. Not MongoDB. PostgreSQL.
Why Postgres..
It just works. Reliable, performant, battle-tested. I've never had a Postgres database fail on me.
JSON support. When I need document-style flexibility, JSONB columns handle it. I don't need a separate document database.
Django integration. Django and Postgres are best friends. Full-text search, array fields, all the Postgres-specific features are first-class citizens in Django.
Industry standard. If I need to hire someone, they'll know Postgres. If I need to migrate to a managed service, every cloud provider supports it.
I run Postgres in Docker for development and production. Simple, consistent, reliable.
The Tools I Didn't Mention
What about testing? Pytest for Django, Jest for React. I write tests for critical paths, not 100% coverage. Ship fast, test what matters.
What about CI/CD? GitHub Actions for automated testing and deployment. Simple workflows that run on push to main.
What about monitoring? Sentry for error tracking. Basic server monitoring with whatever the VPS provider offers. Nothing fancy.
What about payments? Stripe. Always Stripe. Their documentation is excellent, their API is clean, and they handle all the compliance stuff.
How These Tools Work Together
Let me walk through the flow.
- User discovers product through a blog post on the Astro site (SEO traffic)
- User signs up on the React frontend, which calls the Django API
- Django handles authentication, data, business logic
- N8N triggers a welcome email sequence
- User pays through Stripe, Django records the subscription
- Everything runs on Docker Compose on a single VPS
One developer. One server. A complete SaaS business.
What I'd Change
This stack isn't perfect. Here's what I'm considering.
Go for some backend services. I'm learning Go and loving it. For performance-critical microservices, Go might replace Django in some cases.
Better deployment automation. My current setup works, but it's manual. I'd like to set up proper CI/CD with automatic rollbacks.
Managed database. Running Postgres in Docker works, but managed Postgres (DigitalOcean, AWS RDS) would give me automatic backups and peace of mind.
But these are optimizations, not necessities. The current stack ships products. That's what matters.
FAQ
Why Django over FastAPI?
FastAPI is great for pure APIs. But Django gives me admin, ORM, auth, and a million other things out of the box. For full SaaS products, Django's productivity wins.
Why not use a PaaS like Heroku or Railway?
I've used them. They're convenient. But for the price of one Heroku dyno, I can get a VPS that handles 10x the load. Cost matters when you're solo.
Is this stack "modern" enough?
Who cares? It ships products. "Modern" doesn't pay the bills. Reliability and speed do.
How long did it take to learn all this?
Years. But you don't need to know everything to start. Pick Django or Rails. Pick React or Vue. Learn one thing at a time. Add tools as you need them.
What would you recommend for beginners?
Start with Django and vanilla HTML templates. Skip the React complexity until you actually need it. Ship something simple first.
Final Thoughts
The best tech stack is the one you can ship with.
I've seen developers spend months evaluating tools, comparing frameworks, optimizing for hypothetical scale. Meanwhile, products don't get built.
Pick boring technology. Ship fast. Iterate based on feedback.
That's the strategy. The specific tools matter less than the discipline to use them.