Skip to content

feat(mobile): ThumbGate web promo on Leash + unreachable connection - #797

Merged
IgorGanapolsky merged 1 commit into
mainfrom
cursor-thumbgate-promo-leash
Jul 22, 2026
Merged

feat(mobile): ThumbGate web promo on Leash + unreachable connection#797
IgorGanapolsky merged 1 commit into
mainfrom
cursor-thumbgate-promo-leash

Conversation

@IgorGanapolsky

Copy link
Copy Markdown
Owner

Summary

  • Add thumbgatePromoCopy.ts SSOT + compact ThumbGatePromoCard linking to https://thumbgate.app (production control plane, not thumbgate.ai marketing alias).
  • Leash tab: promo when disconnected/connecting, or when connected with no pending approvals (empty state).
  • Chat connection panel: secondary promo when no saved computers or heal exhausted + unreachable — does not compete with Find computers primary CTA.
  • PostHog: thumbgate_promo_view / thumbgate_promo_tap with surface + url.
  • Skipped ConnectMacGate to avoid conflicting with in-flight connect-gate redesign (fix(mobile): ConnectMacGate paste-IP hero (2026 stranger UX) #787 / T-CONNECT-UX-CONTRACT).

Test plan

  • thumbgatePromoCopy.test.ts — URL, copy honesty, visibility rules
  • ThumbGatePromoCard.test.tsx — render + Linking + analytics
  • ApprovalsScreen.test.tsx — Leash empty + disconnected promo
  • ChatConnectionPanel.test.tsx — promo when no profiles; hidden when connected
  • Pre-commit typecheck + ownership gate green
  • CI Maestro (continuous E2E currently e2e=skipped — phone in use)

Made with Cursor

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@IgorGanapolsky
IgorGanapolsky enabled auto-merge (squash) July 22, 2026 16:30
@gitar-bot

gitar-bot Bot commented Jul 22, 2026

Copy link
Copy Markdown

Gitar is working

Gitar

@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds ThumbGate web promo surfaces to Hermes Mobile. The main changes are:

  • Shared ThumbGate promo copy and canonical thumbgate.app URL.
  • Reusable ThumbGatePromoCard with view and tap analytics.
  • Leash promo placements for disconnected and empty states.
  • Chat connection-panel promo placement for unreachable connection states.
  • Jest coverage for copy, visibility, rendering, linking, and analytics.

Confidence Score: 4/5

This PR needs the fresh-user connection-panel CTA behavior fixed before merging.

The change is focused and covered by tests, but the zero-profile connection path currently shows a second CTA in first-run disconnected UI.

hermes-mobile/src/utils/thumbgatePromoCopy.ts; hermes-mobile/src/components/ChatConnectionPanel.tsx

T-Rex T-Rex Logs

What T-Rex did

  • Reproduced the first-run CTA verification by rendering the fresh-user disconnected ChatConnectionPanel in the React Native test harness and confirmed that the Find computers CTA and the chat-connection-search button are visible, along with the thumbgate-promo-connection_unreachable and the Open ThumbGate button.
  • Ran the Jest test run and confirmed that all test suites and tests passed (4 passed suites, 4 total; 43 tests passed, 43 total).
  • Type checking reported TypeScript errors in src/__tests__/trex_chat_connection_panel_fresh_user_competing_ctas.test.tsx, which are outside the named PR files.
  • Per the report, no Maestro/device/adb/watchman workflows were attempted.

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

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

Comment on lines +67 to +68
if (input.profileCount === 0) {
return true;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 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

Repro: focused Jest harness that renders the fresh-user disconnected ChatConnectionPanel and asserts both CTAs are visible

  • Contains supporting evidence from the run (text/tsx; charset=utf-8).

Repro: full Jest command output showing the assertions passed and the rendered component tree includes both CTA labels

  • Keeps the command output available without making the summary code-heavy.

Repro: serialized rendered React Native component tree showing Find computers and Open ThumbGate simultaneously

  • Contains supporting evidence from the run (text/plain; charset=utf-8).

View artifacts

T-Rex 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!

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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.',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@IgorGanapolsky
IgorGanapolsky force-pushed the cursor-thumbgate-promo-leash branch 2 times, most recently from 5a6dc2e to 3c4e271 Compare July 22, 2026 17:05
@IgorGanapolsky

Copy link
Copy Markdown
Owner Author

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.

@IgorGanapolsky
IgorGanapolsky force-pushed the cursor-thumbgate-promo-leash branch from 3c4e271 to b60f79f Compare July 22, 2026 17:32
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
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>
@IgorGanapolsky
IgorGanapolsky force-pushed the cursor-thumbgate-promo-leash branch 2 times, most recently from 80498a5 to e9be6f2 Compare July 22, 2026 18:48
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>
@IgorGanapolsky
IgorGanapolsky force-pushed the cursor-thumbgate-promo-leash branch from b00296a to c116211 Compare July 22, 2026 19:38
@IgorGanapolsky
IgorGanapolsky merged commit a35f6ce into main Jul 22, 2026
13 checks passed
@IgorGanapolsky
IgorGanapolsky deleted the cursor-thumbgate-promo-leash branch July 22, 2026 19:57
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
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>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Point stranger gate at app tip 2b91eaf (includes #797) for workflow-only
OTA tips, and complete any open staged production rollout to 100% before
publishing so EAS no longer deadlocks new updates.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant