← All work

automation · July 2026

Relay

A self-hosted event pipeline engine for laptop-scale automation: files, cron, HTTP, and RSS in — filtered, transformed, branched — files, logs, and webhooks out. Its signature trick is time travel: pick any historical event, edit the pipeline YAML, and dry-run the new version against it without touching the real world.

Tornike Kalandadze — software engineer & technical lead, client delivery since 2019 · Tbilisi (GMT+4)

Problem

Personal automation lives in cron scripts that fail silently and cloud services that hold your data hostage. Editing a live pipeline is a leap of faith — you find out it's broken when real events hit it.

Approach

Treat events as immutable facts in an append-only journal, and make every mutation replayable. Backpressure over data loss: full queues block producers rather than drop. Failures land in a dead-letter inbox carrying the exact failed node and payload, so replay resumes mid-pipeline instead of re-running side effects. And pipeline edits get a first-class dry-run mode — historical event in, simulated path out, zero real sinks fired.

Impact

Automation you can trust with side effects: nothing is dropped, nothing re-fires twice, and every change is rehearsed against real history before it runs for real. Redis-optional, cloud-free, runs on a laptop — the whole engine is inspectable down to each event's journal line.

Through every lens

03 · Frontend

Animated SVG flow graphs render each pipeline live — per-node throughput, health tones, and an event-journal browser with a one-click dead-letter inbox.

04 · Automation

The signature is time-travel replay: select any past event, edit the pipeline YAML, dry-run the edited version against it — sinks stubbed, network untouched — then ship the change. Dead-lettered events resume at the exact failed step with their captured payload.

Built with

Java 21 · Spring Boot 3.5 · React · TypeScript · Redis (optional) · JSONL journal · Maven

Notes

An automation engine that refuses to lose your events. Sources (file watcher, cron, HTTP ingest, RSS polling) feed configurable YAML pipelines of filters, transforms, branches, delays, HTTP calls, and image resizing. Reliability is the architecture: per-step retries with exponential backoff, a dead-letter inbox with one-click replay, idempotency via natural keys, and an append-only JSONL journal of everything that ever happened. When the queue fills, RELAY blocks producers instead of dropping events; when a step fails, replay resumes at the exact failed node with its captured payload — earlier steps never re-execute. A React UI renders animated SVG flow graphs with live throughput and health, and the time-travel replay lets you test a pipeline edit against real historical events as a dry run — sinks stubbed, network untouched — before it goes live.

Contact sheet