Otter is a self-hosted bookmark manager and media tracker built with React, Supabase, and Cloudflare Workers
- Private bookmarking app with search, tagging, collections, and filtering
- Starred items and public/private visibility per bookmark
- Dark/light colour modes
- Media tracking — kanban-style board for tracking movies, TV shows, games, and more
- AI-powered title and description rewriting via Cloudflare Workers AI
- RSS feed parsing and URL scraping
- Mastodon integration — backup your own toots and favourite toots
- Cross-browser web extension (Chrome & Firefox)
- Raycast extension to search, view, and create bookmarks
- Native macOS/iOS app
- Bookmarklet
Feed (dark mode) ![]() |
Feed (light mode) ![]() |
|---|---|
New bookmark ![]() |
Search ![]() |
Feed (showing tags sidebar) ![]() |
Toots feed ![]() |
This is a pnpm monorepo containing the following packages:
| Package | Description |
|---|---|
packages/web |
Web app and Hono API on Cloudflare Workers |
packages/app |
Native macOS/iOS app |
packages/web-extension |
Cross-browser extension (Chrome & Firefox) |
packages/raycast-extension |
Raycast extension |
packages/chrome-extension |
Legacy Chrome extension (superseded by web-extension) |
- pnpm v10+ — install with
corepack enable && corepack prepare pnpm@latest --activate - Supabase account and the Supabase CLI
- Cloudflare account — used for hosting, Workers AI, and the API
For a full walkthrough — including Supabase database setup, Cloudflare configuration, and deployment — see the Setup Instructions.
pnpm install
pnpm web:dev- Frontend: React 19, TanStack Router, React Query, Tailwind CSS v4
- API: Hono on Cloudflare Workers with AI bindings
- Database: Supabase (Postgres)
- Hosting: Cloudflare
- Tooling: pnpm workspaces, Biome (formatting & linting), Vite
Made by Zander • zander.wtf • GitHub • Mastodon





