Precision bookmark organization. Your digital library, evolved into a high-performance utility.
Recall is a minimalistic bookmark tracker with a web app and Chrome extension. Save, categorize, and open bookmarks as Chrome tab groups — all with surgical precision.
Recall solves the problem of scattered bookmarks across browsers and devices. Instead of a flat list, bookmarks are organized into collections that can be opened as Chrome tab groups with one click.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, Server Actions) |
| UI | React 19, Tailwind CSS v4, Inter + JetBrains Mono |
| Database | Neon PostgreSQL (serverless) |
| ORM | Drizzle ORM |
| Auth | NextAuth v5 (Google OAuth) |
| Icons | Lucide React |
| Hosting | Vercel |
| Extension | Chrome Manifest V3 |
- Node.js 18+
- npm 9+
- A Neon PostgreSQL database (neon.tech)
- Google OAuth credentials (console.cloud.google.com)
git clone https://github.com/adityakamble49/Recall.git
cd Recall
npm installCopy the example env file and fill in your values:
cp .env.example .env.localDATABASE_URL=postgresql://...
AUTH_SECRET=your_auth_secret_here
AUTH_GOOGLE_ID=your_google_client_id
AUTH_GOOGLE_SECRET=your_google_client_secretGenerate AUTH_SECRET:
openssl rand -base64 33Push the schema to your Neon database:
npx drizzle-kit pushnpm run devOpen http://localhost:3030.
The Chrome extension lets you save the current tab to any collection and open collections as tab groups.
- Open
chrome://extensionsin Chrome - Enable Developer mode (toggle top-right)
- Click Load unpacked
- Select the
extension/folder from this repo
- Go to Settings in the Recall web app
- Click Generate Extension Token
- Copy the token
- Click the Recall extension icon → paste the token → Connect
- Click the ⚙️ gear icon in the extension header
- Toggle between DEV and PROD
- Each environment can have its own token
Save links from any iOS app (Safari, Twitter, Reddit, etc.) directly to Recall using an iOS Shortcut.
- Open Shortcuts app → tap + → name it Save to Recall
- Add these actions in order:
| # | Action | Configuration |
|---|---|---|
| 1 | Receive input | Accept: URLs only |
| 2 | Text | Paste your Recall API token |
| 3 | Get Contents of URL | URL: https://recall-ebon.vercel.app/api/bookmarks — Method: POST — Header: Authorization: Bearer <Text> — Body (JSON): url = Shortcut Input, title = Shortcut Input |
| 4 | Show Notification | ✓ Saved to Recall |
- Tap ⓘ at the bottom → enable Show in Share Sheet
- Done — "Save to Recall" now appears when you share any link on iOS
Get your API token from Settings → Chrome Extension in the Recall web app.
user # NextAuth users (Google OAuth)
account # OAuth provider accounts
session # Active sessions
verificationToken # Email verification tokens
collections # Bookmark collections (name, description, icon, color, isPinned)
bookmarks # Bookmarks (title, url, favicon, collectionId, isFavorite, isArchived)
api_tokens # Extension API tokens (bearer auth)
To update the schema after changes:
# Dev
npx drizzle-kit push
# Prod (with prod DATABASE_URL)
DATABASE_URL="your_prod_url" npx drizzle-kit push- Push to GitHub
- Import the repo on vercel.com
- Add environment variables:
DATABASE_URL,AUTH_SECRET,AUTH_GOOGLE_ID,AUTH_GOOGLE_SECRET - Deploy
| Variable | Description |
|---|---|
DATABASE_URL |
Neon PostgreSQL connection string |
AUTH_SECRET |
NextAuth session encryption secret |
AUTH_GOOGLE_ID |
Google OAuth client ID |
AUTH_GOOGLE_SECRET |
Google OAuth client secret |
MIT


