Skip to content

Revamp: 2-6 players, table layouts, two themes, table tools - #453

Merged
albertlast merged 1 commit into
mainfrom
revamp/multiplayer-themes-layouts
Jul 31, 2026
Merged

Revamp: 2-6 players, table layouts, two themes, table tools#453
albertlast merged 1 commit into
mainfrom
revamp/multiplayer-themes-layouts

Conversation

@albertlast

Copy link
Copy Markdown
Owner

Rebuild of the app on the existing Vue 3 + Vite + Tailwind base. The technical
foundation is unchanged; everything above it is new.

Game

  • 2 to 6 players. Every seat is rotated towards the edge its player sits at.
  • Three table layouts. Facing (top and bottom rows), Sides (the same
    table turned a quarter turn) and Same side (upright stack). Picking the
    player count opens the layout step, and the table behind it updates live as
    you pick.
  • Game presets. Standard, Commander, Energy, Duel 8000 and a neutral
    board-game counter, plus a freely adjustable starting life total.
  • Counters, names and colours per seat.
  • Table tools. Dice (coin, d4-d100), a match timer and a random first
    player, all from a radial hub in the middle of the table.

Look

Two themes driven by CSS design tokens: Pulse keeps the original
edge-to-edge colour blocks with oversized numerals, Arena puts floating
player cards on a dark stage. A theme only overrides a token block.

Touch

The app is used on phones and tablets, so: pointer events with per-pointer
ownership (a second finger cannot end somebody else's hold on a shared
tablet), touch-target sizing, safe-area insets, 100dvh sizing and iOS
long-press callout handling.

Structure and tests

  • Domain layer under src/game (state, presets, seat layouts, persistence),
    including a one-off migration from the previous two-player storage keys, so
    returning users keep their life totals and colours.
  • Composables for hold-to-repeat, pending delta, dice, timer and the screen
    APIs.
  • 144 unit tests replace the two previous smoke tests. vitest.config.ts,
    the npm scripts and CI now run type-check, tests and build.

Removes the @radial-color-picker dependency in favour of a built-in hue
slider.

Verification

Type-check, tests and production build all pass. The app was driven in
Microsoft Edge across both themes, all player counts and all three layouts, at
phone (390x844) and tablet (820x1180) viewports. Lighthouse mobile reports
accessibility 100 and best practices 100, with a clean console.

Four bugs found that way and fixed here: hue tokens resolving on :root
instead of the panel (every player rendered red), a hub backdrop with no area,
a settings sheet that overflowed the phone without scrolling, and aria-hidden
applied to a focused element.

Screenshots are in the README.

🤖 Generated with Claude Code

Rebuild of the app on the existing Vue 3 + Vite + Tailwind base.

Game
- 2 to 6 players, each seat rotated towards the edge its player sits at.
- Three table layouts: facing (top/bottom rows), sides (quarter turn, left
  and right edges) and same side (upright stack). Picking the player count
  opens the layout step, which previews live on the table behind it.
- Game presets: Standard, Commander, Energy, Duel 8000 and a board-game
  counter, with a freely adjustable starting life total.
- Poison and energy counters, per-seat names and colours.
- Table tools: dice (coin, d4-d100), match timer, random first player.

Look
- Two themes: Pulse (edge-to-edge colour, oversized numerals) and Arena
  (floating cards on a dark stage), both driven by CSS design tokens.
- Radial control hub replaces the old corner menu.

Touch
- Pointer events with per-pointer ownership, so a second finger cannot end
  somebody else's hold on a shared tablet.
- Touch targets, safe-area insets, 100dvh sizing and iOS callout handling.

Structure
- Domain layer under src/game (state, presets, seat layouts, persistence)
  with migration from the previous two-player storage keys.
- Composables for hold-to-repeat, pending delta, dice, timer and screen APIs.
- 144 unit tests replace the two smoke tests; vitest config, npm scripts and
  CI updated to run type-check, tests and build.

Removes the @radial-color-picker dependency in favour of a built-in hue
slider.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@albertlast
albertlast merged commit 54e889f into main Jul 31, 2026
2 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.

1 participant