chore(launch): reconcile README/store live-status + add demo-funnel analytics (#111)
Two scoped changes for the no-spend growth launch (Growth Launch Kit,
Notion page 3a1ac25eb49f81099cc9f3a4286c8ec4):
1. README.md and distribution/play-listing.md said Google Play was
"coming soon" / internal-testing-only, while distribution/retention-analysis.md
and the live play.google.com listing show it's actually public with 1K+
installs. Fixed the contradiction, added Google Play as a third install
channel, and added an accurate mention of the new offline demo mode
("Try a Demo" — reasoning, grep, diff, permission prompt, ~30s, no server)
matching what app/demo.tsx + src/lib/demo-script.ts actually render.
play-listing.md's stale pre-launch checklists are marked historical
instead of rewritten, so #83's ASO copy/keyword work is untouched.
2. Added the demo funnel's key metric (demo-completion, per the launch
kit) as four consent-gated PostHog events: demo_started,
demo_step_advanced, demo_completed, demo_exited_to_connect. Pure
property-derivation logic lives in src/lib/demo-analytics.ts (no
RN/PostHog imports, unit-tested with node --test, same pattern as
analytics-classify.ts) and is wired into app/demo.tsx's lifecycle.
Updated docs/analytics.md's event table and the privacy policy's event
list (distribution/privacy-policy.md + its two HTML mirrors) per the
repo's "new event requires a policy update" convention.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,14 @@
|
||||
# Google Play Store Listing — OpenCode Mobile
|
||||
|
||||
Copy-paste reference for completing the Play Console store listing for `cc.agentlabs.opencode`.
|
||||
Copy-paste reference for the Play Console store listing for `cc.agentlabs.opencode`.
|
||||
Paste these values directly into Play Console. Fields are validated against Play limits.
|
||||
|
||||
> **Status: live.** The app is publicly available on the production track —
|
||||
> https://play.google.com/store/apps/details?id=cc.agentlabs.opencode (1K+ installs;
|
||||
> see `distribution/retention-analysis.md`). The "First release strategy" and "Pending
|
||||
> before first publish" sections below are kept as a historical record of how it got
|
||||
> there — do not read them as the current state.
|
||||
|
||||
---
|
||||
|
||||
## Main store listing
|
||||
@@ -322,25 +328,28 @@ Bump this file before tagging a release. Keep it under 500 chars. Per-language v
|
||||
|
||||
---
|
||||
|
||||
## First release strategy
|
||||
## First release strategy (historical — completed)
|
||||
|
||||
1. **Internal testing** track first (up to 100 testers, no review) — what CI is wired for.
|
||||
1. **Internal testing** track first (up to 100 testers, no review) — what CI was wired for.
|
||||
2. **Closed testing** — 14+ days, 12+ testers required for new org accounts before promoting to production (Google's 2023 policy).
|
||||
3. **Open testing** — optional intermediate step.
|
||||
4. **Production** — only after Closed testing requirements met.
|
||||
|
||||
CI currently publishes to `internal` track. ✅
|
||||
Result: the app cleared this path and is now live on the production track (see the
|
||||
status note at the top of this file). CI's default dispatch track (`internal`) is
|
||||
still used for routine test builds; production releases are dispatched explicitly
|
||||
(`track=production`) — see `.github/workflows/publish-play-store.yml`.
|
||||
|
||||
---
|
||||
|
||||
## Pending before first publish
|
||||
## Pending before first publish (historical — resolved)
|
||||
|
||||
- [ ] Identity verification (government ID upload, Google review)
|
||||
- [ ] App icon (real PNG, not placeholder)
|
||||
- [ ] Adaptive icon (real PNG)
|
||||
- [ ] Feature graphic 1024×500
|
||||
- [ ] At least 2 phone screenshots
|
||||
- [ ] Privacy policy live at https://dzianisv.github.io/opencode-mobile/privacy/
|
||||
- [ ] Decide pricing model
|
||||
- [ ] Run IARC content rating questionnaire (after app created in Play Console)
|
||||
- [ ] Complete Data safety form (after app created in Play Console)
|
||||
- [x] Identity verification (government ID upload, Google review)
|
||||
- [x] App icon (real PNG, not placeholder)
|
||||
- [x] Adaptive icon (real PNG)
|
||||
- [x] Feature graphic 1024×500
|
||||
- [x] At least 2 phone screenshots
|
||||
- [x] Privacy policy live at https://dzianisv.github.io/opencode-mobile/privacy/
|
||||
- [x] Decide pricing model (free, no ads, no IAP)
|
||||
- [x] Run IARC content rating questionnaire (after app created in Play Console)
|
||||
- [x] Complete Data safety form (after app created in Play Console)
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
<header>
|
||||
<h1>OpenCode Mobile — Privacy Policy</h1>
|
||||
<p class="meta">
|
||||
Effective date: 2026-05-24 |
|
||||
Effective date: 2026-07-18 |
|
||||
Operator: VIBE TECHNOLOGIES, LLC |
|
||||
App: OpenCode Mobile (<code>cc.agentlabs.opencode</code>)
|
||||
</p>
|
||||
@@ -232,6 +232,27 @@
|
||||
<td>An agent response finishes</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>demo_started</code></td>
|
||||
<td>You open the offline "Try a Demo" screen (no server, no network)</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>demo_step_advanced</code></td>
|
||||
<td>You reply to the demo's scripted permission prompt</td>
|
||||
<td><code>step_index</code>, <code>step_name</code>, <code>reply</code> ("once", "always", or
|
||||
"reject")</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>demo_completed</code></td>
|
||||
<td>The scripted demo reaches its end</td>
|
||||
<td><code>outcome</code> ("completed" or "denied")</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>demo_exited_to_connect</code></td>
|
||||
<td>You tap "Connect your own server" on the demo's CTA</td>
|
||||
<td><code>reached_completion</code> (true/false)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -239,7 +260,8 @@
|
||||
What analytics events <strong>never</strong> contain: your server URL, hostname, IP address,
|
||||
or port; prompts, messages, or AI responses; code or file contents; tokens or credentials;
|
||||
raw error messages. Connection failures are reduced to a fixed list of coarse categories
|
||||
before being sent.
|
||||
before being sent. The demo screen is fully offline and hardcoded — these events describe
|
||||
interaction with the scripted walkthrough, never real session content.
|
||||
</p>
|
||||
<p>
|
||||
Analytics data is sent to PostHog's <strong>EU region</strong> (<code>eu.i.posthog.com</code>)
|
||||
@@ -462,7 +484,7 @@
|
||||
|
||||
<footer>
|
||||
© 2026 VIBE TECHNOLOGIES, LLC. OpenCode Mobile is MIT-licensed open-source software.
|
||||
Privacy policy effective 2026-05-24.
|
||||
Privacy policy effective 2026-07-18.
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# OpenCode Mobile — Privacy Policy
|
||||
|
||||
**Effective date:** 2026-05-24
|
||||
**Effective date:** 2026-07-18
|
||||
**Operator:** VIBE TECHNOLOGIES, LLC
|
||||
**App:** OpenCode Mobile (`cc.agentlabs.opencode`)
|
||||
|
||||
@@ -63,8 +63,12 @@ Events collected, with their only properties:
|
||||
| `connection_failed` | The connection test fails | `source`, `error_class` (a coarse category such as "timeout" or "unauthorized" — never the raw error text) |
|
||||
| `message_sent` | You send a message to an agent session | — |
|
||||
| `response_received` | An agent response finishes | — |
|
||||
| `demo_started` | You open the offline "Try a Demo" screen (no server, no network) | — |
|
||||
| `demo_step_advanced` | You reply to the demo's scripted permission prompt | `step_index`, `step_name`, `reply` ("once", "always", or "reject") |
|
||||
| `demo_completed` | The scripted demo reaches its end | `outcome` ("completed" or "denied") |
|
||||
| `demo_exited_to_connect` | You tap "Connect your own server" on the demo's CTA | `reached_completion` (true/false) |
|
||||
|
||||
What analytics events **never** contain: your server URL, hostname, IP address, or port; prompts, messages, or AI responses; code or file contents; tokens or credentials; raw error messages. Connection failures are reduced to a fixed list of coarse categories before being sent.
|
||||
What analytics events **never** contain: your server URL, hostname, IP address, or port; prompts, messages, or AI responses; code or file contents; tokens or credentials; raw error messages. Connection failures are reduced to a fixed list of coarse categories before being sent. The demo screen is fully offline and hardcoded — these events describe interaction with the scripted walkthrough, never real session content.
|
||||
|
||||
Analytics data is sent to PostHog's **EU region** (`eu.i.posthog.com`) and is identified only by a random, app-generated anonymous ID — not linked to your name, email, or any account.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user