DEV Community

Cover image for How I Launched a SaaS in Weeks Using Django and Railway
ZoyaLatif
ZoyaLatif

Posted on

How I Launched a SaaS in Weeks Using Django and Railway

I'm not a serial founder. I'm a developer who spotted a real problem and decided to build a solution. Here's exactly how I went from idea to live product using Django and Railway — and what I'd do differently.

The idea

Small businesses — personal trainers, accountants, freelancers, consultants — lose bookings every day because they're not available to respond instantly. I wanted to give them two things: a self-booking calendar and an AI assistant that answers customer questions 24/7.

That became SmartDeskPro.

The stack

I kept it boring on purpose. Boring technology ships faster.

• Django — batteries included, rapid development, solid ORM
• PostgreSQL — hosted on Railway, zero config
• Tailwind CSS — utility-first, no custom CSS files
• Vanilla JS — no framework overhead for a simple UI
• Claude (Anthropic) — powers the AI chat assistant
• Stripe — handles both SaaS subscriptions and one-time booking payments
• Resend — transactional emails and PDF receipts
• Railway — deployment, auto-deploys from GitHub on every push
• WhiteNoise — static file serving without an S3 bucket

What I built first

The booking flow. Three steps: pick a date, pick a time, enter your details. Get a confirmation email with a PDF receipt and a .ics calendar file.

I resisted the urge to build everything at once. No AI, no payments, no dashboard in v1. Just the core flow working end to end.

The hardest technical parts

Stripe webhooks. I have two payment types — monthly SaaS subscriptions and one-time booking fees. Both fire checkout.session.completed. The fix was checking session.get("mode") — "subscription" vs "payment" — to route to the right handler. Simple in hindsight, confusing in the moment.

Multi-tenant architecture. Every business gets their own public booking page at /book/{slug}/. All bookings, conversations, and FAQ entries belong to a BusinessProfile. Getting the data isolation right from the start saved me a lot of pain later.

The AI assistant. Making it feel relevant rather than generic required feeding it the business's own FAQ entries as context on every request. The system prompt includes the business name, working hours, and contact details. It's not magic — it's good context engineering.

Deployment

Railway is genuinely excellent for solo founders. Connect your GitHub repo, add your environment variables, push. It deploys automatically. PostgreSQL is one click. The Procfile runs migrations and collects statics on every deploy.

The only gotcha: WhiteNoise with CompressedManifestStaticFilesStorage hashes filenames on deploy. You must use Django's template tag — hardcoded paths break silently.

What I'd do differently

Start distribution earlier. I spent weeks polishing features before anyone had seen the product. The first version I showed people had bugs they never noticed because they were too busy telling me what features they actually wanted.

Talk to users before you build, not after.

Where it is now

SmartDeskPro is live at smartdeskpro.net. 14-day free trial, no card required.

If you're a Django developer thinking about building a SaaS, just start. The technical parts are the easy bits. Everything else is the work.

Top comments (0)