Skip to content

Add profiles, friends, discovery, creator hub, leagues, kit, wardrobe and admin tabs - #28

Merged
dav3exe merged 120 commits into
startnextgen:mainfrom
Cybertron-HNG:main
Oct 22, 2026
Merged

dav3exe merged 120 commits into
startnextgen:mainfrom
Cybertron-HNG:main

Conversation

@dav3exe

@dav3exe dav3exe commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

What this adds

Brings startng-fe up to date with the Cybertron-HNG fork's main (119 commits). New since the last upstream sync:

Players and progress

  • Player profiles and badges (S1): the player page, /me, names on boards link to it
  • Friends and follows: friends page, invite links, a Follow button other features can use
  • Tournaments with friends: start one, share the link, follow the standings
  • Wardrobe: coin counter, /wardrobe and /shop, the unlock popup, items on the 3D character

Games and discovery

  • Discovery (A1): homepage shelves, Play next, the featuring checklist
  • Spotlight (A2): the /spotlight page, homepage cards, Game of the Week tag
  • Categories, ratings and filters (T1): card chip and stars, Rate it, /games filters
  • Creator hub (T2): creator pages, top creators, each game's numbers in Your games
  • Leagues (M2): the /league page and a profile section
  • Challenge links (B1), share cards (B2), and /creators with its own link preview image
  • Kit (M1): kit.js (back button, badge, end-of-round card, Share on X) and its docs; play-session pings
  • Page slots: features can add to a game's page and the homepage

Admin and owners

  • Admin tabs for score flags, game health, duplicates, needs-fixing, name filter, emails and the newsletter
  • Owner notices in Your games; "Get the tournament by email"
  • Play sends the player's sign-in so their open is remembered

Fixes, CI and security

  • Leaderboard alignment, Hangout wave and collision fixes, contributing styling guide
  • Typecheck and build, CodeQL, dependency review and CodeRabbit in CI; CI runs on stacked PRs
  • Fixed the CodeQL alert in getShare: only known share kinds and well-formed ids are requested

Checks

Typecheck and build, Worker tests, malware-scan, Dependency audit and CodeQL pass. Dependency review fails only because the dependency graph isn't enabled on this repo; a maintainer has been asked to turn it on.

Blackburn0 and others added 30 commits October 20, 2026 22:10
The Hangout's character now waves exactly as on the character page: right arm out, forearm
swinging from the elbow, the hand flicking, a smile with brows up and a small bounce. It used
to raise the other arm straight up.

Benches (as rotated boxes) and tree trunks (as circles) are solid. Your character stops at them
and slides along or around them instead of walking through. In the rare pocket where two
trunks overlap, it stays where it was.
Hangout: wave like the start.ng profile, and stop at benches and trees
…ages, cards, admin tabs and profiles

Groundwork from the PRD so each owner builds in src/features/<feature>/ without editing shared files.

- src/features/registry.ts: registerPage (inside the start.ng shell or full window, with URL params),
  registerCardPart (badges, stats, actions on game cards), registerAdminTab, registerProfileSection.
- Feature flags from GET /features: useFeature / useFeatures, and FeatureGate (a page is a 404 while its
  flag is off). Everything a feature registers is hidden while it's off.
- src/features/index.ts imports each feature with one line; src/features/_template shows every registration.
- GameCard.tsx: the homepage and /games card, pulled out of App.tsx with the slots. Looks the same.
- The admin page's own tabs are now registered tabs, so feature tabs sit among them.
Phase 0 scaffolding: feature folders, flags, and plug-in points for pages, cards, admin tabs and profiles
…oderabbit

ci: typecheck/build, worker tests, audit, dependency review, CodeQL, Dependabot, CodeRabbit
…he first name, top 10 on a game's page in its own card, equal tournament cards
…th, lime buttons, its own card, and a nav that doesn't crowd the logo on big phones
Contributing guide: stick to the styling of the app
Leaderboards: aligned columns, first names, top 10 on game pages
Tournaments with friends: start one, share the link, follow the standings
…or profile section stays in it

call and send are exported from src/api.ts for features' own api.ts files. Each admin tab and profile section
renders inside an error boundary, so one feature's crash shows a message instead of blanking the page.
registerYourGamePart shows a feature's part on each of the owner's games (a note from admins, a category picker,
a checklist), inside an error boundary. Your games explains only start.ng's own hiding reasons; features explain
theirs.
src/features/moderation (flag "moderation", permission moderation.words): try a name, add blocked or allowed
words, remove admins' words, see names already on start.ng that fail the filter, and the built-in lists
(folded away). The filter itself runs on the API.
…too good to be true

