product

DreamPro Coaching — ClickBank Front-End + QR "Start a Plan"

The cheap front-end product that funnels into the recurring back-end of The DreamPro Coaching System. A book / digital product John (and his affiliates) promote on ClickBank, whose QR codes & deep links one-tap-instantiate a real DreamPro program and carry referral attribution into the subscription. Closes the loop: product sale → executable action plan → recurring subscription → channel override.

Status: Spec / not yet built. Depends on the Phase-2 attribution graph (DREAMPRO_COACHING_CHANNEL_SCHEMA.md) and the DreamPro template/clone engine. SQL is a draft — don't apply until greenlit.

Status (2026-06-14): the /start deep-link + enrollment SHIPPED. Migration 371 adds dreams.public_slug; coaching-onboarding.ts enrollClient() resolves a coach referral code → real membership → program clone → auto-created Coach Seat; POST /api/coaching/start; the /start/[slug] landing is the QR/deep-link front door (free, no Stripe). The /go/<id> durable redirect + coaching_links + QR generation SHIPPED too (migration 372; /go/[id]/route.ts → resolve + 302; super-admin "QR / deep links" panel on /dashboard/coaching creates links + renders QR via the qrcode lib + tracks scans). Still to build: the ClickBank thank-you page (only needed if/when ClickBank is used).

The strategic point: John is a ClickBank operator and an author. The ClickBank playbook is a cheap front-end to acquire buyers + fund ads, and a recurring back-end for profit. This plan is the front-end. Most fitness books are inert ("do this workout"); this one's action plans are executable — scan, and the plan is live in your pocket with squad accountability + an AI coach.


0. The funnel shape + the two attribution layers

ClickBank sale (book / digital product)         ← front-end commission, ClickBank-handled
   │  buyer lands on the ClickBank "thank-you" page hosted on dreampro.io
   ▼
QR / deep link  →  dreampro.io/start/<template>?ref=<code>
   │  attribution captured · template cloned · into Workout Window + AI coach
   ▼
Subscribe to DreamPro Coaching                  ← recurring BACK-END
   │
   ▼
Channel override paid to John (Phase 2)         ← the real LTV

Two attribution layers that must not be conflated:

  1. ClickBank HopLink — tracks who sold the book and pays the front-end commission. ClickBank owns this; we build nothing for it.
  2. Our ?ref=<code> (coaching_referral_codes, Phase 2) — tracks the back-end subscription so the recurring override routes to John (or the selling coach). The thank-you page bakes in the right ref so the two layers line up: the person who earned the ClickBank sale also earns the back-end.

1. The lead product

Recommendation: lead with a digital "challenge in a box" built on the "30-Day Reset" template (already seeded by scripts/seed-dreampro-coaching.ts).

Why this as the front-end:

  • ClickBank-native: instant digital delivery, low production cost, fast to list.
  • The QR→clone loop is the demo — a 30-day, self-contained commitment is the ideal tripwire scope (not a 12-week ask).
  • It stands alone (critical for ClickBank refund rates — see §6) and gets dramatically better when you scan: the inert PDF becomes a live program with a squad + AI coach.

Sequencing: digital bundle first (prove the loop converts) → John's authored book as the authority play that scales it (leverages that he's a published author; print needs the durable redirect layer in §3 so codes never break).

John's call (flag, don't assume): the lead product/angle may be a signature program of his own rather than "30-Day Reset," and the price points are his to set. The contract below is program-agnostic — any DreamPro template with a public slug drops in. Treat "30-Day Reset" as the default placeholder.


Canonical action URL:

https://dreampro.io/start/<template-slug>?ref=<code>[&utm_*=...]

Behavior (/start/[slug] route):

  1. Resolve + record attribution — look up <code> in coaching_referral_codes (Phase 2) → its coach/partner. Persist it (cookie + carried query) so it survives an auth redirect.
  2. Resolve the template by public_slug (§4) → its dream id.
  3. Branch on auth:
    • Logged in: call POST /api/dreampro/templates/:id/clone (the real, shipped endpoint) → land on the new clone at /dashboard/dreampro/[cloneId] with the first step + an "add to Workout Window" CTA.
    • Not logged in: route to signup/login carrying { ref, template_slug }; after auth, run the same clone + create the coaching_memberships row stamped with referral_code = <code> (this is what wires the back-end override).
  4. Idempotency: if the user already has a clone of this template, route to the existing clone instead of duplicating.

This needs no new clone logic — it orchestrates the shipped clone endpoint + the Phase-2 attribution write.


3. The durable redirect layer + QR

Printed QR codes are permanent; destinations are not. So never put /start/... directly on print — put a short, stable redirect:

