All work
Work

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.

Orbit feed on a laptop
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.

Orbit feed of saved links as a masonry grid

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.

Search results combining semantic and keyword matches

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.

Spaces overview
Inside a shared space

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.

Settings with bring-your-own Gemini key

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.