DAFFA ZAHY KHAIRY
AI + business operations / prototype

Decision Hub

A deal desk where AI reads the brief, rules set the price, and a manager signs one exact quote.

03 / 08B2B Deal DeskSynthetic dataProduct page ↗Source code ↗
Role
Solo — requirements, UX, backend, AI integration, testing
Stack
FastAPI, PostgreSQL, React + TypeScript, Claude API (optional)
Timeline
November 2026
Status
Prototype · 101 backend tests + 5 browser journeys
Decision Hub product page: the headline “The model has no price field.” beside a sample brief with four quoted phrases and the rule-priced quote built from them, $102,300 at a 41.54% margin
Product page: the app’s own output for its sample brief.03 / 08
7fields the model may fill; none is a price
0 of 60evaluation cases sent personal data to the model provider
96.7%fields exactly right (rule-based baseline)
20.8%valid briefs still priced differently

A quote is only as good as the brief behind it.

Sales sends briefs as free text. Details are missing, the analyst re-types the rest into a spreadsheet, prices are worked out by hand, and approval happens in a chat with no record.

Goal: one brief in; out come validated requirements, a policy-priced quote, a human decision on that exact quote, and a traceable proposal. Karsa, built later, takes the problem past approval.

From the product spec

AI does not decide the price and may not change the rate card; every final decision passes through a person.

The model has no price field.

Anything with money or approval in it is code or a person.

  1. 01

    The model proposes, code decides

    The model fills only seven requirement fields; its output schema has no price, discount or approval field. A deterministic engine prices on a versioned rate card.

  2. 02

    Every value must show its source

    Each field quotes its source sentence. A quote not found in the brief is downgraded to “verify”; missing information stays missing, never guessed.

  3. 03

    Approval belongs to one revision

    A manager approves a specific quote revision. Editing a field or re-pricing voids it, and nobody can approve a request they created.

  4. 04

    Personal data stays on the server

    Emails, phone numbers, ID numbers and named contacts are replaced with placeholders before any model call, then restored locally for the analyst.

Who touches a quote.

Five roles. Whoever creates a request can never approve it.

All five roles
UserWhat they do in the app
SalesPastes the brief as received; sees only their own requests.
Deal-desk analystChecks the extracted fields, fixes gaps, prices the quote, issues the final proposal.
OperationsConfirms whether off-catalog work, like explainer videos, can be delivered.
Deal-desk managerApproves or rejects one exact quote revision, with a reason when policy flags apply.
AuditorReads the full history of every brief and quote.

Intake to a final, hashed proposal.

Source-quoted extraction, corrections as new revisions, rule-based pricing with policy flags, manager review, and a proposal issued exactly once.

Full feature list and 2 more screens

Intake, AI-assisted extraction with source quotes, validation, analyst corrections as new revisions, deterministic pricing with policy flags, operations and manager review, an exactly-once final proposal, mock email and CRM notifications, a dashboard built from the audit trail, and an evaluation set for the extraction step.

The workspace shows the original brief, extracted fields and the decision inspector side by side. Off-catalog explainer videos go to operations before the manager can approve. The proposal cites its quote, requirement and rate-card versions.

96.7% of fields right, 20.8% of briefs still priced wrong.

Scored on 60 labelled synthetic briefs. A high field score can hide a pricing gap, so the evaluation reports business impact, not just accuracy.

The baseline is a free rule-based extractor, not an LLM. The Claude run is built, not yet measured.

All test and evaluation results
CheckResult
Backend tests (pricing oracle, approvals, concurrency, redaction)101 passing
Browser journeys with WCAG 2.2 AA scans5 / 5, 3 runs
Labelled synthetic briefs in the evaluation set60
Rule-based baseline: field-level exact match96.7%
Rule-based baseline: valid briefs that would be priced differently20.8%
Personal data reaching the extraction provider0 of 60 cases
Pricing time, p95 over 1,000 quotes0.014 ms
Lighthouse accessibility, desktop and mobile100

Six finalize clicks, one proposal.

Prices match hand-calculated values. Self-approval, stale approvals and six simultaneous finalize clicks are tested; breaking a rule on purpose fails its test.

  • Not yet: a live Claude evaluation, a hosted interactive demo (the product page is public; the app runs locally with Docker), or real users.
  • Name redaction only catches names after cues such as “Contact:”.
More on testing and the evaluation set

Notification retries are fault-injected, and the dashboard is reconciled against raw audit events. CI runs all tests, the browser journeys and the Docker build on every push.

The generated half of the evaluation set shares phrasing patterns, so the 12 hand-written hard cases are what separate good extractors from weak ones.

Synthetic briefs only; no client or deal-desk team has used it.