grab-reference

GrabCite, day one — a microservice and a stack we'd later abandon

What is now Grab-Reference began life on February 19, 2025 as 'GrabCite' — a microservice architecture in Docker, with React + StyleX + Vite + TypeScript + Prisma. A snapshot of choices we'd later move away from, captured retrospectively so the history isn't pretty-revisionist.

Why Care?

If you're picking a stack for a new project today, it's instructive to look at what we picked twelve months ago, why we picked it, and what we now use instead. Grab-Reference's first commit captures that snapshot honestly: a Dockerized microservice with React, StyleX styling, Vite bundling, Prisma schema. None of those are part of the Lossless preferred stack today.

The retrospective matters because the idea of grab-reference is still alive — capture a URL, get back structured reference metadata — even though the original implementation has been replaced.

What's New?

(All historical, captured retrospectively. Active dev day: 2025-02-19.)

  • Setup of microservice architecture for GrabCite app (15:17) — Docker + Docker Compose scaffolding for what was conceived as a long-running service.

  • Made a more robust use of Docker (15:20) — three minutes later, already iterating on the container shape.

  • This setup: Uses StyleX for styling, follows React best practices with TypeScript, Sets up proper module bundling with Vite, Includes basic responsive styling, Uses strict TypeScript configuration, Follows modern React patterns with functional components (15:23) — the one commit that lays out the entire stack as it stood. Worth preserving as a primary source.

  • A handful more iterating on pnpm config and Docker debugging, then starting with hello world and working from there and set up prisma schema — the day ended with a Prisma-backed Hello World running locally.

The arc

February 19, 2025 was a sprint day. The intent was to capture references — paste a URL, get back its title, author, publish date, OpenGraph snippet — and originally the design was a real backend service the Obsidian plugin would talk to. Hence Docker, Prisma, the whole microservice apparatus.

The choices reflected the moment: React was still the dominant choice for new web work; StyleX was a fashionable atomic-CSS option; Vite was settling in as the bundler of choice. None of these were obviously wrong in February 2025.

What the commit history doesn't show is the conversation that followed: did we actually need a microservice? An Obsidian plugin running locally on a desktop has cheaper ways to fetch and parse a URL than a separate Dockerized backend. The eventual answer was no — the plugin can call the OpenGraph endpoint directly, parse the metadata, and write to the note without anyone running a container.

What this enabled — and what got cut

Grab-Reference still exists as a working concept. The current implementation lives entirely inside the Obsidian plugin runtime; the Docker + microservice apparatus from February has been pared back. The Prisma schema is gone. React was replaced with the team's now-default Astro-and-vanilla approach (React is on Lossless's hard-prohibited list — see the astro-knots skill — though that prohibition came after this commit).

The name = GrabCiteGrab-Reference rename happened along the way as the scope broadened from "citation-shaped sources" to "any URL worth keeping a structured reference to."

Retrospective notes

  • Written 2026-05-04, fifteen months after the founding day.

  • This entry exists partly to be honest about a stack we used and moved away from. Pretending we always wrote things the current way is dishonest about how building a thing actually works.

  • The "starting with hello world and working from there" commit (16:33 same day) is one of the more accurate commit messages we've written.

  • Original repo name GrabCite was renamed when the scope broadened — and to avoid confusion with cite-wide, which by then had taken on the citation-formatting role.