Commit Graph

290 Commits

Author SHA1 Message Date
Thomas Hallock
ad444e108f feat(abacus-react): use environment variables to override npm registry
- Set NPM_CONFIG_REGISTRY and NPM_REGISTRY environment variables to force GitHub Packages
- Remove registry setting from semantic-release config to rely on environment variables
- This should force npm authentication to use GitHub Packages registry instead of npm

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 09:32:39 -05:00
Thomas Hallock
acc126bd5a feat(abacus-react): simplify to GitHub Packages-only publishing
- Remove npm registry plugin to eliminate NPM_TOKEN requirement completely
- Configure single npm plugin targeting only GitHub Packages registry
- This should allow successful publishing to GitHub Packages with GITHUB_TOKEN
- npm publishing can be re-enabled later by adding NPM_TOKEN secret

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 09:30:44 -05:00
Thomas Hallock
5eeedd9a59 feat(abacus-react): configure GitHub Packages-only publishing workflow
- Disable npm registry publishing in semantic-release config to avoid NPM_TOKEN requirement
- Enable GitHub Packages publishing with GITHUB_TOKEN authentication
- Update workflow to configure only GitHub Packages registry authentication
- Allow package publishing to GitHub Packages without npm credentials
- This enables automatic publishing to GitHub Packages while npm setup is pending

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 09:28:27 -05:00
Thomas Hallock
fbc84febda fix: resolve runtime error - calculateOptimalGrid not defined
- Move calculateOptimalGrid function outside useGridDimensions hook
- Fix function scoping issue that caused ReferenceError during useState initialization
- Add safety check for window object in helper function
- Grid layout now properly initializes without runtime errors

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 09:25:46 -05:00
Thomas Hallock
f1a0633596 fix: ensure consistent r×c grid layout for memory matching game
- Replace dynamic column calculation with proper grid dimensions that respect total card count
- Calculate exact rows and columns needed for balanced grid layout
- Add grid balancing logic to avoid uneven bottom rows when possible
- Update grid configuration for 12-pair difficulty to use 6×4 layout consistently
- Fix wide screen issue where cards were distributed as 8+4 instead of proper grid

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 09:22:10 -05:00
Thomas Hallock
dd80d29c97 feat: set up automated npm publishing for @soroban/abacus-react package
- Add semantic-release configuration for abacus-react package with scope-based versioning
- Create GitHub Actions workflow for automated publishing to npm
- Configure package-specific semantic versioning with conventional commits
- Add release scripts and update README with publishing documentation
- Update root release config to exclude abacus-react scope from monorepo releases
- Package releases are triggered by commits with scope 'abacus-react'

BREAKING CHANGE: abacus-react package now has independent versioning from monorepo
2025-09-28 08:39:15 -05:00
Thomas Hallock
4c338726c1 fix: upgrade Node.js to version 20 for Storybook compatibility 2025-09-28 08:15:22 -05:00
Thomas Hallock
f0bb411573 fix: update GitHub Actions to use latest action versions for Storybook deployment 2025-09-28 08:12:12 -05:00
Thomas Hallock
439707b118 feat: add GitHub Pages Storybook deployment with dual documentation sites
- Add comprehensive GitHub Actions workflow for automated Storybook deployments
- Deploy apps/web Storybook to gh-pages/web subdirectory
- Deploy packages/abacus-react Storybook to gh-pages/abacus-react subdirectory
- Create beautiful landing page with navigation to both Storybooks
- Add Component Documentation section to README with direct links
- Support both PR previews and main branch deployments
- Optimize build process with proper dependency management
2025-09-28 08:10:06 -05:00
Thomas Hallock
a8a6a72b72 refactor: enhance FullscreenContext with better logging and element tracking
- Add comprehensive console logging for debugging fullscreen operations
- Improve error handling with detailed error messages
- Enhanced element registration tracking for better visibility
- Support for debugging fullscreen element switching between components

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 07:25:41 -05:00
Thomas Hallock
0758cd8815 docs: add development standards to prevent navigation anti-patterns
- Document proper Next.js router usage vs window.location.href
- Establish clear rules for navigation and fullscreen state management
- Include code review checklist and migration guide
- Prevent future instances of page reload navigation mistakes
- Emphasize performance and state preservation benefits

