Back to every page

Robbie's design guide

Current: the build guide, rewritten Oct 19, last updated Oct 26, plus the brand sheet (Oct 21, not reviewed by Josh). The older design guide and style guide were replaced on Oct 19 and are not used.

The 10 rules that matter most for these pages

  1. Same colours, fonts and button, but each product gets its own page. Never a copy of the 3-day sign-up page (Josh, Oct 27: "don't dupe the 3 day challenge opt in page exactly").
  2. Phone first. Build at 390 wide, then laptop. No image taller than about 60% of a phone screen.
  3. One button: the raised green one, label on one line, static arrow, the small line under it sits outside the button.
  4. The first screen does the job. On a sign-up page the email box is visible without scrolling.
  5. Same look everywhere: green #344C3D, sage and light bands, Georgia headings, Open Sans text, nothing under 20px except the footer.
  6. Robbie is always real, and shown doing the thing. Never an AI image of him, no thumbs-up photo, no straight-to-camera headshot as a hero or section picture; a small round headshot only in a tiny "made by" spot (Josh, Oct 27: "he's STARING into my soul").
  7. No clutter: no small labels above headings, no intro paragraphs, nothing that looks like a button but is not.
  8. Prices say USD once ("$27 USD"), never a price inside the button, never "Start for $27".
  9. Proof is real email screenshots or Robbie's real quotes, never star ratings or invented numbers.
  10. The thumb product may add more structure and life than the Hand Reset pages, with the same colours, fonts and button (Robbie, Oct 16-17).

Build guide (Oct 19, updated Oct 26)

The one current design guide for Robbie's pages.

Robbie BUILD GUIDE (the one canonical guide, rewritten 19 Oct 2026)

Every other design guide is archive (STYLE-GUIDE, DESIGN-GUIDE, DESIGN-MEMORY-GUIDE, RULEBOOK, STANDARDS, COMPONENTS, DECORATION-PLAYBOOK, PREFERENCES*). Copy wording rules: docs/WRITING-GUIDE.md. The evidence for every line here (each past instance of feedback, with date, who and quote) is deliverables/2026-10-19/FEEDBACK-LEDGER.md. Where sources disagreed, the newest instruction from Josh (or Robbie on his own product) is what is written here.

CHEAT SHEET (one page)

How to build any page: find the nearest reference in the library below, copy its file verbatim, change only the words (and swap any image the library marks as banned for a real photo). Never invent a layout, colour, font, size or button. If no reference fits, build 2-3 options from references and show Josh; do not ship a one-off.

The core (holds on every page):

1. Robbie is always real; no image Josh marked fake (Josh 20 Oct, replaces the 19 Oct "no AI images at all"). Any image of Robbie (face, body, headshot, demo still) is a real photo or a real video frame, never generated or AI-edited; no thumbs-up photo; no video still as a portrait. AI images of hands and objects are allowed unless they are on Josh's fake list, docs/FAKE-IMAGES.txt (sha256 + filename; lint checks it). "Suspect" in the photo library is an agent pre-flag, not Josh's verdict, so it is allowed. Pick photos from deliverables/2026-10-19/PHOTO-LIBRARY.html. No emojis, no drawn logos, no "image coming" placeholders.

2. Phone first, and images never near full screen on a phone. Build at 390, then 1280; check 320 and a tablet width too. No image taller than about 60% of the phone screen. Keep images on mobile (do not drop them), just smaller.

3. One button. The raised green button from the sales page: one medium size, label on one line at 320/390/1280, static arrow, sub-line outside the button. Nothing that is not a button looks like a button (no pill labels). Only exception: the Stripe "Complete Order" button on /order.

4. Copy an approved page, change only words. Same tokens everywhere: green #344C3D, sage #E8EFE6 / light #F6F9F5 bands alternating, Georgia headings, Open Sans body, body 20px phone / 22px laptop, nothing under 20px except the language pill and the footer.

5. The first screen does the job. Hero: headline, one line, the product visual, the button, the refund line, all on the first screen; on laptop the next section just peeks in (not forced to 100vh). On an opt-in the form (or its button) is visible on load without scrolling. Tablet widths (600-1100) collapse to one centred column, never break.

6. No clutter. No eyebrows or labels above headings, no intro paragraphs, no decorative dots, no card logos, nothing the visitor already knows at this step, no section that is half a page with a hole beside it.

