Skip to content


Worxbend logo

Learning projects, practical Linux tools, and experiments that help me understand systems by building them.

A working shelf rather than a product catalogue. Review before running, fork what helps, and expect project-specific assumptions. Everything below is a summary — the project site lists every repository across all my accounts and lets you search it.

Start here

The work I would show first, by area. Each area opens up further down.

Project What it is
Scala libraries worxbend/worxbend → libs/commons/pretty-printo Turns any Scala 3 value into a readable string, with fields you can mark @Excluded or @Redacted. It prints a field's declared type without ever reading the field, so a secret never reaches the output.
worxbend/worxbend → libs/commons/reveal The same idea rebuilt as a compile-time macro: derives PrettyPrintable, no reflection, no per-call work, and no runtime dependencies at all. Handles enums, sealed traits and opaque types.
OBS & streaming worxbend/obs-stats A live dashboard for OBS Studio drawn inside a terminal — processor use, frame pacing, encoder health, scenes and audio.
worxbend/obsctl · worxbend/obsctl-rs Drive OBS Studio from the keyboard or a script instead of the mouse. The same tool written twice, once in Crystal and once in Rust.
Air quality worxbend/airgradient-desktop · ·-android · ·-cli · ·-papr One AirGradient air-quality sensor, read five different ways — desktop, phone, terminal, e-paper and a GNOME panel icon. All over the local network, no cloud account.
Linux setup worxbend/fluxion.cr · w0rxbend/system-bootstrap Take a machine that was wiped an hour ago back to a working development setup, from files kept in Git.
Hardware w0rxbend/spycam + w0rxbend/instachron Two halves of one camera link: firmware on an ESP32-CAM board pushes JPEG frames over a raw network socket, and a small Go server catches them.

Jargon, once: OBS Studio is the open-source program that captures a screen or camera and sends it to a streaming service. A TUI is a full-screen interface drawn inside a terminal window. TCP is a raw network socket — a plain byte-by-byte connection between two programs, with no HTTP or JSON on top. The JVM is the Java Virtual Machine, which Scala, Java, Kotlin and Flix all compile down to.

🎛️ OBS and streaming tools

Everything that runs while a live stream is on air. Most of these talk to OBS Studio over obs-websocket, the remote-control protocol OBS exposes so other programs can drive it.

Project What it does Built with
worxbend/scenedeck A normal desktop window for Linux that switches scenes, toggles sources and starts or stops the stream. Also on Snapcraft. Rust, GTK4
worxbend/obs-stats A terminal dashboard in the style of the system monitor btop, showing OBS health live. Rust, Ratatui
worxbend/obsctl Command line plus terminal dashboard, so scenes, audio and profiles can be scripted. A small background daemon keeps the connection warm. Crystal
worxbend/obsctl-rs The same controller rewritten in Rust, keyboard-driven and full screen. Rust, Ratatui
worxbend/multistream-manager Prepares a Twitch stream and a YouTube broadcast from one form, so a single Start Streaming press goes live on both. Rust
worxbend/twi Twitch chat in a terminal instead of a browser: several channels at once over IRC, 13 themes. Go
worxbend/yc YouTube live chat in a terminal, showing how much of the daily API allowance is left. 58 themes. Go
worxbend/streaming-tools-site An interactive map of how these tools connect to OBS, Twitch and YouTube. obs.worxbend.com JavaScript, PixiJS
w0rxbend/obs-effects Animated overlays with transparent backgrounds, added to OBS as browser sources. obs-effects.worxbend.com TypeScript, PixiJS 8
w0rxbend/twitch-voxer Reads Twitch chat aloud, detecting Ukrainian or English and giving every chatter a consistent voice. Python
w0rxbend/twitch-vizer On-screen alerts for follows, subscriptions, cheers and raids, fed by Twitch's push feed of channel events. Python, TypeScript
w0rxbend/twitch-musicplayer Background music for a stream: a Go service serves the library, a browser front end plays it and draws a visualiser. Go, TypeScript
w0rxbend/chat-brawl An overlay where everyone who types in chat joins an on-screen fighting arena. TypeScript, PixiJS

⬡ Scala, the JVM and libraries

The library-shaped work. The two pretty-printo and reveal libraries live inside the worxbend monorepo rather than in repositories of their own — it is built with Mill, and libs/ is where the reusable pieces go.

