Projects

Posted on Aug 23, 2026

Things I build outside of work. Both are open source, repos are linked under each one.

km. km (knowledgemaxxing)

MIT licensed · github.com/joeamroo/knowledgemaxxing · site and demo video

I kept requesting my data exports and never opening them. Twitter archive, Google MyActivity, ChatGPT logs, Reddit’s GDPR export, all downloaded and forgotten. km opens them.

  • Dedupes roughly 500k items into a single SQLite file and keeps provenance for every save, like, search, bookmark, and page visit, including iPhone Safari history pulled in through iCloud on macOS.
  • Search runs three legs fused with reciprocal rank fusion: BM25 over titles, BM25 over article bodies, and vector search over passages, using local bge embeddings stored through sqlite-vec. “That tweet about machine guns and birds in australia” finds the emu war tweet from 2022 with none of those words in it.
  • The chat is an archivist agent rather than a RAG prompt. It runs its own searches, pulls full items, and will star, annotate, or save a list as a collection when you ask. km mcp exposes the same read-only tools over MCP, so Claude Code can search the archive from any session.
  • Local first, because fifteen years of my reading history is in this thing and I did not want to hand that to someone else’s server just to make it searchable. The web UI binds to 127.0.0.1 behind a DNS-rebinding guard, nothing is ingested until you review a manifest, and the AI layer is opt-in with your own key and only ever sends the text of an item.
  • Python, FastAPI, a prebuilt React UI, and one SQLite file for everything including the vectors. The scrapers are Playwright against a dedicated browser profile, so your daily browser is never touched.

Larpin LarpIn

larpin.io · source

Just for fun. A parody LinkedIn where everyone admits they are indeed larping.

  • No signup. You get a generated persona when you arrive, and there is one global feed.
  • Every post is scored on buzzword density, from “NPC (for now)” up to “Final Boss of LinkedIn”.
  • A button fills in the “You need to be X-maxxing” format for you. That is the part I actually keep using.
  • Rails 8.1, SQLite, Hotwire, one box, no JS build step.