Your Second Brain for the Web
A Chrome extension that helps you save, organize, and explore your bookmarks.
Ask questions about your saved content and get answers with sources.
Build notes from your bookmarks and export them to Google Docs.
- Quick capture: Save any webpage with one click. Get AI-generated summaries and suggested tags to help you organize your bookmarks.
- Chat with your bookmarks: Ask questions about your saved content and get answers with links back to the original sources.
- Note builder (Coming Soon): Convert AI chat conversations into structured notes and export them to Google Docs.
- Secure authentication: Sign in with your Google account to keep your bookmarks private and synced.
- Chrome Extension for quick capture
- AI-powered summarization and tagging
- RAG-based chat with bookmarks
- Basic dashboard for management
- Note Builder: Create structured notes from AI chat conversations
- Google Docs Export: One-click export of research notes
- Advanced Filtering: Filter by date, domain, and read status
- Full-text Search: Search within the content of saved pages
- Mobile App: iOS and Android apps for on-the-go access
- Knowledge Graph: Visual exploration of connected ideas
- Integrations: Sync with Notion, Obsidian, and Readwise
- Collaboration: Shared collections and team workspaces
make frontend-install # Install dependencies
make frontend-dev # Start Vite dev server
make frontend-build # Production build
make frontend-lint # Run Biome lint
make frontend-test # Run Vitest suite (jsdom)
make backend-test # Run Deno unit tests for Edge helpersIf pnpm warns about ignored install scripts, run pnpm approve-builds once to whitelist them.
Create .env (or .env.local) with:
VITE_SUPABASE_URL=https://YOUR_PROJECT_REF.supabase.co
VITE_SUPABASE_FUNCTION_URL=https://YOUR_PROJECT_REF.functions.supabase.co # optional override
VITE_SUPABASE_PUBLISHABLE_KEY=...
VITE_GOOGLE_OAUTH_CLIENT_ID=...
VITE_AUTO_ANON_LOGIN=false
VITE_AUTH_WAIT_TIMEOUT_MS=5000
VITE_SUPABASE_FUNCTION_URL defaults to https://<project-ref>.functions.supabase.co; set it explicitly if you use a custom domain.
Set VITE_AUTO_ANON_LOGIN=true only if you have Supabase anonymous sign-ins enabled in your project; otherwise leave it false to avoid unnecessary /auth/v1/signup attempts.
Backend code now lives under supabase/:
supabase/migrationsdefines the bookmark table (Postgres + RLS + autoupdated_attriggers).supabase/functions/**contains Deno-based Edge Functions for bookmarks, summaries, tags, and RAG chat.
Use the Supabase CLI (or GitHub Action) to push schema changes and deploy functions:
-
Subscription System: Details on Free/Pro tiers, feature gating, and management.
-
Release Guide: Steps to build, package, and publish the extension.
-
Authentication: Setup guide for Google OAuth and backend security.
supabase login
supabase link --project-ref YOUR_PROJECT_REF
make backend-db # applies SQL migrations
make backend-functions # deploys bookmarks, summaries, rag_query, notesEnvironment variables consumed by the functions (set via supabase functions secrets set ...):
OPENAI_API_KEY(required) plus optional overridesOPENAI_MODEL,OPENAI_EMBEDDING_MODEL,OPENAI_BASE_URL.AI_PROVIDER=openai(currently the only supported provider).REQUIRE_AUTH=true|falseandANON_UIDfor local/dev scenarios.
Endpoints exposed:
bookmarks: GET/POST/PUT/DELETE persists bookmark metadata + embeddings to Postgres.summaries/summary-tags: lightweight OpenAI helpers for the popup.rag-query: embeds the user question, scores saved bookmarks in-memory, and responds with{ answer, matches }.notes/export: (TODO) placeholder for Google Docs export—wire your own Drive workflow when ready.
| Area | Command | Notes |
|---|---|---|
| Frontend | make frontend-test |
Runs Vitest with jsdom (components + services). |
| Backend | make backend-test |
Executes Deno tests in supabase/functions. |
| Pre-commit | npx lint-staged + tests |
Husky hook invokes lint-staged, Vitest, and Deno tests before every commit. |
To run everything manually:
make frontend-lint frontend-test
make backend-lint backend-test/bookmarks(GET/POST/PUT/DELETE) stores bookmark metadata and embeddings through Supabase Edge Functions into Postgres./summariesand/summaries/tagscall OpenAI (configurable) to summarize content and propose tags./rag_queryembeds the question with OpenAI, performs cosine similarity scoring against stored vectors, and responds with{ answer, matches }./notes/exporttakes{ note }, is currently unimplemented, and should be handled by a future Supabase function that exchanges the Supabase session for Google APIs.
src/pages/popup– capture UI + styles.src/pages/dashboard– chat workspace + note builder.src/services– Supabase client, API client, bookmark/notes/RAG helpers.src/background/src/content– Chrome runtime scripts for page capture.pages/– HTML entrypoints consumed by Vite/CRXJS.
Feel free to extend the Service Worker, add offline caching, or plug in additional API endpoints (analytics, spaced repetition, etc.) as the backend grows.