Projects

I’ve done a couple of (hopefully) interesting things over the last few years. Here is a selection of my favorite projects:

Active projects

ntfy - HTTP-based pub-sub notification service

ntfy (pronounce: notify) is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, entirely without signup or cost. It’s also open source (as you can plainly see) if you want to run your own. There’s a web client, and an iOS/Android client. The source is on GitHub
Language: Go (server/client), React (web app), Kotlin (Android), Swift (iOS) / Status: actively maintained

rrsh - Really restricted shell for AI agents

rrsh is a JSON-RPC based shell that lets an AI agent (Claude, Cursor) run a curated set of commands on a remote host: check the nginx logs on my web server and figure out the top 10 errors. It installs as a user’s login shell, so sshd handles auth and transport; there is no daemon to keep running, no port to firewall, and no auth code in rrsh itself. Zero runtime dependencies (Go stdlib only).
Language: Go / Status: It works great. I use it (well, my AI uses it) all the time.

hostit - Tiny self-hosted mini-app platform

hostit is a tiny self-hosted platform for small web apps, built to be driven by AI agents (or humans) over SSH and a REST API. It’s a single binary; each app runs in its own container with its own subdomain and HTTPS certificate. It powers apps.heckel.io, where my (and my kids’) small apps live, including this website.
Language: Go (server), React (web app) / Status: experimental, actively developed, and hosting this very site

pcopy - Shared clipboard across computers

pcopy is a cross-machine clipboard that allows copying and pasting across different computers. It also runs the public paste service nopaste.net, a pcopy instance anyone can use to share text and files.
Language: Go / Status: It works wonderfully. I use it every day.

Archived projects

Syncany - An open-source cloud storage and filesharing application.

Syncany is the one thing I spend most of my time with. It’s like Dropbox, but awesomer! Check it out on the project website, on GitHub or on my first or second blog post. I even wrote my Master Thesis about it.
Language: Java (with a little bit of Python) / Status: Syncany has taken a (likely indefinite) hiatus. People loved it. I love it, but I don’t have time for it, and it likely grew too big too fast. Feature creep and all that. I learned a lot from that.

REPLbot - Slack/Discord bot for running interactive REPLs and shells from a chat

REPLbot is a Slack/Discord bot that lets you run interactive REPLs and shells right from a chat: start a session, and the bot bridges your messages to a terminal running in a container. Great for pairing on a quick script or teaching in a channel.
Language: Go / Status: Not actively developed anymore, but it was a lot of fun.

keeplog - Two-way synchronization between Google Keep and a local text file

keeplog is a simple two-way synchronization tool to sync a local daily log with Google Keep. When run, keeplog parses the local file and synchronizes each entry to individual Keep notes. Updates within Keep are populated to the local file as well.
Language: Python / Status: It works wonderfully. I use it every day.

elastictl - Simple tool to import/export Elasticsearch indices into a file, and/or reshard an index

Simple tool to import/export Elasticsearch indices into a file, and/or reshard an index. The tool can be used to backup/restore of an Elasticsearch index, for performance test an ES cluster, or to change the shard/replica count of an index Language: Go / Status: It works great. We occasionally use it at work for testing and resharding in prod.

fsdup - Dedup disks with NTFS partitions, and later expose them as a block device. Also, it can store the chunk index in Ceph/RADOS.

fsdup is a proof-of-concept application to deduplicate NTFS file systems using file-level dedup for files inside the NTFS filesystem. It operates on raw disks or image files and parses NTFS. It was a proof-of-concept to determine how much space savings one can get when deduping hundreds of thousands of NTFS file systems.
Language: Go / Status: fsdup was an experiment, nothing more. It has been filed as a patent too, now.

natter - A peer-to-peer TCP port forwarding library using NAT traversal with QUIC

natter is a peer-to-peer TCP port forwarding library and command line tool. It connects two clients across the Internet, even if they are behind a NAT via UDP hole punching (NAT traversal) as per RFC 5128. Connections are brokered (but not relayed!) via a rendevous server (“broker”), and tunneled via the QUIC protocol.
Language: Go / Status: natter was an experiment, nothing more. It was so much fun to work on this.

socksproxy - Simple SOCKS proxy to tunnel your way around things

socksproxy is a simple script to run a SOCKS proxy on your own server. It is merely a wrapper script to orchestrate SSH and iptables properly to make it easier in everyday use. I’ve also written a blog post about it.
Language: Bash / Status: I use socksproxy every now and then when I need to access stuff in Germany that I can’t from here. It works.

zfsu - Collection of ZFS utilities

zfsu is a collection of ZFS utilities. It consists of the following tools: zfsu tx (aka zfstx) maintains a mirror of a ZFS pool over the network. zfsu ret (aka zfsret) is a simple script to apply local retention (destroy snapshots) of a filesystem and its snapshots. zfsu res (aka zfsres) is script to resilver a slow mirror, e.g. a HDD disk if mirrored with a SSH.
Language: Bash / Status: In maintenance mode, since it just works. My automated backup scripts use it every day.

Terminator Host Watch - Terminator plugin to apply host-specific themes

This plugin monitors the last line (PS1) of each terminator terminal, and applies a host-specific profile if the hostname is changed. It’s very simple, but very useful.
Language: Python / Status: Abandoned, although I should probably revive it. It was a cool project.

sf - Wrapper script around sshfs to make mounting/unmounting easier

sf is a wrapper script around sshfs to make mounting/unmounting easier. It probably doesn’t deserve its own package, but I use it on so many machines that it might just be worth it. Again, super simple, but useful.
Language: Bash / Status: Abandoned, I may use it again if I need to do a lot of sshfs stuff.