https://dreampro.io/go/<link-id>     →  302 → current /start/<slug>?ref=<code>&utm_*=...
  • /go/[id] resolves a coaching_links row (§4) to its current destination and logs the scan. The book can be reprinted, the campaign re-targeted, the template swapped — the printed code never changes.
  • QR generation: render a QR (e.g. a qrcode lib) pointing at /go/<id> for print, or directly at /start/... for digital surfaces where the URL can change.
  • Each program/chapter in the book gets its own coaching_links row → its own QR.

4. Schema (draft)

Add a public slug to templates

Templates are addressed by id today; durable/memorable URLs need a slug.

alter table dreams
  add column if not exists public_slug text;

-- Unique among templates only (clones don't need slugs).
create unique index if not exists uq_dreams_public_slug
  on dreams (public_slug) where public_slug is not null;

Backfill the seeded coaching templates with slugs (couch-to-5k, 12-week-strength, 30-day-reset).

coaching_links — the durable redirect + QR target

create table if not exists coaching_links (
  id text primary key,                    -- short, URL-safe (e.g. 8-char, Lovio gen)
  destination_kind text not null default 'start_template'
    check (destination_kind in ('start_template')),

  template_slug text references dreams(public_slug),  -- what to start
  referral_code text references coaching_referral_codes(code),  -- baked-in attribution
  utm jsonb,                              -- campaign params merged into the redirect

  label text,                             -- "Book ch.3 — 30-Day Reset", "Back cover"
  is_active boolean not null default true,

  scan_count integer not null default 0,  -- denormalized; precise analytics via PostHog
  created_by_user_id uuid references auth.users(id) on delete set null,
  created_at timestamptz not null default now()
);
create index if not exists idx_coaching_links_active on coaching_links (is_active) where is_active;
  • Scan tracking: bump scan_count + emit a PostHog coaching_link_scanned event (with link_id, template_slug, ref) on every /go/<id> hit — that's the top of the funnel, feeding the existing monetization funnel analytics.
  • No separate scans table needed for v1; add one only if you need per-scan rows.

5. Attribution tie-in (how John actually gets paid)

The whole chain rides the Phase-2 graph:

/go/<id> or /start/?ref=<code>
   → coaching_referral_codes resolves <code> → coach (and coach.channel_partner = John)
   → on clone+signup, coaching_memberships row written with that referral_code
   → on subscribe, invoice.paid splits 3 ways (coach + John override + platform)
   → creator_earnings rows + Stripe transfers (DREAMPRO_COACHING_CHANNEL_SCHEMA.md §4–5)

So a book sale becomes a tracked entry into the recurring funnel — not a one-time commission that ends at checkout. Every QR is an attributed front door.


6. ClickBank specifics & discipline

  • Thank-you page on dreampro.io. ClickBank posts the buyer to a vendor thank-you URL — host it on dreampro.io with the QR/deep-link + account creation, and bake in the ref matching the selling party so the back-end attributes correctly.
  • HopLink ≠ our ref. Front-end commission is ClickBank's HopLink; back-end override is our ?ref=. Keep them aligned but distinct (§0).
  • Refund discipline. ClickBank tolerates high refund rates; an info-product that's a thin bait-and-switch tripwire will get refunded into oblivion and tank the listing. The product must deliver standalone value even if nobody scans.
  • Health-claims discipline. Wellness/accountability framing only — no medical or guaranteed-results claims (same posture as Throughline + the AI-coach guardrail). FTC scrutiny on fitness ClickBank products is real.

7. Build checklist

  • Migration: dreams.public_slug + unique index; backfill seeded templates
  • Migration: coaching_links table
  • Frontend route /start/[slug] — attribution capture → clone → land on clone (auth + post-auth paths); idempotent re-clone guard
  • Frontend/backend route /go/[id] — resolve coaching_links → 302 → /start, bump scan_count, emit coaching_link_scanned PostHog event
  • QR generation utility (point at /go/<id> for print, /start for digital)
  • Admin: create/manage coaching_links (per book chapter / campaign) + QR export
  • ClickBank thank-you page on dreampro.io (deep link + account creation + ref) — SHIPPED 2026-06-14: /30-day-reset/welcome (carries seller ?ref= → account → /start). The native product surface /30-day-reset + its guide content (content/coaching/30-day-reset.ts) shipped alongside.
  • Wire signup-with-template post-auth clone + coaching_memberships write (ties to Phase 2)
  • Docs sync: INDEX.md, API.md, POSTHOG_EVENTS.md (coaching_link_scanned, start/clone events)

8. Open decisions for John

  1. Format — digital "challenge in a box" first (recommended) vs. authored book vs. both in sequence.
  2. Lead product / angle — "30-Day Reset" placeholder vs. John's signature program.
  3. Price points — front-end ($9–$47 typical ClickBank range) + how it ladders into the subscription tiers (the AI-coach Tier 1 is the natural low-price entry — see Coach Seat §7).
  4. Affiliate terms — ClickBank commission % for his affiliate army (front-end), separate from the back-end override he keeps.
DREAMPRO COACHING CLICKBANK FUNNEL — Docs | HiveJournal