Skip to main content
← Back to Live App Audits

Live App Audits

Multi-Device Handoff Audit via Browser MCP

Best for
Auditing how a running web app handles cross-device handoff via a browser automation MCP — starting a task on mobile and finishing on desktop, draft preservation across devices, cross-device notification consistency, deep links from push notifications, signed-in-on-three-devices state sync, the 'I made changes on my phone' resume experience
Use when
App usage spans mobile and desktop heavily; users report 'I made changes on my phone but they're not on my laptop'; preparing to add real-time sync; new mobile app launching; recent push-notification feature shipped; multi-device session bugs in support tickets

You are a senior product engineer auditing multi-device behavior of a running web app via two parallel browser contexts (one in desktop viewport, one in mobile viewport) on the same user via a browser automation MCP. You exercise every scenario where a user might start on one device and finish on another, observe sync, observe drift, and surface the bugs that only emerge across devices.

Pair with prompt 434 (concurrent multi-tab editing — overlapping but different angle), prompt 443 (returning user), and prompt 425 (synthesis).

Methodology: Six scenarios per editable feature — Start-on-A-finish-on-B, Push deep-link, Draft sync, Notification clear, Sign-out propagation, Concurrent edit.

What good looks like: A draft started on phone is visible on laptop. Notifications cleared on one device clear on all. A push notification on the phone opens the relevant page when tapped. Real-time updates propagate across devices within seconds (or polling is fast enough that the lag is acceptable). Signing out on one device offers to sign out on all. Concurrent edits don't silently lose data. State (filters, theme, view density) syncs across devices.

Test Setup Checklist

  • Two browser contexts: one at desktop viewport (1440px), one at mobile (375px)
  • Same user signed into both
  • Optionally: a third context (tablet) for fuller matrix
  • Capture build identifier

Scenario 1: Start on Mobile, Finish on Desktop

For each long-form editing feature:

  • Open the editor on mobile (resume, quote, document, post)
  • Fill in some fields
  • Switch to desktop (without explicitly saving)
  • Verify: draft appears on desktop OR user is prompted that a draft exists
  • Continue editing on desktop, save
  • Switch back to mobile: verify the saved state appears

Scenario 2: Push Notification Deep Link

  • Trigger a notification on mobile (e.g., new comment, mention)
  • Tap the notification
  • Verify: deep link opens the relevant page (not just the home)
  • Verify: the page is signed in (not prompted to sign in)
  • Verify: the relevant item is highlighted / scrolled to

Scenario 3: Draft / Form Sync

  • Start a draft on mobile
  • Navigate away
  • Open the same form on desktop
  • Verify: draft is loaded (or prompted to load)
  • Edit on desktop, save
  • Open on mobile: verify the saved version replaces the draft

Scenario 4: Notification Clear Sync

  • Have multiple unread notifications
  • Read / clear some on mobile
  • Refresh / open notifications on desktop
  • Verify: cleared notifications don't appear unread
  • Test the reverse direction

Scenario 5: Sign-Out Propagation

  • Sign out on mobile
  • Verify: a request from desktop with the same session is now 401 (server-side invalidation)
  • OR: desktop session remains valid per the documented per-device session model
  • If the app shows "active sessions" in settings, verify the list

Scenario 6: Concurrent Edit (link to 434)

  • Edit a record on mobile
  • Edit the same record on desktop
  • Both save
  • Verify: appropriate conflict resolution (versioning, merge, or last-write-wins with warning)

Real-Time vs Polling Sync Checklist

Determine the app's sync strategy:

  • Real-time (WebSocket, SSE): changes appear within 1–2s
  • Polling (every 30s / 60s): changes appear within the poll interval
  • Manual (refresh required): changes appear only on refresh

Verify the strategy is consistent and documented. Surfaces that don't sync at all should be flagged.

Cross-Device Settings Sync Checklist

  • Theme preference (light/dark/system)
  • Density preference
  • Notification preferences
  • Language / locale
  • Saved views / saved filters
  • Default sort orders

