Files
blind_chess/.claude/handoffs/2026-05-19-181448-duplicate-chess-landing-card.md
T

6.6 KiB
Raw Blame History

Handoff: 3rd landing card linking to duplicate-chess (deployed)

Session Metadata

  • Created: 2026-05-19 18:14:48
  • Project: /home/claude/bin/blind_chess
  • Branch: main (commits pushed)
  • Session duration: ~30 minutes; the bulk of this session's substantive work happened in the sibling duplicate_chess repo — see that repo's handoff for the full deploy story.

Recent Commits (for context)

  • 33a7cef docs: record duplicate-chess sub-app sharing the chess.sethpc.xyz origin
  • fef6dcf feat(client): third landing card linking to duplicate chess
  • d95ab2a docs: refresh handoff — promotion fix shipped, both fixes deployed
  • c01244c fix: promotion dialog only fires for genuine pawn promotions

Handoff Chain

  • Continues from: 2026-05-18-205736-table-fidelity-features.md — that handoff's state is otherwise still current; the manual browser test pass on the table-fidelity batch is still pending.
  • Cross-repo companion: ~/bin/duplicate_chess/.claude/handoffs/2026-05-19-181212-deployed-as-chess-sethpc-xyz-duplicate.md — the full story of the deploy lives there.

Current State Summary

The blind_chess landing now shows a 3rd card — "Duplicate Chess (under development)" — that links to /duplicate/. The page-level deploy on chess.sethpc.xyz is live and verified: the served bundle contains the new strings ("Duplicate Chess", "under development", "/duplicate/") and CSS classes (.card-link, .badge, .open-cue); curling /duplicate/ returns the duplicate_chess static index from a separate handle_path block in the same Caddy site. blind_chess's server was restarted (1 in-memory game dropped per the pre-accepted MVP policy).

State of blind_chess proper is otherwise unchanged from the table-fidelity handoff — the same open items (manual browser test pass, board phantom glyph contrast eyeball) apply.

Architecture Overview

The chess.sethpc.xyz Caddy block on CT 600 now routes:

  • /duplicate/* → static /var/www/duplicate-chess/ (handle_path strips the prefix; Vite was built with base: '/duplicate/').
  • Everything else → reverse_proxy to CT 690:3000 (blind_chess Fastify, as before).

This means duplicate_chess deploys never restart blind_chess. The blind_chess client just contains a link to /duplicate/ — no SPA-level integration.

Critical Files

File Purpose Relevance
packages/client/src/lib/Landing.svelte 3rd card + .card-link, .badge, .open-cue CSS The visible entry point
CLAUDE.md (deploy line) Notes the /duplicate/* Caddy block Resume reference
Caddy on CT 600 (/etc/caddy/Caddyfile lines ~11121124) handle_path /duplicate/* sub-block Backup at /etc/caddy/Caddyfile.bak.duplicate-chess-1779228542

Files Modified

  • packages/client/src/lib/Landing.svelte — added a 3rd <a class="card card-link" href="/duplicate/"> card under the existing two cards (friend/AI). New CSS for the link-shaped card, the "under development" pill badge, and the Open → cue.
  • CLAUDE.md — Deploy bullet extended with one sentence about the /duplicate/* handler.

Decisions Made

Decision Why
3rd card as a plain <a href>, not an SPA-internal route Honest about the architecture: duplicate is a separate static app behind a Caddy handle_path, not a route within blind_chess. Plain anchor survives any future static-fallback rewriting.
Visibly tagged "under development" Sets Andrew's (the inventor's) expectations that duplicate isn't at parity with blind/vanilla.
Drop the 1 active in-memory game on restart Acceptable per pre-existing MVP policy in DECISIONS.md.

Immediate Next Steps

  1. The table-fidelity manual browser test pass is still pending (from the prior handoff — Step 1 there). Now an even bigger reason to do it: Andrew will be looking at the landing and seeing 3 cards; if the layout breaks at a phone width or the card looks broken, fix it before he tests duplicate.
  2. Visually verify the new 3rd card in a real browser at https://chess.sethpc.xyz/ — colours, badge contrast, hover state, mobile layout. Only confirmed via curl + JS/CSS string grep so far.
  3. Decide whether chess.local should also serve duplicate. Currently the LAN-only VDJ-RIG instance is on the previous blind_chess client (no 3rd card) and has no /duplicate/* handler. If Seth wants LAN parity, redeploy blind_chess client there AND copy duplicate's dist to the rig with a Caddy block of its own.

Important Context

  • The bulk of the work is in duplicate_chess, not here. See its handoff for the deploy details (Vite base, Caddy handle_path, tar-pipe transfer, Caddyfile backup name).
  • fef6dcf + 33a7cef are the only two commits this session in blind_chess. Everything else (vite.config, page title, CLAUDE.md, DECISIONS.md, handoff) is in duplicate_chess.
  • The table-fidelity batch state in the prior handoff is unchanged. The manual browser test pass is still in progress. The deploy on CT 690 is now at the new commit fef6dcf (client only — server code is byte-identical to c01244c).

Potential Gotchas

  • The blind_chess server WAS restarted even though server code didn't change (Fastify-static reads STATIC_DIR at startup, so the new index.html + bundle hashes only get picked up after a service restart). Took uptime back to 0; the 1 in-memory game at restart was dropped.
  • The Caddyfile edit was on CT 600 only. chess.local on VDJ-RIG was not touched and has no /duplicate/* route.

Assumptions Made

  • That "incorporate as a 3rd game mode 'under development'" meant a 3rd top-level landing card (the existing "mode" was a radio inside each card for Blind/Vanilla, but duplicate is 4-player so it can't fit that radio).
  • That a plain link out to /duplicate/ was the right level of integration (vs iframe or source merge).

Environment State

  • caddy.service on CT 600 — reloaded.
  • blind-chess.service on CT 690 — restarted (1 in-memory game dropped).
  • chess.local on VDJ-RIG — not touched.
  • No dev servers running locally.

Security Reminder: No credentials or secrets in this handoff.