~/work

Tools and systems I build and maintain

Work from schema to deployment. The case studies cover the decisions and trade-offs behind it.

Featured Live

ResearchBench

Local-first browser research workbench

Built for an open-ended take-home prompt ("Build a NotebookLM clone"): parses, chunks, embeds and searches PDF, Markdown and TXT sources locally in the browser using Rust/Pdfium WASM and ONNX, answers questions with clickable source spans, and generates Studio artifacts or two-host podcasts.

  • Rust
  • WebAssembly
  • SvelteKit 2
  • Svelte 5
  • TypeScript
  • PDF, Markdown and TXT files are parsed locally in the browser via Rust and Pdfium WASM into pages, chunks and exact UTF-16 spans.
  • An ONNX Runtime Web Worker computes local multilingual-e5-small embeddings and commits them atomically to IndexedDB.
  • Chat and Studio run cosine retrieval locally and check generated answers through a deterministic support gate.
  • Only selected excerpts are sent with the user session key to Mistral EU or OpenRouter for generation and speech synthesis.
ResearchBench · browser pipeline

Everything else

  • Mostly AliveSafety and survival knowledge baseSvelteKit 2 · Svelte 5 · TypeScript

    A web-first knowledge system where safety-critical information is prioritized, sourced and kept usable offline.

  • OwlryWayland app launcher in a single binaryRust · GTK4 · Wayland

    Lightweight Wayland application launcher built in Rust with GTK4 and Layer Shell. The UI, daemon, and every provider ship in one binary. It covers apps, calculator, converter, clipboard, web search and more, with fuzzy tag search, frecency ranking, and Lua-first config.

  • Owly NewsLocal-first RSS reader with two interfacesRust · SQLite · Tauri

    A shared Rust core powers a Tauri/Svelte desktop app and a native ratatui TUI, with optional local summarization that never becomes a hard dependency.

  • Infinity TalesAI RPG with branching narrativesGo · PostgreSQL · Svelte

    AI role-playing game with branching storylines, character progression, and AI-generated scene art. Rewritten from Firebase + React to Go + PostgreSQL + Svelte for full data ownership. Multi-provider LLM integration via OpenRouter.

  • MarktvogtFind your next medieval marketGo · Svelte · TypeScript

    Central portal for medieval markets across the DACH region. Visitors, merchants, artists, camp groups, and organizers use the same platform. Go backend, Svelte frontend, PostgreSQL full-text search, deployed on Kubernetes.

  • gnomaProvider-agnostic terminal coding agentGo · TUI · LLM Routing

    Agentic coding assistant for the terminal, written in Go. A multi-armed bandit router picks a model per prompt, whether cloud or local, and shows its choice on every turn. Extensible through hooks, skills, MCP servers, and plugins.