- Fix class skill names: Game now reads from class_skills table (what admin edits) instead of legacy class_skill_names table
- Add per-hit targeting mode for multi-hit skills (configurable in admin)
- Music now attempts autostart on page load
- WASD keyboard controls auto-enable test mode (like on-screen buttons)
- Update CLAUDE.md with Docker restart vs rebuild documentation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Service Worker changes:
- Bump version to v1.0.1 to invalidate old caches
- Use network-first strategy for all API calls
- Use network-first strategy for HTML files
- Only use cache-first for static assets (CSS, JS libs, images)
Server changes:
- Serve service-worker.js with no-cache headers
- Serve HTML files with no-cache headers
Client changes:
- Detect service worker updates and auto-reload page
- Check for updates on every page load
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Generate unique server session ID on startup
- Client detects session ID mismatch on reconnect and forces re-login
- Add "Kickems" as Trail Runner's custom name for basic_attack skill
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Forces all users to log in again when the server restarts.
Useful for applying auth changes or clearing stale sessions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Utility Skills section with dedicated table showing effect type, value, duration, cooldown
- Add "Add Utility Skill" button with pre-configured defaults
- Filter utility skills out of main combat skills table
- Fix updateSkill() to handle both snake_case and camelCase field names
- Add getUtilitySkillConfig() for database lookup of utility skill settings
- Replace hardcoded BUFF_CONFIGS in server.js with dynamic database lookup
- Support effect types: HP/MP regen multipliers, ATK/DEF boosts, XP multiplier
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add toast notification system with CSS animations for user feedback
- Add WebSocket broadcast for admin panel changes (monsters, skills, settings)
- Client auto-refreshes when admin makes changes
- Add HP/MP regen settings to admin panel (intervals, percentages, home multipliers)
- Fix SQL parameter mismatch in saveRpgStats (data_version = excluded.data_version)
- Implement optimistic updates in admin panel for immediate feedback
- Add broadcastAdminChange helper with client count logging
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add on-screen WASD control pad for movement testing
- Implement hold-to-move for continuous movement on direction buttons
- Add music system with 5 tracks: overworld, battle, victory, death, homebase
- Music pauses/resumes instead of restarting when switching tracks
- Add home base reset button in admin panel
- Implement double-tap for home base placement on mobile
- Fix WASD controls visible when dead (z-index above death overlay)
- Add MP regeneration while walking
- Clear monsters when entering home base area
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add classes table (base stats, stat growth per level)
- Add class_skills table (skill assignments with unlock levels, choice groups)
- Seed 4 classes: Trail Runner (enabled), Gym Bro, Yoga Master, CrossFit Crusader
- Seed Trail Runner skills with level-up choices at levels 2 and 3
- Add API endpoints for class and class skill CRUD
- Add Classes section to admin panel with full editor UI
- Skills grouped by unlock level with choice group indicators
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix death system: add clearMonsterEntourage(), set HP to 0 on death
- Add movement-based monster spawning (configurable distance)
- Add admin-editable spawn settings (interval, chance, distance)
- Add home base HP/MP regeneration when player is nearby
- Update character sheet to show damage range, accuracy, MP cost
- Change WASD test step from 11m to 1m
- Fix monster spawning after respawn
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add visual status/buff overlays on combat sprites (100x100px full overlay)
- Monster skills can now have custom names per monster
- Skills admin page for full skill CRUD
- Fix monster buff skills (defend) to properly buff instead of damage
- Fix custom skill names appearing in combat log
- Auto-copy default images when creating new monsters
- Add monster toggle endpoint fix
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add admin.html with monster/user/settings management UI
- Add admin API endpoints with adminOnly middleware
- Add game_settings table for configurable settings
- Replace emoji monster icons with PNG images (50px map, 100px battle)
- Add mapgameimgs/ directory with default fallback images
- Fix mobile geocache tap by checking for markers before preventDefault
- Increase geocache marker touch target to 64x64px
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Skill Selection System:
- Added 3 new alternative skills (quick_step, second_wind, finish_line_sprint)
- Created SKILL_POOLS for level 2, 3, 5 skill choices
- Added skill choice modal on level up
- Players now choose 1 of 2 skills at milestone levels
- Combat UI shows only unlocked skills
- Character sheet displays learned skills
Monster Database Migration:
- Renamed "Discarded GU" to "Moop" (Matter Out Of Place)
- Created monster_types table for storing monster definitions
- Added CRUD methods for monster types
- Added /api/monster-types endpoint
- Frontend now loads monster types from API
- Auto-seeds Moop monster on first run
- Ready for admin UI and multiple monster types
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Phase 3: Character sheet modal (click class name in HUD)
- Display all stats (HP, MP, ATK, DEF)
- Show XP progress bar with level milestones
- Show unlocked/locked skills based on level
- Fix mobile double-tap inconsistency (50/50 bug)
- Add monster check to native touchend handler
- Block press-and-hold navigation when monsters present
- Both touch handlers now consistently prioritize combat
- Increase monster touch targets to 70x70 with visible tap area
- Add pointer-events:none to trails in nav mode
- Add interactive:false to accuracy circles
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Features:
- Trail Runner class with 4 skills (Attack, Brand New Hokas, Runner's High, Shin Kick)
- Skill level requirements (unlock at levels 1, 2, 3, 5)
- Discarded GU monster type with dialogue escalation phases
- Multi-monster combat: all entourage monsters join fight simultaneously
- Target selection system (click to select enemy)
- Sequential monster turns after player action
- XP bar in HUD showing progress to next level
- Server-side RPG stats persistence (survives cache clear)
Technical:
- Added rpg_stats table to database
- Added GET/PUT /api/user/rpg-stats endpoints
- Fixed auth token name mismatch (accessToken vs authToken)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added "Send Test Notification to All Users" button in admin panel
- Button appears after enabling push notifications
- Server endpoint /test-notification sends to all subscribed users
- Shows count of successful deliveries
- Purple button to distinguish from other actions
- Useful for testing notification system is working
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implemented three types of notifications with cooldowns:
1. Nearby Cache Notification
- Triggers when within 200m of a geocache
- 10-minute cooldown per cache
- Resets when you move >200m away
2. Cache Message Notification
- Triggers when another user adds a message to a nearby cache
- Only notifies if you're within 200m of the cache
3. Destination Arrival Notification
- Triggers when within 10m of navigation destination
- 1-minute cooldown to prevent spam
Features:
- Server endpoint /send-notification for triggering push notifications
- Cooldown tracking to prevent notification spam
- Distance-based triggers for relevant notifications
- Automatic cleanup of expired subscriptions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major features added:
- Progressive Web App (PWA) manifest and service worker for offline support
- Push notifications with VAPID authentication
- Mobile-optimized UI with touch navigation fix
- Admin panel with configurable settings
- Geocache sound alerts
- App icons in all required sizes
Technical improvements:
- Fixed mobile touch handling for navigation selection
- Added remesh tool for track point standardization
- Improved pathfinding algorithm for more efficient routes
- WebSocket-based real-time multi-user tracking
- Docker deployment with persistent data volumes
Ready for APK generation via PWA2APK.com or Bubblewrap
Full offline support with map tile caching
Push notifications for geocache alerts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Removed icon switching between read/unread states
- Fixed CSS conflict between transform transition and pulse animation
- Changed proximity detection to directly toggle DOM classes instead of recreating icons
- Now uses classList.add/remove on marker._icon instead of setIcon() to prevent rendering issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>