Skip to content

fix(mobile): ConnectMacGate paste-IP hero (2026 stranger UX) - #787

Merged
IgorGanapolsky merged 3 commits into
mainfrom
cursor/tailscale-ip-paste-copy
Jul 22, 2026
Merged

fix(mobile): ConnectMacGate paste-IP hero (2026 stranger UX)#787
IgorGanapolsky merged 3 commits into
mainfrom
cursor/tailscale-ip-paste-copy

Conversation

@IgorGanapolsky

Copy link
Copy Markdown
Owner

Summary

  • ConnectMacGate redesigned for stranger-first connect: opaque #0F1321 sheet, Paste your Mac's Tailscale IP as the hero (input + Connect on first viewport), one-sentence context, Find computers demoted to secondary, Scan QR as text link.
  • Removed numbered 3-step essay box, dual competing primary buttons, and Hermes Relay zero-found pitch from gate + Choose computer picker.
  • Added tailscalePasteIpCopy.ts SSOT; picker subtitle, scan zero-found, and help fallback copy aligned.

Before → after (key strings)

Surface Before After
Gate title Connect your computer Connect your Mac
Gate body 3-line Hermes/Tailscale essay One sentence: paste Tailscale IP
Main content Numbered steps 1–3 box Paste IP field + Connect (hero)
CTAs Find computers + Scan QR (equal purple buttons) Connect (hero) + Find computers (secondary) + Scan QR link
Scan zero-found No Hermes computers found + Relay pitch None found yet + paste IP below
Picker subtitle USB essay / tap computer Pick computer or paste Tailscale IP
Picker manual Add by Tailscale address + verbose Paste your Mac's Tailscale IP + one-line path

Out of scope: header "Hermes account relay" (T-RELAY-COPY-TS / terra-relay-copy-ts).

Test plan

  • Focused Jest: ConnectMacGate, ManualComputerAddressForm, tailscalePasteIpCopy, lanScanLabels, computerPickerStatus, ComputerPickerStatusRegion, ChatScreen picker (114/114)
  • Maestro testIDs preserved: connect-mac-gate, connect-mac-onboarding-card, connect-search-wifi, connect-manual-input
  • Continuous E2E kickstarted (latest.json e2e=skipped — simruntime overload; not claiming device pass)
  • Coord fix(mobile): stop blank Tailscale Adding carnival #779 (Tailscale Adding carnival) / fix(mobile): stop Choose computer modal jitter #786 (picker jitter) — no layout/chip logic touched beyond copy

Made with Cursor

@IgorGanapolsky
IgorGanapolsky enabled auto-merge (squash) July 22, 2026 14:54
@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.

@gitar-bot

gitar-bot Bot commented Jul 22, 2026

Copy link
Copy Markdown

Gitar is working

Gitar

@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: 69e89fef14

ℹ️ 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".

Comment on lines +241 to +244
<ManualComputerAddressForm
heroMode
testIDPrefix="connect-manual"
onAddProfile={handleManualProfileAdded}

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 Badge Restore numbered cold-start onboarding steps

For a first launch with no saved Mac, this now replaces FreshUserOnboardingCard with only the paste-IP form while preserving the old connect-mac-onboarding-card testID; brand-new users no longer get the numbered setup steps, and the existing Tailscale onboarding Maestro flow still asserts fresh-user-step-1/fresh-user-step-4, so that real-user path either loses required guidance or fails E2E when run.

AGENTS.md reference: hermes-mobile/AGENTS.md:L51-L53

Useful? React with 👍 / 👎.

@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown

Greptile Summary

This PR updates mobile connect surfaces to focus on pasting a Mac Tailscale IP. The main changes are:

  • Redesigned ConnectMacGate around a paste-IP hero form.
  • Demoted Find computers and QR scanning to secondary actions.
  • Added shared Tailscale paste-IP copy constants.
  • Updated picker, scan-empty, and help fallback copy.
  • Updated focused tests for the revised mobile connect copy.

Confidence Score: 4/5

This PR needs a fresh-user onboarding fix before merging.

A contained blocking issue remains in the cold-start connection surface: the first-run gate no longer renders the required numbered setup steps and primary Find computers path. The shared copy and picker changes are otherwise low risk.

