Rene Schallner: software engineer turned AI researcher and engineer. I build the tools I use every day.
Rene Schallner

Hi, I’m Rene Schallner. I build software, tools and products where AI meets research. I run AI Research & Technology Lab in Vienna, where I’m building QualCode and LaBrowser. Before that: Chief Founding Engineer at ZML, eight years at NIM, medical tech and telecom.

Most of my side projects start with a question: can I do this without that? I build the thing, use it for real, and write down the verdict. The good ones grow up and get a successor. More about me.

Latest writing

Strategic CFO: Why I Needed to Automate My Reality Check

Context-Aware Brain: Why Generic AI Failed Me

Building a Memory for an AI That Wakes Up Fresh Every Day

Legibility is Leverage: Why Your Data Structure is Blocking AI

Why I Rotated the Kanban Board 90 Degrees

all posts →

The family tree

My projects aren’t a list. They’re a family tree: each line is a lineage, and the good ideas keep coming back in the next project.

A metro map of my projects. Notes line: sublime_zk, sublimeless_zk, telekasten.nvim, omajop, omajot. Web line: zap, bounded/http, baz, which serves the omajot hub. Slides line: Bûllets, slides, rayslides; bullets-server's multiplayer grew into rayslides' phone remote. No-cloud line: dockercr leads to omajot.

omajot is where the lines meet: notes from the green line, a hub served by baz from the orange one, and the no-cloud rule from the blue one.

Omarchy

The Omarchy wordmark above an Omarchy bar holding my four plugins: omajot, omajop, omapress and neomarchy.

Omarchy is my desktop. When I miss something in the bar, I write a plugin for it. There are four so far, and each one installs with a single command.

omajot

The omajot main window on Omarchy

My own notes app, synced by my own hub. A dropdown and a main window in the bar, full keyboard control, and the same notes in the terminal and on my phone. Repo →

omajop

The omajop panel: folders and tags, notes, and the rendered note

A Joplin notes browser: folders and tags, the note list and the rendered note, one click away. omajot’s predecessor. When you’re ready to move, omajot imports Joplin in one command. Repo →

omapress

The omapress panel listing the latest Omarchy news

Omarchy news in the bar. The newspaper turns red when there are unread posts, and a keyboard-driven panel reads them without a browser. Works offline. Repo →

neomarchy

The neomarchy panel with favorite neowake sessions and a player

Search, favorite and play neowake sessions from the bar. Playback runs through mpv with MPRIS, so the media keys just work. Repo →

omarchy plugin add https://github.com/renerocksai/omajot --enable
omarchy plugin add https://github.com/renerocksai/omajop --enable
omarchy plugin add https://github.com/renerocksai/omapress --enable
omarchy plugin add https://github.com/renerocksai/neomarchy --enable

omajot also needs its hub on an always-on machine: see Get started.

Case studies

The question, the trade, the verdict.

Synced notes with no cloud at all?

omajot · Zig · CRDT · WASM · Tailscale

Apple-Notes-like markdown notes in the Omarchy bar, in the terminal, and on my iPhone. No Dropbox: a small Zig hub syncs every device over Tailscale. The hub runs on my always-on M3 Max, the same box my coding agents already live on. Hub-and-spoke is a pattern I trust, so notes got the same treatment. A CRDT written in Zig merges concurrent edits, and the same Zig core runs natively on the desktop and as core.wasm in the phone’s web app. The hub is a baz app.

Trade: Dropbox’s zero-setup sync, for notes that never leave my own machines, work offline, never conflict, and that agents can script.

✓ verdict Daily driver. My notes live there now.

A container registry with nothing but SSH?

dockercr · Docker · SSH

omajot’s older sibling in spirit. ghcr.io has download limits. A self-hosted registry wants TLS, a CA and access tokens. dockercr skips all of it: the registry only listens on loopback, and SSH port forwarding does the authentication and the encryption. No Docker Hub, no certificates.

✓ verdict Push to production like a boss.

Fast, and never past its limits?

bounded/http + baz · Zig 0.16 · io_uring · kqueue · IOCP

Zap made Zig backends blazingly fast on top of facil.io, a C library. bounded/http replaces that foundation with pure Zig on io_uring, kqueue and IOCP, inspired by TigerStyle: connections, buffers, queues and workers are reserved up front. When capacity runs out, it pushes back instead of growing. On Linux it needs no libc, so a server can be one static binary. Baz (Bounded Async Zap) puts Zap’s typed endpoints on top, with streaming, SSE, Mustache templates and cookies.

✓ verdict Good enough to trust with my notes: it runs the omajot hub.

Can I build the CPU I drew in the nineties?

rrisc · VHDL · FPGA

In the early nineties I designed a small Radical RISC CPU on paper. At Christmas 2020 I finally built it: VHDL, simulated with ghdl and gtkwave from vim and tmux, with its own assembler, running on a Xilinx Spartan-7 FPGA board. The whole story is written up, from microcode sketches to the first executed instruction.

✓ verdict Nearly thirty years late, and it runs.

Can slides stay plain text and still not suck?

rayslides · Zig · raylib

My third answer to the same question. Bûllets (2020) turned the Godot game engine into a slide show: interactive animations, a game in your deck, and a multiplayer mode. Slides (2021, my first Zig project) went small: one executable, Dear ImGui and OpenGL, a markdown-ish text format, at 10 000 FPS. rayslides, built on raylib, keeps the readable source and adds a visual Studio that stays in sync with it, reveals, transitions and morph animations, and an embedded Neovim. Bûllets’ multiplayer grew up, too: it’s now a phone remote with speaker notes, plus Crowdplay audience polls.

✓ verdict Nobody has noticed I’m not using PowerPoint.

Can a database built for money sell conference tickets?

TigerFans · TigerBeetle · FastAPI · Python

A ticket booking system on TigerBeetle. Tickets and goodies are accounts and transfers. A checkout places a time-limited hold, a pending transfer, and the payment webhook either finalizes or voids it. It uses FastAPI, Redis and PostgreSQL, has load tests, and I wrote an auto-batcher for the async TigerBeetle client along the way. The write-up has the details, or try it live.

✓ verdict If you can reserve it or run out of it, TigerBeetle can count it.