- 17 Jun, 2026 8 commits
-
-
Mahmoud Aglan authored
1. Rich board background with radial gradient texture (warm parchment) 2. Center triangles with radial gradient glow + white diamond center 3. 3D pawns with gradient bodies, specular highlights, drop shadows 4. Safe squares with radial glow + shadowed gold stars 5. Home columns with gradient cells + directional arrows 6. Home zones with linear gradient fill + corner dot decorations 7. Animated turn indicator arrow on active player panel + glow name 8. Ambient corner glow showing current player's color on board 9. Decorated dice area with gold accent, gradient background, radial glow 10. Embossed board frame with wood-tone border + inner gold accent Also: roll button pulses when available, panels have shadow glow on active Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Add mini dice to all player panels showing roll result with pop-in animation - Bot/opponent dice rolls visible next to their name with same shake + land effect - Panel glows on six, active player has pulse + avatar bounce animation - Pawn movement uses full arc-bounce (up→peak→down→squash) per hop - Enter animation: pop-out from home with bounce + landing dust burst - Long moves (3+ steps) produce particle burst on landing - Mini dice fades out after 1.2s when turn passes to next player - Rolling state shows rotation shake animation on mini dice Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Dramatically reduce lucky roll weights (nearCapture +1.0→+0.3, capturePerDie +0.6→+0.15) - Reduce six-boosting when pieces are home (1.5→0.8, 0.6→0.4) to lower triple-six frequency - Pawns sharing a cell now render in a grid layout: 2 pawns side-by-side, 3 in triangle, 4 in 2x2 - Stacked pawns shrink proportionally (72% for 2, 60% for 3-4) so players can count them Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Validate tile exists in player's hand before executing placement - Draw continuously from boneyard until playable tile found (with 400ms delay per draw) - Tile flies from hand area to board position instead of instant scale-in - Visual boneyard pile on left side with live counter - Multi-wave confetti + starBurst + screen flash on match win - Proper tile aspect ratio (34x68, 1:2) with 8px hand spacing - Flush tile contact on board (GAP=1) Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Two bugs caused pawns to teleport back to the yard without capture: 1. Triple-six penalty blindly sent the last-moved piece to pos=-1 regardless of whether it was resting on a safe square. Now the penalty only applies if the piece is NOT on a safe square. 2. captureAt() checked if the DESTINATION was safe but didn't guard against the victim's own position being safe. Added a per-piece safety check so a pawn sitting on any safe square (star squares, colored start squares) can never be captured under any circumstance. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Hide dice + roll button when not player's turn; show only on active turn - Distinct capture feedback: cheerful SFX+confetti for the capturer, sad SFX+red flash+shake for the victim whose pawn got sent home - Game continues until 3 players finish — 1st/2nd/3rd get podium screen, 4th gets loser screen. Finished players are dimmed and auto-skipped - Fix finish position: pawns now land on the outer middle of the center 3x3 grid (squares 2/4/6/8 per color), not the dead center square 5 - Result screen shows Arabic ranking labels and medals per placement Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Add "lucky roll" mechanic: when an opponent pawn is exposed directly ahead (1-6 squares), boost probability of rolling the exact capture value by ~+1.0 weight, plus +0.6 for any die value that enables capture - Change pawn path: pieces enter home column from position 50 (the square before the corner), treating the corner as dead space for their own color — matches standard Ludo turn geometry - Add multi-wave firework particle burst (player-colored) when a pawn lands exactly on the Home finish position Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 16 Jun, 2026 4 commits
-
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Hide Google sign-in button in native app (WebView blocks google.com domain) - Guest "إنشاء حساب" toast now navigates to register screen - Tab bar height increased 60→64px, items 11px font, 48px min touch target Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 15 Jun, 2026 5 commits
-
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Guest login now creates a real anonymous Supabase user with token, profile row, and refresh capability. Guest data persists across sessions and page reloads properly. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
After OAuth callback, engine.js calls profile.php?action=ensure which creates or updates the profile using Google's user_metadata (full_name, avatar_url). Existing profiles with default "Player" name or missing avatars get updated on next login. Also backfilled avatar_url and display_name for existing Google users. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 14 Jun, 2026 7 commits
-
-
Mahmoud Aglan authored
Users who signed in via Google OAuth or edge cases had auth.users rows but no profiles row, causing "Profile not found" 400 errors on daily reward claims and profile fetches. Now profile.php, auth.php (login), and daily-reward.php all auto-create the profile if missing. Also backfilled 4 missing profiles directly in the database. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Ludo: - Replace pure-random dice with weighted system (drama when stuck, catch-up boost, domination penalty) - Enhanced VFX: screen flash on captures, bigger confetti on wins, panel pulse on finish - Turbo mode after 12 min: 60% faster bots, doubled animation speed, fewer dice frames Domino: - Fix tile proportions from 40x70 (1.75:1) to 36x72 (correct 2:1 ratio) - Increase chain layout GAP from 3 to 6 for better readability - Add target score selection (50/100/150) in bot mode room picker - Endgame tension alerts when opponent has 1-2 tiles remaining - Last-tile confetti burst + enhanced result screen with crown Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Full end-to-end implementation with DB, API, frontend, and realtime sync: - Block/Mute: player_blocks table, block checks in chat/matchmaking/invites, blocked-list UI in settings, block/mute buttons in opponent menu - View Other Player's Profile: friendship_status, block_status, action buttons (add friend/challenge/message/block), spectate live indicator - Groups: create/join/leave, group chat with realtime, game invites with accept flow, member management (add/remove), notifications - Spectate: find-active-match API, chess spectate scene with live board updates, tournament spectate buttons, profile "watching live" indicator DB migrations: groups + group_members tables, chat_messages columns added. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Missing file caused blank screen after deploy. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Cache-Control no-store headers + version query strings to bust existing cached files on user devices. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Guest mode: play vs bots without account, locked multiplayer/social tabs - Google OAuth sign-in/sign-up via Supabase with auto-profile creation - Delete account flow (password verify for email, confirm for OAuth) - Privacy policy + Terms of Service pages (bilingual AR/EN) - PWA manifest with app icons - Age confirmation checkbox on registration - Legal links in login, register, and settings Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 06 Jun, 2026 16 commits
-
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- friends.php: create domino invites in domino_matches table (not chess matches) - friends.php: check-invites scans domino_matches + ludo_matches tables - friends.php: accept/decline route to correct game table by game_key - domino-match.php: merge hands on move (preserve other player's hand data) - game.js: host deals and syncs both hands; guest waits for deal via polling - game.js: new rounds in live mode dealt by host only - lobby.js: pass playerIndex from accept response - chat.js: add domino option to in-chat challenge dialog - friends.js: pass game_key on accept/decline calls Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Snap radius 45→60 for easier endpoint tapping - hitTestEndpoints only checks currently active (highlighted) endpoints - Empty board returns hit on any canvas tap when endpoint is active - Simplified pointerdown handler (no early endpoint intercept) Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Layout engine: - Non-doubles are landscape (w=48, h=24) in horizontal chains - Doubles are portrait (w=24, h=48) perpendicular to horizontal chains - Tiles positioned touching each other with GAP=3px between - Properly computes half-extents for advance distance - Endpoints positioned beyond last tile in chain direction Tile renderer: - Uses w>h to detect landscape orientation (no rotation param needed) - Left/right pips in landscape, top/bottom pips in portrait - Doubles get accent background Board: - Ghost and animate tiles compute orientation from layout dirIdx - No rotation applied (dimensions are pre-computed correctly) Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Empty board now returns hit on any board tap when active endpoint set - Status text updates immediately when tile is selected/deselected Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Theme: - Replace green felt table with dark navy (#0f1623) matching app identity - Gold accent (#E4AC38) replaces green for highlights and UI elements - Tiles have warm ivory (#F5F0E8) with subtle shadows on dark bg - All UI bars/controls use app's #0f0f1e background Layout engine rewrite: - Chain starts from center, grows outward naturally - Proper double placement (perpendicular to chain direction) - Non-doubles align correctly with chain direction - Snake path with smooth turns at virtual bounds Interaction (tap-to-confirm): - Tap tile → highlights valid endpoints on board - Tap highlighted endpoint → confirms placement - NEVER auto-places on tap — always requires explicit destination - Tap same tile again → deselects it - Status shows "اختر مكان الوضع" when tile is selected Board improvements: - Pan gesture: drag on empty board area to scroll - Auto-zoom: smoothly zooms out as chain grows large - Endpoint glow uses gold dashed-ring indicator Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
When touchend fires without updating pointer coordinates (common in headless environments and some mobile browsers), the proxy position is used to re-check endpoint hit test before deciding placement. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Previously, tapping a tile that could play on both ends would highlight board endpoints and require a separate canvas tap. Now a second tap on the same tile auto-places it on the right end, matching mobile UX expectations. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Added touchend listener as fallback in DominoDrag for browsers/envs where pointerup doesn't fire after touch events - Added auto-pass (1.5s timeout) when player is blocked and boneyard is empty — prevents game from stalling Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Styles were injected before hand/drag were instantiated, resulting in zero-dimension tiles (CSS classes never added to page). Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Full mobile domino implementation with all 6 phases: - Canvas board with snake-path layout, endpoint glow, ghost preview - HTML fan hand with drag-and-snap + tap-to-play controls - 3-level bot AI (beginner/intermediate/expert) with server records - Live multiplayer via polling (match-live.js integration) - Emote system, resign sync, disconnect handling - Multi-round scoring (first to 100), round overlays - Server API (domino-match.php) with Elo, coins, XP rewards - Bot difficulty picker, friend challenge flow, lobby integration Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- match-live.js: always forward poll data to game (not only on move_count change) This was the root cause — resign/draw don't increment move_count, so the game never processed the status change or game_state update - game.php: all match operations now use supabaseService() to bypass RLS (handleGameMove, handleResign, handleComplete all failed silently with user token) - Add dedicated 'draw' action in game.php that atomically marks match completed - Draw acceptance now calls action:'draw' instead of writing game_state only - handleResign validates match isn't already completed (prevents double-resign) Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Add friend_messages table + chat.php API (send, history, unread) - Add chat scene with real-time polling, day dividers, invite from chat - Add game lobby scene (waiting room before match starts) - Add "Challenge Friend" button on play home screen - Add challenge-friend scene with friend picker + game/time selector - Remove ad banner from chess, polish layout for all screen sizes - Fix Ludo layout (broken #ludo-wrap div, board now fills space properly) - Route invite acceptance through lobby instead of direct game push - Add
💬 chat button on friend cards in social scene Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
- Add friend button shows success/already-sent/already-friends status - Profile button navigates to player profile view - Report button shows confirmation before dismissing Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-