Orbit
A personal memory vault that reads what you save - Gemini tags and summarises every link, and hybrid search finds it by how you remember it.

- Role
- Design and full-stack, side project
- Year
- 2026
- Stack
- Next.js 16
- React 19
- TypeScript
- Supabase
- pgvector
- Google Gemini
- Firecrawl
- Tailwind CSS
- shadcn/ui
- motion
- What I did
- Capture pipeline: dedupe, summarise, screenshot and embed in one request
- Hybrid semantic + keyword search with reciprocal rank fusion
- Masonry feed with density control and card actions
- Shared spaces with invites, enforced by row-level security
- Bring-your-own Gemini key and model picker in settings
- Unit tests for ranking, masonry and preview helpers
Overview
Orbit is a mymind-style memory vault: one place to drop anything you want to keep, and a search that works the way memory does - by topic, by vibe, by half-remembered phrase - instead of by folder.
Save a URL and Orbit does the reading. Gemini fetches the page, writes a short summary, picks tags that mix the specific with the broad, and classifies the content type, while a screenshot is captured for the card. The result is embedded and stored, so every saved link is searchable seconds later. Spaces group links and can be shared, and each person brings their own Gemini key so every vault stays private.
Save once, remember forever
The feed is a masonry wall of cards - screenshot, title, summary, tags - with a density control for how much you want on screen at once. A new-link card sits in the grid itself, so capturing something never leaves the page.
Right-click a card to pin it to Top of Mind, move it into a space, or delete it. Everything animates with layout transitions so the wall settles rather than jumps.

Search the way you remember
A query is embedded with the same model as the cards and matched by cosine similarity, then fused with a full-text keyword search using reciprocal rank fusion. Exact phrases still win when you know them; fuzzy memories still land when you don't.

Spaces you can share
Spaces group links by project or theme and carry their own colour. Owners invite collaborators by email; members can add and see links inside the space, and leaving a space purges their contributions - all enforced in Postgres policies rather than in the UI.


Your keys, your data
Settings hold a display name, the Gemini API key used for your vault, and a model picker for summarisation. Keys are stored per user and read through a database function, so the server never holds a shared credential and each person's usage is their own.

How a save works
One route handles capture. It checks for duplicates, then runs Gemini's URL-context summary and the Firecrawl screenshot in parallel. Title, summary and tags are joined and embedded at 1,536 dimensions, unit-normalised, and written to a pgvector column with an HNSW index. Search calls a single SQL function that scores both arms and returns the fused ranking.