storebound/docs/project.md
CRT 710c3a53d0 README, docs and site: one story (the whole job, no avoidable rejections, the desktop app, your AI, install)
README is a short front page (about 120 lines) with one real visual per section; every former section moved
unchanged into docs/*.md with a docs/README.md index (journey, rejections, getting-started, commands, growth,
studios, store-art, listing-languages, api, skills, mcp, safety, faq, project). The site tells the same story on one
page: the teaser in the hero, real CLI output as text, the desktop app as a section with light/dark captures of eight
screens and the per-system downloads (desktop/latest.json); /desktop/ redirects to /#download. New capture tools:
tools/site-desktop-shots.ts (fixture-mode desktop frames) and tools/site-term-shots.ts (real CLI output as text and
WebP). tests/docs-links.test.ts checks README, docs and site links resolve.
2026-10-13 03:29:59 +08:00

99 lines
6.3 KiB
Markdown

# Roadmap, contributing and credits
## Roadmap
Wave 2 (TestFlight, vitals, review replies, price sheets, analytics, MCP 2026-07-28, Product Page Optimization) shipped
in 0.4.0. 0.5.0 made storebound app-first (profiles, app screenshot style, account deletion, review access) and
brought the full in-app catalog: subscriptions on both stores with offers and offer codes, non-renewing products and
the cross-store `catalog diff`. Next, roughly in this order:
- Play prepaid base plans for `non_renewing`.
- The App Asset Library (API 4.5.1) for screenshots, custom product pages and in-app events once the screenshot sets
it replaces stop working.
- Play store listing experiments and their results, as soon as Google offers an API.
- App preview treatments and alternate icons in Product Page Optimization tests.
- The iPhone Duo screenshot classes Apple lists for apps built with the iOS 27.1 SDK (required from April 2027).
## Contributing
Issues and pull requests are welcome: store rule updates (with a source), new capture sources, adapters for more AI
tools. See [CONTRIBUTING.md](../CONTRIBUTING.md); `bun run ci` must be green.
<details>
<summary><b>Agent support: formats and what is not verified</b></summary>
Checked against each tool's own docs in October 2026:
- **Agent Skills**: frontmatter is only `name` (lowercase-hyphen, equals the folder) and `description`; the generator
fails if a skill adds anything else.
- **Claude Code**: plugin manifest + root `.mcp.json` with `${CLAUDE_PLUGIN_ROOT}`; `claude plugin validate .` passes.
- **Codex**: `.codex-plugin/plugin.json` with `"skills": "./skills/"`. Not verified: whether Codex starts the root
`.mcp.json` from a plugin and expands `${CLAUDE_PLUGIN_ROOT}` there, so use `install --agent codex` for the MCP
server. OpenAI also documents a newer portable root `plugin.json`; not shipped yet.
- **Gemini CLI**: `gemini-extension.json` with `${extensionPath}${/}`, `GEMINI.md` as context, `skills/` inside the
extension. Google now points unpaid users to Antigravity CLI; not tested there. The `.gemini/skills` folder used by
`install --agent gemini` is not verified (the extension route is).
- **Windsurf**: the current docs name `~/.config/devin/mcp_config.json`; `install` keeps using
`~/.codeium/windsurf/mcp_config.json` when that file already exists (older installs).
- **MCP**: built for 2026-07-28 (final, modelcontextprotocol.io) and dual-era: `initialize` clients get 2025-11-25
(or 2025-06-18 / 2025-03-26 / 2024-11-05). Tested with both handshakes on one stdio process, not yet against every
client listed above.
- **Not verified against a live account yet** (no credentials during development; request builders are tested with
fixtures from the official docs): the scale of the Play Reporting API rates (read as fractions, 0.0109 = 1.09 %),
the App Store review reply limit (5970 characters is commonly reported; Apple documents none, storebound only
warns), the TestFlight "What to Test" limit (4000 assumed), whether an analytics segment checksum covers the gzip
file or its content (both are accepted), that a new App Store price schedule replaces the old one (Apple's example
implies it), stopping a Product Page Optimization test with `started: false`, and `APP_IPHONE_61` for the 6.3"
iPhone set. From 0.5.0 (request bodies follow Apple's and Google's published schemas, tested with fixtures, not
yet run against a live account): free promotional offers and offer codes sent with territories but no price point,
subscription prices and introductory offers created inline through `PATCH /v1/subscriptions/{id}`, Play
pay-as-you-go offers as a `relativeDiscount`, Play "developer determined" offers as offers without targeting plus an
offer tag, the ISO 8601 strings for Play billing periods (Google lists them only in words), the Play subscription
benefit length (40, from Play Console), the Data safety sign-up method ids (`PSL_ACM_*`, Google publishes none:
compare with a Console export) and the data deletion question ids (`PSL_ACCOUNT_DELETION_URL` is confirmed by a
Play 400; `PSL_SUPPORT_DATA_DELETION_BY_USER` with its three options and `PSL_DATA_DELETION_URL` are in Google's
empty form exported 2026-10-12, `cli/data/play-data-safety-form.csv`, which every generated pair is checked
against). From the store
operations (built from the App Store Connect API 4.5.1 OpenAPI spec and the cited Help pages, tested with recorded
answers, not yet run live): the first IAP of a type sent through `reviewSubmissionItems` next to the app version
(`--no-submit` leaves the draft for the UI if Apple refuses it), free IAP offer code and win-back prices without a
price point, the order request for promoted purchases, the Play earnings / sales zip names beyond the documented
prefix (storebound lists the prefix), and where Xcode stores `AttributionCopyEndpoint` (top level or inside an
`AdAttributionKit` dictionary: both are read).
- **Apple IAP description**: 45 characters (App Store Connect Help, "In-app purchase information"); an older App Store
marketing page says 55. storebound checks 45.
</details>
<details>
<summary><b>Develop</b></summary>
```sh
bun install
bun run ci # adapters fresh (gen-adapters --check), tests, typecheck, secrets / personal data scrub
bun tools/gen-adapters.ts # after editing skills/*/SKILL.md or docs/agents-core.md
```
`skills/*/SKILL.md` and `docs/agents-core.md` are the single source; `AGENTS.md`, `GEMINI.md`, the plugin manifests,
`.github/copilot-instructions.md` and `.cursor/rules/storebound.mdc` are generated and committed, and CI fails when
they are stale.
</details>
## Thanks and idea sources
Some skills were sparked by other people's open work. I wrote my own text; the ideas deserve the credit:
- [rorkai/app-store-connect-cli-skills](https://github.com/rorkai/app-store-connect-cli-skills) (MIT): App Store Connect
workflow ideas.
- [rshankras/claude-code-apple-skills](https://github.com/rshankras/claude-code-apple-skills) (MIT): Apple platform and
App Store topic ideas.
Built with Bun and plain `fetch` against the Google Play Developer API v3, the Play Developer Reporting API and the App
Store Connect API. Screenshot
fonts come from Google Fonts at render time (Noto, Paytone One, Montserrat, Inter; SIL Open Font License 1.1). Not affiliated
with Google or Apple.
---
[All docs](README.md) · [README](../README.md)