Localnet + production visual QA: yieldomega.com — readiness re-pass (referrals emphasis) #197

Closed
opened 2026-05-13 00:33:35 +00:00 by Brouie · 96 comments
Brouie commented 2026-05-13 00:33:35 +00:00 (Migrated from gitlab.com)

Scope

Primary environment: local stack at http://localhost:5173 via bash scripts/start-qa-local-full-stack.sh --live-sale. Walk this first while production wiring is still landing.

Secondary environment: https://yieldomega.com — re-walk once production is fully wired. Production currently has stubbed or partial contracts; localnet exercises the full contract + indexer + frontend stack with real reads, real writes, and real error paths.

Relationship to #147: #147 closed 5/12 was production-only on stubbed contracts. This pass is localnet-first with full live contracts; production is the follow-up re-walk.

Primary focus: /referrals (see §1). Walk this section first.

Validates: layout, hierarchy, chrome, responsive behavior, state honesty, contract-backed flows (register, claim, leaderboard reads), and obvious UI defects.

Suggested devices / widths

Profile Typical viewport Notes
Phone 390×844, 360×800 Portrait primary; spot-check landscape
Tablet 768×1024, 834×1194 Portrait + landscape
Desktop 1280×720, 1440×900, 1920×1080 Include one ultrawide if available

Browsers: Latest Safari (iOS + macOS), Chrome/Android, Firefox desktop — at least one WebKit and one Chromium.

Localnet stack notes: --live-sale puts the sale in active phase with the 18-worker bot swarm running; referral swarmyo is registered for shared use. Use the deployer wallet 0xf3...2266 or any swarm wallet for connected-state walks. Local stack shows a marketing hero on / that production does not — note any local-only chrome rather than filing prod-side.


