Production, Not Prototype
Step 03 of the path · Ship a SaaS app · See all steps
Build a real SaaS. Think in systems, own what you ship.
You build Signoff, a multi-tenant content workflow app: Django, HTMX, a tested approval state machine, and an API an AI agent can use without ever bypassing human approval. In six weeks you go from domain model to deployed app, using AI where it helps and your own judgment where it matters.
6 weeks · Python, Django, HTMX · self-paced €250 or with coaching €1,000 · early access from November 2 · 20% beta discount for the first 6 to enroll
Join the list and you get the enrollment link on November 2. The first 6 to enroll get 20% off either tier.
Getting it to work is the easy part. Keeping it working is the job.
Signoff is a content calendar for developers and small teams who publish regularly. Posting rules give every channel owned weekly slots, and nothing goes out until a teammate signs off, with comments and change requests much like a pull request review. It's modeled on the content tool I run my own publishing on, cut down to what you can build and understand in six weeks.
Why this app
Most practice projects stop at CRUD. Signoff has the patterns real products are made of, in one codebase small enough to finish in six weeks.
A workflow as a state machine
Draft, review, approved, published. An author can't approve their own post. The same pattern runs orders, tickets, invoices and deployments.
Real multi-tenancy
Organizations, an org switcher, and every query scoped to the active org. Tests prove a user in one org gets a 404 on another org's data. A common pattern in B2B SaaS.
Posting rules that fill the calendar
"LinkedIn every Tuesday, Alice owns it." A sync turns rules into open slots, is safe to run twice, and never deletes a slot someone started writing.
An API with an optional AI plugin
Hashed, per-user tokens. Build a Claude skill that fills open slots with drafts, or keep writing by hand. The API can never approve or publish.
A calendar that feels like an app
Drag posts between days, add one from any day, review inline, switch to dark mode. Server-rendered Django and HTMX, no JS framework.
Shipped, not localhost
Docker, Fly.io, CI that deploys only when tests are green, error tracking and backups. A live URL you can show.
Engineer with AI, don't just generate code
AI writes most code now, so this program doesn't pretend otherwise. You own the requirements, the design and the review. The agent types.
- Weeks 1-2: read every line.AI is allowed from day one. The domain model and state machine are small and pure, the best place to read every line closely and build the mental model you review against later. Writing them yourself is optional.
- From Week 3, you write the spec.The tests are executable constraints: you get the suite, add your own, and learn to spot what it doesn't cover. The agent implements, you review the diff and can say why each line is there.
- Planted traps.Each week hides a test for the classic AI mistake: a query that leaks another org's data, an API that can publish, hardcoded settings. You learn to spot it before the test does.
- A decision record per week.What you chose, the alternative, and why. This is where the engineering judgment gets trained.
The bar for done: green tests, clean ruff and ty, and you can explain every line, whoever typed it.
Six weeks, one deployed app
| Week | You build | You decide |
|---|---|---|
| 1 | Domain model: channels, posts, workflow states, admin | What belongs in the data model |
| 2 | The review workflow as your own tested state machine | Why domain rules live outside views, and own code vs a library |
| 3 | Calendar, posting rules and slot sync, drag and drop, HTMX reviews | Server-rendered vs a JS frontend |
| 4 | Organizations, membership, org-scoped queries | Shared database vs one per tenant |
| 5 | A token-scoped JSON API, plus an optional Claude plugin that fills open slots | What a plugin may do, and what stays human |
| 6 | Docker, Fly.io, CI/CD, error tracking, backups | The simplest database that meets your needs (SQLite as the example) |
| Bonus (optional) | Tasks per handoff, attachments, email notifications via Resend | Email in the request vs a background job |
Two tiers
Build it on your own
- Lessons, test suites and hints for all six weeks, plus the bonus week
- The CLAUDE.md and skills used in the course
- Weekly knowledge checks
- Solution branch after Week 6
- Lifetime access and updates
Build it with me
- Everything in self-paced
- My review on one pull request per course week, within 2 working days: design, tests and org boundaries, not style nitpicks
- Feedback on your weekly decision records
- Weekly group call: bring your design questions
- Async support in our Slack community
- Reviews run for 10 weeks from your start, so a busy week doesn't cost you
- Rolling start and a limited number of seats, so reviews stay fast
Start self-paced and want coaching later? What you paid is credited when you upgrade to the coaching tier.
The code you write is yours, including commercial use. The lessons, tests and reference solution are for your own learning, not to resell or republish.
Who is this for?
You know Python, uv, git and pytest (the Foundations course covers all four), and you want to build something bigger than a script. No Django experience needed. You use AI to write code, and you want to understand what it writes well enough to own it.
What developers say
From developers in my earlier full-stack program (Signoff itself is new):
"It taught me how to build, package, and deploy a production-ready application. I learnt how to write clean, maintainable code using modern tools and workflows."
Rahul M., Senior Manufacturing Test Engineer
"I shipped Snipster while sharpening my skills in FastAPI, SQLModel, testing, deployment, and architecture. The consistent feedback and weekly momentum made it easier to build clean, testable code."
Ben G., Data Engineer
In six weeks, you ship a deployed, production-minded SaaS and can explain every decision in it.