Overview
ProClient is a SaaS platform I built to help service businesses manage the work that happens after a lead comes in: quotes, invoices, jobs, approvals, billing, and team access.
The idea came from a real problem I kept seeing with small service businesses. The work was not usually failing because they had no tools. It was failing because everything was split between too many places. A quote might be created in one system, the job details stored somewhere else, the invoice handled manually, and customer approval buried in a text thread or email.
ProClient was built to bring those workflows into one dashboard. The project became more than a normal app build—I also had to create the structure around the project so it could keep growing without becoming messy.
Project snapshot
- Role: Full-stack developer, product lead, QA/release lead
- Timeline: March 2026 to June 2026
- Stack: Next.js, Supabase, PostgreSQL, Stripe, Vitest, Playwright, GitHub Actions, Notion
- Focus: Multi-tenant SaaS, service business workflows, auth, billing, jobs, invoices, quotes, approvals, and release systems
The problem
Service businesses need more than a pretty dashboard. They need a system that can keep job context connected from the first quote through to the final invoice, with role-based team access, clean customer approvals, and billing secure enough for a real SaaS product.
The challenge with ProClient was making the app feel simple while handling harder parts in the background:
- Customer approvals needed an audit trail
- Invoice and quote totals needed to stay consistent
- Team access needed role-based rules
- Billing needed more than a Stripe button
- Auth and onboarding needed to handle invites, missing memberships, and post-login redirects
The approach
I focused the first major phase around pilot readiness. Instead of trying to build every possible feature, I narrowed the work to core workflows a service business would need to trust the product:
- Create and manage invoices
- Generate quote PDFs
- Turn invoices into jobs
- Track customer approval and feedback
- Manage team access and membership states
- Build a Stripe subscription foundation
- Add tests and release gates around the riskiest workflows
What I built
Connected quote, invoice, and job workflows
I improved invoice validation so users were not left guessing why an action was blocked, made pricing more consistent across invoice views, added quote PDF print and download actions, and built the ability to create a job directly from an invoice.
That invoice-to-job flow was one of the features that made the product feel more practical—if a business already has customer and invoice context, the app should carry that forward instead of making the user enter it again.
Customer approval history
I added an audit trail for quote customer responses so approval and feedback activity could be stored reliably. This gives the business a clearer record of what happened and helps avoid customer decisions being lost in scattered messages.
Auth, roles, and onboarding
A lot of the work went into auth routing, invite handling, membership states, and role-gated actions. I hardened those flows so the dashboard could handle real user states instead of only working in the ideal demo path.
Stripe billing foundation
Rather than treating billing as a quick integration, I built internal structure for subscription states like trial, active, past due, and canceled. That gave the app a cleaner foundation for checkout, customer portal, webhooks, entitlement checks, and blocked-state UI.
Building the system behind the product
I built a Notion-based Delivery OS that tracked epics, work items, sprints, bugs, PRs, releases, execution runs, schema changes, QA notes, and browser testing queues. Each work lane had clear scope, branch, worktree, test plan, and review packet—especially important for AI-assisted development in parallel.
Quality and testing
Because ProClient touched billing, auth, permissions, and customer approvals, I treated QA as part of the build—not something to do at the end.
- 692 Vitest tests passing during billing state validation
- 38/38 targeted billing tests passing
- 2/2 Playwright tests passing for the invoice-to-job flow
- CI-backed PR reviews for core workflows
- Schema tracking for database changes and release validation before merge
The outcome
- ProClient grew from a rough SaaS idea into a pilot-ready product foundation
- Connected workflows for quotes, invoices, jobs, approvals, billing state, and team access
- A real delivery process with sprints, PR evidence, schema timelines, and QA queues
- A working SaaS foundation with structure to keep building without losing control
What I learned
ProClient pushed me to think beyond whether I could build a feature. The better question became: can this feature survive in the rest of the product? Edge cases, testing, permissions, billing state, and database changes all had to be considered from the start.
The biggest lesson was that the system around the product matters almost as much as the product itself. ProClient helped me build both at the same time.