Key rules:
- ALWAYS use useRouter().push() for navigation
- NEVER use window.location.href (breaks state, exits fullscreen)
- Manual fullscreen entry only (respect browser security)
- Let client-side navigation preserve fullscreen automatically

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 07:25:20 -05:00
Thomas Hallock
d2fae84ecc cleanup: remove obsolete fullscreen restoration prompt from MemoryPairsGame
- Remove fullscreen restoration prompt UI that's no longer needed
- Client-side navigation now preserves fullscreen automatically
- Fixes runtime error from undefined showFullscreenPrompt variable
- Simplifies component by removing complex state management

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 07:25:05 -05:00
Thomas Hallock
2a84687fec fix: replace all window.location.href with Next.js router for proper navigation
- Replace window.location.href with useRouter().push() across all components
- Prevents page reloads that break fullscreen state and React context
- Enables proper client-side navigation as intended by Next.js
- Fixes fullscreen persistence issue when navigating between pages
- Improves performance by eliminating unnecessary page reloads

Files updated:
- GameCard.tsx: Main game navigation from arena
- AppNavBar.tsx: Exit arcade button navigation
- ResultsPhase.tsx: Back to games button
- Games page: Game launcher navigation
- Arcade page: Exit arcade navigation
- FullscreenGameLayout.tsx: Exit game navigation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 07:24:52 -05:00
Thomas Hallock
7b947f2617 fix: implement ref-based fullscreen element tracking for proper persistence
- Update FullscreenContext to use ref-based element tracking instead of document.documentElement
- Add setFullscreenElement function to register specific DOM elements for fullscreen
- Update arcade page to register its main div as the fullscreen target element
- Update memory matching game to register its main div as the fullscreen target element
- Use element-specific fullscreen control instead of document-wide fullscreen

This properly fixes fullscreen persistence when navigating between components
by ensuring each component registers its specific container element as the
fullscreen target, preventing fullscreen loss during navigation.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 19:38:18 -05:00
Thomas Hallock
25053352fe fix: preserve fullscreen mode when navigating from arcade to memory matching game
- Add FullscreenProvider to memory matching game page
- Add FullscreenProvider wrapper to arcade page
- Handle ?fullscreen=true URL parameter in MemoryPairsGame component
- Ensure fullscreen mode persists when clicking games from arcade
- GameCard component already passes fullscreen parameter when navigating from arcade

