← All posts

Save On Your Phone, See It On Your Laptop In 2 Seconds

April 25, 2026 · 5 min

Save On Your Phone, See It On Your Laptop In 2 Seconds

Discovery happens on phones. Work happens on laptops. The gap between those two realities has produced an entire genre of broken bookmark workflows: screenshots forwarded to yourself, "share to Notes" with no follow-up, browser bookmarks that never sync, and cross-device bookmark sync that claims to be real-time but requires a manual refresh.

SaveSync is built around the assumption that the device you save on is almost never the device you work on. The mobile app integrates natively into both the iOS share extension and the Android SEND intent filter, so saving from any app takes two taps. The bookmark appears in your desktop Vault in under two seconds, without you touching the desktop at all.

This post covers the technical path from "tap share" on your phone to "card lands in Vault" on your laptop.

The flow

The sequence is: your phone's native share sheet appears, you tap SaveSync, a capture sheet pre-fills with the URL and page metadata, you tap Save, and the bookmark immediately shows up on your desktop Vault. No polling, no refresh. The Supabase realtime subscription on your desktop is listening for new rows in the saves table and updates the UI optimistically.

9:41
@creator

Copy

Messages

Mail

SaveSync

Notes

More

New bookmark

#reels

Inbox

Apple WWDC — just saved

Now · synced ✓

Design systems deep dive

Yesterday · #design

Inbox
Find
+
Folders
Me
savesync.org/dashboard

Vault

IG

Apple WWDC — just saved

APR 22
YT

Design systems deep dive

APR 22
WEB

Color theory 2026

APR 22
X

@design_sync thread

APR 22
WEB

React Server Components

APR 22
WEB

Framer motion cheatsheet

APR 22

Share sheet on phone → capture and save → sync line fires → new bookmark drops into desktop Vault

How the share sheet integration works

On iOS, SaveSync registers as a share extension in Info.plist with NSExtensionActivationSupportsWebURLWithMaxCount = 1. When you tap the share button in Safari, Instagram, Twitter, or any other app, the system invokes the extension with the current URL and selected text. The extension receives a NSExtensionItem payload, extracts the URL, and pre-populates the SaveSync capture sheet.

On Android, the app registers an intent filter for android.intent.action.SEND with text/plain MIME type. When you tap share from Chrome, YouTube, or Instagram, the Android OS presents SaveSync in the system share sheet. The app receives the URL via Intent.getStringExtra(Intent.EXTRA_TEXT) and opens the capture sheet.

Both paths call the same /api/save endpoint. The save is authenticated via your existing session cookie. The capture sheet lets you add tags, assign a folder, and edit the title before saving — or you can tap Save immediately if the pre-filled metadata looks right. Either way, the round-trip from tapping share to bookmark saved is under 3 seconds on a typical mobile connection.

The mobile app is built with React Native and Expo, sharing the same API layer as the web app. There is no separate mobile backend — it's the same Supabase project.

Real-time sync — what "2 seconds" actually means

When the mobile app writes to the saves table, Supabase broadcasts a postgres_changes event to all subscribed clients. The desktop web app maintains an active subscription to the saves table for the authenticated user's rows. When the insert event arrives, the dashboard adds the card to the top of the Vault and plays the drop animation.

The latency budget: network RTT from your phone to the Supabase edge (typically 30–80ms), database commit (5–15ms), Supabase broadcast to your desktop subscriber (20–50ms), and React re-render. In practice, the end-to-end time is ~1.5s on a normal home or office network. On congested mobile networks it can stretch to 3–4s, but it always arrives without a manual refresh.

This is the same realtime mechanism that handles archive sync — when you archive a page on desktop, the archived state reflects on mobile within the same latency window.

The subscription is scoped to user_id = auth.uid() via row-level security, so there is no risk of receiving another user's data, and the subscription payload only includes columns the client needs (no full-text body content).

Offline captures

If your phone has no network connection — subway, flight, remote area — SaveSync queues the save in AsyncStorage. When the device reconnects, the queue drains automatically. You do not see a retry UI or error state. The bookmark just appears in your Vault once connectivity is restored.

The queue is persistent across app restarts. If you save 10 things on a flight and kill the app before landing, all 10 queue entries survive. The sync job runs within a few seconds of the network coming back.

Offline captures are stored with a temporary local ID. When they sync, the server assigns the permanent uuid and the local record is updated in place. If you had already opened the saved item locally (from the offline queue), it stays open without any disruption.

Mobile-only features

The mobile app includes several interactions that don't have desktop equivalents:

  • Swipe to archive / swipe to delete. Left swipe archives, right swipe opens the tag editor. Swiping all the way deletes with a confirmation. Faster than any mouse-driven equivalent for inbox triage.
  • Haptic feedback on save. A short haptic pulse confirms the save registered. Useful when you tap save while walking and want confirmation without looking at the screen.
  • Pull to refresh. Forces an immediate sync from the server, bypassing the realtime subscription. Useful in environments where WebSocket connections drop.
  • Biometric unlock. Optional FaceID / fingerprint lock on the app, independent of your Supabase session. Your Vault doesn't open until biometric passes, even if your phone is unlocked.

For how to organize what you've saved into folders and tags, see organize-your-vault. The folder structure you build on desktop is fully reflected on mobile.

What you can't do on mobile yet

Honest accounting of what's missing:

  • Bulk tag editing. You can't select 20 bookmarks and add a tag to all of them from the mobile app. Use the desktop for batch operations.
  • Drag-drop folder moves. Folder assignment on mobile is done through the edit sheet on each card. Drag-drop from the Vault grid to the sidebar doesn't exist on mobile.
  • Full-page archive reading. The archive reader (the saved HTML snapshot of a page) is desktop-only for now. On mobile you get the original URL and metadata, not the archived content.
  • Smart folder rules. Creating or editing smart folder conditions is a desktop feature.

Mobile is for capture and quick lookup. Desktop is for deep organization and archive reading. The two halves complement each other; neither is a full replacement.

Install

SaveSync for iOS is available on the App Store. SaveSync for Android is available on Google Play. Both are free to download. Pro sync — the realtime cross-device sync described in this post — is included on your first paired device at no extra cost. Pairing a second or third device requires a Pro subscription. See save-from-anywhere if you also want the browser extension for saving from desktop — it pairs with the mobile app to cover every surface.

After installing, sign in with the same account you use on the web. Your existing Vault appears immediately. No import step, no migration, no setup.