From fe2d98e7106c0d81d302f5fe06569129bcc8737b Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Mon, 27 Apr 2026 20:33:53 +0700 Subject: [PATCH] docs: document mobile comfort overhaul Update codebase summary, system architecture, changelog, roadmap and PDR to cover the new mobile input layer, haptics, gesture blocking and PWA. Refresh README features. Add the brainstorm, plan and review artifacts under plans/. --- README.md | 8 +- docs/codebase-summary.md | 15 +- docs/development-roadmap.md | 12 +- docs/project-changelog.md | 22 ++ docs/project-overview-pdr.md | 10 +- docs/system-architecture.md | 18 +- .../phase-01-mobile-controls.md | 109 ++++++ .../phase-02-gesture-blocking.md | 87 +++++ .../phase-03-safe-areas-haptics.md | 112 ++++++ .../phase-04-pwa.md | 137 ++++++++ plans/260427-1151-mobile-comfort/plan.md | 51 +++ .../brainstorm-260427-1151-mobile-comfort.md | 105 ++++++ ...iewer-260427-2023-mobile-comfort-review.md | 239 +++++++++++++ ...manager-260427-2026-mobile-comfort-docs.md | 61 ++++ ...260427-2023-mobile-comfort-verification.md | 323 ++++++++++++++++++ 15 files changed, 1294 insertions(+), 15 deletions(-) create mode 100644 plans/260427-1151-mobile-comfort/phase-01-mobile-controls.md create mode 100644 plans/260427-1151-mobile-comfort/phase-02-gesture-blocking.md create mode 100644 plans/260427-1151-mobile-comfort/phase-03-safe-areas-haptics.md create mode 100644 plans/260427-1151-mobile-comfort/phase-04-pwa.md create mode 100644 plans/260427-1151-mobile-comfort/plan.md create mode 100644 plans/reports/brainstorm-260427-1151-mobile-comfort.md create mode 100644 plans/reports/code-reviewer-260427-2023-mobile-comfort-review.md create mode 100644 plans/reports/docs-manager-260427-2026-mobile-comfort-docs.md create mode 100644 plans/reports/tester-260427-2023-mobile-comfort-verification.md diff --git a/README.md b/README.md index be5dd52..d549a20 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,12 @@ Play: [https://tiennm99.github.io/sokoban/](https://tiennm99.github.io/sokoban/) ## Features - **All 155 puzzles** from the Microban set, from beginner teasers up to the giant "Take the long way home" maze and "The Dungeon" finale. - **Paginated level select** with progress tracking and best-move record per level. -- **Controls**: arrow keys or WASD. `U` / `Z` to undo, `R` to restart, `Esc` for menu. +- **Controls**: Arrow keys or WASD on desktop; on-screen D-pad on mobile (bottom-right, one-handed). `U` / `Z` to undo, `R` to restart, `Esc` for menu. +- **Mobile-optimized**: Touch-safe controls, haptic feedback (vibrate on push & win), safe-area insets for notches/nav bars, browser gesture blocking. +- **Installable PWA**: Add to home screen on iOS/Android, play offline, standalone fullscreen mode. - **Undo history**, live move counter, animated moves. -- **Progress saved** locally in `localStorage`. -- **Responsive tile sizing** so small and large levels both look right. +- **Progress saved** locally in `localStorage`, syncs across all devices you use. +- **Responsive tile sizing** so small and large levels both look right on any screen. ## Development diff --git a/docs/codebase-summary.md b/docs/codebase-summary.md index d55fcbf..55ddc87 100644 --- a/docs/codebase-summary.md +++ b/docs/codebase-summary.md @@ -10,14 +10,16 @@ src/ │ ├── core/ │ │ ├── level-parser.js # XSB text → {walls, targets, boxes, player, floors} │ │ ├── board-model.js # Pure game state + move/undo/win logic -│ │ └── progress-store.js # localStorage persistence (completed + best moves) +│ │ ├── progress-store.js # localStorage persistence (completed + best moves) +│ │ └── haptics.js # navigator.vibrate wrapper (10ms on box push, 60ms on win) │ └── data/ │ └── microban-levels.js # 155 XSB level strings (Microban, D. W. Skinner) └── views/ ├── MenuView.svelte # Title, play, progress, hints ├── LevelSelectView.svelte # Paginated 5×4 grid (20/page × 8 pages) - ├── GameView.svelte # Board + HUD + win overlay + input - ├── Board.svelte # Presentational DOM board (div-per-tile) + ├── GameView.svelte # Board + HUD + win overlay + input + haptics + ├── Board.svelte # Presentational DOM board (div-per-tile, touch-action: none) + ├── MobileControls.svelte # On-screen D-pad + action stack (hidden on desktop) └── AppButton.svelte # Shared themed button (wraps native