PROJECT 006 · CASE STUDY
McFly
Our agency's own product, a multi-tenant project management and time tracking SaaS. I architected the backend and the infrastructure from the ground up.
The brief
Agencies live and die by knowing where the hours go. McFly is our own product: project management and time tracking for teams like ours, with projects, tasks, time entries, clients, custom fields, an automation engine and Stripe-billed subscription tiers.
Building a SaaS as a bootstrapped agency sets an unusual constraint. The architecture has to be good enough to scale to paying customers while the monthly bill stays near zero. It’s also where we pioneered our agentic engineering workflows, so the codebase had to be legible to AI tooling as well as to people.
Calls that mattered
- An async FastAPI service on Cloud Run with SQLAlchemy 2.0 and Alembic, organised as domain modules that each follow the same convention: model, schemas, endpoints, factory, tests and a written feature definition beside the code. That written-spec-per-module discipline is what makes agent-driven development work on a real codebase.
- Background jobs on TaskIQ against Valkey, replacing a 38,000-line homegrown worker system I deleted in a one-week rebuild. Business logic stays pure and the task wrappers stay thin, so if the queue is down the endpoints still succeed and the work degrades instead of taking the API with it. CPU-bound work runs on its own worker and queue so it can never block the event loop.
- An event-driven automation engine: typed events and actions in a registry, so rules like “when a task moves to done, notify the client” are declared, validated and run asynchronously.
- Auth on Firebase custom claims, from guest through admin, with TOTP two-factor checked entirely from the claims so the hot path never touches the database for it.
- The whole platform in Terraform: nine composable modules covering Cloud Run, Cloud SQL, networking, secrets, Firebase, Cloudflare, Stripe and scheduling, with two fully isolated environments. Retrofitted onto the live hand-built environment in about a week, without downtime.
Results
McFly is live at mcfly.app, with a React frontend and a separate admin app consuming the API and the team building on the architecture daily. It’s also where our agentic workflows proved out: release cadence across the business went from every two to three weeks to weekly, and an admin panel that would once have taken four to six weeks shipped in one.