Skip to content

Minor bug fixes#168

Draft
sacha-l wants to merge 5 commits into
developfrom
fix/minor-bug-fixes
Draft

Minor bug fixes#168
sacha-l wants to merge 5 commits into
developfrom
fix/minor-bug-fixes

Conversation

@sacha-l
Copy link
Copy Markdown
Collaborator

@sacha-l sacha-l commented May 23, 2026

Rolling draft for small bug fixes.

Fixes

  • Audio mute on mobile — the mute toggle relied on widget.setVolume(0), which is a no-op on mobile (iOS controls volume in hardware), so tapping mute kept playing at full volume. Mute now pauses / unmute plays (setVolume(100) still applied on desktop). Needs a real-device check.

  • Stable React keys on editable team + M2-agreement lists — the add/remove lists in TeamPaymentSection (editable members), UpdateTeamModal, and M2AgreementModal (core features / documentation / nice-to-have) keyed their controlled inputs by array index, so deleting a middle row reused the wrong DOM node and shifted focus/values onto a sibling row. Each row now carries a stable client-generated id (kept length-synced with its data) and is keyed by it.

  • TeamPaymentSection duplicate-key warning — the read-only member card keyed by member.walletAddress || index. Wallet addresses are not unique across a team's members (mock data redacts several to one string), so keying by address alone collided and tripped React's "two children with the same key" warning. The key now folds in the index.

  • Two debug console.log -> logger (server)project.controller.js used raw console.log for the updateProject payload preview and the M2-agreement confirmation; both now route through the existing logger util (info / success) like the rest of the controller.

  • Landing page shows programs only — removed the "Now Showing" featured unit and the whole project search/filter/grid from the landing page (HomePage.tsx). It now shows the hero, live stats, and the program cards, with the section heading reworded to "Explore past programs".

  • Project search view moved onto program pages — the landing search view (search box, WINNERS/ALL toggle, category-filter sheet, grid + detail modal) is extracted into a reusable ProjectExplorer component. Each program's detail page (ProgramDetailPage.tsx) now renders it in place of the old static grid, scoped to that program's entries, so opening a program (e.g. sub0 hack 2025) gives the same browse/search experience.

  • "Ongoing programs" heading — the Programs page open section was labelled ·GRID; renamed to ·ONGOING PROGRAMS (ProgramsPage.tsx).

Out of scope (config, not code)

  • "Domain mismatch" when marking a team as paid — this is a server env issue, not a bug in the diff. The first admin write triggers a SIWS session exchange (POST /api/admin/session) which enforces parsed.domain === EXPECTED_DOMAIN (auth.middleware.js). Fix operationally: set EXPECTED_DOMAIN on Railway to the exact production hostname (or DISABLE_SIWS_DOMAIN_CHECK=true). Already flagged in docs/launch-checklist.md.

Test plan / report

  • cd server && npm test — 293/293 passing
  • cd client && npm run build — clean (tsc + vite)
  • cd client && npm run lint — clean (--max-warnings 0)
  • Desktop: mute toggle flips with no console errors

stadium-tester — preview (mock mode), re-run for the landing/program changes

stadium-git-fix-minor-bug-fixes preview · commit 79ccc0d · window.__STADIUM_MOCK__ = true · 0 console errors · 5 scenarios: 5 pass, 0 fail

# Scenario Result Notes
1 / runs in mock mode PASS __STADIUM_MOCK__ === true
2 / surfaces programs only PASS "Explore past programs" + program cards visible; no search entries… input, no ·DIRECTORY / GRID
3 /programs heading is "Ongoing programs", not "Grid" PASS ·ONGOING PROGRAMS visible; ·GRID count 0
4 First program card opens cleanly PASS first card = M2 Incubator → /m2-program, renders, 0 errors
4b Hackathon program shows the search view PASS /programs/symbiosis-2025: search entries… + WINNERS/ALL + ·PROJECTS render; 73 cards, non-matching query narrows to 0 (search functional)

Caveats:

  • Earlier-batch scenarios for the editable-list focus-retention fix (UpdateTeam / M2 Agreement modals) remain SIWS-gated and were not re-exercised here — they need a VITE_USE_TEST_WALLET=true build. The key-stability fix is covered by the green typecheck + diff.
  • React's duplicate-key warning only fires in dev builds; the preview is a prod build, so a clean console there confirms a clean render but is not a strict regression check.

Owner TODO (needs hardware / harness):

  • Mobile (real device): mute stops sound, unmute starts it
  • (optional) Re-run the editable-list modal scenarios against a VITE_USE_TEST_WALLET=true build to exercise focus retention

Draft -> develop.

The mute toggle relied on widget.setVolume(0), but volume is hardware-controlled
on mobile (notably iOS) where setVolume is a no-op — so tapping mute kept playing
at full volume. Mute now pauses and unmute plays (setVolume(100) on desktop);
play/pause honor the user's tap on every platform.
@vercel
Copy link
Copy Markdown

vercel Bot commented May 23, 2026

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

Project Deployment Actions Updated (UTC)
stadium Ready Ready Preview, Comment Jun 5, 2026 9:40am

sacha-l added 2 commits June 1, 2026 16:25
Editable add/remove lists keyed their controlled inputs by array index, so
deleting a middle row reused the wrong DOM node and shifted focus/values onto
a sibling. Give each row a stable client-generated id (kept length-synced with
the data) and key by it. Also fold the index into TeamPaymentSection's
read-only member key: a wallet address is not unique across members (mock data
redacts several to one string), so keying by address alone collided and tripped
React's duplicate-key warning.
project.controller used raw console.log for the updateProject payload preview
and the M2-agreement confirmation; route them through the existing logger util
(info/success) like the rest of the controller.
sacha-l added 2 commits June 5, 2026 11:00
…am pages

The landing page now shows only the hero, live stats, and program cards
(heading "Explore past programs"); the featured unit and the projects
filter/grid are gone. The search view (search box, WINNERS/ALL toggle,
category filters, grid + detail modal) is extracted into a reusable
ProjectExplorer and rendered on each program's detail page, scoped to
that program's entries.
The Programs page open section was labelled "Grid"; relabel it
"Ongoing programs" to match the page's intent.
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