PayOnJobs
Performance marketing partnership for local service trades (HVAC, roofing, tree removal, concrete, pool, pest control). $0 upfront, 17% of revenue from bookings the system generates, cancel anytime. Target customer: trades owners aged 50-65 with a Google Business Profile but no real website. Payments collected via ColabContent Stripe until a dedicated LLC is spun up.
Source of truth
3 concept variants deployed to Vercel (preview URLs). Pick a winner before any further work; the losers will be deleted.
- A: https://concept-a-operator.vercel.app
- B: https://concept-b-worktruck.vercel.app
- C: https://concept-c-letter.vercel.app
Local repo at sites/ is in sync. No domain attached.
Tech stack
Next.js 15 (App Router) + React + Tailwind. Vercel deploy. Stripe Payment Links (ColabContent account) for partner onboarding. CallRail tracking number on the marketing site for credibility AND to surface own outbound conversion data. Resend API for apply-form notifications to Brandon (email + SMS).
Deploy
Vercel (planned). Domain: payonjobs.com (Brandon to purchase; payperjob.com was taken).
File map
Three competing concepts at sites/, each a standalone Next.js 15 + React 19 + Tailwind v4 app:
sites/concept-a-operator/- dark SaaS, Schibsted Grotesk, electric limesites/concept-b-worktruck/- industrial bold, Bricolage Grotesque + IBM Plex Sans, work-truck blue + safety orangesites/concept-c-letter/- single-column letter, Vollkorn + Schibsted Grotesk, oxblood accent
Each app has the same page structure:
app/page.tsx(home)app/how-it-works/page.tsxapp/who-its-for/page.tsxapp/apply/page.tsxcomponents/(Nav, Footer, ApplyForm)lib/content.ts(locked copy, varies slightly per concept's voice)
Top-level:
DESIGN_BRIEF.md- the 3 concept briefs (locked, audit trail)README.md- folder map and run instructionsDEPLOY.md- generated after deploys, contains the 3 preview URLs
.env keys
STRIPE_PAYMENT_LINK_URL(ColabContent account)RESEND_API_KEYRESEND_NOTIFY_EMAIL(Brandon)RESEND_NOTIFY_PHONE(Twilio or Resend SMS for instant alert)CALLRAIL_TRACKING_IDNEXT_PUBLIC_GA_ID
Hard rules / gotchas
- ALL design work routes through the
web-design-masterskill. Full 9-step gated sequence, no shortcuts. Standing Brandon rule. - No em dashes anywhere in copy or comments. Use commas, semicolons, parens, or two sentences.
- Pricing IS the marketing. Hero H1 is exactly: "$0 upfront. We take 17% of bookings we deliver. Nothing else, ever."
- Audience is trades owners 50-65. Plain English. No AI hype. No "platform." They want bookings, not buzzwords.
- Critical user flow gate before any public launch: apply form must submit end-to-end, Brandon must receive both email + SMS, confirmed in the receiving system. Per Brandon's global launch rules this is P0, not a TODO.
- SEO checklist (
[INTERNAL_PATH]) must pass before DNS attach. - Contracts must include: CallRail tracking number per partner (Brandon pays), 12-month minimum + auto-renewal, Brandon owns the domain + IP for each partner site, 25-mile vertical exclusivity, buyout clause based on trailing 12-month rev share if owner wants to exit early.
- First partners pay invoices into ColabContent Stripe. Once 3+ partners are live and revenue-validated, spin up a dedicated LLC for PayOnJobs.
Recent significant changes
- 2026-05-28: Project scaffolded after multi-turn strategy session. Locked decisions: (1) pricing = 17% rev share, no upfront, no monthly, cancel anytime; (2) target = trades owners 50-65 with GBP but no website; (3) verticals = HVAC, roofing, tree removal, concrete, pool, pest control; (4) name = PayOnJobs (payperjob.com taken); (5) payment processor = ColabContent Stripe until separate LLC; (6) v1 pages = Home, How It Works, Who It's For, Apply; (7) traffic in year 1 comes from cold outreach + referrals, NOT inbound, so the site is a credibility piece during outreach.
- 2026-05-28 (eve): Brandon dropped rate from 20% to 17% before sleeping. Asked for 3 fully different brand identities, all deployed to Vercel preview URLs by morning. Variants chosen: (A) PayOnJobs - performance/SaaS direct, (B) BookedDaily - outcome/calendar momentum, (C) MainStreetLeads - hometown/trust. Form backend skipped per Brandon ("don't stress it"), CTA degrades to tel: link.
- 2026-05-28 (later): Brandon picked Concept A "The Operator" as the winner. Massively expanded scope: PARTNERS FUND THEIR OWN AD BUDGET (no markup, direct to Google). Hero copy rewritten to "You fund the ads. We do everything else. 17% of bookings we deliver. Nothing else, ever." Service scope expanded to 14 automations grouped into 4 buckets: Get the call (4), Answer the call (4), Get paid (2), Grow the LTV (4). Anti-screw mechanism: Stripe Connect auto-splits 83/17 at moment of payment - partner cannot hide jobs from us, we cannot inflate cut. Added /services and /the-money pages. Added Lenis smooth scroll + Motion One animations + animated number counters. B and C variants still deployed but losing - delete when Brandon confirms.
Next session: start here
- Open all 3 preview URLs on your iPhone. Pick a winner (or ask for a swap if none land).
- Tell Claude which concept won. Claude will: delete the other 2 Vercel projects, rename the winner from
concept-x-yyytopayonjobs, prep forpayonjobs.comdomain attach. - Wire the apply form to Resend (email + SMS to Brandon). This is P0 per launch-gate rules.
- Verify payonjobs.com on Namecheap, purchase. If unavailable, fall back to bookeddaily.com or mainstreetleads.com.
- Wire ColabContent Stripe Payment Link on apply page (optional, only when ready to onboard paid partners).
- Smoke test the apply form end-to-end (real submission, real email, real SMS received).
- Run full SEO checklist (
[INTERNAL_PATH]) BEFORE DNS attach. - Attach DNS. Re-run apex-seo on the live domain.