This fixes the issue where entering fullscreen in arcade and then clicking
memory pairs would exit fullscreen mode.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 19:13:52 -05:00
Thomas Hallock
d9f07d7a4d feat: integrate memory pairs game with arena champions and N-player support
- Update MemoryPairsContext to use GameMode arena champions instead of UserProfile
- Extend game support from 2 players to N players with dynamic player IDs
- Update PlayerScore interface from fixed structure to dynamic object mapping
- Modify GamePhase to display actual arena champion names, emojis, and colors
- Update ResultsPhase to show all arena champions with proper winner calculation
- Add getMultiplayerWinner utility function for N-player winner determination
- Fix TypeScript errors from GameMode type changes (single | multiplayer)
- Ensure proper score tracking and turn switching for any number of players

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 18:44:37 -05:00
Thomas Hallock
eb7202ddc6 feat: optimize games page for mobile devices
Enhance mobile experience with responsive button sizing, 44px minimum touch targets, touch-action manipulation, and responsive grid layouts for better mobile usability.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 18:03:30 -05:00
Thomas Hallock
4fbf4d8bb2 feat: add TouchSensor for mobile drag and drop compatibility
Implement dnd-kit TouchSensor with proper activation constraints (250ms delay, 8px tolerance) to enable drag and drop functionality on mobile devices.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 18:03:20 -05:00
Thomas Hallock
6e09f21a70 feat: enhance navigation touch targets for mobile
Improve AppNavBar accessibility on mobile devices with 44px minimum touch targets, responsive padding, and better responsive design patterns.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 18:03:08 -05:00
Thomas Hallock
476f0fb882 feat: optimize mobile viewport configuration
Add proper viewport meta tag configuration to prevent unwanted zooming and ensure optimal mobile experience with device-width scaling.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 18:02:57 -05:00
Thomas Hallock
59461831e5 fix: resolve TypeScript errors across the codebase
- Fix animated.div JSX syntax issues in EnhancedChampionArena
- Add type declarations for @soroban/abacus-react module
- Add proper test framework type definitions for Vitest globals
- Fix skillConfiguration.ts type mismatches with proper assertions
- Handle possibly undefined totalSteps in test files
- Resolve JSX closing tag issues and prop type conflicts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 17:46:20 -05:00
Thomas Hallock
1ba2a11b3a fix: restore single-click player card functionality for arena toggle
- Add onToggleArena prop to ChampionCard components
- Implement handleToggleArena function for direct card clicks
- Fix remove button functionality in arena cards
- Add hover effects and pointer cursor for better UX
- Cards can now be clicked to add/remove from arena without dragging

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 17:34:57 -05:00
Thomas Hallock
7219a4131e fix: implement smooth cross-zone drag animations without scaling issues
- Remove ref conflicts by eliminating useTransition wrappers
- Add crossZoneDrag detection for "making way" animations
- Fix exploding card size issues by removing scaling effects
- Implement subtle reordering animations for cross-zone drops
- Cards now smoothly indicate when making room for incoming drops

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 17:32:34 -05:00
Thomas Hallock
b7335f0e67 feat: add smooth cross-zone reordering animations and tone down scaling
- Implemented useTransition for beautiful cross-zone movement animations
- Created AnimatedChampionCard wrapper for transition effects
- Toned down entrance animations (scale 0.95→1 instead of 0.8→1)
- Reduced drag scaling (1.02x instead of 1.05x) and rotation (3° instead of 10°)
- Changed to gentle spring config to eliminate "explodey" effect
- Fixed collision detection variable naming
- Cards now smoothly slide and reorder when moving between zones

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 17:05:44 -05:00
Thomas Hallock
53fc41c58f fix: implement proper bi-directional drag and drop with useDroppable
- Added useDroppable hooks to DroppableZone components
- Fixed roster->arena and arena->roster drag functionality
- Proper drop zone detection with visual feedback
- Removed manual overId tracking in favor of dnd-kit's built-in state
- Champions can now be dragged out of arena back to roster
- Enhanced drop zone animations respond to actual drag over state

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 17:01:56 -05:00
Thomas Hallock
0b3e8fd3d6 fix: simplify collision detection to resolve iterable error
- Replaced custom collision detection with closestCenter
- Removed unused imports for collision detection utilities
- Fixed runtime error with collisions not being iterable

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:59:43 -05:00
Thomas Hallock
fac320282b fix: resolve dnd-kit ref extension error in enhanced arena
- Removed useTransition conflicts with dnd-kit SortableContext
- Moved animations to individual ChampionCard components
- Added entry animations with react-spring for smooth card appearance
- Simplified rendering to avoid ref management conflicts
- Cleaned up unused imports

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:59:15 -05:00
Thomas Hallock
afec22ac3f feat: add cosmic fullscreen mode to abacus style dropdown
- Updated AbacusDisplayDropdown to accept isFullscreen prop
- Added dark/cosmic styling that adapts to fullscreen mode
- Updated trigger button, content panel, and all form controls
- Enhanced FormField, SwitchField, and RadioGroupField components
- Integrated with AppNavBar to pass fullscreen state
- Ensures consistent cosmic theme across entire navigation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:52:21 -05:00
Thomas Hallock
ce6c2a1116 fix: clean up component interfaces and settings
- Remove unused onConfigurePlayer prop from ChampionArena interface
- Update GameSelector component interactions
- Update Claude settings for development workflow

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:27:48 -05:00
Thomas Hallock
337aa5609a feat: add fullscreen parameter handling to GameCard
Update GameCard to append ?fullscreen=true when clicked from arcade:
- Detect arcade context via pathname
- Automatically add fullscreen parameter for arcade-launched games
- Maintain existing navigation for non-arcade contexts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:27:40 -05:00
Thomas Hallock
763fc95025 feat: add fullscreen support to Memory Quiz game
Wrap Memory Lightning game with FullscreenGameLayout to:
- Enable fullscreen mode when accessed from arcade
- Provide consistent navigation experience
- Maintain existing game functionality and styling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:27:34 -05:00
Thomas Hallock
2b98382b5a feat: replace Champion Arena with Enter Arcade button
Transform games page by:
- Removing embedded Champion Arena component
- Adding large animated "ENTER ARCADE" button that navigates to /arcade
- Maintaining existing GameSelector for non-arcade game access

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:27:28 -05:00
Thomas Hallock
3edf35f6a1 feat: add fullscreen arcade page with Champion Arena
Create dedicated /arcade route that:
- Auto-enters fullscreen mode on page load
- Features cosmic theme with animated background gradients
- Integrates Champion Arena for game selection
- Provides mini navigation bar with exit functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:27:21 -05:00
Thomas Hallock
a25e6117bb feat: add fullscreen game layout wrapper component
Create reusable FullscreenGameLayout that:
- Auto-enters fullscreen when ?fullscreen=true URL parameter is present
- Provides mini navigation bar in fullscreen mode
- Handles exit to arcade functionality
- Applies cosmic dark theme styling in fullscreen

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:27:15 -05:00
Thomas Hallock
8e1a948ffd feat: add browser fullscreen API context
Implement FullscreenContext with cross-browser compatibility for:
- Native fullscreen entry/exit using browser APIs
- Fullscreen state management with React context
- Support for webkit, moz, and ms vendor prefixes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:27:08 -05:00
Thomas Hallock
18b685b92d fix: remove Panda CSS generated files from source control
Remove 130+ generated styled-system files that were incorrectly tracked.
These files should be treated as build output and regenerated locally.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 16:26:54 -05:00
Thomas Hallock
c3a4d76d16 feat: add setGameModeWithPlayers method to GameModeContext
- Add setGameModeWithPlayers method for legacy auto-player-activation behavior
- Separate concerns: setGameMode for arena, setGameModeWithPlayers for other usage
- Maintain backward compatibility while supporting new drag-and-drop arena
- Document that player activation is now handled by ChampionArena component

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 15:56:03 -05:00
Thomas Hallock
6e1050c76d fix: add onConfigurePlayer prop to ChampionArena
- Add placeholder onConfigurePlayer prop to prevent TypeScript errors
- Enables proper integration with arena gear button functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 15:55:43 -05:00
Thomas Hallock
aba3f685bc feat: enhance ChampionArena with integrated GameSelector and improved UX
- Integrate GameSelector component directly into arena interface
- Add gear buttons to all player cards for configuration access
- Improve drag and drop with roster return functionality
- Add click handlers for easy champion management
- Update mode indicator to show "Select Champions" when arena is empty
- Add proper visual feedback for drag operations
- Support both drag and click interactions for accessibility

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 15:45:50 -05:00
Thomas Hallock
5fec3398ad refactor: remove game-specific player UI from matching game
- Add GameModeProvider to matching game page
- Remove local player selection from SetupPhase component
- Replace with global context integration showing current setup
- Update timer settings and preview to use activePlayerCount
- Games now use unified player management system

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 15:45:17 -05:00
Thomas Hallock
022dca6518 feat: integrate MemoryPairs game with global GameModeContext
- Remove local gameMode state from MemoryPairsContext
- Derive game mode from global activePlayerCount
- Update types to reflect gameMode as computed property
- Remove SET_GAME_MODE action and setGameMode function
- Update gameScoring getAchievements to accept gameMode parameter
- Games now read player configuration from global context

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 15:45:03 -05:00
Thomas Hallock
c5a654aef1 feat: add reusable GameSelector and GameCard components
- Create GameSelector component with variant support (compact/detailed)
- Create GameCard component with game availability logic
- Support filtering games based on active player count
- Add empty state handling for when no games are available
- Components are composable and can be used anywhere in the app

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 15:44:49 -05:00
Thomas Hallock
dbf61c4b2d feat: implement revolutionary drag-and-drop champion arena interface
🏟️ MAJOR FEATURE: Transform games page with innovative Champion Arena
- Create ChampionArena component with drag-and-drop avatar selection
- Combine "choose your champion" + player count in one intuitive interface
- Visual arena where users drag avatars to set game mode (solo/battle/tournament)
- Replace modal selection with always-visible arena experience
- Add GameModeContext for centralized player configuration management
- Enhanced animations: arena entry, champion ready, floating effects
- Real-time mode indicators and champion status tracking
- Click to remove champions from arena with smooth animations

 INNOVATION: Drag avatars into arena = instant game mode selection
