Ongoing Project · Solo Build
A small design-build studio was running client billing, milestone tracking, and approvals across disconnected Excel workbooks. I scoped it and built the MVP myself, end to end. This is one example of how I work with small businesses - sometimes the fix is a system like this, sometimes it's just tightening the process itself.
01 · The Problem
Project costing, budget tracking, purchase orders, and scheduling each lived in their own tab of their own workbook - some hand-formatted, some color-coded by feel. Nothing talked to anything else.
The risk wasn't the spreadsheets themselves - it was the gap between them. The number the client saw could drift from the number the internal team was tracking against, and nobody would notice until a bill didn't reconcile. Purchase requests, equipment tracking, and the Gantt schedule were three more tabs, each maintained separately, each one more place for a figure to go stale.
There was no single answer to "what's actually been billed, against what's actually been done" - just several spreadsheets that all believed they were right.
02 · How I Take On Work
Not every broken process needs new software. I take two kinds of engagements: building a lightweight system when the manual process has genuinely been outgrown (like this one), or redesigning the workflow itself when the fix is really about who does what, when, and how information moves - no build required. I scope which one a business actually needs before proposing either.
03 · What I Built
A relational data model behind a real app - internal cost tracking, milestone billing, and client sign-off all reading from the same source of truth. Core flows are working; polish and edge cases are still in progress.
Every active project in one place - status, overdue milestones, and pending client approvals surfaced at a glance instead of buried in a tab someone has to remember to check.
Internal view of every phase - target dates, completion %, and billing status per milestone - replacing a tab that had to be manually cross-checked against the costing sheet.
Advance-funded milestones and completion-based milestones need to be flagged differently when billing runs ahead of progress - one means the payment is doing its job, the other means someone needs to look. I encoded that distinction directly into the system instead of leaving it to memory.
A simplified, read-only view for the client - contract value, billed-to-date, milestone progress, pending approvals, material delivery status, and progress photos - without exposing internal cost breakdowns or margin.
The signer reviews and confirms the Statement of Cost in-app - name, timestamp, and IP logged automatically, so approval doesn't live only in an email thread. Tested end-to-end; the client hasn't signed off through it yet.
Trade-categorized items - materials, labor, suppliers - pulled into any project instead of retyped from scratch, with a configurable default markup that auto-calculates client price from base cost.
04 · Title Block
Boring, reliable technology - chosen for a small business that needs to maintain this after I hand it off, not to look impressive on a stack list.
| Backend | FastAPI (Python) + SQLModel ORM |
| Database | PostgreSQL via Supabase in productionSQLite fallback for local development |
| Frontend | Server-rendered HTML (Jinja2), no JS build stepDeliberately simple - fast to ship and easy for one person to maintain |
| Hosting | Render, deployed from a Git-backed workflow |
| Data migration | Custom Excel → relational DB import pipeline (openpyxl)Preserved spreadsheet business logic - conditional fee lines, per-section contingency, labor calculation modes |
| Client comms | Viber integration for notifications |
| Export | Client-ready .xlsx and print/PDF views on demand |
| Build process | Directed and reviewed with Claude (Anthropic)I owned requirements, data modeling, migration, and QA; wrote no code by hand |
05 · Impact
06 · Why It Matters
I scope ambiguous, non-technical requirements into something that actually runs. Translating a client's messy spreadsheet logic into a working data model is the same muscle as translating a client's messy workflow into product requirements.
I ship end to end, without a team. Requirements, data model, migration, build, deploy, handoff - all one person, against a real project with real stakes.
I design for the non-technical daily user. The client will be able to sign off, check status, and upload photos without training, once it's in their hands - the same instinct behind reducing friction in an onboarding flow.
I encode real business rules, not just CRUD screens. The advance-vs-completion billing logic only works because someone sat with how the studio actually gets paid, first.
07 · Get In Touch
● MVP - in developmentWhether that means a new system or just a better way of working, I'd rather start with what's actually broken than pitch you a build you don't need.