storebound/examples/demo-game/README.md
CRT 84ef94253c storebound scan: Google Play parity
Play rules verified against the live Policy Center / Play Console Help pages
(checked 2026-10-11, cited in cli/lib/scan/play-rules.ts): restricted
permissions and their declarations (background location, photo / video, All
files access, AccessibilityService, REQUEST_INSTALL_PACKAGES, Health Connect,
full-screen intent, VpnService), prominent disclosure and the in-app privacy
policy, Data safety vs SDK disclosures, Families (certified ad SDKs, AD_ID,
location), AD_ID on targetSdk 33+, 16 KB page sizes (Unity, React Native, NDK,
AGP, prebuilt .so), testing for new personal accounts, Play metadata, ads at
launch, payments outside Play Billing, impersonation. Detection reads manifest
components, accessibility configs, strings.xml, native toolchain versions and a
local build's merged manifest. New fixtures and tests; README table per store.
2026-10-12 00:05:35 +08:00

2 KiB

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.