- 1 champion = Solo Mode
- 2 champions = Battle Mode
- 3+ champions = Tournament Mode

🎮 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 14:16:30 -05:00
Thomas Hallock
03f5056902 fix: remove redundant mode selection and revert game naming
- Remove duplicate mode selection from /games page
- Let individual games handle their own mode selection
- Revert "Battle Arena" back to "Memory Pairs" (original name)
- Simplify character selection to just pick champion
- Clean flow: click game → pick character → go to game

No more redundant screens!

🎮 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 14:09:10 -05:00
Thomas Hallock
9fe7068ded fix: improve game mode selection UX by removing redundancy
Smart game mode handling:
- Memory Lightning: Skip mode selection (single-player only)
- Battle Arena: Show mode selection (supports both modes)
- Pass mode parameters to matching game via URL
- Eliminates redundant mode selection on consecutive screens

Much cleaner user flow!

🎮 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 14:06:00 -05:00
Thomas Hallock
b64fb1c769 fix: add navigation to games from character selection modal
Now clicking character cards opens selection modal, then navigating to:
- Memory Lightning → /games/memory-quiz
- Battle Arena → /games/matching

Character-driven game entry flow is complete!

🎮 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 14:04:29 -05:00
Thomas Hallock
b05189e9eb feat: enhance GameCard with epic character celebration animations
Add spectacular visual effects for matched cards:

