v3.0.0: V3 features, server refactoring, and documentation overhaul

- Extract WebSocket handlers from main.py into handlers.py
- Add V3 feature docs (dealer rotation, dealing animation, round end reveal,
  column pair celebration, final turn urgency, opponent thinking, score tallying,
  card hover/selection, knock early drama, column pair indicator, swap animation
  improvements, draw source distinction, card value tooltips, active rules context,
  discard pile history, realistic card sounds)
- Add V3 refactoring docs (ai.py, main.py/game.py, misc improvements)
- Add installation guide with Docker, systemd, and nginx setup
- Add helper scripts (install.sh, dev-server.sh, docker-build.sh)
- Add animation flow diagrams documentation
- Add test files for handlers, rooms, and V3 features
- Add e2e test specs for V3 features
- Update README with complete project structure and current tech stack
- Update CLAUDE.md with full architecture tree and server layer descriptions
- Update .env.example to reflect PostgreSQL (remove SQLite references)
- Update .gitignore to exclude virtualenv files, .claude/, and .db files
- Remove tracked virtualenv files (bin/, lib64, pyvenv.cfg)
- Remove obsolete game_log.py (SQLite) and games.db

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
adlee-was-taken
2026-02-14 10:03:45 -05:00
parent 13ab5b9017
commit 9fc6b83bba
60 changed files with 11791 additions and 1639 deletions

View File

@@ -124,6 +124,13 @@ export const SELECTORS = {
hasCard: 'has-card',
pickedUp: 'picked-up',
disabled: 'disabled',
// V3 classes
canSwap: 'can-swap',
paired: 'paired',
pairTop: 'pair-top',
pairBottom: 'pair-bottom',
ruleHighlighted: 'rule-highlighted',
thinkingHidden: 'hidden',
},
// Animation-related
@@ -133,6 +140,23 @@ export const SELECTORS = {
animCard: '.anim-card',
realCard: '.real-card',
},
// V3 feature selectors
v3: {
thinkingIndicator: '.thinking-indicator',
cardTooltip: '.card-value-tooltip',
tooltipValue: '.tooltip-value',
tooltipNote: '.tooltip-note',
ruleTag: '.rule-tag',
ruleHighlighted: '.rule-tag.rule-highlighted',
ruleMessage: '.rule-message',
pairIndicator: '.paired',
dealerBadge: '.dealer-badge',
knockBanner: '#knock-banner',
knockConfirmDialog: '#knock-confirm-dialog',
cardValueOverlay: '.card-value-overlay',
pairCancelOverlay: '.pair-cancel-overlay',
},
};
/**