moodbeat: a music player creating playlists from your mood

moodbeat is a desktop music player that builds a playlist from a mood you describe. You type something like “90s rock”, “rainy day in New York” or “Polish summertime”, and moodbeat asks OpenAI for 10-15 matching songs, finds them on YouTube, downloads them as MP3 and plays them in order. I often know what kind of music I want to hear, but not which songs. Streaming services have mood playlists, but they’re curated for everybody, and describing a vibe in my own words is much faster than scrolling through them. LLMs turned out to be surprisingly good music curators, so I built a small player around that idea. ...

September 29, 2026 · 5 min · 873 words · Piotr Wittchen

kayet: a minimalistic text editor for macOS

kayet is a minimalistic text editor for macOS, written in Rust with Tauri. When you’re writing, the only thing on screen is your text. The title bar, the controls and the file tree show up only when you reach for them with the mouse, and then fade away again. I write a lot of notes and drafts in Markdown - including the posts on this blog - and I wanted a place for that which is quiet. Most editors are built around code: gutters, tabs, status bars, panels, minimaps. Even the “distraction-free” modes usually feel like a mode bolted onto a busy app. I wanted the opposite: an app that is empty by default and adds things only when asked. ...

September 28, 2026 · 5 min · 998 words · Piotr Wittchen

jrs: a JVM build system written in Rust

jrs is a build system for the JVM, written in Rust. It builds, tests, runs and packages a single-module Java project from one jrs.toml manifest and resolves dependencies from Maven Central. Kotlin, Scala and Groovy sources compile alongside the Java ones. What I wanted is the ergonomics of Cargo: a small manifest, a committed lockfile, one binary and no build script to write. Anyone who has written Rust for a while and then comes back to a Java project knows the feeling - you just want to type run, and instead you’re reading a build.gradle.kts full of plugin blocks, or an XML file that is mostly boilerplate. ...

September 23, 2026 · 7 min · 1300 words · Piotr Wittchen

wavo: a music processing AI agent on Telegram

wavo is an AI agent for music processing. You send it a plain-language message on Telegram - “separate vocals from Queen - Bohemian Rhapsody”, “slow that song down to 80%”, or just a YouTube link with a note about what to do with it - and it works out which audio operations that means, runs them, publishes the result and replies with a link. It’s written in Rust, it’s one binary, and it glues together two other projects of mine: demix does the actual audio work (stem separation, tempo, pitch, key detection, cutting) and plainsong stores the results. ...

September 8, 2026 · 7 min · 1411 words · Piotr Wittchen

Six weeks of agentic coding in Rust: AICTL

For the last month and a half I’ve been working on a new project called AICTL. It’s a native AI agent for the terminal and macOS desktop, written in Rust. Source code is available on GitHub. It started mostly out of curiosity. I wanted to see how far I can push agentic software engineering on a real greenfield project - not a toy example or a weekend script, but a complete piece of software with a CLI, a desktop app, a server, documentation, CI, releases and the boring stuff around it. So I picked a domain I actually use every day (AI tooling), set a few constraints (Rust, native, one config, multiple frontends) and started experimenting. ...

May 19, 2026 · 9 min · 1868 words · Piotr Wittchen