💥 Epic Claim Animation:
- Explosion ring effect on card match
- Character emoji badges with spinning halos
- Player-specific colors (blue/pink gradients)
- Smooth scale/rotate combo animations

 Sparkle Effects:
- 6 sparkle particles with unique trajectories
- Coordinated timing with main animation
- Golden sparkles for magical feel

🎨 Visual Polish:
- Remove debug console.logs
- Enhanced drop shadows and glows
- Emoji blast animations with cubic-bezier easing
- Multiple layered animation effects

Cards now celebrate matches with cinematic flair!

🎮 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 13:56:51 -05:00
Thomas Hallock
26bf3990b0 feat: implement comprehensive character integration for /games arcade
Transform /games into character-driven arcade experience with:

🏆 Character Showcase Header:
- Floating character cards with Player 1 & 2 emojis
- Real-time stats (games played, victories, levels)
- XP progress bars with character-themed gradients
- Quick customization buttons (⚙️)

💬 Interactive Recommendations:
- Speech bubbles on game card hover
- Personality-driven suggestions from characters
- Smooth animation effects

📊 Character vs Character Dashboard:
- Head-to-head win/loss records
- Recent achievements with character badges
- Active challenge system between players
- "Create New Challenge" functionality

🎮 Interactive Character Selection Modal:
- Game mode selection (Solo vs Battle)
- Character picker with stats and personalities
- Smooth fadeIn/slideInUp animations
- Mobile-responsive design

 Visual Polish:
- 15+ custom keyframe animations
- Character-specific color theming (blue/purple)
- Glassmorphism effects with backdrop blur
- Hover interactions and character bounce effects

Characters are now the "stars of the show" with living personalities!

🎮 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 13:56:28 -05:00
Thomas Hallock
21c430b9f0 feat: add UserProfileProvider to app layout for character support
🎮 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 13:56:08 -05:00
Thomas Hallock
83ba79241f fix: resolve TypeScript compilation errors blocking GitHub Actions build
- Fix TypstSoroban component prop type mismatches by removing invalid direct props
- Fix missing gameTime property errors by calculating from gameStartTime/gameEndTime
- Extend TargetSum type to include 20 for advanced complement pairs
- Add proper Record typing for game configuration objects to fix index type issues
- Fix timer configuration typing in SetupPhase component

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 09:19:14 -05:00