PayOnJobs/CLAUDE.md6,021 bytes8 patterns scrubbed

# 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 lime
- `sites/concept-b-worktruck/` - industrial bold, Bricolage Grotesque + IBM Plex Sans, work-truck blue + safety orange
- `sites/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.tsx`
- `app/who-its-for/page.tsx`
- `app/apply/page.tsx`
- `components/` (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 instructions
- `DEPLOY.md` - generated after deploys, contains the 3 preview URLs

## .env keys
- `STRIPE_PAYMENT_LINK_URL` (ColabContent account)
- `RESEND_API_KEY`
- `RESEND_NOTIFY_EMAIL` (Brandon)
- `RESEND_NOTIFY_PHONE` (Twilio or Resend SMS for instant alert)
- `CALLRAIL_TRACKING_ID`
- `NEXT_PUBLIC_GA_ID`

## Hard rules / gotchas
- ALL design work routes through the `web-design-master` skill. 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
1. Open all 3 preview URLs on your iPhone. Pick a winner (or ask for a swap if none land).
2. Tell Claude which concept won. Claude will: delete the other 2 Vercel projects, rename the winner from `concept-x-yyy` to `payonjobs`, prep for `payonjobs.com` domain attach.
3. Wire the apply form to Resend (email + SMS to Brandon). This is P0 per launch-gate rules.
4. Verify payonjobs.com on Namecheap, purchase. If unavailable, fall back to bookeddaily.com or mainstreetleads.com.
5. Wire ColabContent Stripe Payment Link on apply page (optional, only when ready to onboard paid partners).
6. Smoke test the apply form end-to-end (real submission, real email, real SMS received).
7. Run full SEO checklist (`[INTERNAL_PATH]`) BEFORE DNS attach.
8. Attach DNS. Re-run apex-seo on the live domain.
in · the file you already write.
01 · dfymd.com

Your CLAUDE.md,
shipped.

One markdown file in. A 4-minute video, a newsletter issue, and an X thread out. Sanitization runs first, every time.

video.mp428.90s · 219KB · 1920×1080
newsletter.md5-min read · Beehiiv-ready
subject:
What PayOnJobs actually does
preview:
The pricing IS the marketing.
body:
# PayOnJobs PayOnJobs is performance marketing for service trades. $0 upfront. We take 17% of bookings...
x-thread.txt5 tweets · ≤270 chars each
1/ Trades shops with no website are leaving 10x their phone bill on the table. 2/ I built PayOnJobs around one rule: partners fund their own ads, I take 17% of bookings...
out · the three artifacts your audience actually sees.
02 · pipeline · 7 stages · 1 command
  1. 01sanitize
  2. 02narrative
  3. 03voice
  4. 04slides
  5. 05broll
  6. 06assemble
  7. 07distribute
03 · the bet

Every Claude Code project you ship is already content.

You write a CLAUDE.md when you start a project. You write commits. You chat with Claude through the build. That trail is the story. DFYMD turns it into the assets your audience actually sees, without you copy-pasting into a doc again.

The sanitizer runs first, always. No credentials, no internal paths, no em-dashes. The eyeball pass is still on you, but the floor is high.

04 · archive
05 · subscribe

Get the issue.
Keep the file.

One issue every Tuesday. Each one ships with a real sanitized CLAUDE.md from a real project. You keep the file.

no spam one click unsubscribe. your email goes to Beehiiv, nothing else.