Add patterns for node_modules, build output, logs, editor files,
OS files, environment files, and test coverage.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Human verification passed for all Phase 1 requirements
- PEOPLE-01 through PEOPLE-04 confirmed working
- 20/20 automated tests passing
- Phase 1 Bill Entry & Assignment complete
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Subscribes to store.items signal
- Displays each item with name and formatted price
- Includes ItemAssign component for each item
- Shows empty state when no items added
- Multi-select checkbox UI for each person
- Reflects current assignment state
- Toggles person on/off when clicked
- Calls store.setAssignment on change
- Shows hint when no people added
- Controlled form with name and price inputs
- Calls store.addItem on form submit
- Shows error message on validation failure
- Clears inputs on successful add
- Created 01-03-SUMMARY.md with full execution documentation
- Updated STATE.md position to Plan 3 of 5 (60% progress)
- Added decisions: controlled forms, signal access pattern
- All 3 tasks committed atomically
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Created 01-02-SUMMARY.md documenting currency utilities and billStore
- Updated ROADMAP.md to mark 01-02 as complete (2/5 plans done)
- All tests passing (20/20)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create App.jsx importing PersonForm and PeopleList
- Create main.jsx entry point for Preact render
- Add index.html as app entry point
- Add basic CSS styles for layout
- Configure Vite with @preact/preset-vite
- Update vitest config for Preact/jsdom environment
- Add missing dependencies (preact, vite, @preact/preset-vite)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Created SUMMARY.md with execution details and deviations
- Updated STATE.md with plan completion metrics
- Updated ROADMAP.md with plan 01-01 progress
- Marked PEOPLE-01 through PEOPLE-04 as complete in REQUIREMENTS.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Subscribes to store.people signal
- Renders list of person names with unique keys
- Shows empty state when no people added
- Preact Signals auto-track dependencies in components
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Controlled form with useState for local state
- Calls store.addPerson on form submit
- Shows error message if addPerson fails
- Clears input on successful add
- Uses Preact hooks for form state management
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix escaped exclamation marks (\! to !) in condition checks
- Add currency utility module (dollarsToCents, centsToDollars, formatCurrency)
All 20 tests now pass (10 billStore + 10 currency)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add package.json with Vitest, jsdom, Vite, and Preact dependencies
- Configure Vitest with jsdom environment for component testing
- Create test stubs for billStore (PEOPLE-01, PEOPLE-02, PEOPLE-03, PEOPLE-04)
- Create test stubs for currency utilities (dollarsToCents, centsToDollars, formatCurrency)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add vitest.config.js with jsdom environment and global test APIs
- Install vitest and jsdom as dev dependencies
- Add test scripts (test, test:run) to package.json
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Archive and finalize v1.0 milestone and planning artifacts: add MILESTONES.md, milestone archives (v1.0-ROADMAP.md, v1.0-REQUIREMENTS.md), verification and phase artifacts, and update phase/roadmap/project state to mark v1.0 MVP as shipped. Tidy PROJECT and ROADMAP to reflect shipped features and next steps, remove the old REQUIREMENTS.md (moved to milestone archive), and update STATE.md to show milestone completion. Minor code change: expose GridManager.events as public readonly to allow external subscribers. Package metadata: normalize keywords formatting and add an optional dependency entry in package.json for rollup native binary support.
Bug: Game was listening on its own events emitter for 'tilesSelected'
but GridManager emits on its own events emitter.
Fix: Changed listener from this.events to this.gridManager.events
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Enhanced setupCanvas() with viewport-based scaling
- Scale down only, never scales up
- CSS transform for display scaling (preserves coordinates
- Added comprehensive test coverage for responsive scaling behavior
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Enhanced setupCanvas() with viewport-based scaling
- Scale down only on scales to fit viewport on mobile devices
- CSS transform for display scaling (preserves coordinate mapping
- Added comprehensive test coverage for responsive scaling
- Verified coordinate mapping works correctly with CSS transform
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- MatchAnimation class with easeOutBack easing for satisfying pop effect
- scale+fade transforms in renderTile()
- CONFIG.animation.matchDuration = 250ms
- All tests passing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Created 06-02-SUMMARY.md with accomplishments, deviations, and metrics
- Updated STATE.md with plan completion and decisions
- Updated ROADMAP.md progress (3/4 summaries complete)
- Marked UX-01 requirement complete
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Added shadowBlur glow effect to path visualization
- Wired animateMatch call for concurrent tile animations
- Auto-fixed missing MatchAnimation integration from plan 06-01
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add animateMatch() method to start animations for matched tiles
- Apply scale/alpha transforms in renderTile() when animation exists
- Clean up completed animations from matchAnimations map
- Add tests for animateMatch integration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add animation.matchDuration=250 to CONFIG
- Add matchAnimations Map and animateMatch method to Renderer
- Apply scale+alpha transforms in renderTile for animating tiles
- Wire animateMatch call in Game.ts after drawPath
This completes the dependency from plan 06-01 (Rule 2 auto-fix for missing critical functionality)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add animation configuration object with matchDuration: 250ms
- Per CONTEXT.md recommendation (200-300ms range)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add shadowBlur=15 and shadowColor='#00ff00' for green glow
- Wrap path drawing in ctx.save()/ctx.restore() for state preservation
- Add tests for glow effect properties (shadowBlur, shadowColor, save/restore)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- SUMMARY.md with RippleAnimation implementation details
- STATE.md updated with Phase 6 position and decisions
- ROADMAP.md updated with plan progress
- REQUIREMENTS.md: UX-02 marked complete
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add renderer.addRipple(x, y) call in handleInput method
- Ripple appears at touch/click coordinates before tile selection
- Provides visual feedback for all input interactions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add RippleAnimation class with 300ms duration and 40px max radius
- Add rippleAnimations property to Renderer
- Add addRipple(x, y) method to trigger ripple effect
- Render ripples in main render loop with auto-cleanup
- Use selection color (rgba 233, 69, 96) for visual consistency
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add touch-action: none to canvas to prevent zoom/scroll
- Add overflow: hidden to body to prevent page scroll
- Mobile touch gestures now properly blocked during gameplay
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>