Project What it does Built with
libs/commons/pretty-printo Renders any value as a configurable string. Fields can be annotated @Excluded or @Redacted, and because the printer knows each field's declared type it never has to read the value to describe it — which is what makes redaction and null safe. Scala 3, Magnolia
libs/commons/reveal The successor, derived entirely at compile time by a macro. Every decision — which fields are omitted, which are redacted, how a type is spelled — is made once during expansion, so there is no reflection and no runtime dependency. Covers enums, sealed families and opaque types. Scala 3 macros
w0rxbend/scalacv A Scala 3 API over OpenCV 4.13, the open-source computer-vision toolkit, with a typed pipeline that releases native memory exactly once. Docs Scala 3, OpenCV
worxbend/gitea-scala-client A typed client for Gitea, a Git hosting service people run on their own servers, checked against its OpenAPI contract. Site Scala 3, ZIO 2
worxbend/codeberg4s A client for the Codeberg and Forgejo API that returns plain Future values instead of pulling an effect system into your project. Scala 3, sttp
w0rxbend/shield A self-hostable authentication server whose HTTP interface is deliberately compatible with SuperTokens clients. Scala 3, ZIO
w0rxbend/compression-flix Lichess's chess clock and move compression ported from Scala to Flix, byte-for-byte identical — one differing bit would invalidate every stored game. Flix
w0rxbend/scalachess-flix Lichess's chess-rules library rewritten in Flix and checked against the same published fixtures. Not a drop-in replacement. Flix
w0rxbend/data-engineering A sandbox around Apache Kafka, Kafka Connect and Apache Flink, with a custom partitioner for the S3 sink. Scala, Kafka
worxbend/playground The same event-streaming service written three times on three different web frameworks, as a side-by-side comparison. Scala 3, Kafka
worxbend/worxbend The monorepo itself: small Scala apps, the libraries above, deployment recipes and notes. Scala, Mill

🛠️ Linux tooling and provisioning

Provisioning means taking a machine that was wiped an hour ago and getting it back to a working development setup without doing it by hand. The same idea is deliberately implemented more than once in different languages — reimplementing something you already understand is a good way to learn a new one.

Project What it does Built with
worxbend/fluxion.cr Sets up a Linux workstation from one YAML file — packages, Flatpaks, dotfiles, fonts, binaries — and shows you a preview of the changes before applying any of them. Runs as a plain command or a full-screen terminal interface. Site Crystal
w0rxbend/system-bootstrap My actual machine setup, covering Fedora, Arch Linux and openSUSE: packages, binaries, dotfiles, Nerd Fonts, terminals, Neovim, and GNOME, COSMIC or Sway. Shell, Lua
worxbend/fluxion The original of the same idea, on the JVM. Records what it installed so a second run skips finished work. Site Java
worxbend/binstaller Puts the same prebuilt binaries on every machine from one profile, checking each download against its SHA-256 fingerprint and writing a lock file. Site Scala 3, GraalVM
worxbend/nerd-fonts-installer Installs Nerd Fonts — programming typefaces patched with extra icon glyphs — from one config file, with an interactive picker. Site Go
worxbend/dotbot-go · worxbend/dotbot-scala Dotbot, which installs personal config files from a declarative spec, rewritten twice. The Scala one compiles to a standalone binary so the target machine needs no Java. Go · Scala 3
w0rxbend/infrastruct A homelab of ARM machines described entirely in files kept in Git: inventory, Ansible, K3s with Flux CD, Docker stacks and encrypted secrets. Python, Ansible
w0rxbend/ops-dashboard Keeps an eye on that homelab — a browser dashboard over exporters, VictoriaMetrics, Grafana and an uptime checker. TypeScript, SolidJS

🌬️ IoT: air quality and TCP cameras

Small Wi-Fi microcontroller boards running firmware I wrote, usually paired with a server on the network that I also wrote.

The ESP32-CAM link — one system, three repositories

spycam is the camera half: firmware for the ESP32-CAM, a small Wi-Fi board with a camera attached, which captures JPEG images and pushes the newest one over a long-lived raw TCP socket, dropping stale frames and reconnecting when the network drops. instachron is the server half: a Go service that listens on that socket, stores the frames, and republishes them over HTTP with restreaming, optional detection and upscaling, and a timelapse recorder. spycam-s3 is the same camera half rebuilt for newer ESP32-S3 boards, stamping a camera identifier into every frame so several boards can feed one server at once.

AirGradient

