fix(launch): Expo SDK 52->54 in HN/Reddit copy; add reply-flow E2E evidence; version refs

- Launch posts claimed Expo SDK 52 but app is on SDK 54 (factual accuracy
  before public posting — HN/Reddit devs check this)
- docs/qa/REPLY-FLOW-E2E-2026-06-08.md: verified send->streaming reply works
  against the live opencode server via app-identical sdk.ts calls (free model);
  closes the 'opencode can't reply in CI' residual at the data-contract level
- owner-submissions.md: 0.4.3 -> 0.4.4

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
engineer
2026-06-08 07:42:19 -07:00
parent bd082a4dee
commit e39cec3847
6 changed files with 296 additions and 2 deletions

View File

@@ -0,0 +1,163 @@
# Owner submission pack — account-gated directories
These directories drive real, durable discovery (organic search + their own audiences) but
**require an owner login / OAuth**, so an agent can't submit them. Everything below is
**paste-and-go**: sign in, copy each field, submit. ~10 minutes each.
> ## ⭐ TOP PRIORITY — IzzyOnDroid is the FASTEST path to the F-Droid goal (Goal #2)
>
> **Why this matters more than the mainline MR:** IzzyOnDroid (`apt.izzysoft.de`) is a
> widely-used F-Droid-protocol repository. Unlike F-Droid mainline, **it does NOT build from
> source — it ships your own signed APK straight from GitHub Releases.** That means it
> *completely bypasses* the Expo prebuilt-binary / reproducible-build wall that made the
> mainline MR (#39530) so slow, and it typically accepts apps in **days, not months**.
> Getting in satisfies goal.md condition (2) "app accepted & available in an F-Droid
> repository" **without waiting on linsui's merge.**
>
> **Our repo already meets every requirement:** MIT (FOSS) ✓, signed APK on GitHub Releases
> (`app-release.apk`, consistent key) ✓, fastlane metadata at
> `fastlane/metadata/android/en-US/` (title, descriptions, changelog `5.txt`, icon, feature
> graphic, 3 phone screenshots) ✓.
>
> **What's needed:** a free Codeberg account (2-min signup at https://codeberg.org/user/sign_up),
> then open ONE issue at **https://codeberg.org/IzzyOnDroid/repodata/issues/new** with the
> template "App Request". Paste:
>
> ```
> Title: [AppRequest] OpenCode Mobile
>
> - App name: OpenCode Mobile
> - Package id: cc.agentlabs.opencode
> - Source code: https://github.com/dzianisv/opencode-mobile
> - License: MIT (FOSS)
> - Releases (signed APK attached to each tag): https://github.com/dzianisv/opencode-mobile/releases
> - Fastlane metadata: yes — fastlane/metadata/android/en-US/ (title, short/full description,
> changelogs, icon, featureGraphic, phoneScreenshots)
> - UpdateCheckMode equivalent: GitHub Releases, tags vX.Y.Z, APK asset name app-release.apk
> - AntiFeatures: NonFreeNet (connects to a user-self-hosted opencode server which may call
> proprietary AI APIs). Crash reporting via Sentry is opt-in and OFF by default.
> - Current version: 0.4.4 (versionCode 5)
>
> Open-source Android client for the opencode AI coding agent. Connects to a server the user
> hosts themselves; all model calls use the user's own keys. No ads, no mandatory telemetry.
> ```
>
> After they add it, the install line becomes: add repo `https://apt.izzysoft.de/fdroid/repo`
> in any F-Droid client → search "OpenCode". Add that URL to the website `/download/` page and
> the marketing drafts once live. **Do this first — it's the quickest win on the whole goal.**
---
All URLs are live and verified. Do these **any time** — they don't depend on Google Play
going live. When Play is live, come back and add the Play URL where noted.
**Canonical facts (reuse everywhere):**
| Field | Value |
|---|---|
| Name | OpenCode Mobile |
| Tagline (≤60) | Drive your self-hosted AI coding agent from your phone |
| Category | Developer Tools / AI Coding |
| License | MIT (open source) |
| Platforms | Android (Linux/macOS/Windows for the opencode server) |
| Website | https://dzianisv.github.io/opencode-mobile/ |
| Install page | https://dzianisv.github.io/opencode-mobile/download/ |
| Source | https://github.com/dzianisv/opencode-mobile |
| F-Droid repo | https://dzianisv.github.io/opencode-mobile/fdroid/repo |
| Direct APK | https://github.com/dzianisv/opencode-mobile/releases/latest |
| Google Play | in review — add `https://play.google.com/store/apps/details?id=cc.agentlabs.opencode` once live |
| Screenshots | `fastlane/metadata/android/en-US/images/phoneScreenshots/02.png` (diff+approve — best), `03.png`, `01.png` |
| Icon | `distribution/play-graphics/icon-512.png` |
| Pricing | Free |
| Author | VIBE TECHNOLOGIES, LLC |
| Contact | support@vibebrowser.app |
---
## 1. AlternativeTo → https://alternativeto.net/manage-app/
Highest-value: ranks well in Google for "<tool> alternative" queries.
- **Add as alternative to:** Cursor, GitHub Copilot, Claude Code, Continue.dev, Aider (pick 2–3 most apt)
- **Name:** `OpenCode Mobile`
- **Short description (one line):**
> Free, open-source Android client for the opencode AI coding agent — run AI coding sessions from your phone against a server you host yourself.
- **Long description:**
> OpenCode Mobile is a thin Android client for opencode (the open-source AI coding agent CLI). Connect your phone to your own opencode server and run AI-powered coding sessions from anywhere: stream the agent's responses in real time, review file diffs, and approve tool calls before they run. All model calls go through YOUR server and YOUR API keys (Claude, GPT, Gemini, or local LLMs) — nothing routes through third-party infrastructure. MIT licensed, no ads, no mandatory telemetry. Install via F-Droid or a signed APK.
- **License:** Open Source — MIT
- **Platforms:** Android (server: Linux, macOS, Windows, Self-Hosted)
- **Features/tags:** AI, self-hosted, open source, coding assistant, privacy-focused, no-tracking
- **Links:** Website + Source + Install page (above)
## 2. OpenAlternative → https://openalternative.co/submit
Curated open-source directory; strong SEO + newsletter.
- **Name:** `OpenCode Mobile`
- **Website:** https://dzianisv.github.io/opencode-mobile/
- **Repository:** https://github.com/dzianisv/opencode-mobile
- **Tagline:** Drive your self-hosted AI coding agent from your phone
- **Description:**
> Open-source Android client for the opencode AI coding agent. Connect to an opencode server you run yourself and code from your phone — real-time streaming, file-diff review, and tool-call approval. Your keys, your code, your infrastructure. MIT licensed.
- **Alternative to:** Cursor, GitHub Copilot, Claude Code
- **Topics:** ai, developer-tools, self-hosted, mobile, react-native, coding-agent
## 3. LibHunt → https://www.libhunt.com/ (submit via the relevant topic, or the "Suggest" link)
- **Name:** `opencode-mobile`
- **Repo:** https://github.com/dzianisv/opencode-mobile
- **Description:** Free, open-source Android client for the opencode AI coding agent — self-hosted, MIT licensed.
- **Topic/category:** Artificial Intelligence / Developer Tools / Mobile
## 4. Slant → https://www.slant.co/ (add as an option to existing questions)
Add OpenCode Mobile as an option to questions like:
- "What are the best AI coding assistants?"
- "What are the best self-hosted developer tools?"
- **Option blurb:** Open-source (MIT) Android client for the opencode AI coding agent; self-hosted, bring-your-own-key, with diff review and tool-call approval.
## 5. SaaSHub → https://www.saashub.com/submit-service
- **Name:** OpenCode Mobile
- **Tagline:** Self-hosted AI coding agent, on your phone
- **Description:** (reuse the AlternativeTo long description)
- **Categories:** Developer Tools, AI, Open Source
- **Alternatives:** Cursor, GitHub Copilot, Claude Code
## 6. Product Hunt → https://www.producthunt.com/posts/new
Full launch-day kit (tagline, first comment, gallery shot list, maker comment, FAQ) is in
**`product-hunt.md`**. PH is a same-day event — schedule for a Tue–Thu 12:01am PT, ideally
once Play is live so the Play link can be a product link. Don't burn it on a random day.
## 7. Hacker News / Reddit / X / dev.to
Owner-posted social launch — full drafts in `show-hn.md`, `reddit-*.md`, `x-thread.md`,
`devto.md`, sequenced in `CAMPAIGN.md`. These are the single biggest download lever; they
need a logged-in account with some history to avoid auto-flagging.
---
## Already submitted by the agent (no owner action needed — awaiting maintainer merge)
Curated-list PRs are open and rules-compliant:
- tailscale-dev/awesome-tailscale#7
- ai-for-developers/awesome-ai-coding-tools#383
- jondot/awesome-react-native#1207
- mahseema/awesome-ai-tools#1463
- +awesome-cli-coding-agents#107, +awesome-coding-ai#9
If any close as "not merged," that's the maintainer's call — don't resubmit.
---
## Suggested order (highest ROI first)
1. **AlternativeTo** (durable SEO, 10 min)
2. **OpenAlternative** (SEO + newsletter, 10 min)
3. **SaaSHub** + **LibHunt** + **Slant** (15 min total)
4. **Hacker News + Reddit** social launch (see CAMPAIGN.md timing)
5. **Product Hunt** (schedule for a Tue–Thu, ideally after Play is live)
Steps 1–3 don't depend on Play and can be done today.

View File

@@ -0,0 +1,33 @@
# r/androiddev — copy-paste ready
> **Subreddit:** r/androiddev (~250k+ members, professional Android engineers)
> **Flair:** `Open Source` if available; otherwise `Showcase` / `App Showcase`. NOTE: r/androiddev is strict — pure "check out my app" promo posts get removed. This must read as an **engineering write-up**, not an ad. The framing below leads with the hard technical problems (SSE polyfill, custom diff renderer, async stream coordination), which is what survives moderation here.
> **Rules that matter here:** No low-effort self-promo; Showcase posts must include technical substance. Don't open with download links — open with the engineering. Put install links at the bottom. Be ready to discuss code.
> **Best time:** Weekday mornings ET. This sub also has a recurring "Anything Goes / App Feedback Thread" — if your standalone post is borderline, the weekly thread is a safe fallback.
> `{{PLAY_URL}}` = `https://play.google.com/store/apps/details?id=cc.agentlabs.opencode` once approved.
---
**Title:**
```
Building a streaming AI-agent client in RN/Expo: SSE polyfill quirks, a WebView-free diff viewer, and coordinating two async streams for tool-call approval
```
**Body:**
I just shipped OpenCode Mobile (open source, MIT) — an Android client for the [opencode](https://github.com/sst/opencode) AI coding agent. opencode runs as a CLI/server with an HTTP + SSE API; the app speaks that API and gives sessions a native UI. A few implementation problems were interesting enough to write up.
**1. SSE on React Native.** RN has no native `EventSource`. The web polyfill mostly works, but Android's OkHttp follows redirects and drops the `Accept: text/event-stream` header on the hop, which silently breaks reconnects against tunneled servers (Cloudflare/ngrok love to redirect). Fix was a custom fetch wrapper that re-sets the header on every hop and handles reconnect/backoff manually.
**2. Diff viewer without a WebView.** I render line-level diffs with a custom parser feeding a `FlatList` rather than embedding a WebView. Keeps dark-mode theming consistent with the rest of the app, avoids the memory/startup cost of a browser engine, and makes long diffs scroll cleanly.
**3. Tool-call approval = coordinating two async streams.** opencode pauses before destructive actions (file writes, shell commands) and waits for approval. So you have the inbound SSE stream and an outbound user decision that must rendezvous. I model it as a React Query mutation fired on approval plus an optimistic UI update that unblocks the stream client-side while the server confirms. Surfaced as a bottom sheet that interrupts the stream.
**Stack:** Expo SDK 54, TypeScript, React Query for server state, Zustand for local state, `expo-local-authentication` for biometric gating (app-open + per-send), `expo-secure-store` (Android Keystore) for connection secrets, Sentry (opt-in, off by default), signed AAB on every tag via GitHub Actions + EAS.
Source: https://github.com/dzianisv/opencode-mobile
Install / try it: https://dzianisv.github.io/opencode-mobile/download/ · F-Droid repo: https://dzianisv.github.io/opencode-mobile/fdroid/repo · APK: https://github.com/dzianisv/opencode-mobile/releases/latest · Google Play: in review — {{PLAY_URL}}
Happy to get into any of it — the SSE + approval coordination was the part I rewrote the most.

69
docs/marketing/show-hn.md Normal file
View File

@@ -0,0 +1,69 @@
# Show HN — copy-paste ready
> Post once. HN allows a single submission per project. Tue–Thu, 8:00–10:00am US Eastern is the sweet spot.
> `{{PLAY_URL}}` = swap in `https://play.google.com/store/apps/details?id=cc.agentlabs.opencode` on the day Play approval lands. Until then, leave the Play line exactly as written below.
---
**Title (use exactly — under 80 chars, no emoji, no "free"):**
```
Show HN: OpenCode Mobile – drive your self-hosted AI coding agent from your phone
```
**URL field:** `https://github.com/dzianisv/opencode-mobile`
---
**Text (paste into the "text" box if you submit as a text post; otherwise post as the first comment immediately after submitting):**
Hey HN,
I built a React Native / Expo Android app that lets you control a running [opencode](https://github.com/sst/opencode) session from your phone.
**What it does**
opencode (sst/opencode, MIT) is a terminal-based AI coding agent — you run it on your laptop or a server, it talks to Claude / GPT / Gemini / local models via your own API keys, and it writes, edits, and runs code through tool calls. OpenCode Mobile is a thin HTTP + SSE client that connects to that server process. From your phone you can:
- Watch token-by-token streaming output as the agent reasons and codes
- Review inline file diffs before they're written
- Approve or reject tool calls (file writes, shell commands) in real time
- Start, resume, and switch between sessions
- Connect over local Wi-Fi, Tailscale, Cloudflare Tunnel, or ngrok
**Why I built it**
I run long opencode sessions that outlast my desk time. I wanted to check in from the couch, approve a tool call, and let the agent keep going. The alternatives — SSH + a terminal app, or generic Claude/GPT chat apps — lose the structured session state: no diffs, no tool-call gating. The opencode HTTP API was already there; the phone just needed a real client.
**How it's built**
- React Native + Expo SDK 54, TypeScript throughout
- SSE streaming via an `EventSource` polyfill (RN has no native one); needed patching because Android's OkHttp drops the `Accept: text/event-stream` header across redirects, which breaks reconnects
- Diff rendering with a custom line-level parser into a FlatList — no WebView, so dark-mode theming stays consistent and it's cheap to render
- Biometric auth via `expo-local-authentication` gates app-open and individual sends
- Connection secrets in the Android Keystore via `expo-secure-store`
- CI builds a signed AAB on every tag via GitHub Actions + EAS
**What it is not**
Not a standalone AI model and not a code editor. You need a running opencode server. If you already use opencode, setup is:
```
npm install -g opencode-ai
OPENCODE_SERVER_PASSWORD=yourpassword opencode serve --hostname 0.0.0.0 --port 4096
```
…then paste the URL into the app. Your API keys stay on your server; nothing proxies through any backend of mine.
**Status / privacy**
Stable on Android, MIT licensed. No accounts, no ads. Sentry crash reporting is opt-in and off by default. Install today via a self-hosted F-Droid repo or a direct signed APK. Google Play is in review and should be live shortly — {{PLAY_URL}} (currently in review; until then use the links below).
- Source: https://github.com/dzianisv/opencode-mobile
- Install (F-Droid + APK, one page): https://dzianisv.github.io/opencode-mobile/download/
- Landing page: https://dzianisv.github.io/opencode-mobile/
- Setup guide: https://dzianisv.github.io/opencode-mobile/guide/
- F-Droid repo (add this URL in an F-Droid client): https://dzianisv.github.io/opencode-mobile/fdroid/repo
- Direct APK: https://github.com/dzianisv/opencode-mobile/releases/latest
Happy to answer questions about the SSE streaming implementation, the Expo build pipeline, or the opencode API surface.