The tab for score integrity (startng-be app/features/integrity). Shows the runs held
back, with why and the player's earlier best, and lets an admin with scores.review clear
a genuine run or keep a fake one out, with an optional note. Hidden until the integrity
flag is on.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…embered

trackPlay used a beacon, which can't carry the Authorization header, so the back end could
never tell who opened a game (game opens, for ratings and continue playing). Signed-in
players now send it with fetch and keepalive; visitors still use the beacon, and a saved
sign-in that has expired is left off.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Shows, on a game that has runs held back by score integrity, how many are being checked and
who they are from, in the same place as the other notices. Built on the Your games plug-in
point from the H2 name filter PR. Hidden until the integrity flag is on.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
src/features/needs_fixing (flag "needs_fixing"):
- Admin tab "Needs fixing": mark a game with a note for its owner (confirm dialog), see games their owners say
  are fixed first, then games waiting for the owner; put back, send back or change the note.
- Your games: the owner's game shows what's wrong, how to fix it (push to the repo), and "tell us it's fixed"
  with an optional note. The owner's requests are fetched once for all their cards.

The Reports tab only offers "Put back" for reported or flagged games. A game's hidden reason may now be any
feature's reason (PublishedGame.hidden).
- Admin tab "Duplicates": look-alike pairs side by side (older first) with why they
  match, hide as a copy, delete, keep both, scan all games, and put hidden copies back.
- Your games: "Hidden: looks like a copy" notice naming the original game.
- Your games tags hidden games "Hidden" instead of "Live".
- start.ng/emails: signed-in players pick their email topics; visitors sign up
  and confirm by link; confirm and unsubscribe links from emails land here.
- Admin tab "Email": subscribers by topic, the outbox by status, and
  "Send me a test email".
- Emails section for your own profile (shown once profiles render sections).
dav3exe and others added 23 commits October 22, 2026 12:07
A2 spotlight: the /spotlight page, homepage cards, the Game of the Week tag and the Spotlight tab
M1 Kit: /connect passes the Kit's play-session pings on to the API (game_sessions)
M1 Kit docs: a game that loads the Kit and calls gameOver() meets the game standards
Merge dev into feat/s1-profiles again (for #83)
S1 profiles and badges: the player page, /me, and names on boards link to it
…dev-2

Merge dev into feat/m2-leagues-page again (for #79)
feat(leagues): /league page and profile section (M2)
feat: give start.ng/creators its own link preview image
…nd items drawn on the 3D character

A coin counter and Wardrobe/Shop links in the account menu, a Wardrobe tab in the profile, a wardrobe section on
player pages, and an "You unlocked it! Wear it?" popup. three/items.ts draws all 21 wardrobe items (hats, extras,
outfits, neck, back, aura) on the character from a style's `items`, in the profile, the previews, the shop's
Try on and the Hangout. Everything outside src/features/wardrobe only shows while the `wardrobe` flag is on;
characters with no items look exactly as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lours

The six rarity colours (light and dark) move next to the other colours in src/styles.css, and the rarity label
text uses --on-solid instead of hex values (CONTRIBUTING.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rarity contrast)

- Profile: Look / Wardrobe are aria-pressed buttons in a group, not a half-built tab pattern.
- useWorn takes the signed-in account and forgets the last player's items when it changes; the shop clears its
  coins and owned items on sign-out or a new account and ignores late answers for the old one.
- useDialog: the Try on, Buy and unlock pop-ups take focus, close on Escape (not while buying), keep Tab inside
  and give focus back on closing.
- The unlock popup shows a message when Wear it fails instead of an unhandled rejection.
- Light-mode rarity colours darkened so the labels reach 4.5:1 with their text (dark mode already did).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Writing close.current during render could leave the Escape listener with a callback from a render React threw away
(the purchase dialog's reads `busy`). A layout effect now updates it after commit, before any key can arrive.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Wardrobe: coin counter, /wardrobe and /shop, the unlock popup and items on the 3D character
Polish from the end-to-end test: Challenge a friend on game pages, Edit profile label, plurals
Comment thread src/features/share_cards/api.ts Fixed
Fix CodeQL alert before the upstream PR
@dav3exe dav3exe changed the title Promote Cybertron-HNG main: discovery, creator hub, profiles, kit, leagues, wardrobe and more Add profiles, friends, discovery, creator hub, leagues, kit, wardrobe and admin tabs Oct 22, 2026
@dav3exe
dav3exe merged commit e511bfb into startnextgen:main Oct 22, 2026
6 of 7 checks passed
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.

8 participants