// direction-a-extras.jsx — new chapters added on the second pass // (Customer-branded app, end-of-day ritual, ROI calculator, single-tier pricing // with competitor comparison). Same visual language as direction-a.jsx — uses the // DA token object & helpers exposed there. // Pricing — single source of truth lives in pricing-constants.js. const P = window.WERKD_PRICING || { owner: 99, seat: 59, ownerAnnual: 999, seatAnnual: 599, trialDays: 14, annual: 1188 }; // White-label customer PWA mock — "Mike's Plumbing" branded function BrandedCustomerApp({ width = 320, theme = 'light' }) { return (
{/* Status bar */}
9:41
{/* Branded header — Mike's Plumbing */}
M
Mike's Plumbing
San Antonio · 24/7 emergency
{/* Next visit card */}
NEXT VISIT · TOMORROW 10:30 AM
Smart thermostat install
Eli will be there between 10:30 and 11:15. You'll get an "on my way" heads-up 15 min ahead.
{/* Outstanding invoice */}
$
Invoice #1042 · $420
Due Friday · Card or bank transfer
{/* History */}
YOUR HISTORY WITH MIKE'S
{[ { d: 'Mar 8', t: 'Thermostat install', a: '$420' }, { d: 'Jan 14', t: 'Drain clear', a: '$185' }, { d: 'Nov 2', t: 'HVAC tune-up', a: '$189' }, ].map((r, i) => (
{r.d} {r.t} {r.a}
))}
{/* CTA — review request (portal surfaces review requests) */} {/* Powered-by-Werkd footer */}
Powered by werkd.
{/* Home indicator */}
); } // CUSTOMER APP chapter — your customers get a Mike's Plumbing app function ACustomerApp() { const DA = window.DA; const m = window.useIsMobile(); return (
FOR YOUR CUSTOMERS

Your customers get
a branded portal.

Your logo. Your name leads. They track their jobs, pay invoices, and text you — through an app they save to their home screen, no app-store download. Werkd stays in the background.

