Commit graph

322 commits

Author SHA1 Message Date
MaheshtheDev
3769ffa41f feat(web): Company Brain connections disconnect and Slack reconnect (#1157)
## Summary
- Add disconnect actions for org and personal GitHub/Linear connections on the Company Brain settings page
- Show connected Slack workspace name and an admin-only **Reconnect Slack** button (pairs with API admin gate in supermemoryai/mono#1912)
- Fix infinite loading skeleton when `/brain/connections` fails by falling back to empty state with a toast

## Test plan
- [ ] Open Settings → Company Brain connections as org admin
- [ ] Confirm Slack team name shows when workspace is connected
- [ ] Confirm **Reconnect Slack** is visible for admin/owner only
- [ ] Connect and disconnect GitHub/Linear for org (admin) and personal scopes
- [ ] Simulate failed connections fetch (e.g. offline) and confirm page renders instead of infinite skeleton
2026-06-24 01:16:16 +00:00
MaheshtheDev
1e1b0b1a37 feat(web): make /integrations a real route with connect deeplinks (#1155)
- Promote integrations from ?view=integrations to real /integrations and nested /integrations/[card] routes; the page body is shared via AppExperience and useViewMode is path-aware.
- Legacy ?view= URLs (and /settings/integrations) redirect to the new routes for back-compat; middleware/ensure-workspace allow the public routes.
- Add ?connect=<plugin|provider> deeplink that opens a card's connect modal instantly with a loading state (e.g. Hermes API key).
2026-06-23 20:42:29 +00:00
Oluwabusayo Jacobs
b3017eb121
chore(web): remove unused @lobbyside/react integration (#1156)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 10:00:59 -07:00
Mahesh Sanikommu
32a6055f7c
Fix integrations page double-refresh on load (#1134)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Vedant Mahajan <vedant.04.mahajan@gmail.com>
2026-06-23 20:01:40 +05:30
MaheshtheDev
f28e974609 feat(web): add Slack connect card to home + space selector polish (#1137)
Adds the 'Add Supermemory to your Slack' card (status + install) on the home dashboard, and removes the border on the space-selector trigger.
2026-06-22 18:20:09 +00:00
MaheshtheDev
a6f7f346e2 feat(web): company brain — invite-accept page, space UX/visibility, org-scoped daily brief (#1112)
New /org/invite/[invitationId] page so consumer-org invitees can view and accept or decline invitations in the app instead of the console.

Fixes ENG-811
2026-06-22 18:12:18 +00:00
MaheshtheDev
ab3dcd7a73 feat(web): create org from settings launches onboarding (#1136)
Settings 'create organization' now routes to /onboarding?new=1&name=... (team/personal, invites) instead of a bare authClient.create. Adds the forceCreate path with name prefill, clears new=1 after a successful create to prevent duplicate orgs, and fixes the Radix popover-to-dialog pointer-events lock.
2026-06-22 18:12:18 +00:00
MaheshtheDev
cf47d73126 feat(onboarding): instrument brain onboarding analytics (#1099)
Wire PostHog funnel events (started, step viewed/completed, mode, workspace, sources, ingest, team, completed) across the brain onboarding flow, and drop stale pre-brain event defs from analytics.ts.

---
**Session Details**
- Session: [View Session](https://supermemory.us1.vorflux.com/agent-sessions/5b48bbe4-422a-4577-b6bf-fd9416a6846b)
- Requested by: Sreeram Sreedhar (sreeram@supermemory.com)
- Address comments on this PR. Add `(aside)` to your comment to have me ignore it.
2026-06-20 07:48:15 +00:00
ved015
c6b20b5b87 Fix delete organization dialog focus race (#1139)
## Summary
- Delay opening the delete organization dialog until after the Danger zone popover begins closing
- Explicitly focus the organization confirmation input when the dialog opens
- Prevent intermittent focus loss where users could not type the org name
2026-06-19 17:46:21 +00:00
sreedharsreeram
313a8df6a6 feat(web): show import status on X bookmarks integration card (#1130)
## What

The X bookmarks ("Import X bookmarks") card on the integrations page never reflected any state, even after importing tweets — unlike connectors and plugins, which show "Connected"/"Active".

After this change, once you've imported at least one tweet the card shows an **"Imported · {last import time}"** pill (mirroring the plugin "Active · {time}" style) and is included in the **Connected** filter.

Since importing X bookmarks is a one-time/occasional action rather than a live connection, it intentionally says **"Imported"** with the last-import timestamp, not "Connected".

## Why

The page's status logic (`isItemConnected` + `renderStatus`) only handled the `plugin` and `connector` item kinds. The X bookmarks card is an `import` kind, so it always rendered just "Connect". This was a regression from #979 (the integrations overhaul), which rebuilt the page around item kinds and dropped the previous "{N} tweets imported" indicator.

## How

- Add a single documents query (`@post/documents/documents`, `categories: ["tweet"]`, `limit: 1`, newest first) that yields both the org-wide tweet count (`pagination.totalItems`) and the latest tweet's `createdAt`.
- `isItemConnected` returns `true` for `import` when the count is `> 0`.
- `renderStatus` renders a new `ImportedPill` ("Imported · {relative time}") for `import` when there's ≥1 tweet.

## Testing

- `tsc` and Biome pass; no new errors introduced by this change.
- Verified the status source of truth against a local backend by seeding `type='tweet'` documents — the count/latest-timestamp the pill renders reflect them.

> Note: `tsc` reports two **pre-existing**, unrelated `granola` errors in this file (`CONNECTOR_META` + an icon record missing the `granola` provider). They exist on `main` and are not touched by this PR.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-18 04:43:06 +00:00
sohamd22
9017a1b5d4 add weekly digests, log, and opt out options (#1107)
### TL;DR

Adds a Weekly Digests view to the web app, allowing users to browse and read their personalized weekly memory recaps directly in the UI, along with a notification preference toggle to opt out of digest emails.

### What changed?

- Added a new `digests` view mode that renders a `DigestsView` component, accessible from the dashboard via a new weekly digest preview card that appears when a digest exists.
- `DigestsView` displays a master-detail layout: a scrollable list of past weekly digests on the left, and a full digest content pane on the right. The detail pane renders the intro (with a floating brain illustration), numbered highlights, and feature recommendations styled to mirror the email layout.
- Added thumbs-up/thumbs-down feedback controls and an optional free-text input on each digest, wired to analytics events.
- Added `useDigests` and `useDigest` hooks that fetch digest list and detail data from the API, with 5- and 10-minute stale times respectively.
- Registered four new API schema endpoints: `GET /digests`, `GET /digests/:id`, `GET /digests/preferences`, and `POST /digests/preferences`.
- Added a `DigestPreferences` section to the account settings page with a toggle that lets users opt in or out of the weekly digest email.
- Extended the `viewModeChanged` analytics event and the `viewLiterals` search param list to include `"digests"`, and added `digestViewed`, `digestFeedback`, and `digestFeedbackDetail` analytics events.
- Added documentation for the `SUPERMEMORY_EMBEDDING_RAM_LIMIT` and `SUPERMEMORY_INGEST_CONCURRENCY` environment variables, explaining the memory-bounded ingestion queue and its live terminal status output.

### How to test?

1. Navigate to the dashboard and confirm the weekly digest preview card appears when a digest exists, and clicking it transitions to the `digests` view.
2. In the digests view, verify the list renders past digests with the most recent highlighted by a gradient border, and selecting a row loads the correct detail content.
3. Confirm the empty state renders correctly when no digests exist.
4. Use the thumbs-up/thumbs-down buttons and the detailed feedback textarea on a digest, verifying the toast confirmation appears on submission.
5. Open account settings, locate the "Notifications" section, and toggle the weekly digest switch on and off, verifying the preference persists without errors.
6. Confirm the `digests` view mode is reflected in the URL search params when active.

### Why make this change?

Users currently receive weekly digest emails but have no way to revisit past digests within the app. This change surfaces digest history directly in the UI, adds in-product feedback collection on digest quality, and gives users control over whether they receive the emails — improving discoverability, engagement, and preference management.
2026-06-18 01:06:40 +00:00
sreedharsreeram
d4a3a57a42 fix(web): remove duplicate "Connected" text on connector cards (#1131)
## Problem
On the integrations page → **Knowledge bases** section, a connected connector card (e.g. Google Drive) rendered the green **"Connected"** pill **twice** — once on the bottom-left, and again on the bottom-right next to the `+` button.

## Cause
The `ConnectionsCountPill` was rendered in two slots of the card:
- `renderStatus()` → left `statusSlot`
- `renderRight()` → right `actionSlot` (alongside the `+` add-source button)

The `renderStatus` connector case was added recently (#1065) and duplicated the pill that `renderRight` already shows.

## Fix
Removed the `connector` case from `renderStatus()` so the pill renders **only on the right**, in place of the Connect button. The logic is keyed on `kind === "connector"`, so this fixes every Knowledge-bases card uniformly — **Google Drive, Notion, OneDrive, Granola**.

- Non-connected cards still show the **Connect** button (unchanged).
- The info modal is unaffected — it renders `infoActionSlot ?? actionSlot` and never `statusSlot`.

```diff
-			case "connector": {
-				const count = connectionsByProvider[item.provider].length
-				if (count <= 0) return null
-				return <ConnectionsCountPill count={count} />
-			}
 			default:
 				return null
```

## Testing
Minimal, self-contained deletion (no new code, no unused symbols). Local `tsc` not run in this worktree because `node_modules` isn't installed here; the change leaves valid syntax and `ConnectionsCountPill`/`connectionsByProvider` remain used by `renderRight`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-17 18:07:25 +00:00
sreedharsreeram
00d481e8c0 Move Granola connector to Pro plan (#1132)
## Summary
- move Granola from Max-gated to Pro-gated in Nova integrations and add-connection flows
- add Granola to Pro plan card connector copy in billing
- update Granola connector docs to say Pro Plan or higher

## Testing
- bunx biome check apps/web/components/settings/billing.tsx apps/web/components/integrations-view.tsx apps/web/components/add-document/connections.tsx apps/docs/connectors/granola.mdx
- git diff --check

Note: onboarding-brain was intentionally left unchanged.
2026-06-17 17:48:04 +00:00
ishaanxgupta
24eb5a4367 Fix Granola Max upgrade gating (#1095)
## Summary

- Keep the Granola integration card in Upgrade state unless the active plan includes Max or above.
- Prevent the Granola API-key modal from opening unless the active plan is Max or above in both the integrations grid and add-document connections UI.
2026-06-17 06:22:41 +00:00
ishaanxgupta
9c5a5d4991 Improve mobile integrations layout (#1097)
## Summary
- Add a mobile-only Activity panel with Active and Recent tabs near the top of the integrations page.
- Switch mobile integration cards from horizontal carousel cards to compact vertical list rows.
- Keep the existing desktop right-column layout unchanged.

<img width="366" height="800" alt="image" src="https://github.com/user-attachments/assets/04dc04a0-ae7b-4fe5-b54f-5d730220a90c" />
2026-06-17 04:06:59 +00:00
Ishaan Gupta
925be7c6c5
Add Antigravity MCP setup (#1119) 2026-06-16 12:10:36 +05:30
Mahesh Sanikommu
5eed4bcbf3
Add bulk multi-URL paste to create separate memories (#1109) 2026-06-15 11:37:09 +05:30
Mahesh Sanikommu
3b1fac2d6c
feat(web): delete organization from settings danger zone (#1117) 2026-06-15 11:36:00 +05:30
MaheshtheDev
81ae72224f feat(spaces): per-space entity context + edit-space modal (#1078)
- "What to remember" per-space context — set on create, on edit, and in the space profile; steers what gets extracted into memory
- Edit-space modal (name + context) from the space pill's hover edit, mirroring the create modal
- Manual saves respect a space's configured context instead of overwriting it with the generic default
2026-06-12 20:51:37 +00:00
MaheshtheDev
40d025e178 Fix onboarding source integrations and connector gating (#1105)
Fixes the onboarding source-integrations step: corrects connector behavior, applies plan-based gating to connectors, and polishes the integrations layout.
2026-06-12 18:05:48 +00:00
MaheshtheDev
f1c98c161c feat(shortcuts): merge use-case modal with shortcut actions (#1091)
Remove intermediate use-case screen; Apple Shortcuts card now opens a single modal with use cases + Add/Search memory shortcut buttons inline. Fixes res.data.key bug (was reading res.key which is always undefined). Buttons stack on mobile, no 'I'm good' dismiss.
2026-06-11 00:33:21 +00:00
ishaanxgupta
a2a1b065a2 expand chat file drop zone (#1085)
## What changed

- Added a chat-shell-level file drag/drop target so the whole chat area, including the conversation area, shows the drop overlay and accepts files.
- Disabled the nested composer drop handler for the sidebar chat path to avoid duplicate drops or stuck overlay state.
- Kept the existing local input drop behavior available for other ChatInput usages like the home composer.
2026-06-10 18:55:57 +00:00
Ishaan Gupta
6efb4ec3c2
fix(web): harden integrations upgrade plan id (#1088) 2026-06-10 11:11:03 -07:00
Vedant Mahajan
23c43bd27d
fix(web): prevent upgrade click event as plan id (#1086) 2026-06-10 21:02:42 +05:30
Ishaan Gupta
464a2b16b1
Add Cursor & granola plugin card in Integrations page (#1070) 2026-06-10 20:23:24 +05:30
Vedant Mahajan
fec9334782
Fix integrations info modal dismissal and CTA label (#1084) 2026-06-10 20:12:03 +05:30
Mahesh Sanikommu
9a1bab7182
feat(billing): cancel flow with reason capture + book-a-call (#1077)
Co-authored-by: ved015 <vedant.04.mahajan@gmail.com>
2026-06-10 13:34:33 +05:30
MaheshtheDev
a068a794dd Support HTML file uploads in Nova (#1076)
Adds .html/.htm extensions and text/html MIME to the upload accept list and validation. The API already ingests HTML files; the uploader was rejecting them client-side.
2026-06-10 06:09:20 +00:00
MaheshtheDev
8a9e3ff3b0 feat(integrations): active connections rail + recently added (#1075)
> **_Demo Video_**: https://www.tella.tv/video/integrations-page-layout-with-active-connections-1-g9p4

- Right rail listing active plugins/connectors with status, counts, and expandable detail
- Recently added card: latest docs tagged by source, opens in the doc viewer
- Loading skeletons, empty states, header fetch spinner; fix guest-view flash on reload

ENG-784
2026-06-10 05:00:59 +00:00
ishaanxgupta
7418abbe8d memory graph loader (#1072)
## Summary
- Replace the memory graph page's top-left package loading indicator with a centered Supermemory loader overlay.
- Reuse the same SuperLoader animation in the graph preview card loading state.
2026-06-09 17:39:35 +00:00
ved015
c71acbe8ae Make integrations page public for guests (#1073)
## Summary
- Allow logged-out users to load `/?view=integrations` without being redirected to login
- Add a public integrations header with Supermemory branding and a login CTA
- Run IntegrationsView in guest mode with static catalog data only, no auth-backed queries
- Route all guest Connect actions to login with a redirect back to the integrations page

<img width="1680" height="1009" alt="Screenshot 2026-06-09 at 9 32 33 PM" src="https://github.com/user-attachments/assets/111f2b1a-5224-47ae-8152-e1349c05842d" />
2026-06-09 17:32:00 +00:00
MaheshtheDev
170133cf83 feat(web): make brain onboarding the default flow (#1067)
feat(web): make brain onboarding the default flow

- Replace legacy /onboarding with the brain onboarding flow (about -> sources -> ingest -> team -> done)
- Add brain-home dashboard page and widgets
- Old /onboarding/brain deep links fall through to the existing catch-all redirect

feat(onboarding): create org on About step + remove skip

- Create the organization on About -> Continue (authClient.organization.create + setActiveOrg), persisting brain context to org metadata; fixes the no-org redirect loop
- Show a Creating… state on Continue while the org is created
- Remove Skip on the required About step (name + workspace)
- Add generateOrgSlug/generateUsername helpers to onboarding-brain/types
2026-06-09 17:13:32 +00:00
ved015
7c2bd19cd8 Update integrations info modal (#1065)
## Summary
- Replace percard Docs links with hover only info buttons and card click info modals
- Add doc backed use cases inside setupstyle info modals, with Docs access and the same card action in the footer
- Track all info modal close behavior through one analytics event with a close reason
- Keep Active/Connected status in the card footer, align the info icon to the card action margin, and fix the Settings modal Integrations linkout

<h3>Normal no hovering</h3>
<img width="1029" height="529" alt="Screenshot 2026-06-09 at 1 21 38 PM" src="https://github.com/user-attachments/assets/ea817984-34a2-437e-9590-addea0f8d4a1" />

<h3>On hovering</h3>
<img width="466" height="340" alt="Screenshot 2026-06-09 at 1 21 23 PM" src="https://github.com/user-attachments/assets/765c6132-9f91-4a9a-8141-6d61e24b688e" />

<img width="846" height="549" alt="Screenshot 2026-06-09 at 1 34 43 PM" src="https://github.com/user-attachments/assets/aaa10604-98e0-4139-b32f-b19e230210a2" />

<h3>Info modal</h3>
<img width="1303" height="788" alt="Screenshot 2026-06-09 at 1 22 29 PM" src="https://github.com/user-attachments/assets/18b6228f-3a3b-481b-8459-392a39eccb1a" />

<img width="724" height="415" alt="Screenshot 2026-06-09 at 1 22 46 PM" src="https://github.com/user-attachments/assets/5e25e68b-53a9-4fa1-a5cf-1980ede7661a" />
2026-06-09 15:29:38 +00:00
Mahesh Sanikommu
3a3324cee3
feat(settings): settings modal overhaul (#1069) 2026-06-09 12:07:47 +05:30
MaheshtheDev
819090ae9d feat(integrations): add Poke integration (#1066)
- New Poke card in Apps & extensions linking to the Poke recipe (OAuth, no manual MCP URL)
- Featured hero slot for Poke with palm-tree emoji
- Reusable NEW badge, applied to Poke
- Poke logo asset, full-cover icon styling
- POKE_RECIPE_URL constant; guard Chrome-only analytics on external cards
2026-06-08 18:00:07 +00:00
Mahesh Sanikommu
7ec3e57fe1
Grok 4.3, web sources UX, and mobile polish (#1064) 2026-06-08 12:34:15 +05:30
ishaanxgupta
70955480fd implement Nova chat attachments on the web side (#1004)
- Added attachment draft/shared types and validation in components/chat/attachments.ts.
- Added paperclip upload UI to Nova composer with file chips, size/status, remove, retry, and per-file Save / Chat only toggle.
- Wired uploads before send to /chat/attachments, then sends returned attachment references in chat message metadata.
- Preserved attachment metadata when loading threads and rendered attachment chips on user messages.
- Added attachment support from the home composer into the full chat view.
- Extended chat analytics with attachment counts.

<img width="1905" height="900" alt="image" src="https://github.com/user-attachments/assets/631001b8-7c68-4015-b36b-06c69cdad271" />
<img width="1323" height="1600" alt="image" src="https://github.com/user-attachments/assets/77eee08a-b235-41eb-b03a-f406b81b46e7" />

- ensured responsiveness
2026-06-08 06:18:28 +00:00
vorflux[bot]
428d3ccefa
fix: render newlines in Nova chat user messages (#1061)
Co-authored-by: Vorflux AI <noreply@vorflux.com>
2026-06-06 22:10:04 -07:00
MaheshtheDev
5b129d7d32 fix(nova): keep user message when stopping generation early (#1055)
Clicking stop before the first assistant token streamed in deleted the triggering user message: handleStop unconditionally sliced off a trailing user message, which during the submitted/thinking window is the user's own
message. Drop the slice so the message is preserved on stop.

ENG-732
2026-06-06 15:53:23 +00:00
Mahesh Sanikommu
2b60568a21
fix(web): render full document content in viewer (#1056)
Co-authored-by: ved015 <vedant.04.mahajan@gmail.com>
2026-06-06 14:15:21 +05:30
Vedant Mahajan
1b1bd4d221
Fix plugin logos and recent rows for saved OpenClaw/Hermes memories (#1054) 2026-06-06 00:17:57 -07:00
Dhravya Shah
053baa5029
Improve memory graph (#973)
Co-authored-by: Ishaan Gupta <ishaankone@gmail.com>
2026-06-05 15:48:41 -07:00
MaheshtheDev
ad5734cdfc feat(web): Current/All space filter + redesigned chat history sheet (#1050)
Add a Current/All scope toggle (default Current) to Nova chat history; All fetches threads across every space via the new scope=all API, with each row showing its space.

Redesign the sheet to fit the design system: cap width at 380px (was ~92vw), add search, date-grouped rows (Today/Yesterday/Previous 7/30 days/Older), hover-reveal delete, header space chip, solid primary New Conversation button.

Part of ENG-728: https://linear.app/supermemory/issue/ENG-728
2026-06-05 15:00:18 +00:00
Ishaan Gupta
c606f76f6d
Refine Codex and OpenCode OAuth integration status (#1048)
Co-authored-by: Mahesh Sanikommu <maheshthedev@gmail.com>
2026-06-04 15:15:20 -07:00
Mahesh Sanikommu
fdd966f20e
ENG-712: Accept JSON uploads in Nova + fix file-size display (#1047) 2026-06-04 13:58:18 +05:30
sreedharsreeram
63a90d1f68 feat/granola connector (#1007) 2026-06-03 15:19:49 +00:00
Vedant Mahajan
73c320c83b
add edit feature , reasoning mode, message queue in nova chat (#1018)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Ishaan Gupta <ishaankone@gmail.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-06-02 11:58:58 -07:00
vimzh
0e29de0af2
fix(tweet-preview): guard JSON.parse to avoid crashing the modal (#996) 2026-06-02 20:25:02 +05:30
vorflux[bot]
253a82bdb7
fix: add show more/less toggle for truncated highlights in Nova (#1029)
Co-authored-by: Vorflux AI <noreply@vorflux.com>
2026-05-31 19:10:43 -07:00
MaheshtheDev
53c971ac85 feat(billing): add Max plan to nova with cancel/resume flow (#1024)
Integrate the new api_max plan ($100/mo, $130 credits) from mono into the
nova web app, mirroring mono's tier semantics.

- Tiers: insert api_max between pro and scale; resolves to Pro-tier for feature gates while displaying as "Max" (queries.ts, use-token-usage)
- Billing page: Max plan card ("Most Popular"), checkout/cancel/invoice wiring; advanced carousel page now 3-up (Max/Scale/Enterprise); Scale builds on Max
- Carousel auto-opens to the page holding the current plan (Max/Scale/ Enterprise users land on their own card instead of Free+Pro)
- Cancel: retention dialog listing what you lose + type-to-confirm "CANCEL"
- Cancel/resume state mirroring console: detect canceledAt-scheduled cancellation, show "Cancelling" pill + "Cancels on {date} · N days left", and a "Resume plan" (uncancel) action
2026-05-31 19:10:17 +00:00