diff --git a/docs/superpowers/specs/2026-06-13-phase6-design.md b/docs/superpowers/specs/2026-06-13-phase6-design.md new file mode 100644 index 0000000..07d440f --- /dev/null +++ b/docs/superpowers/specs/2026-06-13-phase6-design.md @@ -0,0 +1,104 @@ +# Phase 6 — Localization Finalize + Icon + Juice + Store Assets (Design) + +**Date:** 2026-06-13 +**Status:** Approved (owner approved design 2026-06-13) + +## Context + +Phases 0–5 are complete (gameplay, seasons, endless, commercial polish, remote +content, Firebase analytics, AdMob + IAP). Phase 6 is the pre-release polish +round. The master plan assumed AI-generated background/tilesheet **images**, but +Phase 3.5 implemented all in-game visuals **procedurally** (CustomPainter glossy +tiles, painted season backgrounds). So image assets are NOT needed for gameplay; +the only image deliverables are the **app icon** and **store graphics**, both of +which are produced as vectors in the game's existing visual language — no +external AI image generation required. + +Owner is a non-developer; Claude produces all code and all vector art. + +## Visual identity (established, reused here) + +- Deep navy background gradient `#101736 → #192555 → #2C3168` (season-1 palette). +- Glossy rounded blocks in four brand colors: pink `#FF7EB3`, yellow `#FFD166`, + cyan `#6FCDF5`, green `#7EDB9C` (each rendered light→base→dark vertical + gradient + a soft white highlight ellipse near the top — same look as the + in-game `paintGlossyTile`). + +## Workstreams + +### 1. App icon (DECIDED: "Clean 2×2 block mark") + +- Composition: rounded-square, deep-navy background, a centered 2×2 grid of the + four glossy brand-color blocks (pink top-left, yellow top-right, cyan + bottom-left, green bottom-right). No cherry-blossom accent (icon must be a + permanent, season-independent brand asset). Mirrors the existing in-app + `_logoMark`. +- Blocks kept within the central safe zone so Android's circular/rounded mask + never clips them. +- Deliverables: + - A master **SVG** committed to the repo (source of truth). + - A **1024×1024 PNG**, opaque (no alpha) for the iOS App Store. + - **Android adaptive icon**: foreground = the 2×2 blocks (transparent + surround), background = the navy gradient (flat or gradient drawable). + - All platform sizes generated via the `flutter_launcher_icons` package + (config in `pubspec.yaml` / `flutter_launcher_icons.yaml`), replacing the + default Flutter icon on both platforms. +- Tooling: rasterize SVG→PNG with a deterministic, scriptable converter + (`rsvg-convert`, or a tiny Dart/`image` script, or `flutter_svg` render). The + conversion command is checked in so the icon can be regenerated. + +### 2. Localization finalize (EN + KO) + +- Audit every user-facing screen for hardcoded (non-l10n) strings; move any to + ARB. Screens to sweep: splash, season title, home, season map, game (HUD + + result overlays), settings, tutorial, snackbars. +- Verify EN copy is store-quality and KO copy reads natively (no machine-y + phrasing). +- **KO integrity pass:** run the app under the `ko` locale on the simulator and + confirm no text overflow/truncation/clipping on any screen (Korean strings are + often longer/shorter than English — buttons, chips, result cards, settings + rows). Fix overflows (wrap, ellipsis, sizing) where found. +- Add any new keys introduced by workstream 3 (sound/haptics toggle labels). + +### 3. Juice / polish pass (light, on top of Phase 3.5; BGM stays on hold) + +- **Sound on/off setting** (real gap — commercial games need it): a single + toggle in Settings that enables/disables SFX, persisted in `SaveRepository` + (additive flag, saveVersion stays 1) and applied through `AudioService`. The + same flag also gates gameplay haptics (no separate haptics toggle — one + "Sound & vibration" control keeps Settings simple). +- **Settings screen theming:** the just-added Settings screen is a plain + `ListView`; give it the game's look (transparent scaffold over + `SeasonBackground`, themed text/cards) so it matches the rest of the app. +- **Button press feedback:** subtle scale-on-press for the primary buttons + (home Adventure/Classic, map nodes) for a more tactile "game" feel. +- **Screen transitions:** a gentle shared fade(-through) transition for + home → map → game navigation instead of the default platform slide. + +### 4. Store assets + +- **Feature graphic (Play, 1024×500):** navy + glossy blocks + "Block Seasons" + wordmark + a short tagline, in the icon's visual language. Produced as vector + → PNG and committed under `docs/store/`. +- **Screenshots:** captured from the running app on the simulator — home, + season map, gameplay (mid-combo), stage win (stars), endless game-over — in + **both EN and KO**. Stored under `docs/store/screenshots//`. +- Exact per-store framing/sizes (iOS 6.7"/6.5", Play phone) are finalized at + submission time in **Phase 7**; Phase 6 captures the raw, clean source shots. + +## Out of scope (explicit) + +- BGM / music (on hold by prior decision). +- AI-generated raster backgrounds/tilesheets (visuals are procedural). +- Real AdMob unit IDs and store IAP product creation (owner prerequisites, + tracked for the Phase 5 finalize step between Phase 6 and Phase 7). +- Final per-store screenshot framing (Phase 7). + +## Success criteria + +- Real app icon shows on both iOS and Android (no default Flutter icon). +- KO full play-through has zero text overflow/clipping; no hardcoded strings. +- Sound toggle works and persists across relaunch. +- Feature graphic + EN/KO screenshot set committed under `docs/store/`. +- `flutter analyze` clean; full test suite green (≥169, plus any new tests for + the sound-setting persistence).