mobile responsiveness pass + connections reauth fix#959
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
supermemory-mcp | 1706752 | May 17 2026, 09:50 PM |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
supermemory-app | 1706752 | Commit Preview URL Branch Preview URL |
May 17 2026, 09:51 PM |
How to use the Graphite Merge QueueAdd the label Main to this PR to add it to the merge queue. You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
|
Claude finished @MaheshtheDev's task in 2m 22s —— View job Review Complete
Summary: Clean PR with no bugs or security issues found. The mobile responsiveness implementation is solid with proper safe-area handling, and the connections reauth flow is well-designed with per-row tracking to avoid race conditions. Score: 9/10 — Ready to ship. |
There was a problem hiding this comment.
Overview: This PR adds comprehensive mobile responsiveness improvements (safe-area handling, drawer-based modals, responsive widths) and replaces the expiresAt-based connection expiry check with a more robust sync-run health detection pattern.
Issues found: None — this looks good to ship.
The implementation is clean:
- Safe-area handling: Proper use of
env(safe-area-inset-*)withmax()fallbacks and viewportviewportFit: "cover"for iOS - Drawer pattern: vaul Drawer at 85svh with swipe-down dismissal is a good mobile UX choice
- State lifting: Moving note/link content state to the parent preserves typed input when switching tabs. The
seededContentpattern correctly uses lazyuseStateinitialization to prevent TextEditor resets - Auth failure detection: The regex patterns in
useConnectionHealthare well-designed with bounded lookahead ([^\n]{0,40}) to prevent ReDoS, and require status codes to co-occur with auth context to avoid false positives - Per-row reconnect tracking: Using
mutation.variables?.connectionIdavoids race conditions when multiple connections are reconnected simultaneously - Cache optimization: Removing
refetchOnMount: "always"properly enables the 30s staleTime
Minor note: isOpen prop is still in NoteContentProps interface but unused (dead code, not a bug).
Score: 9/10
Merge activity
|
Nova mobile pass - viewport: viewportFit cover for iOS safe-area-inset - safe-area utilities (pb-safe, pt-safe, bottom-safe-5, scroll-fade-x) in globals.css - chat FAB pinned above iPhone home indicator; chat sidebar widths responsive across sm/md/lg with min() clamps - chat input CoT panel max-h capped via min(60dvh, 420px) - header tab strip swapped from visible scrollbar to scroll-fade-x mask + snap-x - nova empty state uses svh on mobile, dvh from sm up Add-memory modal rebuilt for mobile - mobile shell switched from fullscreen Dialog to vaul Drawer at 85svh with swipe-down dismissal and scaled background - in-modal header removed; tabs moved to the bottom of the sheet for thumb reach - four tab compactLabels: Note, Links, Files, Connections - desktop tabs now render only when !isMobile (no DOM duplication) - note/link content state lifted to parent so switching tabs preserves typed input - NoteContent snapshots initialContent via lazy useState so the editor isn't reset on every keystroke - shared Drawer base uses rounded-t-xl - removed legacy pt-4 on tab content for mobile Connections — replace expiresAt with sync-run health - new useConnectionHealth hook reads the latest sync run and matches auth-failure patterns; backend errorKind field still needed (TODO) - regex tightened so 401/403 require co-occurring auth/token/grant context; refresh_token requires expired/revoked/invalid/missing qualifier - badge label changed Disconnected -> Needs reauth - Reconnect button replaces the sync action when needsReauth, kicks off the same OAuth flow - per-row reconnect tracking via mutation.variables instead of a single shared id (no race when multiple rows clicked) - fallback toast when authLink is missing so the spinner can't get stuck - sync history panel timeline capped at max-h-260 with internal scroll - useSyncRuns no longer refetches on mount; cache (30s) actually applies, cutting N requests per modal open
dd9c870 to
1706752
Compare

Nova mobile pass
Add-memory modal rebuilt for mobile
Connections — replace expiresAt with sync-run health