storebound/examples/demo-app
CRT 7e26941ffc aso: competitors, suggest and audit from official data; ASO card on the Growth tab
- aso competitors: top apps per keyword from the iTunes Search API (name, developer,
  rating count, release / update dates, localized genre), coverage gaps (words of 2+
  developers), new entrants vs the last snapshot (.storebound/aso/competitors/)
- aso suggest: candidates from own text, competitor names, localized category names and
  Apple Ads keyword suggestions (POST /v1/suggestions/keywords/query, relative 0-100
  popularity, only with credentials); 100-byte keyword field per locale as a diff,
  --write marks it a draft that check --aso and aso audit report
- aso audit: check --aso, free keyword room, rank trend arrows, gaps, Play short
  description / density, App Store conversion, PPO / Play experiment ideas, next 3 actions
- MCP: read-only aso_competitors, aso_suggest, aso_audit; desktop ASO card (visx rank chart)
- docs: README, aso-basics, store-pitfalls (Search API order, no Play search API), CHANGELOG;
  demo-app listing files; tests on recorded Search API and mocked Ads answers
2026-10-12 04:09:34 +08:00
..
store aso: competitors, suggest and audit from official data; ASO card on the Growth tab 2026-10-12 04:09:34 +08:00
web App screenshot style (shots.style app): calm gradient, device frame, headline + subline; demo app Tidy Lists 2026-10-11 01:47:09 +08:00
.gitignore App screenshot style (shots.style app): calm gradient, device frame, headline + subline; demo app Tidy Lists 2026-10-11 01:47:09 +08:00
README.md aso: competitors, suggest and audit from official data; ASO card on the Growth tab 2026-10-12 04:09:34 +08:00
serve.ts App screenshot style (shots.style app): calm gradient, device frame, headline + subline; demo app Tidy Lists 2026-10-11 01:47:09 +08:00
storebound.config.ts storebound scan: Google Play parity 2026-10-12 00:05:35 +08:00

Tidy Lists (demo app)

A tiny fictional list app made only to show storebound's app profile and the app screenshot style (calm gradient, a clean device frame, headline + subline, no sparkles or badges). One static page with sample data and the switches a real app needs for store captures: lang and screen (lists, list, share, account). The ids and URLs 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 app on http://127.0.0.1:8741
bun ../../cli/index.ts shots capture             # raw frames: 2 languages x phone + tablet
bun ../../cli/index.ts shots fonts               # Inter subset for the copy
bun ../../cli/index.ts shots render --size ios69,play,feature
bun ../../cli/index.ts shots gallery             # store/renders/index.html
bun ../../cli/index.ts check                     # profile checks: delete-account URL, demo account, terms URL
bun ../../cli/index.ts play data-safety --dry    # the Data safety CSV Play imports, from dataSafety in the config
bun ../../cli/index.ts aso audit                 # offline ASO report over store/appstore.md + store/listing.md
bun ../../cli/index.ts aso suggest --offline     # keyword field proposals as a diff (nothing written)

bun ../../cli/index.ts scan (offline rejection-risk scan) finds four things that are true for a fictional app and are accepted on purpose in scan.ignore of the config, each with its reason: no App Review demo account and no Play App access credentials (there is no backend to sign in to), the com.example package name (the repo placeholder, never uploaded), and no Play developer account type (there is no account). A real app with accounts must fix the first two (review-access skill), pick its own package name and set play.accountType.

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