Skip to content

feat(dev): funnel-definitions quiz — 1337 squ1rr3l squ4d (single static HTML)#2465

Open
0xkkonrad wants to merge 11 commits into
devfrom
feat/funnel-quiz
Open

feat(dev): funnel-definitions quiz — 1337 squ1rr3l squ4d (single static HTML)#2465
0xkkonrad wants to merge 11 commits into
devfrom
feat/funnel-quiz

Conversation

@0xkkonrad

@0xkkonrad 0xkkonrad commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What

The team funnel-definitions quiz, shipped as one self-contained static HTML file: public/dev-quiz/index.html — "1337 SQU1RR3L SQU4D training grounds". Dark matrix/cypherpunk × old-MySpace × neochibi theme: matrix-rain canvas, CRT scanlines, glitch title, typed-terminal boot/eval screens, kaomoji marquees + reactive kaomoji-squirrel mascot, combo meter, nut-rain celebrations.

  • 20 Konrad-approved questions embedding the current Lexicon (Visitor → Registered → Verification Started → Verified → Funded → Activated; Verified = Sumsub; Activated = ≥1 spend — card [auth = qualifying event] or QR spend on MP/Pix; Active = ≥1 completed tx / 7d). Retired definitions serve as distractors so the quiz teaches the cutover.
  • Levels easy→mid→hard (100/200/300 pts, +50 streak bonus), retry-missed loop, per-answer explanations (the teaching moment), canvas-rendered 1080×1080 share card (copy/download) for internal channels.
  • Dev Tools index links it ("1337 Squ1rr3l Squ4d") via a plain <a> (new static flag — Next Link can't client-navigate to public/ files).

Design notes / accepted trade-offs

  • Zero dev burden by ruling: no React engine, no deps, nothing in the build graph — an earlier React implementation in this branch was fully removed in favor of the single file. Inline CSS/JS is hand-tuned, so public/dev-quiz/ is prettier-ignored.
  • Public by design: public/ files bypass the /dev domain gate, so the quiz is world-readable on peanut.me after the next prod release (no allowlist change needed; the earlier allowlist edit was reverted). Question content was written with that in mind.

Risks

  • Minimal blast radius: one static file + a display-only change to the Dev Tools index. No API, no money paths, no shared state.

QA

  • Headless screenshot loop (375px + 1280px) across boot / question / correct / wrong / final-rank states; zero page errors.
  • Full logical run-through of scoring, combo, retry-missed, and rank tiers.

🤖 Generated with Claude Code

Gamified definitions trainer at /dev/quiz — mascot reactions, streaks,
confetti, retry-missed loop. First quiz covers the card funnel event
vocabulary + analytics definitions so the team actually internalizes them.
New quizzes are data-only (quizzes/*.ts + registry entry).
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
peanut-wallet Ready Ready Preview, Comment Jul 22, 2026 11:37am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 3f19d792-2a3e-4ec3-b892-5b2954146505

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/funnel-quiz

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Code-analysis diff

Painscore total: 6232.6 → 6232.27 (-0.33)
Findings: 0 net (+2 new, -2 resolved)

🆕 New findings (2)

  • medium high-mdd — src/app/(mobile-ui)/dev/page.tsx:8 — DevToolsPage: MDD 27.0 (uses across many lines from declarations)
  • medium complexity — src/app/(mobile-ui)/dev/page.tsx — CC 4, MI 59.69, SLOC 37

✅ Resolved (2)

  • src/app/(mobile-ui)/dev/page.tsx:8 — DevToolsPage: MDD 54.0 (uses across many lines from declarations)
  • src/app/(mobile-ui)/dev/page.tsx — CC 3, MI 62.19, SLOC 31

📈 Painscore deltas (top movers)

File Before After Δ
src/app/(mobile-ui)/dev/page.tsx 8.5 7.9 -0.6

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

🧪 UI test report — ✅ all green

Suites

  • unit: 2010 ran, 0 failed, 0 skipped, 33.7s

📊 Coverage (unit)

metric %
statements 59.8%
branches 43.4%
functions 48.7%
lines 60.0%
⏱ 10 slowest test cases
time test
3.6s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › never places two stickers in heavy overlap (broad seed sweep)
1.0s src/utils/__tests__/demo-api.test.ts › isDemoMode() is false when not running under Capacitor
0.5s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › every sticker stays within canvas at any count
0.4s src/app/actions/__tests__/api-headers.test.ts › should include Content-Type in validateInviteCode
0.3s src/app/(mobile-ui)/withdraw/__tests__/withdraw-states.test.tsx › Bank withdrawal keeps the $1 minimum for sub-$1 amounts
0.3s src/components/Card/share-asset/__tests__/shareAssetLayout.test.ts › keeps stickers off the username pill (final pass respects the keep-out)
0.3s src/app/actions/__tests__/api-headers-extended.test.ts › should not include apiKey in validateInviteCode body
0.2s src/utils/__tests__/url.utils.test.ts › uses the public BASE_URL in Capacitor, not the localhost WebView origin
0.1s src/utils/__tests__/demo-balance.test.ts › auto-refills a wallet older than the TTL on cold start
0.1s src/utils/__tests__/demo-balance.test.ts › auto-refills a stored balance that has no timestamp (legacy install)
📍 Inline annotations are in the **Unit test report** check above. Coverage artifact: `coverage-unit`. Generated by `.github/workflows/tests.yml`.

Guards the correctIndex-off-by-one class of quiz-content bug and the
start->answer->explanation->grade flow.
Easy/Mid/Hard progression (easy lexicon first), per-level points with
streak bonus, and a canvas-rendered share card (copy/download) for
posting scores in internal channels. Question set expanded to the 20
candidates pending Konrad's picker cut; Lexicon (Registered/Verified/
Funded/Activated) questions grounded in engineering/analytics/activation.
All questions Konrad-approved. Adds MySpaceChrome (marquee, sparkle cursor
trail, blinking stickers, fake visitor counter, webring footer) + in-quiz
juice (wrong-answer shake, points pop, combo meter, level-up banner,
rainbow titles) — pure CSS/JS, zero new deps. Subway surfers loop is a
~700KB static mp4 in public/ (never enters the build graph) with a
local peanut-runner fallback. /dev/quiz added to PRODUCTION_ALLOWED_ROUTES
so the quiz is public on peanut.me like full-graph/payment-graph.
Definitional cutover per ruling: Activated = >=1 SPEND (card spend, with
AUTHORIZATION as the qualifying event, or QR spend on Mercado Pago/Pix) —
send links / offramps / withdrawals are Volume now, not activation.
Funnel gains a Verification Started step (kyc_initiated ∪
manteca_kyc_initiated); Verified = Sumsub specifically. 28-day KR window
question replaced with the Active (7-day) definition; banned
"churned"/"dormant" wording removed in favor of Inactive. Old
definitions kept as distractors so the quiz teaches the cutover.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@0xkkonrad

Copy link
Copy Markdown
Contributor Author

Definitional update pushed (e1a553f): quiz now matches the new canonical lexicon — funnel is Visitor → Registered → Verification Started → Verified → Funded → Activated; Verified = Sumsub specifically; Activated = ≥1 spend (card spend, qualifying event = authorization, or QR spend on Mercado Pago/Pix) — send links/offramps/withdrawals no longer count (they're Volume); the 28-day KR window question was replaced with the Active (≥1 completed tx, last 7 days) definition; banned "churned"/"dormant" wording removed in favor of Inactive. The old definitions survive as distractors so the quiz actively teaches the cutover.

… squ1rr3l squ4d

Konrad's call: the fun thing must not burden devs. The whole quiz —
Konrad-approved questions (current Lexicon: 6 steps, Sumsub-only Verified,
Activated = spend, AUTH ruling), levels/points/combos, share card, matrix
rain, cypherpunk-myspace chrome — now lives in ONE self-contained file at
public/dev-quiz/index.html. Zero deps, zero build-graph impact, public on
prod automatically (public/ bypasses the /dev gate). React engine, subway
mp4, and the /dev/quiz allowlist entry removed; dev-tools index links the
static file via plain <a>.
@0xkkonrad 0xkkonrad changed the title feat(dev): Peanut quiz hub + funnel definitions quiz feat(dev): funnel-definitions quiz — 1337 squ1rr3l squ4d (single static HTML) Jul 22, 2026
@0xkkonrad
0xkkonrad requested a review from Hugo0 July 22, 2026 10:57
…on update 2026-07-22)

Verified is now two funnel steps: Sumsub approval, then acceptance by any
one of the three providers (Manteca, Bridge, Rain). Also gates 'Active'
on Activated per the same-day DAU/WAU ruling.
…e answer

On top of Konrad's Verified-split lexicon update (0433898): each of the
21 questions now carries a joke option rendered last and never shuffled.
Picking it scores as a miss with its own verdict (C0M3D14N D3T3CT3D 🤡)
and a respect-quip, then still shows the real intel.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant