|
| 1 | +# GitHub Marketplace listing plan |
| 2 | + |
| 3 | +How the hosted OpenCoven GitHub App gets listed, priced, and paid on GitHub |
| 4 | +Marketplace. The tier matrix and dollar figures live in |
| 5 | +[pricing.md](pricing.md); the enforcement behind every promise — including |
| 6 | +purchase-driven entitlements — is already in the adapter. This document is |
| 7 | +the launch runbook for the listing itself. |
| 8 | + |
| 9 | +## Why Marketplace (and not Stripe first) |
| 10 | + |
| 11 | +- The buyer's unit is the **GitHub App installation** — exactly what |
| 12 | + Marketplace sells. Choose plan → install → billed on the existing GitHub |
| 13 | + invoice. No card form, no separate account, no procurement detour. |
| 14 | +- `marketplace_purchase` webhooks feed the adapter's entitlement tables |
| 15 | + directly (account plan + installation mapping), so a purchase provisions |
| 16 | + service with **zero operator action**. |
| 17 | +- Native 14-day free trials match the launch posture in |
| 18 | + [pricing.md](pricing.md) without building trial logic. |
| 19 | + |
| 20 | +**Fallback:** if listing review stalls, Stripe Checkout keyed to the |
| 21 | +installation id ships in days — the entitlement layer is billing-source |
| 22 | +agnostic (`account_plans.source`), only the webhook origin differs. |
| 23 | + |
| 24 | +## Plans to publish |
| 25 | + |
| 26 | +| Marketplace plan | Price | Trial | Maps to | |
| 27 | +|---|---|---|---| |
| 28 | +| Hosted Starter | $99/mo (flat) | 14 days | `starter`: 1 familiar, 25 tasks/day, 1 concurrent | |
| 29 | +| Hosted Team | $399/mo (flat) | 14 days | `team`: up to 4 familiars, 150 tasks/day, 4 concurrent | |
| 30 | + |
| 31 | +Notes: |
| 32 | + |
| 33 | +- **Plan names must contain "Starter" / "Team"** — the adapter classifies |
| 34 | + plan names by substring, and unknown names fail safe to Starter limits. |
| 35 | + Keep tier words in any future rename. |
| 36 | +- **Hosted Dedicated is not listed.** Custom contracts, annual billing, and |
| 37 | + SLAs don't fit Marketplace plan mechanics; Dedicated is sales-led with |
| 38 | + direct invoicing, provisioned via an explicit `[[installations]]` entry |
| 39 | + (which always wins over plan defaults). |
| 40 | +- No free Marketplace plan: Community (self-host) is the free tier. |
| 41 | + |
| 42 | +## Requirements checklist |
| 43 | + |
| 44 | +Marketplace listing requirements, mapped to their current state: |
| 45 | + |
| 46 | +- [x] App handles `marketplace_purchase` events (purchase, change, cancel, |
| 47 | + trial) — adapter webhook route, idempotent + audited. |
| 48 | +- [x] Plan limits enforced server-side — intake daily cap, claim-time |
| 49 | + concurrency, `require_plan` paid gate. |
| 50 | +- [x] Customer data deleted on uninstall — delete-on-uninstall purge. |
| 51 | +- [ ] App set **public** (the hosted App only; the self-host manifest in |
| 52 | + [app-manifest.json](app-manifest.json) stays private-by-default). |
| 53 | +- [ ] Publisher verification for the OpenCoven org (profile complete, |
| 54 | + 2FA enforced, domain verified). |
| 55 | +- [ ] Support URL and contact email. |
| 56 | +- [ ] Privacy policy and terms of service URLs (data boundaries are already |
| 57 | + written down in [HOSTED.md](../HOSTED.md) — the policy formalizes them). |
| 58 | +- [ ] Pricing plans created in the listing matching the table above. |
| 59 | +- [ ] Listing draft submitted for review. |
| 60 | + |
| 61 | +## Listing copy (from HOSTED.md) |
| 62 | + |
| 63 | +- **Name:** OpenCoven — hosted familiars for GitHub |
| 64 | +- **Tagline:** Assign it like a teammate. Get a PR back. |
| 65 | +- **Description:** OpenCoven lets your team deploy a trusted familiar to |
| 66 | + GitHub. It knows your repo context, follows your skills and review norms, |
| 67 | + drafts PRs under Cave oversight, and gets better as it works with your |
| 68 | + team. Bring your own model keys — we never mark up tokens. What you buy is |
| 69 | + managed reliability: durable queue, isolated workers, audit trail, familiar |
| 70 | + memory, and multi-familiar routing. |
| 71 | +- **Categories:** AI Assistants / Code review / Project management |
| 72 | +- **Screenshots:** issue assignment → Check Run → familiar-voice draft PR → |
| 73 | + Cave dashboard (record from the reference demo, `examples/demo/run-demo.sh`). |
| 74 | + |
| 75 | +## Hosted deployment configuration |
| 76 | + |
| 77 | +The hosted control plane runs with: |
| 78 | + |
| 79 | +```toml |
| 80 | +[billing] |
| 81 | +require_plan = true # installations without an entitled plan (or an |
| 82 | + # explicit [[installations]] entry) are recorded |
| 83 | + # ignored:no_plan |
| 84 | +``` |
| 85 | + |
| 86 | +Self-hosted deployments never set this; the default is off. |
| 87 | + |
| 88 | +## Launch sequence |
| 89 | + |
| 90 | +1. Verify the OpenCoven publisher org; add support/privacy/terms URLs. |
| 91 | +2. Make the hosted App public; confirm `marketplace_purchase` deliveries |
| 92 | + reach the production webhook (Marketplace sends them to the App's |
| 93 | + webhook URL). |
| 94 | +3. Create the two paid plans with 14-day trials; enable the OSS-organization |
| 95 | + discount decision from [pricing.md](pricing.md) open decisions if |
| 96 | + approved. |
| 97 | +4. Submit the listing for review; run one end-to-end purchase in a sandbox |
| 98 | + org (purchase → trial → task accepted; cancel → `ignored:no_plan`). |
| 99 | +5. Flip `require_plan = true` on the hosted deployment at listing go-live, |
| 100 | + with existing beta installations grandfathered via `[[installations]]` |
| 101 | + entries until they purchase. |
0 commit comments