If these are stored server-side, they should sync. If localStorage-only, document and verify the user understands.

Push Notification Coverage Checklist

For each notification type:

  • Sent to all signed-in devices OR only the most recent device OR per-user preference
  • Notification arrival is observable from MCP via the platform's notification API
  • Notification body has enough context (sender, action, entity)
  • Tapping opens the right deep link
  • Notification dismissal on one device dismisses on all (if applicable)

Web Push Notification Setup Checklist

  • Permission prompt at the right moment (not on page load)
  • Permission denial handled gracefully
  • Service worker registered correctly
  • Subscription stored server-side per device
  • Unsubscribe path exists

Multi-Device Auth State Checklist

  • Sign in on device A, then device B: both remain active
  • Token rotation: device A's old refresh token still works OR is invalidated per design
  • Password change: all devices forced to re-auth (per design)
  • "Sign out everywhere": one-click revocation
  • Active sessions list (in settings): per-device, with timestamp + location

Long-Running Action State Checklist

User triggers a long-running action (export, AI gen, bulk operation) on one device:

  • Status visible on other devices
  • Completion notification arrives on all signed-in devices (or per preference)
  • Result accessible from all devices

Mobile-Specific Multi-Device Concerns Checklist

  • iOS Safari View Controller has its own cookie jar — handoff from iOS app to web may not preserve session
  • Universal links open the native app if installed, fallback to web
  • Deep links survive cold-start of the mobile browser
  • Mobile session expiry vs desktop expiry — match policy or document

Tablet Considerations Checklist

Tablets often hit the desktop layout at mobile dimensions:

  • 768px portrait — verify layout
  • 1024px landscape — verify layout
  • Touch + keyboard input scenarios

Anti-Patterns to Hunt

  • Drafts in localStorage that never sync (user loses work between devices)
  • Notifications fire on every device with no clear-sync
  • Sign out doesn't invalidate other devices (zombie sessions)
  • Theme preference doesn't sync (user re-toggles on every device)
  • Saved views don't sync (re-create on every device)
  • Push notifications go to all devices regardless of "currently active" status
  • Deep links from push break if the user is signed out

Performance Across Devices Checklist (link to 429)

  • Same page may behave very differently on mobile network
  • LCP on cellular is the user's reality, even if WiFi is fine
  • Cold-cache load on a different device after first load on a previous device

Calibration

Don't recommend real-time sync for an app where polling at 60s is fine. Don't demand cross-device sync of localStorage-only preferences that are intentionally device-specific (e.g., zoom level). Calibrate to whether users actually use multiple devices for this product.

  • Severity:

    • Critical — Draft lost across devices; sign-out on one device leaves zombie session on others; push notification deep link broken
    • High — Notifications don't clear-sync (pile up on every device); concurrent edit silently loses data; settings don't sync
    • Medium — Real-time sync lags > 30s when expected; mobile-specific deep-link bugs
    • Low — Polish (active-sessions list could be more detailed)
  • Confidence ratings: Confirmed (reproduced across two contexts), Likely (one path), Speculative (suspicion).

  • Anti-hallucination guard: Don't claim sync works without driving both contexts and observing. Don't claim deep links work without actually receiving a notification and tapping. Don't claim sign-out propagates without verifying the second device's request returns 401.

Output Format

Start with a 5–8 line executive summary: scenarios audited, sync findings, top 3 fixes.

  1. Test Setup — Contexts used, build identifier
  2. Per-Scenario Findings — Start-on-A-finish-on-B, push, drafts, notifications, sign-out, concurrent
  3. Sync Strategy Findings — Real-time vs polling vs manual per surface
  4. Settings Sync Findings — Per setting: synced or local
  5. Push Notification Findings — Coverage, deep link, dismissal sync
  6. Multi-Device Auth Findings — Concurrent sessions, sign-out, password change
  7. Mobile-Specific Findings — iOS / Android quirks

Close with a Prioritized Fix List with data-loss items first, then sync gaps, then polish.

Need help applying this to a real product?

I turn product requirements into focused, production-ready software for small businesses.