your home should be yours.
save everything. sort nothing. own it all.
save the link, the photo, the tweet, the note-to-self — then find it the way you think. no folders, no tags, no digging.
abode is open source under AGPL-3.0. Use the hosted version if you want it managed, eject anytime to run it yourself and own your data, free, forever.
Self-hosting is currently a work-in-progress best-effort: the code's all here and the docs are evolving, but abode's a small project, so please bear with me. The hosted version is the supported option. Issues and PRs are welcome — replies may just be slow at times.
Open-source, self-hostable app for saving images, links, tweets, videos, and articles. Visual, minimal, serendipitous; single-player first.
Your mind shouldn't be trapped on someone else's server, and you shouldn't need to commit to a lifelong subscription to access it.
Next.js 16 (React 19) · Tailwind CSS 4 · shadcn/ui · Zustand · TanStack Query · Prisma · PostgreSQL (pgvector + tsvector) · Bun · deploys on Vercel.
The only thing you must provision to self-host is a database and Supabase. Everything else is an enhancement that lights up when you add its key and degrades cleanly when you don't.
| Service | Tier | Unlocks | Without it |
|---|---|---|---|
| PostgreSQL + Supabase (auth, storage) | 🔒 Required | the app itself | won't run |
| Trigger.dev | ⭐ Recommended core | runs the enrichment pipeline | capture + full-text search work, but no auto-enrichment |
| OpenAI | ⭐ Recommended core | titles, descriptions, tags, OCR, semantic search | items stay bare; full-text search only |
| Replicate (CLIP) | 🧩 Optional | image embeddings (powers similar images) | skipped |
| Google Cloud Vision | 🧩 Optional | dominant-colour extraction | skipped |
| Mapbox | 🧩 Optional | location + static map thumbnails | skipped |
| Resend | 🧩 Optional | invite / waitlist / admin emails | email features off |
| PostHog | 🧩 Optional | product analytics | no telemetry (the default) |
Self-hosted instances send no telemetry unless you set your own PostHog key.
To stop a single account (or an abuser) running up your AI bill, abode has durable daily/monthly per-user $ caps plus a system-wide daily circuit-breaker. They're enforced by default on any deployed instance (production, preview, or staging) — so a fresh deploy is capped without configuration and can't silently run uncapped. Local dev and tests run in shadow mode (every action counted and logged, nothing blocked); when shadow mode is active the server logs a one-time warning at first use.
Tune the thresholds to your own economics via PER_USER_DAILY_USD, PER_USER_MONTHLY_USD, and SYSTEM_DAILY_USD (all optional; sensible defaults apply if unset). To force a specific behaviour, set USAGE_LIMITS_ENFORCED=true (always enforce) or =false (deliberately opt a deploy out, e.g. to run a shadow window). Defaults are intentionally conservative — the right numbers depend on your pricing, so set your own before relying on them.
- Capture: Save via URL, file upload, paste, or text input. Supports images, articles, tweets, and videos.
- Gallery: Dense masonry layout with hover actions, infinite scroll, and keyboard navigation.
- Search: Full-text search across titles, descriptions, OCR text, and extracted article content, blended with pgvector semantic (text-embedding) search via reciprocal rank fusion.
- Rooms: Manual collections and smart rooms (dynamic, filter-based).
- Enrichment pipeline: Automatic metadata extraction, article parsing (Mozilla Readability), OCR and auto-tagging (OpenAI), and embedding generation — all via async Trigger.dev tasks.
- Admin: User management, waitlist, and invite system.
Prerequisites: Bun, Docker (for local Supabase), and the Supabase CLI.
- Copy
.env.exampleto.envand fill in your keys — only the Required tier from External services is needed to boot. bin/install— install dependencies (runs insideapp/).bin/dev— start the dev server on http://localhost:3300 (also starts local Supabase via Docker when available).
More contributor detail — environment plumbing, port allocation, running Supabase manually, and the quality gate — is in CONTRIBUTING.md.
✅ Done (v0):
- Capture via website (URL, file, paste, compose) — images, articles, tweets, videos, products, books, notes
- Masonry gallery, full-text + semantic search, filters
- Metadata extraction + article parsing (Mozilla Readability)
- OCR + auto-tagging (OpenAI)
- Dominant-colour extraction, palette bar + colour search
- pgvector text embeddings blended into search
- Similar images (CLIP visual embeddings, mean-centered)
- Location (auto + manual) + map thumbnails (Mapbox)
- Rooms (manual + smart collections)
- Public rooms, profiles + room embedding
- Article highlighting (with per-highlight notes)
- Command palette (⌘K) + keyboard navigation
- Admin dashboard, waitlist, invite system
🔜 Next:
- Browser extension
- Export / eject
- Self-hosting guide + Docker Compose
🔮 Later:
- Expo mobile app
- Self-hosted / privacy model option — run image analysis + embeddings without third-party APIs
AGPL-3.0 · Copyright © 2026 Jotmake Limited
Contributions are welcome. Note that abode is offered under the AGPL-3.0; a commercial license may be offered separately in the future.