A multi-user web Zettelkasten / Atomic Notes application with semantic embedding graph, document ingestion, hybrid search, and force-directed knowledge visualization.
Status: in active development (v1).
- Pages are long-form documents.
- Atoms are small, discrete, reusable nuclei of knowledge.
- The Go Nuclear button extracts highlighted text from a page into a new Atom and replaces the original text with a transclusion of that Atom.
- Editing an Atom updates every Page that embeds it, silently.
- An automatic embedding graph surfaces semantically related notes alongside explicit cross-links.
- Pages and atoms can be public (anonymously readable) or private.
- Web: TanStack Start (Node 22) + postgres.js + shadcn/ui + Tailwind v4 + TipTap
- Database: Postgres 16 + pgvector
- Embedder sidecar: Rust (axum + fastembed-rs, CPU)
- Document ingestion sidecar: MinerU (Python + FastAPI, CPU)
- Auth: Magic-link via Postmark
- Container runtime: Podman / OCI (Kubernetes-ready)
# 1. Configure environment
cp .env.example .env
# edit .env — at minimum set POSTMARK_TOKEN if you want real email
# 2. Bring up sidecars + run migrations
make sidecars-up
# 3. Start the dev server (app + worker)
cd apps/web && npm install && npm run devOr all-in-one:
make devFor UI-only contributors who don't want the heavy embedder/MinerU images:
make liteSee docs/architecture/ for the high-level overview and per-context deep dives, and docs/adrs/ for every significant decision recorded as an ADR.
AGPL-3.0 — see LICENSE.