Software.
What I build, what I contribute to other projects, and a few excursions from university and game jams.
01Activity
GitHub9,912
contributions on GitHub in the last year, 4,838 of them in private repositories.
Monthly totals as a table
| Month | Contributions |
|---|---|
| November 2025 | 10 |
| December 2025 | 17 |
| January 2026 | 25 |
| February 2026 | 21 |
| March 2026 | 25 |
| April 2026 | 200 |
| May 2026 | 194 |
| June 2026 | 349 |
| July 2026 | 236 |
| August 2026 | 522 |
| September 2026 | 1,830 |
| October 2026 | 4,546 |
| November 2026 | 1,937 |
- Commits
- 3,442
- Pull requests
- 976
- Issues
- 598
- Public repositories
- 113
Recently worked on
02Engineering conventions
How I build software with AI agents: written rules for architecture, code and repository setup, which a Claude Code plugin brings into every session, so agents work to the same standards I do. It is the same question I work on as a software quality consultant: how a team makes quality a shared goal, now for a team that includes agents.
engineering-conventions
My conventions for architecture, code, working with Claude, repository setup and stacks, as a website and as a Claude Code plugin that brings them into every session: agents read the pages that apply before they design, build or review, and can audit a repository against every convention.
claude-marketplace
My harness for Claude Code: a curated plugin marketplace with the plugins I use daily and my own, the conventions among them.
03Software
Everything can be self-hosted, nearly all of it is open source. Some of it I also run for you: sign up and go.
notefeed Ready to useFree, subscription for more
An inbox for Markdown notes: post via HTTP, web UI or client, read as RSS.
Gamepanion Ready to useFree, subscription for more
A spoiler-free companion for the games you play: tell Claude about quests, build and items while you play, and it knows where you were next time.
Gesetze für KI Ready to use
A public MCP server with current German federal and state law, so AI assistants look laws up instead of quoting from memory.
freundebuch
A personal CRM for one household: ramble to Claude about your friends and get briefed before you meet them.
noticebox
An inbox for the forms on static pages: every submission with a state, a reason and an audit trail, and usable by Claude over MCP.
passageway Free for private use, licence for companies
Searches wiki, notes and documentation at once and gives Claude, over MCP, exactly the passages that answer a question, each with its source.
gassi
A small dog diary for one household: walks, food, pee and poop.
trilium-recall
Claude remembers what you wrote in Trilium: a container with keyword and meaning search, as an MCP tool and as a prompt hook for Claude Code.
trilium-llm-wiki
Claude Code plugin that builds and maintains an LLM wiki in Trilium, after Karpathy's pattern: schema, templates, graph, review queue and a write lock.
trilium-mcp-proxy
OAuth login for Trilium's built-in MCP server: connect any MCP client by URL and sign in with your Trilium password.
trilium-plugin
Claude Code plugin for Trilium: skills for notes, attributes, templates and journal, on Trilium's built-in MCP server.
karakeep-trilium-sync
Copies tagged Karakeep bookmarks, with their article text, into Trilium as notes, as sources for my LLM wiki.
Releases
paperless-mcp
MCP server for the Paperless-ngx REST API, around 80 tools, as a container sidecar.
paperless-ngx-plugin
Claude Code plugin for Paperless-ngx: skills for inbox clean-up, duplicates, encrypted PDFs, search and metadata, on the Paperless MCP server.
invoiceninja-mcp
MCP server for the Invoice Ninja API with around 377 tools, as a container sidecar.
invoiceninja-plugin
Claude Code plugin for Invoice Ninja: skills for clients, invoices, quotes, payments and reports, on the invoiceninja-mcp server.
mcp-login-oauth
OAuth 2.1 browser login for FastMCP servers whose login is a form checked by the service behind them.
teamscale-mcp
MCP server that exposes the Teamscale REST API as tools, as a container sidecar that passes each client's own credentials through.
github-runner
Self-hosted GitHub Actions runners with isolated Docker-in-Docker per runner.
self-hosted-runner-selector
Picks a self-hosted runner when one is available, otherwise GitHub-hosted.
creem-grafana-bridge
Revenue, cashflow, forecast and payouts of Creem stores as JSON series for Grafana.
Spanwire
A service that lets AI agents on different machines send each other messages.
TraureiseComing soon
An app that lets couples create and share their own wedding websites.
04Open source contributions
When a tool I use every day lacks something or has a bug, I report it to the project or send the fix. On GitHub under the account Marceltov.
mailflow Open
fix(imap): skip \Noselect folders in the backfill walk
mailflow Open
Backfill tries to open \Noselect parent folders (Gmail nested labels → [NONEXISTENT] Unknown Mailbox)
mailflow Open
Folder-status pass opens a fresh IMAP login per account every minute (~22k logins/day with 9 accounts)
Wishlist: all data through its own API Proposal, open
After the public API was declined, a second proposal that adds no upkeep: the app reads and writes its data only through its own /api, and other clients use exactly that. Rules on who may see what then live in one place instead of being spread over pages, forms and components.
Trilium Notes Merged
Notes written through the built-in MCP server or the chat now get their links recorded. Before, they were missing from backlinks and the note map.
Wishlist: public API Proposal, declined
A proposal for a small interface with personal keys, so other self-hosted apps can read wish lists. The maintainer decided against it because of the upkeep.
Trilium: sign-in with OAuth Proposal, open
A proposal that clients connect to the built-in MCP server with just its address, with no plain-text token in their configuration.
Invoice Ninja: CI tests the wrong code Fixed
A pull request's tests ran against the development branch instead of the change itself. Reported, and fixed by the project.
Trilium: partial edits for notes Proposal, open
A proposal for four improvements to the built-in MCP server: partial edits of text notes, a version check on writes, links when reading and match snippets in search.
AutoKuma: a configurable wait on connect Open
With many AutoKuma instances, every Uptime Kuma restart became a reconnect storm: no instance got its state within the fixed 9-second wait, all of them reconnected, and Kuma ran no monitor check for over two and a half hours. The wait is now configurable; the default stays as it was.
Invoice Ninja Merged
A contract test that checks the whole documented API against its OpenAPI description, and the fix for the differences it found.
giftmanager: data survives a restart Merged
Every container restart lost all gift ideas and users. The data now lives in its own directory that can be mounted. The maintainer took the code into the Docker version.
HortusFox: the app starts before its database Fixed
With Docker Compose the app started before MariaDB was ready and showed only a database error at sign-in. Reported with the cause; the app now waits for the database.
SCM-Manager: missing default branch Fixed
A new Git repository created without initialising it showed a default branch in the UI but had none, so cloning with JGit failed. Reported, and fixed in version 2.46.
Patterns in Software Engineering: summary Merged
Updated the shared summary of the TUM lecture for the winter 2017/18 exam: taxonomies, REST and object-oriented modelling.
05More
Research & studies
HyperCRL
Extension of “Continual Model-Based Reinforcement Learning with Hypernetworks”.
bark-ml
Fork of the BARK ML simulator for autonomous driving, with substantial contributions of my own.
Game jams
Think-fast-Punch-hard
Entry for the ARD Game Jam 2026 (Unity/C#) with a live Wikipedia quiz.
More projects on GitHub