feat(mobile): ThumbGate web promo on Leash + unreachable connection - #797
Conversation
|
Caution The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased. |
Greptile SummaryThis PR adds ThumbGate web promo surfaces to Hermes Mobile. The main changes are:
|
| Filename | Overview |
|---|---|
| hermes-mobile/src/utils/thumbgatePromoCopy.ts | Adds ThumbGate promo copy and visibility helpers; the connection-panel helper shows the promo for zero saved profiles, creating a competing fresh-user CTA. |
| hermes-mobile/src/components/ChatConnectionPanel.tsx | Adds the ThumbGate promo card to disconnected connection UI; it can appear immediately for first-run users alongside Find computers. |
| hermes-mobile/src/screens/ApprovalsScreen.tsx | Adds the ThumbGate promo card to Leash disconnected and empty states behind Leash unlock. |
| hermes-mobile/src/components/ThumbGatePromoCard.tsx | Adds a reusable promo card with analytics and external linking. |
| hermes-mobile/src/tests/ChatConnectionPanel.test.tsx | Adds promo coverage, including coverage for the first-run connection-panel promo behavior. |
| hermes-mobile/src/tests/thumbgatePromoCopy.test.ts | Covers URL, copy, and visibility helper behavior. |
Prompt To Fix All With AI
Fix the following 1 code review issue. Work through them one at a time, proposing concise fixes.
---
### Issue 1 of 1
hermes-mobile/src/utils/thumbgatePromoCopy.ts:67-68
**Preserve first-run CTA**
For `profileCount === 0`, this returns `true`, so `ChatConnectionPanel` renders `Find computers` plus an immediately visible `Open ThumbGate` button in the disconnected fresh-user state. First launch should keep one primary CTA, and this path gives new users two competing actions before they have saved a Mac.
Reviews (1): Last reviewed commit: "feat(mobile): promote ThumbGate web on L..." | Re-trigger Greptile
| if (input.profileCount === 0) { | ||
| return true; |
There was a problem hiding this comment.
Preserve first-run CTA
For profileCount === 0, this returns true, so ChatConnectionPanel renders Find computers plus an immediately visible Open ThumbGate button in the disconnected fresh-user state. First launch should keep one primary CTA, and this path gives new users two competing actions before they have saved a Mac.
Artifacts
- Contains supporting evidence from the run (text/tsx; charset=utf-8).
- Keeps the command output available without making the summary code-heavy.
- Contains supporting evidence from the run (text/plain; charset=utf-8).
Ran code and verified through T-Rex
Prompt To Fix With AI
This is a comment left during a code review.
Path: hermes-mobile/src/utils/thumbgatePromoCopy.ts
Line: 67-68
Comment:
**Preserve first-run CTA**
For `profileCount === 0`, this returns `true`, so `ChatConnectionPanel` renders `Find computers` plus an immediately visible `Open ThumbGate` button in the disconnected fresh-user state. First launch should keep one primary CTA, and this path gives new users two competing actions before they have saved a Mac.
How can I resolve this? If you propose a fix, please make it concise.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b8d206db00
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const SURFACE_COPY: Record<ThumbGatePromoSurface, Omit<ThumbGatePromoCopy, 'url' | 'buttonLabel'>> = { | ||
| leash_disconnected: { | ||
| headline: 'Hermes on the web', | ||
| body: 'Sign in at ThumbGate to review Leash decisions and chat history from any browser. Your Mac still runs the work locally.', |
There was a problem hiding this comment.
Do not promise web Leash decision history
When Leash is disconnected, this promo tells users they can review Leash decisions in ThumbGate, but those decisions are still mobile-local: leashDecisionHistory.ts persists them only in AsyncStorage and a repo-wide search for leashDecisionHistory|Recent decisions only finds the mobile app, while the web dashboard exposes threads/tasks/paired-machine settings rather than approval history. Users following this CTA won't find the promised decision history, so either remove that promise or wire a real web sync/view before promoting it.
Useful? React with 👍 / 👎.
5a6dc2e to
3c4e271
Compare
|
Blocking product-copy issue: this promo says Mac in a product that supports macOS, Windows, and Linux, and the fresh-user state presents ThumbGate beside the primary connection CTA. Keep ThumbGate as a secondary fallback only after no computer is reachable, use computer or machine wording, and describe cloud continuation as plan-dependent rather than guaranteed. |
3c4e271 to
b60f79f
Compare
Free com.iganapolsky.hermesmobile is live again while store-policy still expects unpublished; downgrade to warning so mobile PRs (e.g. #797) are not blocked on Play Console drift tracked under T-ASO-LISTING-20260722. Co-authored-by: Cursor <cursoragent@cursor.com>
80498a5 to
e9be6f2
Compare
Add shared thumbgatePromoCopy + ThumbGatePromoCard with honest copy pointing to https://thumbgate.app. Surfaces on Leash when disconnected or empty, and as a secondary card on ChatConnectionPanel when no Mac is reachable. Co-authored-by: Cursor <cursoragent@cursor.com>
b00296a to
c116211
Compare
EAS refuses new production publishes while a staged rollout is open. update:edit --rollout-percentage 100 completes the rollout; blocking that path deadlocks production OTA (#797 tip). Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
thumbgatePromoCopy.tsSSOT + compactThumbGatePromoCardlinking to https://thumbgate.app (production control plane, not thumbgate.ai marketing alias).thumbgate_promo_view/thumbgate_promo_tapwith surface + url.Test plan
thumbgatePromoCopy.test.ts— URL, copy honesty, visibility rulesThumbGatePromoCard.test.tsx— render + Linking + analyticsApprovalsScreen.test.tsx— Leash empty + disconnected promoChatConnectionPanel.test.tsx— promo when no profiles; hidden when connectede2e=skipped— phone in use)Made with Cursor