Files
BlockSeasons/docs/superpowers/specs/2026-06-13-phase6-design.md
T
airkjw 84a6749b5e docs: Phase 6 design spec (icon + l10n finalize + juice + store assets)
App icon = clean 2x2 glossy block mark (vector, no AI image). l10n EN/KO
finalize + KO overflow pass. Light juice: sound/haptics toggle, themed
settings, button press feedback, screen transitions. Store feature graphic +
EN/KO screenshots. Procedural visuals mean no raster background assets needed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 15:06:39 +09:00

105 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 6 — Localization Finalize + Icon + Juice + Store Assets (Design)
**Date:** 2026-06-13
**Status:** Approved (owner approved design 2026-06-13)
## Context
Phases 05 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/<locale>/`.
- 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).