One document, two deliverables, everything inline. No local files are
required and none should be requested. Build them in order: the scorecard
is small and fixes the decision in place, and the websites depend on which option
it names.
Deliverable oneThe scorecard
A self-contained page ranking ten service businesses on twelve weighted
criteria. No dependencies, no network, works from file:// with
JavaScript off.
Deliverable twoThree websites
One business, three buyers, three design systems sharing no CSS, over a
single backend that takes money and fulfils the work.
Deliverable AThe scorecard
Create five files: report.html, scorecard-data.json,
build.mjs, verify-scorecard.mjs, README.md.
The report must work directly through file://, need no server and
no package installation, make no network requests, use no external fonts, scripts,
stylesheets, images, frameworks or CDNs, stay readable with JavaScript disabled,
support system light and dark, be responsive down to roughly 390px, and show the
scorecard immediately near the top.
Business context
Ten small, unglamorous AI-enabled service businesses, judged for a solo founder,
United States first, web-delivered, several verticals sharing one backend, high
fulfillment automation after stabilization, roughly $1,500 monthly operating
contribution per vertical, and fast paid pilots before substantial custom
development.
Scale
Raw scores are integers 1 through 5 and higher is always more favorable. On the
labor, automation and risk criteria, 5 means easier automation, lower
labor, lower risk.
Criteria and weights
Key
Criterion
Weight
A score of 5 means
roi
Pain and measurable ROI
15
Frequent, expensive problem with a result that can be demonstrated in dollars
wtp
Willingness to pay
10
A typical account supports a useful monthly or case fee
reach
Customer reachability
10
Buyers are identifiable through directories, associations, or partners
mvp
MVP and setup speed
10
A credible paid pilot can be delivered within days
automation
Automation and low labor
10
Most fulfillment can be automated after stabilization
sales
Sales-cycle speed
8
An owner can approve a small pilot quickly
margin
Margin and profit potential
8
Infrastructure and AI costs are small relative to price
dataEase
Data and integration ease
7
Inputs are easy to obtain and deep integrations are unnecessary
retention
Retention and recurring use
7
The workflow repeats and becomes operationally sticky
differentiation
Differentiation and competition
6
The outcome has a clear vertical wedge and limited direct competition
scale
Scale and shared infrastructure
5
The same engine supports many customers and related verticals
lowRisk
Low legal and operational risk
4
Errors are reversible and consequential actions stay human-approved
Recompute every composite from the raw scores at build time. Treat the published
values as assertions, never as inputs. Display at exactly two decimal places with
trailing zeros kept.
Canonical data
All forty composites below were independently recomputed from the raw scores and
every one matches. Overall runs strictly descending from 4.13 to 3.29.
Rank
Business
Overall
Speed
Ease
Long-term
Decision
1
Dump-ticket charge packets
4.13
3.75
4.00
4.35
Best with hauler access
2
Paper work-order missed billables
4.02
3.75
3.75
4.10
Recommended first
3
Recurring-service revenue recovery
3.98
3.75
3.50
4.05
Strong third test
4
Vendor-invoice audits
3.80
3.25
3.50
4.05
Good with partner distribution
5
Inspection corrective-action packs
3.62
4.25
3.50
3.30
Fast test; weaker retention
6
Single-site compliance inbox
3.59
4.00
3.75
3.35
Easy launch; price pressure
7
Liquid-waste exception desk
3.46
3.00
3.00
3.80
Needs industry access
8
Guided room/cleanout scope
3.40
3.50
3.00
3.40
Crowded; later test
9
Backflow paperwork
3.39
3.00
2.75
3.70
Sticky; maintenance burden
10
Sewer-camera reports
3.29
2.75
2.50
3.65
Technically heavier
Raw scores
#
Business
roi
wtp
reach
mvp
auto
sales
marg
data
ret
diff
scale
risk
1
Dump-ticket charge packets
5
4
3
4
4
4
5
4
4
4
4
4
2
Paper work-order missed billables
5
4
4
4
4
4
4
3
4
3
4
4
3
Recurring-service revenue recovery
5
4
4
4
4
4
4
3
4
3
4
3
4
Vendor-invoice audits
5
4
3
4
4
3
4
3
4
3
4
3
5
Inspection corrective-action packs
4
3
4
5
3
4
4
4
2
3
4
2
6
Single-site compliance inbox
3
3
4
4
4
4
4
4
4
2
4
3
7
Liquid-waste exception desk
4
4
3
3
3
3
4
3
4
4
3
3
8
Guided room/cleanout scope
4
3
4
3
3
4
4
3
3
2
4
3
9
Backflow paperwork
4
3
3
3
3
3
4
3
5
4
3
2
10
Sewer-camera reports
4
4
3
3
3
3
4
2
4
3
3
2
Page structure
Exact reading order, with nothing above the scorecard: eyebrow
THE SCORECARD; H1 AI Service Option Scorecard; the intro;
the recommendation callout; the decision summary table; the criteria table; the
caveat. No navigation, chart, executive summary or landing screen first.
Verbatim · intro
Every service is rated from 1 to 5. A higher number is more favorable. Overall
scores apply the weighted criteria shown below.
Verbatim · recommendation, first sentence bold
Start with paper work-order missed-billables auditing.
Dump-ticket charge packets have the highest mathematical score, but the
missed-billables customer base is broader and easier to reach. Dump-ticket packets
become the first choice if you already have access to roll-off haulers.
Verbatim · caveat
The ratings are informed assumptions. Paid pilots should replace the
customer-access, labor, willingness-to-pay, and retention scores.
Decision summary columns in order: Rank, Business, Overall, Speed, Ease,
Long-term, Decision. Ten rows ascending by rank. Pill styling only on
Best with hauler access and Recommended first. Criteria
table columns: Criterion, Weight, A score of 5 means.
Design tokens
Token
Light
Dark
--bg
#f4f6f8
#101318
--card
#ffffff
#181d25
--ink
#172033
#edf1f7
--muted
#5d6878
#aeb8c7
--line
#d9dee7
#303846
--accent
#2457d6
#8cacff
--good
#e9f0ff
#202d4c
Set color-scheme: light dark and the viewport meta. Font stack
system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif.
Body 16px/1.5. Main min(1380px, calc(100% - 32px)), margin
32px auto 72px. Eyebrow 12px at .08em. H1
clamp(30px,5vw,56px) at line-height 1.05. Cards get radius 16, padding
20, and box-shadow: 0 6px 22px rgba(0,0,0,.05). The callout takes
var(--good) plus a 5px accent left border. Tables sit in an
overflow:auto wrapper at min-width:900px with sticky
12px uppercase headers, right-aligned tabular numerals, a bold first row and
var(--good) on hover.
Known trap
<th> defaults to text-align:center. Row headers
need tbody th, tfoot th { text-align: left; } or the business names
drift toward the middle of the column. This one bit us; it is easy to miss.
Implementation
build.mjs uses Node built-ins only. It reads the JSON, validates the
schema, confirms twelve criteria, weights totalling 100, ten options, integer 1 to 5
raw scores with no unknown or missing keys, unique ranks covering 1 to 10, all four
composites recomputed to within 0.01 of expectation, descending rank order, and the
two anchors: rank 1 Dump-ticket charge packets at 4.13 and rank 2
Paper work-order missed billables at 4.02. It fails loudly with every
violation listed and exits non-zero before writing anything. Then it
generates the complete HTML with all data embedded.
The browser must never fetch the JSON at runtime, because a file://
page can be blocked from reading local files. Read it at build time only. Do not
introduce React, Next.js, Vite, Tailwind, a charting library, or any build system.
verify-scorecard.mjs is a second opinion, so
re-implement the four formulas rather than importing them. A
verifier that reuses the code under test only proves the code agrees with itself.
It then checks the HTML: title, all ten names, all twelve labels, two-decimal
formatting, no http:// or https://, no script or
stylesheet or iframe or external asset, viewport meta, all fourteen colour tokens,
section order, verbatim copy, column order, and exactly two pills.
Deliverable BThree launch-ready websites
Three sites for one business: paper work-order missed-billables
auditing, the option the scorecard recommends first. Three, not one, because the
business has three genuinely different buyers who cannot be sold with the same page.
They share one backend, one database, one Stripe account, one fulfillment pipeline.
They share no CSS. Working brand: Unbilled.
Done means a stranger can land, understand the offer, see a credible
number, pay, upload their work orders, and receive a report, with no human in the
loop until the exceptions queue.
What the product does
Field-service companies still run paper work orders. A technician writes down an
extra hour, a replaced capacitor, a second trip, disposal fees, and that paper
reaches the office days later. Whoever invoices it misses lines. The industry loses
roughly 2% to 8% of billable revenue this way and nobody notices, because the
invoice looks complete. The customer sends photos; the pipeline extracts every line
item, normalises it against their price book, compares it to what was invoiced, and
produces a report with a dollar figure, a confidence score, and a re-bill packet
they can send the same day.
The design brief is in the scores
Reach 4, ROI 5, risk 4 means reachable buyers, countable money, nothing
regulated. But dataEase 3 is the whole engineering problem:
handwriting is messy and there is no API. Design for a human exceptions queue from
day one.
Pricing
SKU
Price
What it is
Sold on
First Pass Audit
$750 once
Up to 250 work orders, report in 5 business days
A, self-serve
Branch Pilot
$2,500 once
Up to 1,000 work orders, 2 branches, methodology review
B, invoiced
Standard
$499/mo
Up to 400 work orders per month
A, B
Pro
$1,200/mo
Up to 1,500 work orders, re-bill packets, 2 seats
B, C
Portfolio
from $3,500/mo
Multi-entity, per-location rollups, benchmarking
C, annual, ACH
Three Standard customers come to $1,497, a rounding error short of the $1,500 target; the fourth clears it outright. The paid pilot exists so
money arrives before any custom integration work. Hold that line. Contingency pricing
is out of scope: verifying the customer re-billed and got paid is a collections
product.
Services
Prefer a service already connected, prefer the one with the least setup, and never
make the customer carry the cost of an integration choice. Every added vendor is a
login the founder maintains and a subprocessor the Option B buyer will ask about.
Already connected · zero setup
Service
Use it for
Why it wins
Cloudflare
Hosting, CDN, Turnstile, Email Routing, Access for admin
One vendor for the whole edge. Turnstile is invisible, unlike a CAPTCHA. Access removes any hand-rolled admin auth.
Supabase
Postgres, Auth, Storage, row-level security
The biggest friction remover. Magic links mean the customer never creates a password. RLS enforces tenant isolation in the database, not in code you must get right on every query.
HubSpot
CRM, lead capture, nurture
Do not build a lead table and an email sequencer.
Higgsfield
All photography and video
See assets below.
Mobbin
Pattern research before any new screen
See research below.
Must connect · ranked by ease against return
#
Service
Setup
Return
Customer friction
1
Stripe
~1 day, mostly activation
Absolute. No payment, no business.
Zero. Hosted Checkout, no card fields you own, Apple and Google Pay free, ACH for invoiced tiers.
2
Anthropic API
10 minutes
Absolute. It is the product.
None, invisible.
3
Resend
30 minutes plus DNS
High. Receipts are part of fulfillment.
None. Keep marketing in HubSpot and transactional in Resend so an unsubscribe never kills a receipt.
4
Cal.com
20 minutes, embed
Medium-high, Option B only.
Low, but still a step. Offer an email fallback beside it.
Nothing else. Resist analytics suites, chat widgets, popups, review widgets and
heatmaps. Cloudflare Web Analytics is cookieless, needs no consent banner, and is
enough at this volume.
Customer-friction rules · non-negotiable
No password, ever, magic link only. No account before value: the calculator runs
anonymously with no email gate. No forced sales call on the self-serve path. No app
to install. No consent banner, because no non-essential cookies. No card required to
see the sample report. Payment lands on the upload screen, not a thank-you page.
Platform
Cloudflare for the edge, Supabase for data and identity. A
single-vendor Cloudflare stack with D1 and hand-rolled magic links is defensible and
marginally cheaper, but it costs you Supabase Auth and RLS, the two things that most
reduce both build time and the chance of a cross-tenant data bug. Take the two-vendor
answer.
Key tables: organizations (with parent_org_id for portfolio children),
users, subscriptions, payments, batches, documents (with
UNIQUE(org_id, sha256) so a re-uploaded folder is never billed twice),
work_orders, line_items, invoices, findings, price_book_items, reports,
processed_webhooks, and an events audit log.
Enable RLS on every tenant table, and write a test that explicitly
attempts a cross-tenant read and asserts it fails. Money is always integer
cents, never a float, never a formatted string in the database. A product
whose entire value proposition is arithmetic accuracy cannot afford a rounding
artifact visible to a controller.
Extraction pipeline
Reject over 25 MB or outside JPEG, PNG, HEIC, PDF.
Split PDFs to pages, normalise orientation, downscale to 2000px on the long edge. Larger costs more and reads no better.
Extract with claude-sonnet-5, one page per call, forced to a strict JSON schema via tool use. Never parse prose. Require per-field confidence and a bounding box per line item.
Escalate anything below 0.75 minimum confidence to the highest-tier Claude model on the account. Still below 0.75 routes to the exceptions queue.
Normalise against the price book by fuzzy match; unmatched items keep a lower confidence.
Compare against invoices joined on work-order number. Emit findings.
Never auto-accept a finding above $500 or below 0.90 confidence. Do not relax this to improve throughput.
Render to PDF, store, email the link.
Research before designing
Search Mobbin for the pattern before designing any screen, and cite what you used.
Already researched:
Option A hero.Ramp puts one enormous dollar figure at the centre with the input below it and the comparison as a footnote. That is the layout. Also ClickUp for inputs-left, itemised-result-right, and Varo for a calculator with no submit button.
Pricing with a pilot tier.Humble is almost exactly our structure: time-boxed pilot, struck-through price, explicit refund guarantee, and pilot fees credited to the first month. Steal the guarantee framing. Superpower for one clean card with an honest footnote.
Option B register.Parker AI shows how far a flat editorial ground, a serif, and torn-paper stamps get you without gradients or glass.
Option C register.Spade uses raw JSON as page texture flanking the headline. That is how to make data feel like substance instead of decoration. Slash for restrained serif on near-black.
Assets and the anti-AI rule
Generate all photography and video with Higgsfield. The single most important
constraint: nothing may look AI-generated. An owner-operator who
smells a synthetic stock image stops reading, and a controller who spots one stops
trusting the numbers.
Tell
Antidote
Impossibly clean surfaces
Ask for grease, dust, coffee rings, torn corners, wear
Perfect symmetry, centred subject
Ask for handheld, off-centre, imperfect framing
Glossy 3D render lighting
Name a film stock and a real time of day
Gradient blobs, glass, floating devices
Ban outright; ask for documentary photography
Over-saturated everything
Muted and desaturated, with one accent colour
Uncanny hands and faces
Generate no people at all
Flawless focus everywhere
Shallow depth of field, slight softness, grain
Every prompt names a film stock or sensor, a focal length, a time of day and light
quality, one or two physical imperfections, "no people", "no text overlay", and an
explicit documentary or editorial register. Three reference prompts were generated
and confirmed to read as photographs; match everything to their grade.
Icons are hand-authored inline SVG on a 24px grid at each system's
stroke weight, currentColor only. Do not generate icons with an image
model: they come out inconsistent in weight and alignment.
Integrity · absolute
No AI-generated people presented as customers. No fabricated testimonials, logos,
awards or metrics. No implied certification the business does not hold. Label every
modelled estimate as an estimate, on the same screen as the number. Testimonials come
from real named customers with written permission, or the section does not ship.
The three design systems
Each site gets a complete, independent system with its own CSS file and its own
custom properties. There is no shared stylesheet.
System AYard SignOwner-operator trades, 3 to 15 techs. The owner, on a phone, in a truck, between calls.
Type
Barlow Condensed 700 uppercase · Inter · Roboto Mono
Base
17px. Buyer is over forty and outdoors.
Shape
Radius 2px, 2px borders, no shadows, no gradients
Stroke
1.75px icons · 48px min tap target
The calculator is the hero. Three inputs, live, no
submit, no email gate. Show an honest range, not a point estimate. Self-serve
Checkout at $750 landing straight on upload.
System BThe LedgerRegional contractors, 30 to 200 techs. Controller or CFO, committee of three.
Type
Source Serif 4 · Inter · IBM Plex Mono
Base
16px at 1.65 leading, 68ch measure
Shape
Hairline rules doing the work a shadow would
Stroke
1.25px icons, the lightest of the three
The artifact is the hero. A real redacted sample
report on the page. Security is top-level nav. Includes a "What we don't claim"
section. Converts to a walkthrough, then a $2,500 invoiced pilot on ACH.
System CThe ConsolePE roll-ups and franchise systems, 5 to 60 locations. Portfolio CFO.
Type
Inter Tight at −0.02em · JetBrains Mono
Base
14px on an 8px grid, dense
Shape
Radius 6px, 1px lines, no glow, no neon
Stroke
1.5px icons · semantic colour separate from accent
The console is the hero. Forty locations ranked, live
and sortable, labelled Demonstration data in plain sight. The argument
is variance, not total: it names an operator to call.
A page built to convert an owner-operator on a phone reads as unserious to a CFO
evaluating a $42,000 annual commitment. A page built for that CFO reads as slow and
corporate to someone who wants a number before their next call. The marginal cost is
CSS and copy; the marginal benefit is that each buyer sees something built for them.
Payments
Self-serve uses a Checkout Session with automatic tax and customer creation, landing
on the upload screen. Provision from the webhook, never from the success
URL: a redirect is not proof of payment. Sales-led creates a Customer then an
Invoice at net-15 with ACH, provisioning on invoice.paid.
The webhook verifies the signature before parsing anything, inserts the event id
into processed_webhooks first and returns 200 on conflict, because Stripe
retries and double-provisioning is a real bug. Return 200 within 10 seconds and queue
anything slow. Use the Customer Portal for cancellation rather than building one. Set a
recognisable statement descriptor: an unrecognised one is the top cause of chargebacks.
Refund policy, on the pricing page
Full refund on the First Pass if the audit finds less than it cost. It is honest,
because a null result genuinely has little value; it removes the only real objection
at $750; and it is cheap, because if you routinely find less than $750 across 250
work orders the business does not work and you want to know in month one.
Quality gates
The repository's .claude/rules/ui-quality.md applies in full. Screenshot
every page at 360px and 1280px and inspect before claiming done.
Overlapping text, rules crossing text, clipped content, horizontal scroll and
misalignment are build failures. Flexbox and grid only, no absolute positioning for
layout, never a fixed pixel height on anything containing text, no negative margins, no
overflow:hidden to hide a layout problem. If no browser tooling is
available, say so and mark the work visually unverified.
Plus: Lighthouse mobile ≥ 95 on performance and accessibility for all three, LCP
under 2.0s on simulated 4G, WCAG 2.2 AA throughout, every site working with JavaScript
disabled through to payment, and zero console errors.
Acceptance tests
Commerce. Test card provisions and lands on upload; a decline shows a recoverable error; a replayed webhook provisions exactly once; portal cancellation revokes upload.
Pipeline. Twenty work orders produce twenty sets of line items; the same file twice creates one document row; an illegible page reaches the exceptions queue rather than inventing a value; no finding over $500 is auto-accepted; report totals match accepted findings.
Front-end. Renders at 360, 390, 768, 1280, 1440 in light and dark; no horizontal page overflow; forms reject a missing Turnstile token; full keyboard path from landing to payment.
Data. A tenant cannot read another tenant's findings, attempted explicitly. Deleting an org cascades with nothing orphaned.
Do not build all three sites at once. Phase 3 is the milestone that
matters. Everything before it is cost.
Section CPaste this
The block below is the handoff. Everything above is the specification it refers to.
Prompt for Claude Design
Work in the current project. This prompt is self-contained: do not ask for
report.html, scorecard-data.json, or any local files.
DELIVERABLE 1: Build a self-contained AI Service Option Scorecard exactly to the
specification in section A: report.html, scorecard-data.json, build.mjs,
verify-scorecard.mjs, README.md. Node built-ins only, no dependencies, no
package.json. All data baked into the HTML at build time so the page works from
file:// with JavaScript disabled and makes zero network requests. build.mjs
validates 12 criteria, weights totalling 100, 10 options, integer 1-5 raw scores,
unique ranks 1-10, all four composite formulas recomputed against the expected
values within 0.01, descending rank order, and the two canonical anchors (rank 1
Dump-ticket charge packets 4.13, rank 2 Paper work-order missed billables 4.02) ,
failing loudly and exiting non-zero before writing anything. verify-scorecard.mjs
re-implements the formulas independently rather than importing them, then checks
the generated HTML. Use the exact section order, verbatim copy and CSS tokens
given. Note that <th> defaults to centre alignment: row headers need an explicit
left-align or the business names drift.
DELIVERABLE 2: Then build three complete, production-ready ecommerce websites
plus their shared backend, per section B. One business (paper work-order
missed-billables auditing), three buyers, three design systems, no shared CSS.
A "Yard Sign" owner-operator trades. Near-black and safety orange, Barlow
Condensed uppercase, 17px base, square corners, no shadows. A
live ROI calculator IS the hero, no email gate, honest range not
a point estimate. Self-serve Stripe Checkout at $750 landing
straight on the upload screen.
B "The Ledger" regional contractors, controller/CFO buyer. Navy and parchment,
Source Serif, hairline rules, 1.65 leading. A redacted sample
report IS the hero. Security is top-level nav. Includes a
"What we don't claim" section. Converts to a Cal.com walkthrough
then a $2,500 invoiced pilot with ACH.
C "The Console" PE roll-ups, portfolio CFO buyer. Graphite and teal, Inter Tight,
14px base, 8px grid, dense data-viz. An interactive console with
clearly labelled demonstration data IS the hero. Converts to a
four-step assessment producing a forwardable estimate URL.
STACK: Cloudflare for the edge (Workers with Static Assets, CDN, Turnstile, Email
Routing, Access for admin), Supabase for Postgres + Auth + Storage + RLS, Stripe
for payments, Resend for transactional email, HubSpot for CRM and nurture,
Anthropic API for extraction, Higgsfield for media, Cal.com for Option B booking.
Magic-link auth only, never a password. Money always integer cents. Webhooks
signature-verified and idempotent. RLS on every tenant table with an explicit
cross-tenant read test. No finding over $500 or under 0.90 confidence is ever
auto-accepted.
ASSETS: Research every screen pattern on Mobbin before designing it, and cite
what you used. Generate all photography and video with Higgsfield, and it must not
look AI-generated: name a film stock, a focal length, a time of day, and one or two
physical imperfections; ask for handheld and off-centre framing; ban gradients,
glass, glossy 3D renders and floating devices; generate no people at all. Three
tested reference prompts are in section B, match everything to their grade.
Hand-author icons as inline SVG on a 24px grid at each system's stroke weight; do
not generate icons with an image model.
INTEGRITY: No AI-generated people presented as customers. No fabricated
testimonials, logos, awards or metrics. No implied certification the business does
not hold. Label every modelled estimate as an estimate on the same screen as the
number.
QUALITY: .claude/rules/ui-quality.md applies in full. Screenshot every page at
360px and 1280px and inspect before claiming anything is done. Lighthouse mobile
>= 95 performance and accessibility. WCAG 2.2 AA. No horizontal overflow at any
width. Run the full acceptance-test list in section B.
Build in the phase order: schema and pipeline first, then Option A end to end
through a real Stripe test payment, then B, then C. Do not start all three sites
in parallel.
Report exactly what you built, what you verified, the commands you ran, and what
remains unfinished. Do not report a phase complete without the screenshots and
tests required.
Source of record: docs/ecommerce-launch/FINAL_PROMPT.md
on branch claude/code-handoff-complete-yrvokt. The scorecard data here is
canonical and all forty composites were independently verified against the four
formulas.