-
-
Honest missing API key notice on custom text with a one-click button to reload the built-in architecture sample.
-
AI versus pure TypeScript boundary showing 4-field validation, word-for-word quote verification, and deterministic scope math.
-
All 8 TypeScript unit tests passing across sample math, status flips, bar sizing, quote verification, and input clamping.
-
Light mode view showing the 5-request scope audit, verified contract clause quotes, and three-sentence change-order reply.
-
Request 4 flipped from Unclear to Extra using its stored 2-hour default, updating the total to 17 hours and $425.
-
Initial scope audit calculating 15 hours of extra work at $25/hr for $375, with a 20% Covered, 60% Extra, 20% Unclear bar.
-
Ambit split-screen workbench with preloaded architectural contract, client message, $25/hr rate, and initial $375 scope summary.
Inspiration
Ever had a client say, "just one quick thing," and suddenly the job gets bigger? Freelancers often say yes to extra work because checking the contract takes time and feels awkward. As an architecture student who understands how much time and effort goes into drawings, renders, and revisions, I know how frustrating it can be when a small request turns into extra work you never agreed to or charged for. Ambit helps freelancers protect their time and get paid fairly for the work they do.
What it does
Ambit compares a client's message with your signed contract. It splits the message into separate requests, quotes the contract clause that matches each one, and flags it Covered, Extra or Unclear, with a suggested number of hours. It adds up the extra hours, multiplies them by your hourly rate, shows a scope bar, and writes a three-sentence change-order reply you can copy. Change any flag, hours or the rate and everything updates at once, with no new AI call.
How we built it
Ambit is built with Next.js, React, TypeScript and Tailwind CSS. The AI is only allowed to return a list of requests, each with the client's words, a quoted clause, a suggested status and suggested hours. Plain TypeScript does everything else: the totals, the bar sizes and the reply text. Any total or dollar amount the AI tries to send is ignored. Every quoted clause is checked word for word against your contract, and a quote that isn't found becomes "No matching clause found" and the request is marked Unclear.
Challenges we ran into
The hardest part was keeping the AI away from the numbers, so the money can be trusted. I also had to decide what to do with Unclear requests: they count as 0 hours and $0 until you price them, and they never look like Covered. I don't have an API key, so live analysis of custom text is built but not tested with a real key. The app says this honestly and offers the built-in sample instead.
Accomplishments that we're proud of
The AI-versus-code boundary is enforced in code and covered by 8 unit tests: the math, the quote check, the output validator and the clamping of bad numbers. The sample job works fully with no key, and flipping one request from Unclear to Extra updates the total from $375 to $425, the bar and the reply together.
What we learned
I learned to treat AI output as a suggestion, not a fact, and to check it in code. I also learned to be open about what has and hasn't been tested.
What's next for Ambit
Test live analysis with a real API key, support more contract formats, and save past jobs and change orders.
Built With
- anthropic
- next.js
- node.js
- react
- tailwind-css
- typescript
Log in or sign up for Devpost to join the conversation.