NextUp
A custom AI-powered task management app built for a construction team — purpose-fit for how they actually work, delivered on a fixed budget, with full ownership transferred at the end.
Client
Jeremy · Onyx
Engagement
Fixed-scope MVP build
Surface
Web app · Mobile-responsive
Status
In production
The problem
Jeremy runs operations for a construction team. Like every operator in the trades, he'd tried the standard playbook. ClickUp was the "professional" option — and it was too complex. Onboarding alone took longer than most tasks, and the field crew refused to use it. Microsoft Tasks was the fallback — and it was too basic. You could make a list. That was about it.
The team needed something in between. A task system that respected how a construction operation actually works: category-based work that maps to specific people, scheduling that accounts for who's actually available, and a mobile experience that doesn't require five taps to mark something done. Nothing on the market fit. Buying another generic tool wasn't going to fix it — the problem was that the off-the-shelf options were built for a different kind of company.
The thesis
For a small team, "buy software" had failed twice. The math on a custom build was simpler than most operators assume: one purpose-fit application, paid once, owned forever — for less than two years of ClickUp seats across the crew.
The engagement was structured as a $6,625 budget cap with a written feature list signed before work started. No "we'll figure scope out as we go." No "let's add this thing because it'd be cool." Every change request got acknowledged in writing with a clear impact on timeline and budget. The cap protected Jeremy. The scope discipline protected the project.
This is the playbook for every custom build worth doing: written scope, budget cap, milestone-based progress, weekly check-ins, and the kind of accountability where "done" is something you both agree on out loud — not something the developer decides unilaterally.
“The budget cap was the smartest part. It forced the scope conversation up front, which meant we built the right thing instead of arguing about feature creep at the end.”
The build
NextUp is a Next.js application on Supabase, deployed to Vercel. The core loop: tasks come in, the AI layer reads them, classifies them by category, and proposes an assignment based on who's available and who handles that kind of work. A human approves or overrides. The task lands on a drag-and-drop calendar that the whole team can see.
The mobile experience was non-negotiable. A construction operator is checking this from a job site, not a desk. Every key action — view today's work, mark complete, reassign, add a note — works in two taps on a phone. The calendar is the home screen. Everything else is a click off of it.
Under the hood: category-based smart scheduling, availability-aware assignment, a mobile-responsive layout built mobile-first instead of squeezed down from desktop, and a clean role system that separates what Jeremy can do from what the crew can do.
Next.js · App Router
Full-stack app
TypeScript · Tailwind
Type-safe · responsive
Supabase
Postgres · Auth · Realtime
Claude API
Task classification · assignment
Vercel
Deploy · domain · edge
shadcn/ui
Component base
Execution
Most custom-build projects end with a vague "everything's working, let me know if you need anything" email. NextUp ended with an actual checklist.
Jeremy received credentials and admin access to every account the app runs on — GitHub, Supabase, Vercel, the domain. The source code is his. The database is in his Supabase project. The deployment lives on his Vercel account. If he ever wants a different developer to take it over, the onboarding is one folder of repo access and a 30-minute walkthrough.
The final delivery included documentation, a walkthrough call, and a clear answer to the question every operator should ask before paying for software: "What does this cost to run, and what happens if something breaks?" NextUp's monthly running cost is the price of a Supabase plan and a few dollars of Claude API usage — and "what happens if something breaks" has a written answer instead of a salesperson.
$6,625
Budget · met exactly
100%
Scope shipped
4
Accounts transferred
0
Recurring vendor lock-in
Timeline
Week 1
Scope + kickoff
Written feature list signed. Budget capped. Account setup — GitHub repo, Supabase project, Vercel deployment, domain. First working session to confirm the data model.
Weeks 2–3
Core build
Auth, schema, task CRUD, calendar UI, drag-and-drop scheduling. Mobile-first layouts pass the 'two-tap test' on every key action. Daily commits, weekly check-in with Jeremy.
Week 4
AI layer
Task classification and auto-assignment built on Claude. Availability rules layered in. Override flow for when the AI gets it wrong. Role-based access cleaned up.
Handoff
Transfer + walkthrough
All four accounts transferred to Jeremy's ownership. Documentation delivered. Walkthrough call. Project closed within the original $6,625 cap, full scope shipped, no change-order surprises.
What it proved
Off-the-shelf isn't always cheaper
Two failed software trials had already cost Jeremy time and trust from the crew. A purpose-fit app — built once, owned forever — cost less than two years of multi-seat subscriptions and actually got used.
Budget caps make scope honest
A written cap before work starts is the single most underrated discipline in custom software. It forces the hard scope conversations up front, where they belong, and protects both sides from the slow-bleed of feature creep.
AI as plumbing, not theater
The AI in NextUp doesn't get a chat bubble or a marketing page. It does one job — classify and assign — in the background. The crew never thinks about it. That's the right altitude for AI in a tool people actually have to use.
Handoff is part of the product
Owning the GitHub repo, the database, the deployment, and the domain isn't a bonus deliverable — it's the difference between buying software and buying a vendor relationship. Jeremy bought software.
Generic tools not fitting how your business actually works?