Wave 1: wire /intelligence, /slip, /parlay + /marketplace honesty pass

Wiring + one copy pass. No grade, ledger, model or scoring change (diff empty
across intelligence/, ledgerService, outcomeService, gradeSlateService).

REVIEW ZERO — each surface proven with real data BEFORE wiring:
  0.1 /intelligence vs /system are NOT duplicates. System.dc.html is a
      multi-surface artboard (TERMINAL + INTELLIGENCE + WIRE sections), not the
      design for a distinct /system route; its INTELLIGENCE section is already
      realised as the live app/intelligence/page.tsx. No /system page exists and
      none should be built as a second copy — the prod 404 is correct.
  0.2 /intelligence renders live and gates SERVER-side, not by blur: the proxy
      requires auth and limits by tier (desk 50 signals / non-desk 8), and
      returns 401 to an anonymous caller (verified live). No leak.
  0.3 /slip parses a real DraftKings slip end to end: 3/3 legs,
      needs_review false, Aaron Judge total_bases over 1.5 @ -115. Honest limit
      recorded: parsers are layout-rigid, an unsupported layout yields ZERO legs
      rather than wrong ones (never-guess), so real-world OCR hit-rate across
      layouts is CANNOT DETERMINE until user slips arrive.
  0.4 /parlay direct route hits the real correlation builder on the same
      ParlayContext the drawer uses.
  0.5 /marketplace advertised four unbuilt things but made NO performance or
      profit claim, and its capture was already real (/api/waitlist upserts to a
      waitlist table). The gap was tense, not fabrication.

WIRED: Nav MORE gains Intelligence, Slip Reader and Marketplace; Parlay Lab
re-pointed from the drawer hash to /parlay (the drawer is unaffected —
ParlayPanel stays mounted with its floating badge).

GATING: /intelligence added to GATED_ROUTES because its feed 401s signed-out, so
an ungated link would land visitors on a permanently empty page. /parlay stays
OPEN deliberately — it is the free parlay funnel and gating it would be a
monetization regression.

/marketplace honesty pass: every item body now opens "Not built yet." /
"Not written yet." / "Not produced yet." with what is planned; the subhead states
it is not a purchase, not a pre-order and not a promise of a ship date; the
playbook item carries "No profit claim, no promised return". The capture stays
real — no fake button. Unit-locked.

Floor: 315 suites / 3920 tests green (12 new), web build exit 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
This commit is contained in:
Kev
2026-07-31 04:51:42 -04:00
parent 6328a5ce92
commit ff7f5d8d2d
6 changed files with 174 additions and 8 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+7 -5
View File
@@ -6,22 +6,22 @@ const ITEMS = [
{
list: 'api',
title: 'API access',
body: 'Programmatic access to the grading engine. Build your own dashboards, alerts, automations.',
body: 'Not built yet. Planned: programmatic access to the grading engine so you can build your own dashboards, alerts and automations.',
},
{
list: 'alerts',
title: 'Custom alerts',
body: 'Get pinged when specific players, stats, or matchups hit your threshold — by SMS, email, or webhook.',
body: 'Not built yet. Planned: get pinged when specific players, stats or matchups hit a threshold you set — by SMS, email or webhook.',
},
{
list: 'The Edge',
title: 'The Edge — playbook',
body: 'Long-form analysis of the model and how to deploy it in real bankroll management.',
body: 'Not written yet. Planned: long-form analysis of how the model works and how to think about bankroll. No profit claim, no promised return.',
},
{
list: 'merch',
title: 'Capsule drop',
body: 'First merch run. 200 units. Founder access gets first pull.',
body: 'Not produced yet. Planned: a first merch run, founder access gets first pull. Unit count not fixed.',
},
];
@@ -60,7 +60,9 @@ export default function MarketplacePage() {
The VYNDR Marketplace.
</h1>
<p style={{ color: 'var(--text-secondary)', fontSize: 16, maxWidth: 560, margin: '0 auto' }}>
API access, custom alerts, deep analysis, and limited drops. Reserve your spot these go to founder users first.
None of the below is built yet. This page exists so you can tell us which ones you&apos;d
actually use joining a list records your interest, nothing more. It is not a purchase,
not a pre-order, and not a promise of a ship date.
</p>
</header>
+10 -2
View File
@@ -24,8 +24,16 @@ const PRIMARY = [
];
const MORE = [
{ label: 'Explore', href: '/explore' },
// Session 60 (4.4) — discoverable Parlay Lab entry (opens the drawer).
{ label: 'Parlay Lab', href: '#parlay', action: 'parlay' as const },
// Wave 1 (2026-07-31) — the Parlay Lab entry now points at the REAL page
// (app/parlay/page.tsx, the full correlation builder) rather than only opening
// the drawer. The drawer is unaffected: ParlayPanel stays mounted in the layout
// with its floating badge, which is its natural in-context use from a prop row.
{ label: 'Parlay Lab', href: '/parlay' },
// Wave 1 — proven-before-wired. /intelligence renders a real, server-tier-limited
// feed; /slip parses a real slip end to end (3/3 legs on the DraftKings grammar).
{ label: 'Intelligence', href: '/intelligence' },
{ label: 'Slip Reader', href: '/slip' },
{ label: 'Marketplace', href: '/marketplace' },
// Compare is in development (no real two-player feed yet) — no nav entry until
// it renders real data. The route still resolves to an honest in-dev state.
{ label: 'Tracker', href: '/tracker' },
+5
View File
@@ -25,6 +25,11 @@ const GATED_ROUTES = [
'/notifications',
'/invite',
'/slip', // A1 S9 — slip reader (personal surface: reads the user's own bet slip)
// Wave 1 (2026-07-31) — /intelligence became nav-reachable. Its feed REQUIRES auth
// (`/api/intelligence/feed` returns 401 signed-out, verified live) and limits by tier
// SERVER-side (desk 50 signals / non-desk 8) — so it never blurred-over full data.
// Gated so a signed-out visitor lands on /login instead of a permanently empty feed.
'/intelligence',
];
/* Open — reachable without auth (marketing + the free funnel + auth itself). */