Skip to content

Show a hand-off page instead of the app on phones in Design and Slides - #7932

Merged
shawnmcclelland merged 6 commits into
mainfrom
claude/mobile-unsupported-page-cc425c
Oct 21, 2026
Merged

shawnmcclelland merged 6 commits into
mainfrom
claude/mobile-unsupported-page-cc425c

Conversation

@shawnmcclelland

@shawnmcclelland shawnmcclelland commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Design and Slides aren't built for phones. On a touch device with a screen smaller than an iPad (under 744px) they now show a short hand-off page instead of the app: share the link through the OS share sheet, or email it to yourself, and pick it up on a desktop or iPad.

Before and after (375px wide)

Before After
Slides
Design

How it works

  • New UnsupportedDeviceGate in @agent-native/toolkit/app/shared, wired through a new unsupportedDevice option on AppProviders. Slides and Design each pass it from their root.tsx.
  • Applies only to touch devices whose screen's shorter side is under 744px, so a narrowed desktop window, an iPad in Split View or Slide Over, and an iPad in any orientation keep the app, while a phone turned sideways is still gated.
  • Sits outside the session gate, so a signed-out phone sees the page before sign-in.
  • The title names what was being opened on deck and design routes ("Open this deck on a larger screen").
  • "Share link" leads where navigator.share exists. "Email me the link" appears only when the signed-in address is known, addressed to that user, so a signed-out visitor never gets a blank To field. Without share support, email leads when shown and "Copy link" is the fallback or the only action.
  • Not gated: host embeds (embed token or embedded=1), Slides share and present routes, Design /present/ and /visual-edit.
  • Strings are added to all 11 toolkit locales. The non-English translations are first drafts and want a native review.

Things to know

  • Design's editor and shared design view are the same /design/<id> route, so a shared Design link is now gated on a phone too.
  • It cannot show the actual deck or design name, because that needs a data fetch before sign-in.
  • The toolkit's AppProviders.spec.tsx has one test that fails in my environment on a missing window.localStorage; I did not run it against a clean checkout.
  • The screenshots live on the throwaway branch screenshots/mobile-unsupported-page, which can be deleted after merge.

Checked

  • pnpm guards (92 checks) passes, and oxfmt is clean.
  • Verified in the browser at phone size on Slides and Design: the page shows on /home and the editor routes, Design /present/ is not gated, and 768px stays in the app.
  • The share sheet itself is untested on a real phone; the preview browser has no share API, so I only saw the fallback layout.

@shawnmcclelland shawnmcclelland self-assigned this Oct 20, 2026
builder-io-integration[bot]

This comment was marked as outdated.

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Here's a visual recap of what changed:

Visual recap

Open the full interactive recap

builder-io-integration[bot]

This comment was marked as outdated.

builder-io-integration[bot]

This comment was marked as outdated.

@shawnmcclelland

Copy link
Copy Markdown
Contributor Author

Addressed the review-body feedback on the latest head: a failed clipboard write now shows "Couldn't copy the link" on the button (copy action and share fallback), with a spec for it and the string in all 11 locales. I did not change anything for the possible Slides embed-token mismatch: the review marked it unconfirmed, and embeds are exempt by design (the prop is omitted whenever sessionBypass is true).

🤖 Addressed by Claude Code

builder-io-integration[bot]

This comment was marked as outdated.

builder-io-integration[bot]

This comment was marked as outdated.

@shawnmcclelland

Copy link
Copy Markdown
Contributor Author

Addressed the review-body feedback on the latest head: the gate's media query subscription now falls back to addListener/removeListener when addEventListener is missing, matching the existing pattern in markdown-renderer.tsx, so a pre-Safari-14 browser no longer throws during subscribe. Added a spec that drives the legacy API. I did not change the mailto encoding; the review did not establish a concrete mail-client failure.

🤖 Addressed by Claude Code

@builder-io-integration builder-io-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Builder reviewed your changes — looks good ✅

Review Details

Incremental review summary

The latest revision adds a Safari-compatible MediaQueryList subscription fallback and a regression test for the legacy listener API. The earlier signed-out email, narrow iPad, clipboard-feedback, and Slides embed-gating concerns are all addressed in the current diff. The hand-off gate remains constrained to touch devices whose physical screen’s shorter side is below the stated 744px threshold, and the routes, session integration, and localized messages appear internally consistent.

I found no confirmed actionable issues. One agent raised that some small Android tablets would also be gated; however, that is consistent with the PR’s explicit rule of gating touch devices below the iPad-sized threshold, so I did not report it as a defect. Mailto construction was also independently assessed and found valid.

🧪 Browser testing: Skipped — browser-test-planner is not available in this environment; the dev server is running.

@shawnmcclelland
shawnmcclelland enabled auto-merge (squash) October 20, 2026 21:34
@shawnmcclelland
shawnmcclelland merged commit 66ae94a into main Oct 21, 2026
74 checks passed
@shawnmcclelland
shawnmcclelland deleted the claude/mobile-unsupported-page-cc425c branch October 21, 2026 09:16
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.

2 participants