all work
building[2026]

UnThink

Fragment-first personal knowledge base for engineers.

Problem

Every save tool requires a context switch, and the friction is high enough that engineers don't bother capturing what they learn.

Built

Dual-backend (Django and FastAPI) with Celery coordinating three queues. AI classifies and organizes every fragment automatically. Browser extension as primary capture interface.

<300ms

Django save API

model-agnostic

AI layer

<$100/mo

per 1k users

3

Celery task queues

The build

[Idea]

UnThink started from frustration with my own note-taking. I'd save a snippet, then never open it again. The friction of 'pick a folder, write a tag' was high enough that I'd skip capturing things entirely. The whole product idea is: don't make me name anything. The unit of saving is a fragment, two to four lines, not a page, and the AI figures out the folder and tags.

[Framing]

The architectural decision that shaped everything else was the dual backend. Django handles auth, quota, and the save API, with under 300ms return so the browser extension feels snappy. FastAPI handles the AI classification pipeline and the SSE stream that updates the dashboard when classification completes. They talk via Redis pub/sub and Celery (three queues, classification, scraping, and reports) and never call each other directly. This split exists because Django is great for relational CRUD and FastAPI is great for streaming LLM responses. Using one for both was tempting but wrong.

[Build]

SSE over WebSocket was an early call. We don't need bidirectional, and SSE just works through any HTTP proxy. The browser extension (Manifest V3, Chromium only) is the primary capture interface. Right-click on selected text, hit Send to UnThink, done. The folder taxonomy is the part I'm proudest of. Every fragment lands in exactly two folders, a topic folder like Tech/DevOps/Redis and a source folder from the page title. Tags equal folder membership, so editing a tag later is just moving the fragment between folders.

[Deploy]

Quota limits are honest. 25 right-click saves a day, 250 a month. I'd rather have a clear ceiling than a vague fair-use line. We're still in development, but the capture, classify, and file loop is solid.

[What's next]

What's next. Replacing the Jina and Firecrawl fallback scrapers with a single in-house crawler, plus an offline mode for the extension.

Stack

7 techs · grouped by layer

Backend

  • FastAPI
  • Celery
  • SSE

Infrastructure

  • Docker

Data layer

  • PostgreSQL
  • Redis

AI / special

  • Gemini

Also used

Django 5Gemini 2.0 FlashReact 18Manifest V3

Related writing

7 posts reference UnThink

Related stack

techs used in UnThink