bookmarks

How it works

From bookmarking a tweet to finding it on this site.

The canvas below is rendered with a small custom json-render catalog to show how data moves through ingestion, enrichment, storage, and search.

Bookmarks data flow

Drag nodes to rearrange ยท edges follow automatically

json-render
new bookmark
triggers sync
raw JSON
upsert rows
unenriched rows
summary + tags
query path
ranked results
rendered UI
๐Ÿ”–Source

Bookmark on Twitter/X

A saved tweet starts the pipeline.

tweet textmetricsauthor
โฑScheduler

launchd sync job

Runs every 15 min on the Mac Mini.

incremental synccron
๐ŸฆIngestion

bird CLI pull

Fetches bookmarks as JSON from X.

--json-fullraw payload
โš™๏ธPipeline

Transform + dedupe

Normalizes, extracts URLs, upserts.

authorsurlsengagement
๐Ÿ—„๏ธStorage

Supabase Postgres

Stores bookmarks, tags, authors, search indexes.

bookmarkssearch_vectorRLS
๐Ÿง Enrichment

OpenAI enrichment

Categorizes, tags, and summarizes.

summarytagscategory
๐Ÿ”Query

search_bookmarks()

Full-text search via Postgres RPC.

tsvectorwebsearch_to_tsquery
โ–ฒFrontend

Next.js web app

Renders search results with SSR.

SSR + client filtersTailwind UI
๐Ÿ‘คOutput

Public reader

Searches & browses bookmarks.

find toolsdiscover builders
1

Bookmark a tweet

Tap the bookmark icon on any tweet in Twitter/X. That's the only manual step.

2

Sync runs

A background job pulls your latest bookmarks every 15 minutes.

3

Pull bookmarks

The bird CLI fetches the last 200 bookmarks as JSON from the Twitter API.

4

Transform & upsert

Extracts author info, URLs, and metrics. Dedupes against existing rows and upserts into Supabase.

5

LLM enrichment

GPT-5.4-nano categorizes each new bookmark, generates tags and a one-line summary.

6

Searchable on site

Next.js queries Supabase via a Postgres full-text search function. Instantly findable.