Skip to content

mobile responsiveness pass + connections reauth fix#959

Merged
graphite-app[bot] merged 1 commit into
mainfrom
mahesh/nova
May 17, 2026
Merged

mobile responsiveness pass + connections reauth fix#959
graphite-app[bot] merged 1 commit into
mainfrom
mahesh/nova

Conversation

@MaheshtheDev
Copy link
Copy Markdown
Member

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

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 17, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
supermemory-mcp 1706752 May 17 2026, 09:50 PM

@graphite-app graphite-app Bot requested a review from Dhravya May 17, 2026 09:35
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 17, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

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

Copy link
Copy Markdown
Member Author

MaheshtheDev commented May 17, 2026


How to use the Graphite Merge Queue

Add 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
Copy link
Copy Markdown

claude Bot commented May 17, 2026

Claude finished @MaheshtheDev's task in 2m 22s —— View job


Review Complete

  • Fetch and analyze PR diff
  • Review mobile responsiveness changes
  • Review connections reauth fix (useConnectionHealth hook)
  • Check for bugs, security issues, and logic errors
  • Submit review

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.

Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

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

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-*) with max() fallbacks and viewport viewportFit: "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 seededContent pattern correctly uses lazy useState initialization to prevent TextEditor resets
  • Auth failure detection: The regex patterns in useConnectionHealth are 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?.connectionId avoids 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

@graphite-app
Copy link
Copy Markdown

graphite-app Bot commented May 17, 2026

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
@graphite-app graphite-app Bot merged commit 1706752 into main May 17, 2026
4 of 7 checks passed
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