storebound/examples/demo-game
2026-10-14 11:36:30 +08:00
..
store site: hero demo shows real CLI output in four scenes (screenshots, pre-flight, store forms, icons); demos gain dataSafety and an icon artwork 2026-10-11 03:50:16 +08:00
web Demo game: Prism Puddle (fictional, procedural canvas art) with a storebound config for screenshots, variants and video 2026-10-10 22:33:01 +08:00
.gitignore site: hero demo shows real CLI output in four scenes (screenshots, pre-flight, store forms, icons); demos gain dataSafety and an icon artwork 2026-10-11 03:50:16 +08:00
README.md storebound scan: Google Play parity 2026-10-12 00:05:35 +08:00
serve.ts Demo game: Prism Puddle (fictional, procedural canvas art) with a storebound config for screenshots, variants and video 2026-10-10 22:33:01 +08:00
storebound.config.ts template compliance answers never reach a store: init writes unanswered (dataSafety, appPrivacy, reviewNotes, ageRating, accounts, reviewAccess), older configs are recognised by the template values; check / validate / scan block, play data-safety (also --dry), console plan / fill, apple review-details and appinfo refuse. onboard --declarations replaces them on a live app: name and copyright from the stores (a copyright with a private term is left out), the rows the code proves (scan proposal, sign-up methods from auth code and login SDKs), the rest as one owner question list. play data-safety --dry prints the answers that change (old -> new, account and deletion first) against the last uploaded CSV; pitfall 60; tests 2026-10-14 11:36:30 +08:00

Prism Puddle (demo game)

A tiny fictional game made only to show storebound's screenshot and video pipeline end to end. Drops fall into puddles; tap a puddle to switch its color so the next drop matches. Everything is drawn on a canvas (no image files), and the game has the switches a real game needs for store captures: lang, seed, t (freeze at a moment), scene and auto=1 (hands-free play for video clips). The ids in storebound.config.ts are placeholders; nothing here talks to a store.

From this folder (needs Bun, ffmpeg, and Playwright's Chromium or Google Chrome):

bun serve.ts &                                  # the game on http://127.0.0.1:8740
bun ../../cli/index.ts shots capture            # raw frames: 4 languages x phone + tablet
bun ../../cli/index.ts shots fonts              # title / body fonts + Noto subsets for Japanese and Arabic
bun ../../cli/index.ts shots render --variants  # every store size, base + variant b (about 7 minutes)
bun ../../cli/index.ts shots record             # gameplay clips (autoplay) for the previews
bun ../../cli/index.ts shots video              # App Store preview + YouTube promo per language
bun ../../cli/index.ts shots check --variants   # store rules, exit 1 on errors
bun ../../cli/index.ts shots gallery            # store/renders/index.html, open it in a browser
bun ../../cli/index.ts icons                    # every icon from store/icon (artwork drawn in bg.svg + fg.svg)

Everything it writes (store/shots/frames, store/renders, store/video, store/icons, .storebound) is gitignored.

bun ../../cli/index.ts scan (offline rejection-risk scan) reports two findings, accepted on purpose in scan.ignore of the config: the com.example package name is the repo placeholder and is never uploaded (a real game picks its own), and there is no Play developer account type to set (a real game sets play.accountType). The game has no native project here, so the code checks (ATT, purpose strings, privacy manifest) have nothing to read.