hermes-mobile/src/components/ConnectMacGate.tsx; hermes-mobile/src/__tests__/ConnectMacGate.test.tsx

T-Rex T-Rex Logs

What T-Rex did

  • Reproduced the cold-start onboarding flow by running the focused ConnectMacGate test with a generated React Native Testing Library harness and verified the UI shows connect-mac-gate, onboarding card, manual input, and paste-IP, while fresh-user-step-1 is absent and Find computers appears only with secondary-button styling.
  • Executed and validated the focused Jest command and ConnectMacGate render run; both completed with EXIT_CODE: 0, and the render JSON confirms the required testIDs and copy were present.

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
hermes-mobile/src/components/ConnectMacGate.tsx Redesigns the first-run gate around a paste-IP hero, but removes the required numbered cold-start onboarding steps and demotes the required Find computers primary path.
hermes-mobile/src/components/ManualComputerAddressForm.tsx Adds hero/picker paste-IP copy and layout variants while preserving manual connection validation and persistence flow.
hermes-mobile/src/utils/tailscalePasteIpCopy.ts Introduces shared Tailscale paste-IP copy constants used by gate, picker, and scan fallback surfaces.
hermes-mobile/src/screens/ChatScreen.tsx Updates the Choose computer subtitle to point users toward the paste-IP fallback alongside Find computers.
hermes-mobile/src/utils/lanScanLabels.ts Replaces zero-found scan copy with a neutral title and paste-IP fallback detail.
hermes-mobile/src/tests/ConnectMacGate.test.tsx Updates gate tests for the paste-IP redesign, including an assertion that the prior fresh-user numbered step is absent.
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/components/ConnectMacGate.tsx:240-245
**Restore cold-start steps**
This replaces the required fresh-user onboarding card with only the paste-IP form, so a brand-new user no longer sees the numbered setup steps or the required `Find computers` primary path. The mobile contract says first launch must show `ConnectMacGate` + numbered steps + `Find computers`, so this ships a disconnected onboarding regression even though the test now asserts `fresh-user-step-1` is absent.

Reviews (1): Last reviewed commit: "fix(mobile): ConnectMacGate paste-IP her..." | Re-trigger Greptile

Comment on lines +240 to +245
<View style={styles.heroBlock} testID="connect-mac-onboarding-card">
<ManualComputerAddressForm
heroMode
testIDPrefix="connect-manual"
onAddProfile={handleManualProfileAdded}
/>

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 Restore cold-start steps
This replaces the required fresh-user onboarding card with only the paste-IP form, so a brand-new user no longer sees the numbered setup steps or the required Find computers primary path. The mobile contract says first launch must show ConnectMacGate + numbered steps + Find computers, so this ships a disconnected onboarding regression even though the test now asserts fresh-user-step-1 is absent.

Artifacts

Repro: generated cold-start React Native Testing Library harness

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

Repro: focused Jest output showing paste-IP hero present, numbered step absent, and Find computers secondary

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

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/components/ConnectMacGate.tsx
Line: 240-245

Comment:
**Restore cold-start steps**
This replaces the required fresh-user onboarding card with only the paste-IP form, so a brand-new user no longer sees the numbered setup steps or the required `Find computers` primary path. The mobile contract says first launch must show `ConnectMacGate` + numbered steps + `Find computers`, so this ships a disconnected onboarding regression even though the test now asserts `fresh-user-step-1` is absent.

How can I resolve this? If you propose a fix, please make it concise.

@IgorGanapolsky
IgorGanapolsky force-pushed the cursor/tailscale-ip-paste-copy branch 4 times, most recently from 56a2b19 to 456398c Compare July 22, 2026 16:19
@IgorGanapolsky
IgorGanapolsky force-pushed the cursor/tailscale-ip-paste-copy branch from 456398c to 84ff02b Compare July 22, 2026 16:43
@IgorGanapolsky
IgorGanapolsky force-pushed the cursor/tailscale-ip-paste-copy branch from 84ff02b to 864976a Compare July 22, 2026 17:09
@IgorGanapolsky

Copy link
Copy Markdown
Owner Author

Blocking issues found in the current diff: plan.md contains literal merge-conflict markers, the new copy repeatedly hardcodes Mac, and the 12:58 device screenshot still requires scrolling before all machines and actions are visible. Acceptance must be platform-neutral computer wording, no conflict markers, machine rows before help text, stacked full-width actions, and primary choices visible in one normal-phone viewport.