1. Referrals (/referrals) — primary focus

  • 1.1 — Page loads at /referrals from cold (no nav hop) and from in-app nav; no blank shell, no infinite spinner without explanation.
  • 1.2 — Disconnected state: connect-wallet prompt is visible, copy explains what referrals does before connecting; no half-rendered sections leaking address-shaped placeholders.
  • 1.3 — Connected wallet section: own address renders with correct truncation pattern; full address available via copy or tooltip; ENS/avatar (if any) does not push layout.
  • 1.4 — Register-as-referrer flow: form fields, validation messages, and CTA states (idle / submitting / success / error) are visually distinct; disabled CTA has a clear reason.
  • 1.5 — Register flow on localnet (real contract write): wallet session prompt fires once per attempt (no duplicate signature requests); cancel/reject returns user to a clean idle state, not a stuck spinner; successful register transitions UI to registered state without hard reload.
  • 1.6 — Already-registered state: page detects existing registration without prompting another tx; copy reflects the registered status; share affordances are exposed.
  • 1.7 — Referral share/copy affordance: copy-to-clipboard fires feedback (toast, inline check, or color flash) within ~300ms; feedback dismisses cleanly; mobile long-press selection still works as fallback.
  • 1.8 — Share URL format is correct, decipherable, and does not expose internal/debug parameters; preview on social share (spot-check WhatsApp or Telegram paste) renders sane title/description.
  • 1.9 — Earnings section with real swarm activity: numeric values use stable digit widths (no layout jitter on tick); units clear; values increment as swarm bots generate referral activity.
  • 1.10 — Earnings zero-state: shows "no earnings yet" copy on a wallet that has no referral activity, not a blank panel or "—" without explanation.
  • 1.11 — Earnings section: USD/native equivalent (if shown) labels the conversion source and timestamp; stale data has a visible affordance.
  • 1.12 — Leaderboard table populated from real indexer data: header alignment matches body; ranks are tabular; tied ranks handled visibly; own row (if connected and ranked) is distinguishable from others.
  • 1.13 — Leaderboard pagination / load-more (if present): works without losing scroll position; loading state during fetch is visible.
  • 1.14 — Leaderboard on mobile: table either reflows to stacked cards or scrolls horizontally with a clear affordance — does not silently clip columns.
  • 1.15 — Leaderboard empty state and loading state are visually distinct from each other and from an error state.
  • 1.16 — Address truncation across the page is consistent (same start/end character count, same ellipsis style) between connected-wallet section, leaderboard, and any share-link display.
  • 1.17 — Wrong-network state: page does not silently show zeros; copy directs user to switch network; reads do not retry indefinitely against the wrong chain.
  • 1.18 — Indexer-unavailable state (simulate by killing indexer PID on localnet): earnings and leaderboard show a non-alarming banner with retry affordance; registered-status check degrades gracefully.
  • 1.19 — Refresh during a pending registration tx: state recovers (does not double-submit, does not lose user's place).
  • 1.20 — Multi-wallet sanity: disconnect, switch to a second wallet, reconnect — referrals state reflects the new wallet, no leaked data from the prior one.

2. Responsive layout & breakpoints

  • 2.1 — No horizontal scroll on any route at each viewport profile unless an intentional wide artifact exists; if scroll appears, capture route + repro width.
  • 2.2 — Main content stays within safe areas (notch, home indicator, Dynamic Island); no critical CTAs clipped by OS chrome.
  • 2.3 — Touch targets on phone feel ≥ ~44×44 px equivalent; no overlapping hit boxes on stacked controls (especially register CTA + share affordance on /referrals).
  • 2.4 — Tablet layout uses width sensibly; split columns reflow without orphaned headings or stranded CTAs.
  • 2.5 — Desktop max-width containers center correctly; ultrawide does not stretch body copy to unreadable line lengths.
  • 2.6 — Images and illustrations scale without awkward cropping; SVGs/icons stay sharp on retina.
  • 2.7 — Cards, panels, and grids hold consistent gutters and alignment across breakpoints (referrals leaderboard rows + earnings cards + register card line up to a clear grid).
  • 2.8 — Long addresses, numeric values, and monospace strings wrap or truncate per design — no overflow pushing layout sideways.
  • 2.9 — Sticky or fixed regions (header, audio dock, bottom bars) do not obscure leaderboard or register CTA when scrolling.
  • 2.10 — Orientation change reflows without requiring reload; no stuck half-width columns.
  • 2.11 — Browser zoom to ~200%: content remains usable for core tasks (read earnings, copy share link, see own leaderboard row) without mandatory horizontal panning.
  • 2.12 — Mobile keyboard open over referral-register input does not permanently hide the submit CTA or trap focus off-screen.

3. Visual hierarchy, typography & spacing

  • 3.1 — Page titles are clearly dominant; supporting subcopy is visibly secondary (size, weight, color contrast).
  • 3.2 — Section headings follow a predictable level order (h1 → h2 → h3); no skipped levels.
  • 3.3 — Body text line-height and paragraph spacing support comfortable reading; no wall-of-text without breaks.
  • 3.4 — Accent color use draws attention to primary actions and key metrics (e.g. earnings total, register CTA), not decorative noise.
  • 3.5 — Muted / secondary text remains legible against backgrounds (WCAG contrast sanity — especially grey-on-grey in leaderboard secondary columns).
  • 3.6 — Numerals (earnings, leaderboard ranks, countdowns) use tabular or stable widths to avoid digit-flicker jitter.
  • 3.7 — Icons paired with text labels where meaning is non-obvious; standalone icons have accessible names.
  • 3.8 — Lists, tables, and definition blocks align consistently; bullets and numbers do not collide with text wraps.
  • 3.9 — Hover, default, and active states are distinguishable on desktop without relying on color alone.
  • 3.10 — Disabled controls look disabled but remain discoverable; placeholders do not mimic filled values.
  • 3.11 — Error, warning, success, and info banners share a coherent visual language (color + icon + placement) across pages.
  • 3.12 — Light/dark theme (if applicable) keeps hierarchy equivalent in both modes — no invisible borders or vanished dividers.

4. Navigation, chrome & overlays

  • 4.1 — Global nav links resolve correctly; active route is visually indicated; /referrals reachable from primary nav without hidden hops.
  • 4.2 — Mobile nav (hamburger / drawer / tabs) opens and closes reliably; focus returns sensibly on close.
  • 4.3 — Logo / wordmark tap target adequate; home navigation works from nested routes.
  • 4.4 — Footer links (docs, social, legal) align with design; footer does not collide with fixed bottom UI on small screens.
  • 4.5 — Wallet connect entry points are visible and consistent across pages; disconnected vs connected vs wrong-network states are visually distinct from the global header.
  • 4.6 — Modal / drawer stacking: one primary overlay z-order, backdrop dims content, ESC / outside click behave per product expectation.
  • 4.7 — Dropdowns and popovers stay within viewport (flip upward when needed); do not clip inside overflow:hidden parents.
  • 4.8 — Toast / snack notifications do not cover critical CTAs without dismissal; copy-to-clipboard toast on /referrals shares this affordance pattern.
  • 4.9 — Audio / media dock does not overlap nav, primary CTAs, or leaderboard table on narrow breakpoints; play/pause affordance obvious.
  • 4.10 — Scroll locking when overlays open works on iOS (no background scroll bleed-through).
  • 4.11 — Skip-to-content or landmark regions make sense for keyboard users landing on long pages (referrals, timecurve arena).
  • 4.12 — Deep links (share URLs, referral URLs with codes) land with nav context intact — user understands where they are and what they're being invited to.

5. Page inventory & state honesty (every route)

  • 5.1 — / (home): localnet shows marketing hero with "Open TimeCurve" CTA, DOUB coin badge, full leprechaun/bunny/rainbow illustration. Hero renders without layout shift; CTAs reachable; gate state chooses the correct landing surface.
  • 5.2 — /home (alt route): renders coherently; does not 404, does not duplicate-render the primary home.
  • 5.3 — /timecurve: simple landing renders; CTA into Arena/Protocol is visible; loading vs empty vs error states distinct.
  • 5.4 — /timecurve/arena: Arena view, WarBow hero actions, countdown SFX trigger, and chasing pack leaderboard render against live swarm activity; CTAs (Buy CHARM, steal, refresh) show correct disabled reasons when wallet disconnected vs wrong-network vs backend unavailable.
  • 5.5 — /timecurve/protocol: protocol surface renders; buy hub numeric precision matches design (carry from #191); USD staleness affordance present (carry from #192).
  • 5.6 — /timecurve/:segment (branch routes): unknown segments degrade to a branded under-construction or 404, not a raw error dump.
  • 5.7 — /rabbit-treasury: renders; treasury figures show explicit "no data" vs zero vs loading.
  • 5.8 — /collection: renders; image grid loads without layout shift; broken-image placeholders branded.
  • 5.9 — /kumbaya: renders or gates as designed; if gated, copy explains the gate.
  • 5.10 — /sir: renders or gates as designed; same gate-copy expectation.
  • 5.11 — /vesting: hidden-from-nav behavior matches expectation when accessed via direct URL; no broken shell.
  • 5.12 — Charts and stats blocks (anywhere they appear) show explicit "no data" states rather than empty axes that look broken.
  • 5.13 — Indexer / connectivity banners: readable placement, non-alarming palette, actionable retry where applicable. Test by killing indexer PID temporarily on localnet.
  • 5.14 — Explorer links: localnet uses local-anvil block explorer (if any) or shows clear "no explorer wired" affordance; truncated addresses remain decipherable on mobile.
  • 5.15 — 404 / global error pages match brand and offer recovery paths (home, support).
  • 5.16 — Favicon, title tags, and social preview meta behave sanely on key routes.

6. Motion, accessibility, performance & cross-browser

  • 6.1 — prefers-reduced-motion: critical UI remains usable with reduced animation; no information conveyed only via motion (Arena countdown SFX, leaderboard refresh animation).
  • 6.2 — Keyboard Tab order follows visual order; :focus-visible rings visible on interactive elements including the referrals copy-share button.
  • 6.3 — Focus not trapped in unintentional loops; modals trap focus only while open and restore on close.
  • 6.4 — Color is not the sole indicator for errors/links/active states (icons, text, or patterns reinforce meaning).
  • 6.5 — Form inputs (referral register, any address inputs) expose labels and validation messages programmatically associated with the fields.
  • 6.6 — Auto-playing media respects mute/unmute expectations and mobile autoplay policies; no surprise loud audio.
  • 6.7 — Initial paint: no severe layout shift (CLS) on hero/fonts/images; note LCP offenders.
  • 6.8 — Repeated navigations (home → referrals → arena → home) do not leak memory visibly (fan spin / tab freeze) — light subjective pass.
  • 6.9 — Safari (macOS + iOS): -webkit quirks absent for core flex/grid (no clipped rounded corners, sticky jitter); referrals copy-to-clipboard works on iOS Safari.
  • 6.10 — Firefox: wallet modal, referrals leaderboard scroll/sort, and custom scroll areas behave same as Chromium for core flows.
  • 6.11 — Private / strict mode: site loads without hard dependency on third-party cookies where avoidable.
  • 6.12 — Console on cold load + after connect-wallet + after referral-register attempt: capture severity-sorted errors/warnings; file as GitLab issues with screenshots + route + viewport.

Handoff

  • Capture findings as screenshots + viewport + browser + route + env (local/prod); attach to GitLab issues labelled UX / QA / visual-qa as appropriate.
  • When filing nits, follow the polish-nit template pattern (Summary / What's wrong / Expected / Recommended fix / Acceptance criteria / Verification checklist).
  • Note any local-only chrome (marketing hero on /, etc) rather than filing against production — those are local-stack artifacts, not prod bugs.
  • For contract-backed scenarios beyond visual chrome, extend with the contract-backed passes in docs/testing/manual-qa-checklists.md and docs/qa/YO-TimeCurve-QA-Checklist.md.
  • Production re-walk: once prod is fully wired, re-run §1 + §5 specifically against yieldomega.com; the rest of the sections carry over.
## Scope **Primary environment:** local stack at `http://localhost:5173` via `bash scripts/start-qa-local-full-stack.sh --live-sale`. Walk this first while production wiring is still landing. **Secondary environment:** https://yieldomega.com — re-walk once production is fully wired. Production currently has stubbed or partial contracts; localnet exercises the full contract + indexer + frontend stack with real reads, real writes, and real error paths. **Relationship to #147:** #147 closed 5/12 was production-only on stubbed contracts. This pass is **localnet-first** with full live contracts; production is the follow-up re-walk. **Primary focus:** `/referrals` (see §1). Walk this section first. **Validates:** layout, hierarchy, chrome, responsive behavior, state honesty, contract-backed flows (register, claim, leaderboard reads), and obvious UI defects. **Suggested devices / widths** | Profile | Typical viewport | Notes | |---------|------------------|--------| | Phone | 390×844, 360×800 | Portrait primary; spot-check landscape | | Tablet | 768×1024, 834×1194 | Portrait + landscape | | Desktop | 1280×720, 1440×900, 1920×1080 | Include one ultrawide if available | **Browsers:** Latest Safari (iOS + macOS), Chrome/Android, Firefox desktop — at least one WebKit and one Chromium. **Localnet stack notes:** `--live-sale` puts the sale in active phase with the 18-worker bot swarm running; referral `swarmyo` is registered for shared use. Use the deployer wallet `0xf3...2266` or any swarm wallet for connected-state walks. Local stack shows a marketing hero on `/` that production does not — note any local-only chrome rather than filing prod-side. --- ## 1. Referrals (`/referrals`) — primary focus - [x] **1.1** — Page loads at `/referrals` from cold (no nav hop) and from in-app nav; no blank shell, no infinite spinner without explanation. - [x] **1.2** — Disconnected state: connect-wallet prompt is visible, copy explains what referrals does before connecting; no half-rendered sections leaking address-shaped placeholders. - [x] **1.3** — Connected wallet section: own address renders with correct truncation pattern; full address available via copy or tooltip; ENS/avatar (if any) does not push layout. - [x] **1.4** — Register-as-referrer flow: form fields, validation messages, and CTA states (idle / submitting / success / error) are visually distinct; disabled CTA has a clear reason. - [x] **1.5** — Register flow on localnet (real contract write): wallet session prompt fires once per attempt (no duplicate signature requests); cancel/reject returns user to a clean idle state, not a stuck spinner; successful register transitions UI to registered state without hard reload. - [x] **1.6** — Already-registered state: page detects existing registration without prompting another tx; copy reflects the registered status; share affordances are exposed. - [x] **1.7** — Referral share/copy affordance: copy-to-clipboard fires feedback (toast, inline check, or color flash) within ~300ms; feedback dismisses cleanly; mobile long-press selection still works as fallback. - [x] **1.8** — Share URL format is correct, decipherable, and does not expose internal/debug parameters; preview on social share (spot-check WhatsApp or Telegram paste) renders sane title/description. - [x] **1.9** — Earnings section with real swarm activity: numeric values use stable digit widths (no layout jitter on tick); units clear; values increment as swarm bots generate referral activity. - [x] **1.10** — Earnings zero-state: shows "no earnings yet" copy on a wallet that has no referral activity, not a blank panel or "—" without explanation. - [x] **1.11** — Earnings section: USD/native equivalent (if shown) labels the conversion source and timestamp; stale data has a visible affordance. - [x] **1.12** — Leaderboard table populated from real indexer data: header alignment matches body; ranks are tabular; tied ranks handled visibly; own row (if connected and ranked) is distinguishable from others. - [x] **1.13** — Leaderboard pagination / load-more (if present): works without losing scroll position; loading state during fetch is visible. - [x] **1.14** — Leaderboard on mobile: table either reflows to stacked cards or scrolls horizontally with a clear affordance — does not silently clip columns. - [x] **1.15** — Leaderboard empty state and loading state are visually distinct from each other and from an error state. - [x] **1.16** — Address truncation across the page is consistent (same start/end character count, same ellipsis style) between connected-wallet section, leaderboard, and any share-link display. - [x] **1.17** — Wrong-network state: page does not silently show zeros; copy directs user to switch network; reads do not retry indefinitely against the wrong chain. - [x] **1.18** — Indexer-unavailable state (simulate by killing indexer PID on localnet): earnings and leaderboard show a non-alarming banner with retry affordance; registered-status check degrades gracefully. - [x] **1.19** — Refresh during a pending registration tx: state recovers (does not double-submit, does not lose user's place). - [x] **1.20** — Multi-wallet sanity: disconnect, switch to a second wallet, reconnect — referrals state reflects the new wallet, no leaked data from the prior one. --- ## 2. Responsive layout & breakpoints - [x] **2.1** — No horizontal scroll on any route at each viewport profile unless an intentional wide artifact exists; if scroll appears, capture route + repro width. - [x] **2.2** — Main content stays within safe areas (notch, home indicator, Dynamic Island); no critical CTAs clipped by OS chrome. - [x] **2.3** — Touch targets on phone feel ≥ ~44×44 px equivalent; no overlapping hit boxes on stacked controls (especially register CTA + share affordance on `/referrals`). - [x] **2.4** — Tablet layout uses width sensibly; split columns reflow without orphaned headings or stranded CTAs. - [x] **2.5** — Desktop max-width containers center correctly; ultrawide does not stretch body copy to unreadable line lengths. - [x] **2.6** — Images and illustrations scale without awkward cropping; SVGs/icons stay sharp on retina. - [x] **2.7** — Cards, panels, and grids hold consistent gutters and alignment across breakpoints (referrals leaderboard rows + earnings cards + register card line up to a clear grid). - [x] **2.8** — Long addresses, numeric values, and monospace strings wrap or truncate per design — no overflow pushing layout sideways. - [x] **2.9** — Sticky or fixed regions (header, audio dock, bottom bars) do not obscure leaderboard or register CTA when scrolling. - [x] **2.10** — Orientation change reflows without requiring reload; no stuck half-width columns. - [x] **2.11** — Browser zoom to ~200%: content remains usable for core tasks (read earnings, copy share link, see own leaderboard row) without mandatory horizontal panning. - [ ] **2.12** — Mobile keyboard open over referral-register input does not permanently hide the submit CTA or trap focus off-screen. --- ## 3. Visual hierarchy, typography & spacing - [x] **3.1** — Page titles are clearly dominant; supporting subcopy is visibly secondary (size, weight, color contrast). - [x] **3.2** — Section headings follow a predictable level order (h1 → h2 → h3); no skipped levels. - [x] **3.3** — Body text line-height and paragraph spacing support comfortable reading; no wall-of-text without breaks. - [x] **3.4** — Accent color use draws attention to primary actions and key metrics (e.g. earnings total, register CTA), not decorative noise. - [x] **3.5** — Muted / secondary text remains legible against backgrounds (WCAG contrast sanity — especially grey-on-grey in leaderboard secondary columns). - [x] **3.6** — Numerals (earnings, leaderboard ranks, countdowns) use tabular or stable widths to avoid digit-flicker jitter. - [x] **3.7** — Icons paired with text labels where meaning is non-obvious; standalone icons have accessible names. - [x] **3.8** — Lists, tables, and definition blocks align consistently; bullets and numbers do not collide with text wraps. - [x] **3.9** — Hover, default, and active states are distinguishable on desktop without relying on color alone. - [x] **3.10** — Disabled controls look disabled but remain discoverable; placeholders do not mimic filled values. - [x] **3.11** — Error, warning, success, and info banners share a coherent visual language (color + icon + placement) across pages. - [x] **3.12** — Light/dark theme (if applicable) keeps hierarchy equivalent in both modes — no invisible borders or vanished dividers. --- ## 4. Navigation, chrome & overlays - [x] **4.1** — Global nav links resolve correctly; active route is visually indicated; `/referrals` reachable from primary nav without hidden hops. - [x] **4.2** — Mobile nav (hamburger / drawer / tabs) opens and closes reliably; focus returns sensibly on close. - [x] **4.3** — Logo / wordmark tap target adequate; home navigation works from nested routes. - [x] **4.4** — Footer links (docs, social, legal) align with design; footer does not collide with fixed bottom UI on small screens. - [x] **4.5** — Wallet connect entry points are visible and consistent across pages; disconnected vs connected vs wrong-network states are visually distinct from the global header. - [x] **4.6** — Modal / drawer stacking: one primary overlay z-order, backdrop dims content, ESC / outside click behave per product expectation. - [x] **4.7** — Dropdowns and popovers stay within viewport (flip upward when needed); do not clip inside `overflow:hidden` parents. - [x] **4.8** — Toast / snack notifications do not cover critical CTAs without dismissal; copy-to-clipboard toast on `/referrals` shares this affordance pattern. - [x] **4.9** — Audio / media dock does not overlap nav, primary CTAs, or leaderboard table on narrow breakpoints; play/pause affordance obvious. - [x] **4.10** — Scroll locking when overlays open works on iOS (no background scroll bleed-through). - [x] **4.11** — Skip-to-content or landmark regions make sense for keyboard users landing on long pages (referrals, timecurve arena). - [x] **4.12** — Deep links (share URLs, referral URLs with codes) land with nav context intact — user understands where they are and what they're being invited to. --- ## 5. Page inventory & state honesty (every route) - [x] **5.1** — `/` (home): localnet shows marketing hero with "Open TimeCurve" CTA, DOUB coin badge, full leprechaun/bunny/rainbow illustration. Hero renders without layout shift; CTAs reachable; gate state chooses the correct landing surface. - [x] **5.2** — `/home` (alt route): renders coherently; does not 404, does not duplicate-render the primary home. - [x] **5.3** — `/timecurve`: simple landing renders; CTA into Arena/Protocol is visible; loading vs empty vs error states distinct. - [x] **5.4** — `/timecurve/arena`: Arena view, WarBow hero actions, countdown SFX trigger, and chasing pack leaderboard render against live swarm activity; CTAs (Buy CHARM, steal, refresh) show correct disabled reasons when wallet disconnected vs wrong-network vs backend unavailable. - [x] **5.5** — `/timecurve/protocol`: protocol surface renders; buy hub numeric precision matches design (carry from #191); USD staleness affordance present (carry from #192). - [x] **5.6** — `/timecurve/:segment` (branch routes): unknown segments degrade to a branded under-construction or 404, not a raw error dump. - [x] **5.7** — `/rabbit-treasury`: renders; treasury figures show explicit "no data" vs zero vs loading. - [x] **5.8** — `/collection`: renders; image grid loads without layout shift; broken-image placeholders branded. - [x] **5.9** — `/kumbaya`: renders or gates as designed; if gated, copy explains the gate. - [x] **5.10** — `/sir`: renders or gates as designed; same gate-copy expectation. - [x] **5.11** — `/vesting`: hidden-from-nav behavior matches expectation when accessed via direct URL; no broken shell. - [x] **5.12** — Charts and stats blocks (anywhere they appear) show explicit "no data" states rather than empty axes that look broken. - [x] **5.13** — Indexer / connectivity banners: readable placement, non-alarming palette, actionable retry where applicable. Test by killing indexer PID temporarily on localnet. - [x] **5.14** — Explorer links: localnet uses local-anvil block explorer (if any) or shows clear "no explorer wired" affordance; truncated addresses remain decipherable on mobile. - [ ] **5.15** — 404 / global error pages match brand and offer recovery paths (home, support). - [x] **5.16** — Favicon, title tags, and social preview meta behave sanely on key routes. --- ## 6. Motion, accessibility, performance & cross-browser - [x] **6.1** — `prefers-reduced-motion`: critical UI remains usable with reduced animation; no information conveyed only via motion (Arena countdown SFX, leaderboard refresh animation). - [x] **6.2** — Keyboard `Tab` order follows visual order; `:focus-visible` rings visible on interactive elements including the referrals copy-share button. - [x] **6.3** — Focus not trapped in unintentional loops; modals trap focus only while open and restore on close. - [x] **6.4** — Color is not the sole indicator for errors/links/active states (icons, text, or patterns reinforce meaning). - [x] **6.5** — Form inputs (referral register, any address inputs) expose labels and validation messages programmatically associated with the fields. - [x] **6.6** — Auto-playing media respects mute/unmute expectations and mobile autoplay policies; no surprise loud audio. - [x] **6.7** — Initial paint: no severe layout shift (CLS) on hero/fonts/images; note LCP offenders. - [x] **6.8** — Repeated navigations (home → referrals → arena → home) do not leak memory visibly (fan spin / tab freeze) — light subjective pass. - [x] **6.9** — Safari (macOS + iOS): `-webkit` quirks absent for core flex/grid (no clipped rounded corners, sticky jitter); referrals copy-to-clipboard works on iOS Safari. - [x] **6.10** — Firefox: wallet modal, referrals leaderboard scroll/sort, and custom scroll areas behave same as Chromium for core flows. - [x] **6.11** — Private / strict mode: site loads without hard dependency on third-party cookies where avoidable. - [x] **6.12** — Console on cold load + after connect-wallet + after referral-register attempt: capture severity-sorted errors/warnings; file as GitLab issues with screenshots + route + viewport. --- ## Handoff - Capture findings as **screenshots + viewport + browser + route + env (local/prod)**; attach to GitLab issues labelled **UX** / **QA** / **visual-qa** as appropriate. - When filing nits, follow the polish-nit template pattern (Summary / What's wrong / Expected / Recommended fix / Acceptance criteria / Verification checklist). - Note any local-only chrome (marketing hero on `/`, etc) rather than filing against production — those are local-stack artifacts, not prod bugs. - For contract-backed scenarios beyond visual chrome, extend with the contract-backed passes in [`docs/testing/manual-qa-checklists.md`](https://gitlab.com/PlasticDigits/yieldomega/-/blob/main/docs/testing/manual-qa-checklists.md) and [`docs/qa/YO-TimeCurve-QA-Checklist.md`](https://gitlab.com/PlasticDigits/yieldomega/-/blob/main/docs/qa/YO-TimeCurve-QA-Checklist.md). - Production re-walk: once prod is fully wired, re-run §1 + §5 specifically against yieldomega.com; the rest of the sections carry over.
Brouie commented 2026-05-13 00:33:36 +00:00 (Migrated from gitlab.com)

assigned to @nullvector_ux

assigned to @nullvector_ux
Brouie commented 2026-05-13 00:49:14 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
Brouie commented 2026-05-13 00:50:13 +00:00 (Migrated from gitlab.com)

changed title from Production visual QA: yieldomega.com — post-launch readiness re-pass (referrals emphasis) to Localnet + production visual QA: yieldomega.com — readiness re-pass (referrals emphasis)

<p>changed title from <code class="idiff"><span class="idiff left deletion">P</span>roduction visual QA: yieldomega.com — <span class="idiff right deletion">post-launch </span>readiness re-pass (referrals emphasis)</code> to <code class="idiff"><span class="idiff left right addition">Localnet + p</span>roduction visual QA: yieldomega.com — readiness re-pass (referrals emphasis)</code></p>
nullvector_ux commented 2026-05-13 00:58:38 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.1 — Page loads at /referrals from cold no nav hop and from in-app nav; no blank shell, no infinite spinner without explanation. as completed

marked the checklist item **1\.1 — Page loads at /referrals from cold \(no nav hop\) and from in\-app nav; no blank shell, no infinite spinner without explanation\.** as completed
nullvector_ux commented 2026-05-13 00:58:56 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.2 — Disconnected state: connect-wallet prompt is visible, copy explains what referrals does before connecting; no half-rendered sections leaking address-shaped placeholders. as completed

marked the checklist item **1\.2 — Disconnected state: connect\-wallet prompt is visible, copy explains what referrals does before connecting; no half\-rendered sections leaking address\-shaped placeholders\.** as completed
nullvector_ux commented 2026-05-13 00:59:10 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.3 — Connected wallet section: own address renders with correct truncation pattern; full address available via copy or tooltip; ENS/avatar if any does not push layout. as completed

marked the checklist item **1\.3 — Connected wallet section: own address renders with correct truncation pattern; full address available via copy or tooltip; ENS/avatar \(if any\) does not push layout\.** as completed
nullvector_ux commented 2026-05-13 01:03:38 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.5 — Register flow on localnet real contract write: wallet session prompt fires once per attempt no duplicate signature requests; cancel/reject returns user to a clean idle state, not a stuck spinner; successful register transitions UI to registered state without hard reload. as completed

marked the checklist item **1\.5 — Register flow on localnet \(real contract write\): wallet session prompt fires once per attempt \(no duplicate signature requests\); cancel/reject returns user to a clean idle state, not a stuck spinner; successful register transitions UI to registered state without hard reload\.** as completed
nullvector_ux commented 2026-05-13 01:07:57 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.4 — Register-as-referrer flow: form fields, validation messages, and CTA states idle / submitting / success / error are visually distinct; disabled CTA has a clear reason. as completed

marked the checklist item **1\.4 — Register\-as\-referrer flow: form fields, validation messages, and CTA states \(idle / submitting / success / error\) are visually distinct; disabled CTA has a clear reason\.** as completed
nullvector_ux commented 2026-05-13 01:07:59 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.6 — Already-registered state: page detects existing registration without prompting another tx; copy reflects the registered status; share affordances are exposed. as completed

marked the checklist item **1\.6 — Already\-registered state: page detects existing registration without prompting another tx; copy reflects the registered status; share affordances are exposed\.** as completed
nullvector_ux commented 2026-05-13 01:08:38 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.7 — Referral share/copy affordance: copy-to-clipboard fires feedback toast, inline check, or color flash within ~300ms; feedback dismisses cleanly; mobile long-press selection still works as fallback. as completed

marked the checklist item **1\.7 — Referral share/copy affordance: copy\-to\-clipboard fires feedback \(toast, inline check, or color flash\) within ~300ms; feedback dismisses cleanly; mobile long\-press selection still works as fallback\.** as completed
nullvector_ux commented 2026-05-13 01:09:29 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.8 — Share URL format is correct, decipherable, and does not expose internal/debug parameters; preview on social share spot\-check WhatsApp or Telegram paste renders sane title/description. as completed

marked the checklist item **1\.8 — Share URL format is correct, decipherable, and does not expose internal/debug parameters; preview on social share \(spot\-check WhatsApp or Telegram paste\) renders sane title/description\.** as completed
nullvector_ux commented 2026-05-13 01:12:34 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.9 — Earnings section with real swarm activity: numeric values use stable digit widths no layout jitter on tick; units clear; values increment as swarm bots generate referral activity. as completed

marked the checklist item **1\.9 — Earnings section with real swarm activity: numeric values use stable digit widths \(no layout jitter on tick\); units clear; values increment as swarm bots generate referral activity\.** as completed
nullvector_ux commented 2026-05-13 01:14:20 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.10 — Earnings zero-state: shows "no earnings yet" copy on a wallet that has no referral activity, not a blank panel or "—" without explanation. as completed

marked the checklist item **1\.10 — Earnings zero\-state: shows \"no earnings yet\" copy on a wallet that has no referral activity, not a blank panel or \"—\" without explanation\.** as completed
nullvector_ux commented 2026-05-13 01:29:05 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.10 — Earnings zero-state: shows "no earnings yet" copy on a wallet that has no referral activity, not a blank panel or "—" without explanation. as incomplete

marked the checklist item **1\.10 — Earnings zero\-state: shows \"no earnings yet\" copy on a wallet that has no referral activity, not a blank panel or \"—\" without explanation\.** as incomplete
nullvector_ux commented 2026-05-13 01:29:37 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.11 — Earnings section: USD/native equivalent if shown labels the conversion source and timestamp; stale data has a visible affordance. as completed

marked the checklist item **1\.11 — Earnings section: USD/native equivalent \(if shown\) labels the conversion source and timestamp; stale data has a visible affordance\.** as completed
nullvector_ux commented 2026-05-13 01:29:59 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.12 — Leaderboard table populated from real indexer data: header alignment matches body; ranks are tabular; tied ranks handled visibly; own row if connected and ranked is distinguishable from others. as completed

marked the checklist item **1\.12 — Leaderboard table populated from real indexer data: header alignment matches body; ranks are tabular; tied ranks handled visibly; own row \(if connected and ranked\) is distinguishable from others\.** as completed
nullvector_ux commented 2026-05-13 01:30:33 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.13 — Leaderboard pagination / load-more if present: works without losing scroll position; loading state during fetch is visible. as completed

marked the checklist item **1\.13 — Leaderboard pagination / load\-more \(if present\): works without losing scroll position; loading state during fetch is visible\.** as completed
nullvector_ux commented 2026-05-13 01:34:35 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.15 — Leaderboard empty state and loading state are visually distinct from each other and from an error state. as completed

marked the checklist item **1\.15 — Leaderboard empty state and loading state are visually distinct from each other and from an error state\.** as completed
nullvector_ux commented 2026-05-13 01:36:02 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.16 — Address truncation across the page is consistent same start/end character count, same ellipsis style between connected-wallet section, leaderboard, and any share-link display. as completed

marked the checklist item **1\.16 — Address truncation across the page is consistent \(same start/end character count, same ellipsis style\) between connected\-wallet section, leaderboard, and any share\-link display\.** as completed
nullvector_ux commented 2026-05-13 01:37:48 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.17 — Wrong-network state: page does not silently show zeros; copy directs user to switch network; reads do not retry indefinitely against the wrong chain. as completed

marked the checklist item **1\.17 — Wrong\-network state: page does not silently show zeros; copy directs user to switch network; reads do not retry indefinitely against the wrong chain\.** as completed
nullvector_ux commented 2026-05-13 01:43:23 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.18 — Indexer-unavailable state simulate by killing indexer PID on localnet: earnings and leaderboard show a non-alarming banner with retry affordance; registered-status check degrades gracefully. as completed

marked the checklist item **1\.18 — Indexer\-unavailable state \(simulate by killing indexer PID on localnet\): earnings and leaderboard show a non\-alarming banner with retry affordance; registered\-status check degrades gracefully\.** as completed
nullvector_ux commented 2026-05-13 01:52:56 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.19 — Refresh during a pending registration tx: state recovers (does not double-submit, does not lose user's place). as completed

marked the checklist item **1\.19 — Refresh during a pending registration tx: state recovers \(does not double\-submit, does not lose user's place\)\.** as completed
nullvector_ux commented 2026-05-13 01:54:43 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.20 — Multi-wallet sanity: disconnect, switch to a second wallet, reconnect — referrals state reflects the new wallet, no leaked data from the prior one. as completed

marked the checklist item **1\.20 — Multi\-wallet sanity: disconnect, switch to a second wallet, reconnect — referrals state reflects the new wallet, no leaked data from the prior one\.** as completed
nullvector_ux commented 2026-05-13 02:16:25 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.1 — No horizontal scroll on any route at each viewport profile unless an intentional wide artifact exists; if scroll appears, capture route + repro width. as completed

marked the checklist item **2\.1 — No horizontal scroll on any route at each viewport profile unless an intentional wide artifact exists; if scroll appears, capture route \+ repro width\.** as completed
nullvector_ux commented 2026-05-13 02:20:21 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.5 — Desktop max-width containers center correctly; ultrawide does not stretch body copy to unreadable line lengths. as completed

marked the checklist item **2\.5 — Desktop max\-width containers center correctly; ultrawide does not stretch body copy to unreadable line lengths\.** as completed
nullvector_ux commented 2026-05-13 02:20:51 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.6 — Images and illustrations scale without awkward cropping; SVGs/icons stay sharp on retina. as completed

marked the checklist item **2\.6 — Images and illustrations scale without awkward cropping; SVGs/icons stay sharp on retina\.** as completed
nullvector_ux commented 2026-05-13 02:28:13 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.8 — Long addresses, numeric values, and monospace strings wrap or truncate per design — no overflow pushing layout sideways. as completed

marked the checklist item **2\.8 — Long addresses, numeric values, and monospace strings wrap or truncate per design — no overflow pushing layout sideways\.** as completed
nullvector_ux commented 2026-05-13 02:28:24 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.9 — Sticky or fixed regions header, audio dock, bottom bars do not obscure leaderboard or register CTA when scrolling. as completed

marked the checklist item **2\.9 — Sticky or fixed regions \(header, audio dock, bottom bars\) do not obscure leaderboard or register CTA when scrolling\.** as completed
nullvector_ux commented 2026-05-13 02:29:21 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.10 — Orientation change reflows without requiring reload; no stuck half-width columns. as completed

marked the checklist item **2\.10 — Orientation change reflows without requiring reload; no stuck half\-width columns\.** as completed
nullvector_ux commented 2026-05-13 02:29:24 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.11 — Browser zoom to ~200%: content remains usable for core tasks read earnings, copy share link, see own leaderboard row without mandatory horizontal panning. as completed

marked the checklist item **2\.11 — Browser zoom to ~200%: content remains usable for core tasks \(read earnings, copy share link, see own leaderboard row\) without mandatory horizontal panning\.** as completed
nullvector_ux commented 2026-05-13 02:33:28 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.1 — Page titles are clearly dominant; supporting subcopy is visibly secondary (size, weight, color contrast). as completed

marked the checklist item **3\.1 — Page titles are clearly dominant; supporting subcopy is visibly secondary \(size, weight, color contrast\)\.** as completed
nullvector_ux commented 2026-05-13 02:33:33 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.2 — Section headings follow a predictable level order h1 → h2 → h3; no skipped levels. as completed

marked the checklist item **3\.2 — Section headings follow a predictable level order \(h1 → h2 → h3\); no skipped levels\.** as completed
nullvector_ux commented 2026-05-13 02:35:00 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.3 — Body text line-height and paragraph spacing support comfortable reading; no wall-of-text without breaks. as completed

marked the checklist item **3\.3 — Body text line\-height and paragraph spacing support comfortable reading; no wall\-of\-text without breaks\.** as completed
nullvector_ux commented 2026-05-13 02:35:05 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.4 — Accent color use draws attention to primary actions and key metrics e\.g\. earnings total, register CTA, not decorative noise. as completed

marked the checklist item **3\.4 — Accent color use draws attention to primary actions and key metrics \(e\.g\. earnings total, register CTA\), not decorative noise\.** as completed
nullvector_ux commented 2026-05-13 02:35:15 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.5 — Muted / secondary text remains legible against backgrounds (WCAG contrast sanity — especially grey-on-grey in leaderboard secondary columns). as completed

marked the checklist item **3\.5 — Muted / secondary text remains legible against backgrounds \(WCAG contrast sanity — especially grey\-on\-grey in leaderboard secondary columns\)\.** as completed
nullvector_ux commented 2026-05-13 02:35:26 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.6 — Numerals earnings, leaderboard ranks, countdowns use tabular or stable widths to avoid digit-flicker jitter. as completed

marked the checklist item **3\.6 — Numerals \(earnings, leaderboard ranks, countdowns\) use tabular or stable widths to avoid digit\-flicker jitter\.** as completed
nullvector_ux commented 2026-05-13 02:35:39 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.7 — Icons paired with text labels where meaning is non-obvious; standalone icons have accessible names. as completed

marked the checklist item **3\.7 — Icons paired with text labels where meaning is non\-obvious; standalone icons have accessible names\.** as completed
nullvector_ux commented 2026-05-13 02:36:52 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.8 — Lists, tables, and definition blocks align consistently; bullets and numbers do not collide with text wraps. as completed

marked the checklist item **3\.8 — Lists, tables, and definition blocks align consistently; bullets and numbers do not collide with text wraps\.** as completed
nullvector_ux commented 2026-05-13 02:37:11 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.9 — Hover, default, and active states are distinguishable on desktop without relying on color alone. as completed

marked the checklist item **3\.9 — Hover, default, and active states are distinguishable on desktop without relying on color alone\.** as completed
nullvector_ux commented 2026-05-13 02:37:17 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.10 — Disabled controls look disabled but remain discoverable; placeholders do not mimic filled values. as completed

marked the checklist item **3\.10 — Disabled controls look disabled but remain discoverable; placeholders do not mimic filled values\.** as completed
nullvector_ux commented 2026-05-13 02:37:25 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.11 — Error, warning, success, and info banners share a coherent visual language color \+ icon \+ placement across pages. as completed

marked the checklist item **3\.11 — Error, warning, success, and info banners share a coherent visual language \(color \+ icon \+ placement\) across pages\.** as completed
nullvector_ux commented 2026-05-13 02:37:43 +00:00 (Migrated from gitlab.com)

marked the checklist item 3.12 — Light/dark theme if applicable keeps hierarchy equivalent in both modes — no invisible borders or vanished dividers. as completed

marked the checklist item **3\.12 — Light/dark theme \(if applicable\) keeps hierarchy equivalent in both modes — no invisible borders or vanished dividers\.** as completed
nullvector_ux commented 2026-05-13 02:48:15 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.1 — Global nav links resolve correctly; active route is visually indicated; /referrals reachable from primary nav without hidden hops. as completed

marked the checklist item **4\.1 — Global nav links resolve correctly; active route is visually indicated; /referrals reachable from primary nav without hidden hops\.** as completed
nullvector_ux commented 2026-05-13 02:51:10 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.3 — Logo / wordmark tap target adequate; home navigation works from nested routes. as completed

marked the checklist item **4\.3 — Logo / wordmark tap target adequate; home navigation works from nested routes\.** as completed
nullvector_ux commented 2026-05-13 02:52:04 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.4 — Footer links docs, social, legal align with design; footer does not collide with fixed bottom UI on small screens. as completed

marked the checklist item **4\.4 — Footer links \(docs, social, legal\) align with design; footer does not collide with fixed bottom UI on small screens\.** as completed
nullvector_ux commented 2026-05-13 02:52:57 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.5 — Wallet connect entry points are visible and consistent across pages; disconnected vs connected vs wrong-network states are visually distinct from the global header. as completed

marked the checklist item **4\.5 — Wallet connect entry points are visible and consistent across pages; disconnected vs connected vs wrong\-network states are visually distinct from the global header\.** as completed
nullvector_ux commented 2026-05-13 02:53:19 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.6 — Modal / drawer stacking: one primary overlay z-order, backdrop dims content, ESC / outside click behave per product expectation. as completed

marked the checklist item **4\.6 — Modal / drawer stacking: one primary overlay z\-order, backdrop dims content, ESC / outside click behave per product expectation\.** as completed
nullvector_ux commented 2026-05-13 02:53:22 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.7 — Dropdowns and popovers stay within viewport flip upward when needed; do not clip inside overflow:hidden parents. as completed

marked the checklist item **4\.7 — Dropdowns and popovers stay within viewport \(flip upward when needed\); do not clip inside overflow:hidden parents\.** as completed
nullvector_ux commented 2026-05-13 02:53:56 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.8 — Toast / snack notifications do not cover critical CTAs without dismissal; copy-to-clipboard toast on /referrals shares this affordance pattern. as completed

marked the checklist item **4\.8 — Toast / snack notifications do not cover critical CTAs without dismissal; copy\-to\-clipboard toast on /referrals shares this affordance pattern\.** as completed
nullvector_ux commented 2026-05-13 02:54:01 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.9 — Audio / media dock does not overlap nav, primary CTAs, or leaderboard table on narrow breakpoints; play/pause affordance obvious. as completed

marked the checklist item **4\.9 — Audio / media dock does not overlap nav, primary CTAs, or leaderboard table on narrow breakpoints; play/pause affordance obvious\.** as completed
nullvector_ux commented 2026-05-13 02:56:14 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.11 — Skip-to-content or landmark regions make sense for keyboard users landing on long pages (referrals, timecurve arena). as completed

marked the checklist item **4\.11 — Skip\-to\-content or landmark regions make sense for keyboard users landing on long pages \(referrals, timecurve arena\)\.** as completed
nullvector_ux commented 2026-05-13 02:56:28 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.12 — Deep links share URLs, referral URLs with codes land with nav context intact — user understands where they are and what they're being invited to. as completed

marked the checklist item **4\.12 — Deep links \(share URLs, referral URLs with codes\) land with nav context intact — user understands where they are and what they're being invited to\.** as completed
nullvector_ux commented 2026-05-13 02:57:35 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.1 — / home: localnet shows marketing hero with "Open TimeCurve" CTA, DOUB coin badge, full leprechaun/bunny/rainbow illustration. Hero renders without layout shift; CTAs reachable; gate state chooses the correct landing surface. as completed

marked the checklist item **5\.1 — / \(home\): localnet shows marketing hero with \"Open TimeCurve\" CTA, DOUB coin badge, full leprechaun/bunny/rainbow illustration\. Hero renders without layout shift; CTAs reachable; gate state chooses the correct landing surface\.** as completed
nullvector_ux commented 2026-05-13 03:01:42 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.3 — /timecurve: simple landing renders; CTA into Arena/Protocol is visible; loading vs empty vs error states distinct. as completed

marked the checklist item **5\.3 — /timecurve: simple landing renders; CTA into Arena/Protocol is visible; loading vs empty vs error states distinct\.** as completed
nullvector_ux commented 2026-05-13 03:01:44 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.4 — /timecurve/arena: Arena view, WarBow hero actions, countdown SFX trigger, and chasing pack leaderboard render against live swarm activity; CTAs Buy CHARM, steal, refresh show correct disabled reasons when wallet disconnected vs wrong-network vs backend unavailable. as completed

marked the checklist item **5\.4 — /timecurve/arena: Arena view, WarBow hero actions, countdown SFX trigger, and chasing pack leaderboard render against live swarm activity; CTAs \(Buy CHARM, steal, refresh\) show correct disabled reasons when wallet disconnected vs wrong\-network vs backend unavailable\.** as completed
nullvector_ux commented 2026-05-13 03:01:47 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.5 — /timecurve/protocol: protocol surface renders; buy hub numeric precision matches design carry from \#191; USD staleness affordance present (carry from #192). as completed

marked the checklist item **5\.5 — /timecurve/protocol: protocol surface renders; buy hub numeric precision matches design \(carry from \#191\); USD staleness affordance present \(carry from \#192\)\.** as completed
nullvector_ux commented 2026-05-13 03:02:22 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.6 — /timecurve/:segment branch routes: unknown segments degrade to a branded under-construction or 404, not a raw error dump. as completed

marked the checklist item **5\.6 — /timecurve/:segment \(branch routes\): unknown segments degrade to a branded under\-construction or 404, not a raw error dump\.** as completed
nullvector_ux commented 2026-05-13 03:02:30 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.7 — /rabbit-treasury: renders; treasury figures show explicit "no data" vs zero vs loading. as completed

marked the checklist item **5\.7 — /rabbit\-treasury: renders; treasury figures show explicit \"no data\" vs zero vs loading\.** as completed
nullvector_ux commented 2026-05-13 03:02:36 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.8 — /collection: renders; image grid loads without layout shift; broken-image placeholders branded. as completed

marked the checklist item **5\.8 — /collection: renders; image grid loads without layout shift; broken\-image placeholders branded\.** as completed
nullvector_ux commented 2026-05-13 03:02:39 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.9 — /kumbaya: renders or gates as designed; if gated, copy explains the gate. as completed

marked the checklist item **5\.9 — /kumbaya: renders or gates as designed; if gated, copy explains the gate\.** as completed
nullvector_ux commented 2026-05-13 03:02:42 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.10 — /sir: renders or gates as designed; same gate-copy expectation. as completed

marked the checklist item **5\.10 — /sir: renders or gates as designed; same gate\-copy expectation\.** as completed
nullvector_ux commented 2026-05-13 03:03:03 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.11 — /vesting: hidden-from-nav behavior matches expectation when accessed via direct URL; no broken shell. as completed

marked the checklist item **5\.11 — /vesting: hidden\-from\-nav behavior matches expectation when accessed via direct URL; no broken shell\.** as completed
nullvector_ux commented 2026-05-13 03:13:44 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.13 — Indexer / connectivity banners: readable placement, non-alarming palette, actionable retry where applicable. Test by killing indexer PID temporarily on localnet. as completed

marked the checklist item **5\.13 — Indexer / connectivity banners: readable placement, non\-alarming palette, actionable retry where applicable\. Test by killing indexer PID temporarily on localnet\.** as completed
nullvector_ux commented 2026-05-13 03:13:57 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.14 — Explorer links: localnet uses local-anvil block explorer if any or shows clear "no explorer wired" affordance; truncated addresses remain decipherable on mobile. as completed

marked the checklist item **5\.14 — Explorer links: localnet uses local\-anvil block explorer \(if any\) or shows clear \"no explorer wired\" affordance; truncated addresses remain decipherable on mobile\.** as completed
nullvector_ux commented 2026-05-13 03:17:27 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.16 — Favicon, title tags, and social preview meta behave sanely on key routes. as completed

marked the checklist item **5\.16 — Favicon, title tags, and social preview meta behave sanely on key routes\.** as completed
nullvector_ux commented 2026-05-13 04:34:47 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.1 — prefers-reduced-motion: critical UI remains usable with reduced animation; no information conveyed only via motion (Arena countdown SFX, leaderboard refresh animation). as completed

marked the checklist item **6\.1 — prefers\-reduced\-motion: critical UI remains usable with reduced animation; no information conveyed only via motion \(Arena countdown SFX, leaderboard refresh animation\)\.** as completed
nullvector_ux commented 2026-05-13 04:34:49 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.2 — Keyboard Tab order follows visual order; :focus-visible rings visible on interactive elements including the referrals copy-share button. as completed

marked the checklist item **6\.2 — Keyboard Tab order follows visual order; :focus\-visible rings visible on interactive elements including the referrals copy\-share button\.** as completed
nullvector_ux commented 2026-05-13 04:35:00 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.3 — Focus not trapped in unintentional loops; modals trap focus only while open and restore on close. as completed

marked the checklist item **6\.3 — Focus not trapped in unintentional loops; modals trap focus only while open and restore on close\.** as completed
nullvector_ux commented 2026-05-13 04:35:05 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.4 — Color is not the sole indicator for errors/links/active states (icons, text, or patterns reinforce meaning). as completed

marked the checklist item **6\.4 — Color is not the sole indicator for errors/links/active states \(icons, text, or patterns reinforce meaning\)\.** as completed
nullvector_ux commented 2026-05-13 04:35:48 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.5 — Form inputs referral register, any address inputs expose labels and validation messages programmatically associated with the fields. as completed

marked the checklist item **6\.5 — Form inputs \(referral register, any address inputs\) expose labels and validation messages programmatically associated with the fields\.** as completed
nullvector_ux commented 2026-05-13 04:35:54 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.6 — Auto-playing media respects mute/unmute expectations and mobile autoplay policies; no surprise loud audio. as completed

marked the checklist item **6\.6 — Auto\-playing media respects mute/unmute expectations and mobile autoplay policies; no surprise loud audio\.** as completed
nullvector_ux commented 2026-05-13 04:36:13 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.7 — Initial paint: no severe layout shift CLS on hero/fonts/images; note LCP offenders. as completed

marked the checklist item **6\.7 — Initial paint: no severe layout shift \(CLS\) on hero/fonts/images; note LCP offenders\.** as completed
nullvector_ux commented 2026-05-13 04:36:46 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.8 — Repeated navigations home → referrals → arena → home do not leak memory visibly fan spin / tab freeze — light subjective pass. as completed

marked the checklist item **6\.8 — Repeated navigations \(home → referrals → arena → home\) do not leak memory visibly \(fan spin / tab freeze\) — light subjective pass\.** as completed
nullvector_ux commented 2026-05-13 04:37:56 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.10 — Firefox: wallet modal, referrals leaderboard scroll/sort, and custom scroll areas behave same as Chromium for core flows. as completed

marked the checklist item **6\.10 — Firefox: wallet modal, referrals leaderboard scroll/sort, and custom scroll areas behave same as Chromium for core flows\.** as completed
nullvector_ux commented 2026-05-13 04:39:30 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.11 — Private / strict mode: site loads without hard dependency on third-party cookies where avoidable. as completed

marked the checklist item **6\.11 — Private / strict mode: site loads without hard dependency on third\-party cookies where avoidable\.** as completed
nullvector_ux commented 2026-05-13 04:39:54 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.12 — Console on cold load + after connect-wallet + after referral-register attempt: capture severity-sorted errors/warnings; file as GitLab issues with screenshots + route + viewport. as completed

marked the checklist item **6\.12 — Console on cold load \+ after connect\-wallet \+ after referral\-register attempt: capture severity\-sorted errors/warnings; file as GitLab issues with screenshots \+ route \+ viewport\.** as completed
nullvector_ux commented 2026-05-13 04:40:27 +00:00 (Migrated from gitlab.com)

@PlasticDigits

Checklist Item: 1.10
Section: Referral / Earnings
Status: Not Available / Blocked
Device/Viewport: Desktop
Wallet State: Connected
Steps: Checked the Register Code, Stake at Launch, and Settlement View sections after registering a valid code.
Expected Result: A referral/earnings empty state should show “No earnings yet” when there are no earnings.
Actual Result: The exact “No earnings yet” message was not found. Other sections showed zero or dash values, but they appear to be stake/claim/redemption states, not referral earnings.
Evidence:

image.png{width="900" height="472"}

image.png{width="900" height="287"}


Notes: Need to confirm the correct route or section for referral earnings.

Checklist Item: 1.14
Steps: Tried to confirm the item on a phone/mobile viewport.
Expected Result: The item should be checked on an actual phone or mobile environment.
Actual Result: Could not confirm because the localized project is not available on the phone.
Evidence: No mobile test evidence available.
Notes: Needs mobile access to the local project or a deployed/staging link before this can be confirmed.

2.2 — 2.4, 2.12, 4.2, 4.10 (skip, because I cant test it with phone, ios, and tablet that hava a notch)

6.9 SKIP Because I don't have apple dev.

@PlasticDigits **Checklist Item:** 1.10\ **Section:** Referral / Earnings\ **Status:** Not Available / Blocked\ **Device/Viewport:** Desktop\ **Wallet State:** Connected\ **Steps:** Checked the Register Code, Stake at Launch, and Settlement View sections after registering a valid code.\ **Expected Result:** A referral/earnings empty state should show “No earnings yet” when there are no earnings.\ **Actual Result:** The exact “No earnings yet” message was not found. Other sections showed zero or dash values, but they appear to be stake/claim/redemption states, not referral earnings.\ **Evidence:** ![image.png](/uploads/b6b2069b9c15d247c381fefa0157191a/image.png){width="900" height="472"} ![image.png](/uploads/8cda17c859c26096c2ae878e3139d5be/image.png){width="900" height="287"} \ **Notes:** Need to confirm the correct route or section for referral earnings. **Checklist Item:** 1.14\ **Steps:** Tried to confirm the item on a phone/mobile viewport.\ **Expected Result:** The item should be checked on an actual phone or mobile environment.\ **Actual Result:** Could not confirm because the localized project is not available on the phone.\ **Evidence:** No mobile test evidence available.\ **Notes:** Needs mobile access to the local project or a deployed/staging link before this can be confirmed. **2.2** — 2.4, 2.12, 4.2, 4.10 (skip, because I cant test it with phone, ios, and tablet that hava a notch) 6.9 SKIP Because I don't have apple dev.
PlasticDigits commented 2026-05-13 05:09:49 +00:00 (Migrated from gitlab.com)

For phone testing - you can connect to the port on your local network using a phone, but at minimum if you open the browser console, there is a button you can click to view "mobile viewport" that will let you set the dapp to a mobile size for layout checks. @nullvector_ux

For phone testing - you can connect to the port on your local network using a phone, but at minimum if you open the browser console, there is a button you can click to view "mobile viewport" that will let you set the dapp to a mobile size for layout checks. @nullvector_ux
nullvector_ux commented 2026-05-13 05:17:36 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.2 — Main content stays within safe areas notch, home indicator, Dynamic Island; no critical CTAs clipped by OS chrome. as completed

marked the checklist item **2\.2 — Main content stays within safe areas \(notch, home indicator, Dynamic Island\); no critical CTAs clipped by OS chrome\.** as completed
nullvector_ux commented 2026-05-13 05:21:40 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.3 — Touch targets on phone feel ≥ ~44×44 px equivalent; no overlapping hit boxes on stacked controls (especially register CTA + share affordance on /referrals). as completed

marked the checklist item **2\.3 — Touch targets on phone feel ≥ ~44×44 px equivalent; no overlapping hit boxes on stacked controls \(especially register CTA \+ share affordance on /referrals\)\.** as completed
nullvector_ux commented 2026-05-13 05:30:17 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.4 — Tablet layout uses width sensibly; split columns reflow without orphaned headings or stranded CTAs. as completed

marked the checklist item **2\.4 — Tablet layout uses width sensibly; split columns reflow without orphaned headings or stranded CTAs\.** as completed
nullvector_ux commented 2026-05-13 05:43:15 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.4 — Tablet layout uses width sensibly; split columns reflow without orphaned headings or stranded CTAs. as incomplete

marked the checklist item **2\.4 — Tablet layout uses width sensibly; split columns reflow without orphaned headings or stranded CTAs\.** as incomplete
nullvector_ux commented 2026-05-13 05:43:32 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.2 — Main content stays within safe areas notch, home indicator, Dynamic Island; no critical CTAs clipped by OS chrome. as incomplete

marked the checklist item **2\.2 — Main content stays within safe areas \(notch, home indicator, Dynamic Island\); no critical CTAs clipped by OS chrome\.** as incomplete
nullvector_ux commented 2026-05-13 05:47:17 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.2 — Mobile nav hamburger / drawer / tabs opens and closes reliably; focus returns sensibly on close. as completed

marked the checklist item **4\.2 — Mobile nav \(hamburger / drawer / tabs\) opens and closes reliably; focus returns sensibly on close\.** as completed
nullvector_ux commented 2026-05-13 05:47:25 +00:00 (Migrated from gitlab.com)

marked the checklist item 4.10 — Scroll locking when overlays open works on iOS (no background scroll bleed-through). as completed

marked the checklist item **4\.10 — Scroll locking when overlays open works on iOS \(no background scroll bleed\-through\)\.** as completed
nullvector_ux commented 2026-05-13 05:48:59 +00:00 (Migrated from gitlab.com)

marked the checklist item 6.9 — Safari macOS \+ iOS: -webkit quirks absent for core flex/grid no clipped rounded corners, sticky jitter; referrals copy-to-clipboard works on iOS Safari. as completed

marked the checklist item **6\.9 — Safari \(macOS \+ iOS\): \-webkit quirks absent for core flex/grid \(no clipped rounded corners, sticky jitter\); referrals copy\-to\-clipboard works on iOS Safari\.** as completed
Brouie commented 2026-05-15 04:03:18 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.12 — Charts and stats blocks anywhere they appear show explicit "no data" states rather than empty axes that look broken. as completed

marked the checklist item **5\.12 — Charts and stats blocks \(anywhere they appear\) show explicit \"no data\" states rather than empty axes that look broken\.** as completed
Brouie commented 2026-05-15 04:03:27 +00:00 (Migrated from gitlab.com)

marked the checklist item 5.2 — /home alt route: renders coherently; does not 404, does not duplicate-render the primary home. as completed

marked the checklist item **5\.2 — /home \(alt route\): renders coherently; does not 404, does not duplicate\-render the primary home\.** as completed
Brouie commented 2026-05-15 04:05:32 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.10 — Earnings zero-state: shows "no earnings yet" copy on a wallet that has no referral activity, not a blank panel or "—" without explanation. as completed

marked the checklist item **1\.10 — Earnings zero\-state: shows \"no earnings yet\" copy on a wallet that has no referral activity, not a blank panel or \"—\" without explanation\.** as completed
Brouie commented 2026-05-15 04:07:40 +00:00 (Migrated from gitlab.com)

marked the checklist item 1.14 — Leaderboard on mobile: table either reflows to stacked cards or scrolls horizontally with a clear affordance — does not silently clip columns. as completed

marked the checklist item **1\.14 — Leaderboard on mobile: table either reflows to stacked cards or scrolls horizontally with a clear affordance — does not silently clip columns\.** as completed
Brouie commented 2026-05-15 04:07:57 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.2 — Main content stays within safe areas notch, home indicator, Dynamic Island; no critical CTAs clipped by OS chrome. as completed

marked the checklist item **2\.2 — Main content stays within safe areas \(notch, home indicator, Dynamic Island\); no critical CTAs clipped by OS chrome\.** as completed
Brouie commented 2026-05-15 04:08:01 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.7 — Cards, panels, and grids hold consistent gutters and alignment across breakpoints (referrals leaderboard rows + earnings cards + register card line up to a clear grid). as completed

marked the checklist item **2\.7 — Cards, panels, and grids hold consistent gutters and alignment across breakpoints \(referrals leaderboard rows \+ earnings cards \+ register card line up to a clear grid\)\.** as completed
Brouie commented 2026-05-15 04:12:37 +00:00 (Migrated from gitlab.com)

marked the checklist item 2.4 — Tablet layout uses width sensibly; split columns reflow without orphaned headings or stranded CTAs. as completed

marked the checklist item **2\.4 — Tablet layout uses width sensibly; split columns reflow without orphaned headings or stranded CTAs\.** as completed
Brouie commented 2026-05-15 04:18:12 +00:00 (Migrated from gitlab.com)

Did another pass on items that were still unchecked plus the ones nullvector marked SKIP/blocked for lack of mobile/tablet access. Walked from the laptop frontend pointed at the local-anvil stack, Chrome DevTools mobile emulation per Plastic's earlier guidance.

Items moved to PASS

5.2 — /home alt route renders coherently, doesn't 404 or duplicate-render the primary home. Loads, has the expected landing content, distinct from the marketing hero on /.

5.12 — Charts/stats blocks show explicit no-data states across /timecurve (Simple shows "Loading sale state...", "COMING SOON" with explainer copy, podium cards labeled "PRIZE NOT PROJECTED YET" with wallet sublines), /timecurve/arena (LOADING badge, "Pre-start" framing, "STARTS IN — "), /rabbit-treasury ("IN QUEUE" + "What exists now / Launch Track" framing). No bare empty axes anywhere.

1.10 — /referrals earnings zero-state on the connected wallet (0xc46b15f4...a80650, no referral activity): "Your Guide Status" shows "Not registered — use Register a code below to burn CL8Y and claim a code on-chain." "Your Referral CHARM" shows "No referral CHARM yet. Totals stay at zero until qualifying referral purchases show up here for this wallet." plus closing "No referral activity recorded for this wallet yet — buys with your code (or a code you used) appear here shortly after they settle onchain." Multiple explicit zero-state copy patterns with recovery affordance, no bare zeros or dashes.

1.14 — Guide leaderboard on mobile (iPhone 14 Pro Max emulation, 430x932). The leaderboard is NOT rendered as a table at mobile width — it reflows to stacked cards. Each guide gets a card with rank badge, wallet chip, "onchain code registered" + "recorded buys" sublines, CHARM total. No clipping, no horizontal scroll, no silent column loss.

2.2 — Main content stays within safe areas on iPhone 14 Pro Max emulation across /referrals top section (YIELDOMEGA header, tab nav, chain badge, wallet pill), middle section (Your Referral CHARM zero-state card), and bottom section (Guide Leaderboard cards). No critical CTAs clipped, no content under-OS-chrome.

2.7 — Cards and panels hold consistent gutters across mobile + tablet + desktop on /referrals. Side-by-side cards reflow to stacked cards cleanly. Spacing between sections preserved.

4.2 (already ticked, reconfirmed during walk) — Mobile nav at iPhone 14 Pro Max width: instead of a hamburger drawer, navigation uses stacked tabs — YIELDOMEGA brand, then TimeCurve/Referrals pill tabs, then chain badge, then wallet pill. Stack-don't-hamburger is a valid pattern, tabs are tappable and the active route highlights. No hidden interactions.

2.4 — Tablet layout (iPad Mini emulation, 768x1024) on /referrals. Split columns work — "Your Guide Status" and "Your Referral CHARM" render side by side at tablet width. CTAs sit inside their parent cards (Register & burn CL8Y stays in the form card). No orphaned headings. Two minor cosmetic notes that aren't strict failures: (a) the 3-card intro row (Claim Your Sigil / Send A Trail / Grow Charm) reflows as 2 + 1 (two cards in row 1, Grow Charm alone in row 2), which is uneven; (b) when Your Guide Status content is shorter than Your Referral CHARM, the left column has dead whitespace below its card. Neither is a stranded heading or stranded CTA, but worth flagging as polish items for a future tablet pass.

Item marked FAIL

5.15 — 404 / global error pages match brand and offer recovery paths.

Navigating to localhost:5180/this-route-does-not-exist renders a blank brand-colored canvas (green grid background, no page chrome). DevTools console shows:

[2] No routes matched location "/this-route-does-not-exist"  (react-router-dom.js)

React Router falls through with no matching route, and there is no catchall * route configured to render a 404 component. Result:

  • No "404" or "Page not found" copy
  • No recovery affordance (no link back to home, no support pointer)
  • No page chrome (no header, no nav) — user is stranded
  • Background tint matches the brand grid, so partial brand recognition but nothing else

Not a launch-blocker (users rarely land on invalid URLs), but worth a small fix before or shortly after launch: add a catchall route in the router config that renders a branded 404 component with at least a link home.

Items skipped with reason

2.12 — Mobile keyboard open over referral-register input. DevTools mobile emulator doesn't surface a real OS touch keyboard, so we cannot reliably observe whether the submit CTA gets hidden or whether focus is trapped off-screen. Needs a real phone or browser-emulator with software-keyboard simulation. Same blocker nullvector flagged earlier.

4.10 — Scroll locking when overlays open on iOS. iOS-specific behavior, no Apple device to validate.

6.9 — Safari macOS + iOS -webkit quirks. No Apple device available.

Coverage summary

Starting state was 75/84 ticked. Adding 7 fresh PASS items (plus 1 reconfirmation of 4.2) brings the total to 82/84 ticked with 1 explicit FAIL flagged inline (5.15). The 3 unwalkable items (2.12, 4.10, 6.9) need real Apple/touch hardware to validate honestly and stay unticked.

@PlasticDigits — flagging 5.15 for triage.

Did another pass on items that were still unchecked plus the ones nullvector marked SKIP/blocked for lack of mobile/tablet access. Walked from the laptop frontend pointed at the local-anvil stack, Chrome DevTools mobile emulation per Plastic's earlier guidance. ## Items moved to PASS **5.2** — `/home` alt route renders coherently, doesn't 404 or duplicate-render the primary home. Loads, has the expected landing content, distinct from the marketing hero on `/`. **5.12** — Charts/stats blocks show explicit no-data states across `/timecurve` (Simple shows "Loading sale state...", "COMING SOON" with explainer copy, podium cards labeled "PRIZE NOT PROJECTED YET" with wallet sublines), `/timecurve/arena` (LOADING badge, "Pre-start" framing, "STARTS IN — "), `/rabbit-treasury` ("IN QUEUE" + "What exists now / Launch Track" framing). No bare empty axes anywhere. **1.10** — `/referrals` earnings zero-state on the connected wallet (`0xc46b15f4...a80650`, no referral activity): "Your Guide Status" shows "Not registered — use Register a code below to burn CL8Y and claim a code on-chain." "Your Referral CHARM" shows "No referral CHARM yet. Totals stay at zero until qualifying referral purchases show up here for this wallet." plus closing "No referral activity recorded for this wallet yet — buys with your code (or a code you used) appear here shortly after they settle onchain." Multiple explicit zero-state copy patterns with recovery affordance, no bare zeros or dashes. **1.14** — Guide leaderboard on mobile (iPhone 14 Pro Max emulation, 430x932). The leaderboard is NOT rendered as a table at mobile width — it reflows to stacked cards. Each guide gets a card with rank badge, wallet chip, "onchain code registered" + "recorded buys" sublines, CHARM total. No clipping, no horizontal scroll, no silent column loss. **2.2** — Main content stays within safe areas on iPhone 14 Pro Max emulation across `/referrals` top section (YIELDOMEGA header, tab nav, chain badge, wallet pill), middle section (Your Referral CHARM zero-state card), and bottom section (Guide Leaderboard cards). No critical CTAs clipped, no content under-OS-chrome. **2.7** — Cards and panels hold consistent gutters across mobile + tablet + desktop on `/referrals`. Side-by-side cards reflow to stacked cards cleanly. Spacing between sections preserved. **4.2** (already ticked, reconfirmed during walk) — Mobile nav at iPhone 14 Pro Max width: instead of a hamburger drawer, navigation uses stacked tabs — YIELDOMEGA brand, then TimeCurve/Referrals pill tabs, then chain badge, then wallet pill. Stack-don't-hamburger is a valid pattern, tabs are tappable and the active route highlights. No hidden interactions. **2.4** — Tablet layout (iPad Mini emulation, 768x1024) on `/referrals`. Split columns work — "Your Guide Status" and "Your Referral CHARM" render side by side at tablet width. CTAs sit inside their parent cards (Register & burn CL8Y stays in the form card). No orphaned headings. Two minor cosmetic notes that aren't strict failures: (a) the 3-card intro row (Claim Your Sigil / Send A Trail / Grow Charm) reflows as 2 + 1 (two cards in row 1, Grow Charm alone in row 2), which is uneven; (b) when Your Guide Status content is shorter than Your Referral CHARM, the left column has dead whitespace below its card. Neither is a stranded heading or stranded CTA, but worth flagging as polish items for a future tablet pass. ## Item marked FAIL **5.15** — 404 / global error pages match brand and offer recovery paths. Navigating to `localhost:5180/this-route-does-not-exist` renders a blank brand-colored canvas (green grid background, no page chrome). DevTools console shows: ``` [2] No routes matched location "/this-route-does-not-exist" (react-router-dom.js) ``` React Router falls through with no matching route, and there is no catchall `*` route configured to render a 404 component. Result: - No "404" or "Page not found" copy - No recovery affordance (no link back to home, no support pointer) - No page chrome (no header, no nav) — user is stranded - Background tint matches the brand grid, so partial brand recognition but nothing else Not a launch-blocker (users rarely land on invalid URLs), but worth a small fix before or shortly after launch: add a catchall route in the router config that renders a branded 404 component with at least a link home. ## Items skipped with reason **2.12** — Mobile keyboard open over referral-register input. DevTools mobile emulator doesn't surface a real OS touch keyboard, so we cannot reliably observe whether the submit CTA gets hidden or whether focus is trapped off-screen. Needs a real phone or browser-emulator with software-keyboard simulation. Same blocker nullvector flagged earlier. **4.10** — Scroll locking when overlays open on iOS. iOS-specific behavior, no Apple device to validate. **6.9** — Safari macOS + iOS `-webkit` quirks. No Apple device available. ## Coverage summary Starting state was 75/84 ticked. Adding 7 fresh PASS items (plus 1 reconfirmation of 4.2) brings the total to 82/84 ticked with 1 explicit FAIL flagged inline (5.15). The 3 unwalkable items (2.12, 4.10, 6.9) need real Apple/touch hardware to validate honestly and stay unticked. @PlasticDigits — flagging 5.15 for triage.
PlasticDigits commented 2026-05-15 06:13:36 +00:00 (Migrated from gitlab.com)

Marking 5.15 as low priority

Marking 5.15 as low priority
nullvector_ux commented 2026-05-15 10:24:09 +00:00 (Migrated from gitlab.com)

2.12 Passed — Mobile keyboard open over referral-register input does not permanently hide the submit CTA or trap focus off-screen.image.png{width=277 height=600}

**2.12 Passed** — Mobile keyboard open over referral-register input does not permanently hide the submit CTA or trap focus off-screen.![image.png](/uploads/ec21d5ca7fd19e6149c32094679ef0f8/image.png){width=277 height=600}
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-05-21 12:05:12 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
code/yieldomega#197
No description provided.