01
Your brand leads
Your logo and name greet customers at the top of every screen. Werkd shows up only as a small "Powered by" line in the footer.
02
Approve & book from a link
Send a quote and your customer can review it, approve, pick a time, and pay a deposit if you ask — all from a link, no app to download. Confirmed jobs land on your calendar.
03
Pay through Stripe
Invoice arrives. They tap. Stripe takes card or bank transfer, lands the funds in your bank — not werkd's. Standard Stripe fees apply; werkd doesn't take a cut.
{/* Competitor jab */}
$0
Costs nothing extra. The usual stack of separate tools runs $200–$500/mo for similar — and none of it carries your brand. Yours ships at the base tier.
{/* Texting ROI — own number, no SMS bill (Werkd drafts, you send) */}
Texts come from your number — no SMS bill. Werkd writes the message for you; you send it from your own phone's texting app, in one tap, like any other text. No second number to buy, no setup, no monthly texting fee — and because it's your number, customers actually open it.
{/* Phone */}
); } // ROI CALCULATOR — interactive, port of the mockup function AROICalculator() { const DA = window.DA; const m = window.useIsMobile(); const TRADE_DEFAULTS = { plumbing: { avg: 420, billable: 125, label: 'Plumbing' }, hvac: { avg: 580, billable: 135, label: 'HVAC' }, electrical: { avg: 380, billable: 115, label: 'Electrical' }, cleaning: { avg: 180, billable: 65, label: 'Cleaning' }, landscaping: { avg: 320, billable: 75, label: 'Landscape' }, other: { avg: 350, billable: 100, label: 'Service' }, }; const [trade, setTrade] = React.useState('plumbing'); const [jobs, setJobs] = React.useState(10); const [avg, setAvg] = React.useState(420); const [admin, setAdmin] = React.useState(7); const onTrade = (t) => { setTrade(t); setAvg(TRADE_DEFAULTS[t].avg); }; const billable = TRADE_DEFAULTS[trade].billable; const annualJobs = jobs * 50; const hoursReclaimed = admin * 0.70 * 50; const timeValue = hoursReclaimed * billable; const lateQuotedJobs = annualJobs * 0.40; const extraJobsFromQuoteSpeed = lateQuotedJobs * 0.225; const leadValue = extraJobsFromQuoteSpeed * avg; const annualRevenue = annualJobs * avg; const stuckInInvoices = annualRevenue * 0.11; const chaseValue = stuckInInvoices * 0.50; const adminOffset = 47460 * 0.20; const gross = timeValue + leadValue + chaseValue + adminOffset; const net = gross - P.annual; // Tangible, believable co-stats shown beside the dollar figure. const hrsPerWeek = Math.round(admin * 0.70); const jobsPerMonth = Math.round(extraJobsFromQuoteSpeed / 12); const fmt = (n) => '$' + Math.round(n).toLocaleString('en-US'); const Field = ({ label, val, children, hint }) => (
{label} {val}
{children} {hint &&
{hint}
}
); const Slider = ({ value, onChange, min, max, step = 1 }) => ( onChange(+e.target.value)} style={{ width: '100%', height: 6, background: DA.hairline, borderRadius: 100, appearance: 'none', WebkitAppearance: 'none', }} className="roi-slider" /> ); return (
DO THE MATH

See what werkd is worth
to your shop.

Three sliders. Real industry numbers. Move them around — the math updates as you go.

{/* Sourced industry proof — recovers the credibility the standalone Stats section carried */}
{[ { to: 7, suffix: 'hrs', l: 'a week lost to paperwork by solo trades', src: 'Powered Now survey' }, { to: 25, prefix: '+', suffix: '%', l: 'more quotes won when sent same-day', src: 'WebFX 2026' }, { to: 11, suffix: '%', l: 'of revenue stuck in late invoices', src: 'Clockify 2025' }, ].map((s, i) => (
0 ? `1px solid ${DA.hairline}` : 'none', height: '100%', }}>
{s.l}
{s.src}
))}
{/* Inputs */}
About your business
{Object.entries(TRADE_DEFAULTS).map(([k, v]) => ( ))}
{/* Results */}
Your estimated annual ROI with werkd
$ {Math.round(net).toLocaleString('en-US')}
estimated per year, back in your business
≈ {hrsPerWeek} hrs a week off the clock · {jobsPerMonth} more jobs a month
{[ { l: 'Hours saved on admin', d: 'Valued at your billable rate when you fill it with paid work.', a: fmt(timeValue), pos: true }, { l: 'Extra jobs won from same-day quoting', d: 'Quotes sent within 24 hrs close 20–30% more.', a: fmt(leadValue), pos: true }, { l: 'Recovered from chased invoices', d: '11% of small-biz revenue stuck in late payments.', a: fmt(chaseValue), pos: true }, { l: 'Saved vs. hiring an office admin', d: 'BLS median $47,460/yr — partial offset.', a: fmt(adminOffset), pos: true }, ].map((r, i) => (
{r.l}
{r.d}
{r.a}
))}
Less werkd subscription
{'−$' + P.annual.toLocaleString()}
How we calculated this: hours saved valued at your trade's billable rate, counted only when you put that reclaimed time back into paid work (werkd absorbs ~70% of admin time — the rest you spend tapping approve). Quote-speed uplift assumes 40% of quotes currently go late, werkd captures the 22.5% close-rate lift. Invoice recovery: half of the 11% of revenue typically stuck in late payments. Admin offset: 20% of the $47,460 BLS median. All numbers conservative.
Sources: BLS · WebFX 2026 Home Services Benchmarks · Clockify 2025 · Powered Now · Jobber 2026 Home Service Trends
); } // NEW PRICING — single tier with competitor comparison table function APricingV2() { const DA = window.DA; const m = window.useIsMobile(); const competitors = [ { name: 'Werkd.', price: '$' + P.owner, priceSub: '/mo + $' + P.seat + '/tech', featured: true, features: { core: '✓', ratecard: '✓ 217 jobs', dispatch: '✓', portal: '✓ branded', voice: '✓ included', photo: '✓ included', books: '✓ organized monthly', payments: 'no werkd cut', api: '✓ included' } }, { name: 'Competitors', price: '$300+', priceSub: '/mo', sub: 'scheduling + invoicing + books + booking + texting', features: { core: 'several apps', ratecard: 'build your own', dispatch: '✓', portal: '+ extra', voice: 'add-on', photo: '—', books: 'separate tool', payments: 'markup', api: 'add-on' } }, { name: 'Hire an admin', price: '$3,955', priceSub: '/mo', sub: '$47,460/yr — BLS 2024', features: { core: '—', ratecard: '—', dispatch: '—', portal: '—', voice: '—', photo: '—', books: '✓', payments: '—', api: '—' } }, ]; const rows = [ { key: 'core', label: 'Today · jobs · scheduling · CRM' }, { key: 'ratecard', label: 'Preloaded rate card — 17 trades, priced' }, { key: 'dispatch', label: 'Crew dispatch & GPS' }, { key: 'portal', label: 'Customer portal' }, { key: 'voice', label: 'AI voice / chat / quick job' }, { key: 'photo', label: 'Photo Diagnosis' }, { key: 'books', label: 'Books, mileage, tax-ready profit & loss' }, { key: 'payments', label: 'Stripe payments' }, { key: 'api', label: 'QuickBooks & spreadsheet export' }, ]; return (

Pricing.

{'One owner, $' + P.owner + '/mo — everything included, no feature add-ons. Add crew (techs and other non-admin users) at $' + P.seat + '/mo each. Free for ' + P.trialDays + ' days, no card. Cancel anytime — no contract.'}

{/* Hero price card */}
EVERYTHING INCLUDED · COMING SOON.
{'$' + P.owner}/mo
Billed monthly. Cancel anytime. {'+ $' + P.seat + '/mo per extra tech.'}
Prefer annual? {'$' + P.ownerAnnual} {'/yr owner — save $' + (P.annual - P.ownerAnnual)} + {'$' + P.seatAnnual} {'/yr per tech — save $' + (P.seat * 12 - P.seatAnnual) + '/seat'}
Pays for itself with one extra $400 job per month. Industry median: ~3 of those a week.
{/* AI included, not metered by credit */}

AI that's included — not sold by the credit.

No credits to buy, nothing that expires on the 20th, no per-quote charges. Diagnosis, quoting, voice, reminders — all part of the $99, used the way a working day actually uses them.

Fair-use limits apply.

{/* Comparison table */}
HOW IT STACKS UP

Same job. Less money. No add-ons.

{m &&
Swipe the table sideways to compare →
}
{/* Header row */}
CAPABILITY
{competitors.map((c, i) => (
{c.name}
{c.price}{c.priceSub}
{c.sub && (
{c.sub}
)}
))}
{/* Rows */} {rows.map((row, ri) => (
{row.label}
{competitors.map((c, ci) => { const v = c.features[row.key]; const isCheck = v === '✓'; const isDash = v === '—'; const startsCheck = typeof v === 'string' && v.charAt(0) === '✓'; // Orange is reserved for Werkd's column only — competitors' "yes" // reads neutral gray so the table wins at a glance. const txtColor = isDash ? DA.text3 : startsCheck ? (c.featured ? DA.brandLight : DA.text2) : DA.ink; return (
{isCheck ? : v}
); })}
))}
“Competitors” reflects the typical mix of separate tools — scheduling/dispatch, invoicing, bookkeeping, online booking, and customer texting — which commonly totals $300–$500+/mo once AI add-ons are included. Admin “hire” line uses the BLS May 2024 median annual wage of $47,460 (~$3,955/mo before payroll tax and benefits). Sources cited in the calculator above.
Read the full pricing comparison, verified against every vendor's own pricing page →
); } Object.assign(window, { ACustomerApp, AROICalculator, APricingV2, BrandedCustomerApp });