7. Simple, plain, full sentences. Robbie speaks as "I" to "you"; benefits first; every line makes sense to a first-time reader; no clever compressed phrases; no em dashes and no " -- " in page copy; no "x is real"; no age claims (audience is 45-65 and men too).

8. Price and refund: every price says USD once ("$97 USD"), "One-time payment" under it; never a price in the button label and never "Start for $97". Price is $97 since Oct 20 (Josh, Oct 20: "someone arleady bought asl iI checked its 97"); SUPERSEDED Oct 20: the old "$157 USD", which must not appear anywhere. Refund line, identical under every sales button: "If your hands don't feel or function better in 21 days, you get a full refund."

9. Proof is real screenshots. Testimonials are real email-reply screenshots, untouched, cropped and fading with "Show me more"; never restyled quote cards, never star ratings.

10. Left-aligned text, aligned to one axis. Body text left; centre only hero/close headings, the price card, the refund line and buttons. Equal gutters in every section. Spacing like the reference: never cramped, never huge empty space.

11. Robbie's face stays clean. No text over his face, no awkward crop, never cut his forehead, circle photo on a background that differs from the page; one photo used once per page.

12. Show Josh real renders, phone beside laptop. Real screenshots of the actual page at 390 and 1280, side by side with the reference you copied; never mocks or text descriptions. Preview first, live only on Josh's go.

Run before showing anything: python3 scripts/lint-page.py <page.html|url> (checks image height on phone, sideways scroll, button wrap, AI Robbie and fake-list images incl. lazy ones below the fold, em dashes, form on load). Then the 7-line checklist at the end.

---

1. Reference library (the main body)

Rule: build a new page by copying the nearest reference and changing only the words. Screenshots are in design-memory/good/ (390 and 1280 unless noted). "Swap images" means the reference still carries a banned AI image: keep the layout, put a real photo in the slot.

Sales page (master reference for most components)

Live: physiorobbie.com/waitlist and /exclusive/hands-waitlist (split test arm B, set to 100% on 17 Oct). Source: build/2026-10-13-split/armB-el1-r35.html (one file: CSS + markup; images on sales-r34.robbie-list.pages.dev). Robbie (18 Oct): the product-focused page wins; keep the Day 1/2/3 card hero.