AirGradient makes open-source indoor air-quality monitors measuring carbon dioxide, fine particles, temperature and humidity. Every client here reads the device over the local network, so none of them needs a cloud account or the vendor's phone app.

Project What it does Built with
worxbend/airgradient-desktop A Linux desktop window showing live readings from a monitor found on the network. Rust, GTK4
worxbend/airgradient-android A native Android app with a dashboard and notifications when readings pass a chosen severity. Kotlin, Compose
worxbend/airgradient-cli Reuses the desktop app's config file, fetches the current measurements once and prints them compactly. Rust
worxbend/airgradient-papr Firmware for a board with an electronic-paper screen — the low-power display used in e-readers — as a portable readout, alongside weather and forecast. C++, ESP32
worxbend/airgradient-gnome-extension One icon in the GNOME top bar, coloured by current air quality, opening a popup of gauges. JavaScript
worxbend/airgradient-observability A self-hosted metrics stack: a collector reads the sensor, forwards samples to VictoriaMetrics and serves Grafana dashboards. TypeScript, Go
worxbend/tv-dashboard An always-on dashboard filling a television: air quality, weather, indoor climate, agenda and system status. TypeScript, SolidJS
w0rxbend/neoncore Firmware driving a panel of addressable LEDs as a remote air-quality indicator, readable across the room without a legend. C++, ESP32

Other boards

Project What it does Built with
worxbend/frostfire ESP32 firmware that briefly closes a relay across a computer's power-button header, so the machine can be switched on remotely. Fixed-length pulses, relay off at boot, token required. C++
worxbend/frostfire-backend The guarded web service in front of that relay, with a safety policy checking every request before it reaches the hardware. Python, FastAPI
w0rxbend/led-matrix-controller ESP8266 firmware driving an 8x8 LED panel over a TCP server that accepts compact binary commands, falling back to its own access point when unconfigured. C++
w0rxbend/echo Sits between webhooks and those panels: post an event, rules pick an animation, echo pushes it over TCP with automatic reconnection. Go

🧭 The two accounts, and what to expect

Two accounts, one person

The work sits in this organisation, worxbend, and on my personal account, w0rxbend (with a zero). The split is historical rather than meaningful: the organisation came later, and projects already running stayed where they were rather than having their links broken. A third, quieter account, oleksandr-balyshyn, carries a few newer pieces. Every link above is written as owner/repository so you can always tell which one you are about to open.

What this is

  • Learning projects for trying languages, frameworks, APIs, desktop stacks and deployment patterns.
  • Personal Linux utilities for workstation setup, fonts, dotfiles and automation.
  • AirGradient and OBS tooling built around my own devices and daily workflow.
  • Small hardware projects where firmware on a microcontroller talks to a server I also wrote.
  • Scratchpad repositories where ideas are tested before being cleaned up or abandoned.
  • AI-assisted experiments that may be messy, useful, incomplete, or all three at once.

What this is not

  • Not production-ready software, and not a promise of stable APIs, releases, packaging or support.
  • Not always idiomatic, perfectly tested or cleanly maintained.
  • Not a portfolio of finished products, and not something to run blindly on important machines.

Issues and small pull requests are welcome when they match a project's direction — especially for Linux usability, packaging, docs and clear bugs. Most repositories here are personal tools first.

Pinned Loading

  1. airgradient-gnome-extension airgradient-gnome-extension Public

    GNOME Shell panel extension for the same AirGradient local-server workflow used by airgradient-desktop.

    JavaScript

  2. dotbot-go dotbot-go Public

    A Go implementation of Dotbot for managing dotfiles with declarative config, symlink creation, cleanup, directory creation, and shell commands.

    Go

  3. nerd-fonts-installer nerd-fonts-installer Public

    🎨 Nerd Fonts, installed the boring way — one config file, one command, every machine. A small, scriptable Go CLI with checksum-verified downloads and an interactive terminal picker.

    Go

  4. airgradient-desktop airgradient-desktop Public

    Air Monitor is a GTK 4 + libadwaita desktop dashboard for an AirGradient device

    Rust

  5. scenedeck scenedeck Public

    SceneDeck is a Linux desktop controller for OBS Studio. It is built with Rust, GTK4, libadwaita, Tokio, and the OBS WebSocket protocol

    Rust 2

  6. airgradient-android airgradient-android Public

    Kotlin

Repositories

Showing 10 of 28 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…