The Email That Priced Itself
Eleven "quick favours" over five weeks took a £95-an-hour developer down to £31 an hour. The fix was not a harder conversation. It was a verdict that quoted her own contract back.
Nadia Osei · E-commerce development · Featured capability: Scope Sentinel
Results at a glance
- £9,400 — recovered in signed change orders in one quarter
- £31 → £78 — effective hourly rate on comparable builds
- 10–12 hrs — monthly email triage no longer done by hand
Composite scenario. The person named here is not a customer: the protagonists are composites drawn from real usage patterns, and the figures are proportional to a solo freelancer or small studio rather than measured from one account. Every mechanism described is implemented in the product as written.
The freelancer
Nadia Osei builds and maintains Shopify Plus storefronts from a spare room in Manchester. Her clients are direct-to-consumer brands between eight and forty staff — the kind with a marketing lead who is enthusiastic, technical enough to be dangerous, and entirely unaware that a request typed into a reply is a request. Nadia's rate card says £95 an hour. Her problem was that nothing she owned could tell her when she had stopped charging it.
The breaking point
A subscription-box client, Ferncourt, signed a fixed-fee theme build: six templates, one payments integration, two rounds of revisions. Over five weeks the work arrived not as tickets but as replies.
"Loving the PDP. While you're in there — could the bundle builder also let people swap items mid-cycle? Should be quick."
"Small thing: can we do the announcement bar per-collection rather than site-wide?"
"Actually, thinking about it, let's go back to the older cart drawer."
Each one read as a favour. None of them was. Nadia said yes eleven times, shipped on schedule, invoiced the agreed fee, and then did the arithmetic she had been avoiding: 128 hours against a fee that assumed 88. Her effective rate on the job was £31 an hour.
She had not been underpriced. She had been quietly re-scoped, in writing, by a client who genuinely believed each request was trivial — and she had no artefact that said otherwise. The uncomfortable part was that she could not even reconstruct the list afterwards. The evidence was scattered across a thread with 34 messages in it, and rebuilding it would have taken most of a day she was not going to bill either.
How Stria solved it
Nadia set one forwarding rule in her mail client, pointing Ferncourt's thread at the per-client mail-drop address Stria mints for each client record. From there the pipeline is machinery rather than discipline, which is the only reason it survived a busy month.
Mail arrives through an Amazon SES receipt rule and an SNS notification whose RSA signature is the credential — the topic ARN is checked against an allowlist first, then the signature is verified against a certificate fetched from an sns.*.amazonaws.com host. There is no shared webhook secret sitting in a mail provider's config to leak. Each message then lands twice: once on the client's conversation thread, which is the durable record of what was said, and once as immutable scope-request evidence.
One detail here matters more than it looks. Forwarding rewrites the envelope sender, so SPF fails on almost every forwarded message while DKIM survives. Stria treats SPF, DKIM and DMARC as advisory display state and never as a reason to drop a message, because rejecting on SPF would reject the entire use case. Nadia's forwarded mail is the main path, not an edge case.
A scheduled sweep then claims those messages in a single scan-and-claim statement, so two overlapping runs can never both pay to judge the same email. Before any model is touched, two cheap gates run:
- Target resolution. Which engagement is this about? If it cannot tell — no client, no project, an ambiguous project, or no locked baseline to judge against — it raises a
needs_targetorneeds_baselinealert at zero AI cost. The Sentinel is never silent about mail it cannot judge. - Lexical triage. A deterministic scorer with no regular expressions in it, weighing five phrase groups: reversal, replacement and restructure at weight 2; addition and breadth at weight 1; plus a point for length past 320 characters. "Thanks, looks great" scores zero and costs nothing. "Actually, let's go back to the older cart drawer" trips reversal and replacement and earns a real determination.
What happens next is the part that made Nadia trust the output. Up to twenty retrieved chunks of her locked baseline are put in front of the model under an instruction to treat the request and the sources as untrusted data and ignore any instructions inside them. The model returns a schema-constrained verdict — in_scope, likely_out_of_scope, partially_in_scope or needs_clarification — with citations expressed as character offsets, not text. The server then re-slices the quoted excerpt out of the stored chunk itself.
The model cannot supply a quotation. That is the whole design. Offsets that do not land inside the chunk, a superseded chunk, a low-confidence OCR extraction, or a citation the model flagged as conflicting all downgrade the verdict to needs_clarification. And an out-of-scope call only survives if at least one cited excerpt genuinely carries exclusion, revision or quantity language and the confidence clears the threshold on that client's scope policy, which defaults to 0.85.
So the alert Nadia opened did not say "this looks out of scope." It quoted the line from her own signed baseline that it had relied on, and put a number beside it: hours priced against the bill_rate on the matching role in her default rate card. Where the model admitted it had no basis to estimate hours, the pricing function refused to produce a figure rather than rendering a confident zero, and the alert said so in words. A fabricated price on a document she was about to send a client would have been worse than no price at all.
Turning a verdict into money required Nadia to tick one box. Because a model made the call, the change-order builder demands an explicit acknowledgement before it will bill a client on that authority, and it shows her which baseline versions the batch was judged against — so a change order citing a superseded baseline is visible rather than embarrassing. Once the change order is signed, it folds itself back into a new locked baseline version carrying the old scope plus the new lines, preserving the revision budget, acceptance criteria and exclusions. The agreed scope of record actually moves, which means the next verdict is judged against the new agreement rather than the original one.
Results and business impact
In her first quarter on the loop, across four active clients, the Sentinel raised 11 out-of-scope alerts.
- Seven became signed change orders totalling £9,400.
- Two she deliberately absorbed as goodwill — knowing the cost, which was new.
- Two dissolved once she replied with the quoted baseline line and the client said "oh, fair enough, leave it."
Her effective hourly rate on comparable builds moved from £31 to £78. She estimates ten to twelve hours a month of manual email triage disappeared, though the change she mentions first is that she stopped rehearsing arguments in the shower.
The second-order effect was pricing confidence. Having a quarter of real data on what her clients actually asked for beyond scope, Nadia raised her fixed-fee baseline by 15% on new work and stopped quoting the two-round revision cap she had never once enforced.
Why this feature matters
Scope creep you merely noticed is still unpaid work. The gap between noticing and charging is filled by a conversation most freelancers will avoid, because the honest version of it is "I think you asked for more than we agreed, but I cannot prove it." A verdict that quotes the signed document changes the shape of that conversation entirely. It stops being your word against a nice client's memory, and becomes a document with a line in it.
Try it yourself
The free plan includes AI scope classification, so you can lock a baseline on one real job and watch the first verdict come back with the clause it relied on attached — start a 14-day trial at getstria.com. If you would rather not sign up first, the free scope check runs the same classification on a pasted request with no account at all.
More case studies
Start your 14-day trial · Try a free scope check · All case studies