@IgorGanapolsky
IgorGanapolsky force-pushed the cursor/tailscale-ip-paste-copy branch from 864976a to 5d4fccf Compare July 22, 2026 17:47
@IgorGanapolsky
IgorGanapolsky force-pushed the cursor/tailscale-ip-paste-copy branch 2 times, most recently from 1596948 to d884ce0 Compare July 22, 2026 18:23
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
#786 keyboard debounce and dense profile rows with Forget below the card.
@IgorGanapolsky
IgorGanapolsky force-pushed the cursor/tailscale-ip-paste-copy branch 4 times, most recently from 17ac5d4 to ac4ca0b Compare July 22, 2026 19:41
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
@IgorGanapolsky
IgorGanapolsky force-pushed the cursor/tailscale-ip-paste-copy branch from ac4ca0b to 42caad5 Compare July 22, 2026 20:00
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
Stranger-first gate: opaque sheet, Paste Tailscale IP as dominant action,
Find computers/QR secondary; same copy SSOT for Choose computer picker.
Removes numbered step essay and Hermes Relay zero-found pitch on gate/picker.

Co-authored-by: Cursor <cursoragent@cursor.com>
@IgorGanapolsky
IgorGanapolsky force-pushed the cursor/tailscale-ip-paste-copy branch from 15e6b5f to dc57be6 Compare July 22, 2026 20:21
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
@IgorGanapolsky
IgorGanapolsky merged commit c62c375 into main Jul 22, 2026
13 checks passed
@IgorGanapolsky
IgorGanapolsky deleted the cursor/tailscale-ip-paste-copy branch July 22, 2026 21:22
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Empty-state help uses paste-IP title; saved-profile idle help collapses to
“Missing another computer?” link instead of legacy accordion headings.

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Empty-state help uses paste-IP title; saved-profile idle help collapses to
“Missing another computer?” link instead of legacy accordion headings.

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Empty-state help uses paste-IP title; saved-profile idle help collapses to
“Missing another computer?” link instead of legacy accordion headings.

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Status region and manual form both show the paste-IP title after #787; collapsed
help exposes “Missing another computer?” on the link row.

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Empty-state help uses paste-IP title; saved-profile idle help collapses to
“Missing another computer?” link instead of legacy accordion headings.

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Status region and manual form both show the paste-IP title after #787; collapsed
help exposes “Missing another computer?” on the link row.

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Empty-state help uses paste-IP title; saved-profile idle help collapses to
“Missing another computer?” link instead of legacy accordion headings.

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Status region and manual form both show the paste-IP title after #787; collapsed
help exposes “Missing another computer?” on the link row.

Co-authored-by: Cursor <cursoragent@cursor.com>
@IgorGanapolsky

Copy link
Copy Markdown
Owner Author

Paste-IP hero / demoted onboarding landed on main via #801’s sibling PR #787 (c62c3750). #801 still adds dense Choose-computer layout (profiles above fold, collapsed idle help, compact paste row) on top of that copy — tracking merge there. Closing this issue as superseded by the combined #787 + #801 ship path.

@IgorGanapolsky

Copy link
Copy Markdown
Owner Author

Superseded: paste-IP UX shipped in #787 (main); density/layout follow-up in #801.

IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Empty-state help uses paste-IP title; saved-profile idle help collapses to
“Missing another computer?” link instead of legacy accordion headings.

Co-authored-by: Cursor <cursoragent@cursor.com>
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Status region and manual form both show the paste-IP title after #787; collapsed
help exposes “Missing another computer?” on the link row.

Co-authored-by: Cursor <cursoragent@cursor.com>
github-actions Bot pushed a commit that referenced this pull request Jul 22, 2026
* fix(mobile): dense Choose computer modal — profiles above fold

Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(mobile): align Mac picker tests with #787/#801 copy

Empty-state help uses paste-IP title; saved-profile idle help collapses to
“Missing another computer?” link instead of legacy accordion headings.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(mobile): Mac picker asserts tolerate duplicate paste-IP copy

Status region and manual form both show the paste-IP title after #787; collapsed
help exposes “Missing another computer?” on the link row.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(mobile): allow duplicate paste-IP detail in Mac picker

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

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