| Component | Copy from (section in r35) | Screenshot | Why it is the reference |
|---|---|---|---|
| Hero | `#s1` | ref-hero-sales-r35-{390,1280}.png | One screen: H1, one line, day-card stack right (under the headline on phone), button, refund line. Josh approved the stack hero 8-10 Oct. Fix before reuse: its subhead contains " -- ". |
| Day-card stack / cards | `#s1` and `#s9` `.stk.deck` (`.dc` cards) | same + ref-close-sales-r35 | Thumbnail is the biggest part, "Day N" plus title one small line, YouTube-style timestamp inside the thumbnail, cards fan up and right. |
| Check list ("Is this for me") | `#s3` | ref-checklist-sales-r35-{390,1280}.png | Each situation its own white card with an icon, then a closing line, then the button. Josh 9-10 Oct: own card per item, marker on the left. |
| What you get + pricing box | `#s7` | ref-pricing-cards-sales-r35-{390,1280}.png | Filled-check cards left, 3-step timeline right (after the price on phone), price card centred: "$97 USD" (was $157 until Oct 20), "One-time payment", button, refund line. |
| Testimonials | `#s6` | ref-testimonial-emails-sales-r35-{390,1280}.png | Real email screenshots, own heights with one max height, never shown in full on phone, "Read the full email" (plain link, opens a popup) only on long ones, "Show me more" tab extends the section (never a button). |
| Robbie / about section | `#s4` | ref-robbie-sales-r35-{390,1280}.png | Real headshot (robbie-headshot-hires) in a large circle on the left (a true circle about 220px on phone, forehead never cut), short copy mostly about him, button. Never half a page. |
| Image slider ("why it works") | `#s12` | (not shot: images banned) | Layout only: one card per screen on phone, peeking next card, fades both edges; phone is swipe only with a swipe hint, no arrows, never auto-scroll; laptop has small arrows centred on the card. The getback/*.webp images are AI but allowed (suspect only); the pot card (pot-v2) is suspect only and stays (Josh 20 Oct, r38; r37 had wrongly removed it). |
| Conditions | `#s11` | r37: build/2026-10-21-hero-fix/shots/after-r37-s11-{390,768,1280}.png | Photo (hero-hand-mug.webp, AI but allowed) beside the #s3-style card list on laptop, tops and bottoms aligned (photo fills the list height); one column on tablet and phone, photo above the list, capped (4:3 on phone). Doctor line only, no "See footer for more!". |
| FAQ | `#s8` | ref-faq-sales-r35-{390,1280}.png | "Frequently asked questions", white rows, chevron in a sage circle that turns up when open, refund question mid-list, answers reassure. |
| Close | `#s9` | ref-close-sales-r35-{390,1280}.png | Heading, button, refund line left, day stack right; stack under the button on phone. |
| Footer | `footer` | ref-footer-sales-r35-{390,1280}.png | Health note, name and credentials, Terms / Privacy / Refund links; small and quiet. |
| Sticky CTA (phone) | r35 `.sticky` | (in r35 source) | Floating button only, hidden at hero and close, shows where buttons are far apart, fades in and out. |

Other pages

| Component | Live page | Source file to copy | Screenshot | Why |
|---|---|---|---|---|
| THE button (CSS) | every sales page | `build/2026-10-13-buttons/std-block.html` (CSS also inside r35) | ref-hero-sales-r35 (button + refund line) | The only button spec (13 Oct): medium, one line, raised, static arrow. |
| Opt-in with form visible on load | /3-day-challenge-signup (signup B) | `build/2026-10-08-signup-cta/PASTE-B-4FmLcie7H2WRF9YFYflw-el0.html` | 2026-10-07-signup-hero-live-B-{390,1280}.png, signup-B-full-bleed-8oct-{390,1440}.png | Josh liked the photo-behind-text hero on phone and form-beside-copy on laptop (7-8 Oct). Swap image: the hero background (filesafe 6ab439dac745..., AI Robbie) is banned; use a real Robbie photo with the dark fade. jar-1-tight is AI but allowed (not on the fake list). Label "Send me Day 1" on one line (the shot shows the old wrapping label). |
| Opt-in, minimal (new products) | not live | `build/2026-10-19-waitlist-flow/a-optin.html` (A) or `b-optin.html` (B) | build/2026-10-19-waitlist-flow/shots/ | Provisional: Josh has not picked A or B. Form on the first screen, one field. |
| Confirmation / welcome | /3-day-challenge-welcome | `build/2026-10-08-welcome-final/ghl-paste-free-final.html` | 2026-10-08-free-welcome-final-{390,1280}.png | Josh 8 Oct: "number 2 for the laptop, number 3 for mobile". Circle photo on top, "You're in!", "See you on Day 1!", spam note in a card right above the five mailbox buttons with real logos. |
| Paid welcome | /welcome | `build/2026-10-03-welcome-v2/ghl-paste-paid-final.html` | 2026-10-06-welcome-mailbox-reply-card-390.png, 2026-10-06-welcome-download-button-1280.png | Mailbox buttons with real logos, reply line in a card with an icon, tracker download with the down arrow in a circle. |
| Day page | /hands-challenge/7m4q9x2/day-1 (also /3v8p1n6/day-2, /9c5w2h7/day-3) | `build/2026-09-30-free3/day-1.html` (+ rpd.js on days-live) | 2026-10-06-day3-fixed-{390,1280}.png, 2026-10-06-day3-no-reply-no-testimonials-390.png | Title, one short comforting line, video near the middle of the first phone screen, CC button on the video, centred CTA. Day 3 ends with "Want to see what comes next?" and the button only. Paid days: same, minus buy button and testimonials. |
| Checkout | /order (= /checkout) | live page custom CSS + `build/2026-10-14-checkout-publish/split-h.css`, `el1-new.html` | ref-checkout-order-live-{390,2000}.png | Josh 13-14 Oct: looks like a normal Stripe checkout; Stripe-styled form left, sage Robbie pane right with day stack and refund line (laptop only); phone shows Stripe only. |
| Language pill | all non-day pages | live head code (site-scripts) | 2026-10-07-pill-flat-welcome-390.png | Small flat white pill top right, one globe icon, no shadow, never a top bar. |
| Printable sheet | /welcome download (21-day tracker PDF) | `tracker-print.html` | ref-printable-tracker-{390,1280}.png | One page, fits Letter and A4, big tick boxes, prints in black and white, no floods. |
| QR footer on printouts | not live | `build/2026-10-18-thumb-design/A1-fridge-sheet.html` `.qrrow` | ref-qr-footer-A1-provisional-{390,1280}.png | Provisional (Josh 19 Oct ask, variants not picked): one or two QR codes at the bottom of every printout, "Did you love this? Scan to check out my 21-Day Hand Reset" and "Scan to watch a short video", per-room ?src= tag. |
| Email | Flodesk (Ryan owns emails) | none approved for Robbie | none | Gap. Copy only: docs/design-guide/EMAIL-COPYWRITING-GUIDE.md. |

Outside references (layout ideas only, when ours has no match): design-memory/good/ref-s1..s8-*.png and research-full-*.jpg (Josh's handpicked BEST OF THE BEST list, JOSH-PROMPTS-VERBATIM.md:17067). Weigh them by our segment: low ticket, closes on the page.

2. Tokens (only when the reference does not already show it)

Colours #344C3D accent, #26382C dark headings, #1f2f25 button shadow, #E8EFE6 sage, #F6F9F5 light, #fff card, #1A1A1A text, #3C4A41 muted. Headings Georgia,'Times New Roman',serif 700; body 'Open Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif. Sizes phone/laptop: H1 40/60, H2 30/42, body 20/22, button 22/28. Radius 20 photos and price card, 14 cards and buttons, 10 thumbnails. Card border 1px solid rgba(20,32,24,.10), shadow 0 4px 20px rgba(52,76,61,.08). Spacing scale 8/16/24/32/48/64; sections 64px top and bottom; gutters 24 phone, 48 tablet, 64 laptop; container 1120, text 960. Products other than the Hand Reset (e.g. 5-Day Thumb Revival) may add more structure and life (Robbie 16 Oct) but keep these tokens and THE button.

3. Things people asked for that no reference shows yet

4. Before you show or publish (checklist)

1. python3 scripts/lint-page.py passes on the page (390 and 1280).

2. Your 390 and 1280 screenshots sit beside the reference screenshot you copied, and nothing differs except the words and real photos.

3. Every image is a real photo or screenshot from the photo library; none fills the phone screen; Robbie's face is clear of text and crops.

4. One button style, every label on one line, refund line identical under every sales button, every price "USD" once.

5. Read the copy as a first-time visitor: full sentences, nothing they already know, no eyebrows, no " -- ".

6. Check 320, a tablet width and a very wide window: no sideways scroll, no broken padding, no detached form.

7. Preview only; publish only on Josh's go, then verify the live page at 390 and 1280.

5. Approval page, every change

No page, email, price, copy, tracking or workflow change goes live without a review page of before/after screenshots (390 and 1280 side by side) plus plain words and a rollback line: python3 scripts/approval-page.py --title ... --before-dir ... --after-dir ... --words ... --rollback ... --out deliverables/<date>/NAME.html. It adds a PENDING row to APPROVALS.md; when Josh says yes, set the row to "approved by Josh" with his exact words. After publish, rebuild the page with live screenshots as the "before" side. Exception: what Josh said GO to in that same message still gets the after-publish page.

Writing guide (copy rules, updated Oct 26)

Wording rules for every page.

Robbie WRITING GUIDE (single source, 3 Oct 2026)

Applies to every page. Format: rule -- Check: ... (source date). Pair with docs/STYLE-GUIDE.md.

Voice

1. Robbie speaks as "I" to "you". Never "we" for Robbie alone. US spelling. Numerals, not number words. -- Check: grep "we " in Robbie lines. (29 Aug)

2. Full plain sentences. No clever lines, no verbless fragments, no "spam periods", no vague "it". Fewer words, same idea; keep the verbs ("get looser, stronger hands"). -- Check: every line has a verb and reads aloud naturally. (1 Oct "for the last time", x6)

3. Show, don't tell. Never announce what a section does ("Here's what we'll do together", "This is the benefit"). -- Check: no sentence describes the page itself. (13-15 Sep)

4. Benefits before features. Lead with the felt change; "about 7 minutes a day, no equipment" stays quiet. -- Check: first line of each section is an outcome, not a spec. (27 Sep, x6)

5. Josh's and Robbie's dictated wording ships unsmoothed; the later line in a dictation wins. Testimonials are never edited. -- Check: diff against the source text. (Aug-Sep)

Banned

6. No em dashes in client copy (and no " -- " either; use a full stop or comma). -- Check: grep for the em dash and " -- " in page HTML = 0. (11 Sep)

7. Never "x is real", "a real X" for emphasis (exception: Josh's heading "what real people said"). -- Check: grep "is real". (15 Sep)

8. Never "90% over 65", "am I too old", age stamps. Audience is 45-65; use concrete moments (opening a jar, buttoning a shirt). -- Check: grep "65", "old". (17 Aug)

9. No eyebrows, no generic labels ("From the 3-day challenge"). -- Check: no label line above headings. (28 Sep)

10. No urgency, countdowns, fake scarcity, star ratings, value stacks, invented stats, tenure claims or physiology. -- Check: every number traces to a source. (29 Aug)

11. Never co-pitch phase two (community/offer two): one reassurance sentence at most. -- Check: offer two named once or less. (18 Aug)

12. No "reply to this email" lines; no "here's a free tracker by the way" asides. -- Check: grep "reply". (28 Sep, 3 Oct)

CTA, price, refund

13. Never "Start for $97" (price $97 since Oct 20; was $157). Sales CTA leads with the 21 days (e.g. the program), price stays visible on the page but is not forced into the first button. -- Check: grep "Start for". (3 Oct)

14. Every price carries USD, once ("$97 USD", never "USD USD"; $97 since Oct 20, Josh, Oct 20: "someone arleady bought asl iI checked its 97"; $157 is the old price). -- Check: regex \$\d+(?! USD) = 0. (Aug, open bug /21-day-hand-reset)

15. Refund in a full sentence: "If your hands don't feel looser and stronger by day 21, you get a full refund." Say "full refund". -- Check: refund line is one complete sentence. (1-3 Oct)

16. Opt-in promise exactly: "Your hands will feel different before the first video is over." Not "can". -- Check: exact string match. (27 Sep)

17. Opt-in CTA "Send me day one now for free"; no subtext under it. -- Check: no line under the button. (27 Sep)

Framing

18. Make people care, don't instruct mechanically: "Don't miss a day because it ended up in junk", not "Check your spam folder". -- Check: each instruction carries its reason for the reader. (3 Oct)

19. Preframe an extra rather than tack it on: introduce the tracker as part of the plan, not "by the way, here's a free tracker". -- Check: no "by the way"/"also" add-ons. (3 Oct)

20. Day pages: under the title ONE short comforting full sentence (e.g. "We'll start gently."), taken from that day's intro. No intro paragraph. -- Check: one line between title and video. (3 Oct)

21. Disclaimers that matter (junk folder, medical) go in the boxed callout from STYLE rule 10, short and in full sentences. -- Check: callout text <= 2 sentences. (3 Oct)

22. Pages state the bucket, not a thesis; no invented angles Ryan never says. -- Check: angle traceable to Ryan/Robbie notes. (Sep)

Do NOT say what the visitor already knows

23. Cut repeats of known info at that step. -- Check: read the previous step's page; delete anything repeated. (27 Sep, x5)

24. No about page; no video library page. -- Check: no new route of either kind. (Aug)

Conflicts (newest wins)

Currently testing (not permanent)

Sales CTA wording focused on "21 days" (A/B, Josh to pick); price on top sales button; repeating content across sections ("testing, not a permanent rule"); local-currency line near buy button; new sales page 80% product / 20% journey, "Is this program right for me?" near top (outline only).

Brand sheet (Oct 21, not reviewed by Josh)

The one-page summary.

> Status: UNREVIEWED by Josh (built Oct 21, 2026 from his past feedback). Follow it, but flag anything that looks wrong.

Brand sheet: Robbie Peck (@physiorobbie)

Live guide on the Pro: ~/Work/robbie-site/docs/BUILD-GUIDE.md + WRITING-GUIDE.md (copies in

~/client-systems/reference/robbie-site/). Those win over this sheet for page detail; this sheet is the summary.

Identity

Look (BUILD-GUIDE tokens, Oct 19)

Photos and video

no video still as a portrait. AI hands/objects OK unless on docs/FAKE-IMAGES.txt (Oct 20-21; Josh, Oct 10: "Have ChatGPT and you generate the concept of the image."). Hand images look 55-65, matching the buttons, jar, writing, key and pot images: never young, never very old (Josh, Oct 11-12: "not that old goddamn", "imge sto young").

Voice

"over 65"; say "older people" if needed (Aug 17, Oct 17).

How they like messages

How they want US to message them (applied silently to every draft; see templates/BRAND-SHEET.md).

Audience

Subconscious hesitation before hand tasks (opening a jar).

Offer

Timeline wording: "Option to join", not "Invitation to the community" (Oct 21).

Client-only rules

the video to the Reset, no "Did this help", no testimonials (Sep 20 - Oct 6). Reply line conflict: OPEN-QUESTIONS.

Review and tools

Checker settings