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:
Den
2026-07-17 19:49:47 -07:00
committed by GitHub
parent c9ec92d8b7
commit 1ea84f8236
10 changed files with 220 additions and 37 deletions

View File

@@ -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)

View File

@@ -88,7 +88,7 @@
<header>
<h1>OpenCode Mobile — Privacy Policy</h1>
<p class="meta">
Effective date: 2026-05-24 &nbsp;|&nbsp;
Effective date: 2026-07-18 &nbsp;|&nbsp;
Operator: VIBE TECHNOLOGIES, LLC &nbsp;|&nbsp;
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>
&copy; 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>

View File

@@ -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.