Skip to content

Add Expo Orbit landing page and deeplink handler#355

Draft
gabrieldonadel wants to merge 8 commits into
mainfrom
claude/orbit-website-deeplink-g2ueH
Draft

Add Expo Orbit landing page and deeplink handler#355
gabrieldonadel wants to merge 8 commits into
mainfrom
claude/orbit-website-deeplink-g2ueH

Conversation

@gabrieldonadel

Copy link
Copy Markdown
Member

Summary

This PR adds a new website application for Expo Orbit that serves as both a landing page and a deeplink handler for the desktop application.

Key Changes

  • Landing page (index.html and 404.html): Created a responsive, dark-themed website showcasing Expo Orbit features with download links for macOS, Windows, and Linux
  • Deeplink handler: Implemented JavaScript logic to detect and handle deeplinks for routes like /auth, /download, /update, /go, and /snack
  • Local server detection: Added intelligent detection of the Expo Orbit desktop app running on local ports (35783, 47909, 44171, 50799) with fallback to custom URL scheme (expo-orbit://)
  • Favicon: Added SVG favicon with Expo Orbit branding
  • Vercel configuration: Added vercel.json to rewrite all routes to index.html for SPA routing support
  • Package configuration: Added package.json with basic scripts for the website app

Implementation Details

  • The deeplink handler attempts to open the Expo Orbit app via a local server endpoint first (more reliable), then falls back to the custom URL scheme if the app isn't running
  • Status messages dynamically update based on the deeplink route (auth, download, update, go, snack)
  • Users can retry the deeplink or copy it to clipboard if the app doesn't open automatically
  • Responsive design with mobile-first approach using CSS Grid and Flexbox
  • No external dependencies - pure HTML, CSS, and vanilla JavaScript

https://claude.ai/code/session_019MdLSKWvRCTJxGPeiBKghQ

claude and others added 8 commits June 24, 2026 10:01
Static website that handles deeplink URLs (download, update, go, snack, auth)
by attempting to open Expo Orbit via the local server or custom URL scheme,
with a fallback landing page for users who don't have Orbit installed.

https://claude.ai/code/session_019MdLSKWvRCTJxGPeiBKghQ
Replace the static HTML site with a proper React app using Vite, React Router,
and CSS Modules. Routes: / (landing page), /:action (deeplink handler for
download, update, go, snack, auth). Includes EAS config for deployment.

https://claude.ai/code/session_019MdLSKWvRCTJxGPeiBKghQ
- Add associated domains entitlement (applinks:orbit.expo.dev) to both
  debug and release entitlements files
- Add application(_:continue:restorationHandler:) to AppDelegate to handle
  Universal Links by posting to RCTOpenURLNotification
- Serve apple-app-site-association from website with correct AASA config
  for team C8D8QTF339 and bundle ID dev.expo.orbit
- Add Vite plugin to set correct Content-Type for AASA in dev server
- Add tests verifying https://orbit.expo.dev/* URLs parse correctly

https://claude.ai/code/session_019MdLSKWvRCTJxGPeiBKghQ
Add applinks:expo-orbit.expo.app to associated domains entitlements
alongside orbit.expo.dev. Add tests for the new domain.

https://claude.ai/code/session_019MdLSKWvRCTJxGPeiBKghQ
- Fix LocalServer /orbit/open to extract pathname from full URLs instead
  of naive string replacement, so https://orbit.expo.dev/download?url=...
  becomes expo-orbit:///download?url=... (not expo-orbit://orbit.expo.dev/...)
- Fix website openViaScheme to use window.location.href directly instead
  of unreliable hidden iframe approach
- Fix website tryLocalServer to send a proper full URL to the local server

https://claude.ai/code/session_019MdLSKWvRCTJxGPeiBKghQ
Add ?mode=developer variants of the associated domains entitlements so
Universal Links work when running from Xcode without Apple's CDN
having cached the AASA file.

https://claude.ai/code/session_019MdLSKWvRCTJxGPeiBKghQ
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