risen.dev

Open to senior engineering roles

Five products. Five domains.
Every layer.

A video player that casts 4K to a television, a real-time multiplayer platform on a cluster I run, a resume SaaS, a tool that syncs dubbed audio to video and a battery widget for wireless peripherals. Eight years of taking products from a blank plan to a running service, most of it inside product teams.

How I draw a system before any of it exists

every product below is a subset of this, sized to the problem

01DELIVERY, FROM A REVIEWED COMMIT TO THE CLUSTER01 SPEC02 CONTRACTS03 CI GATES04 IMAGE05 GITOPS06 CLUSTERAcceptance Cases FirstTypes at Every SeamGates, Not Follow-UpsSigned, ReproducibleReconcile, Don’t PushRollback in Minutes02RUNTIME, ONE REQUEST FROM EDGE TO STORAGECLIENTSWeb and SSRTelegram Mini AppDesktop AppBot and CLIOne typed contractserves all of themEDGECloudflareWAF, Cache, Bot RulesPer-Route Rate LimitsAPI GATEWAYTyped ContractsOne Schema, Both SidesAuthn, Idempotency KeysHTTP SERVICESStateless, Scaled OutREAL-TIME LAYERWebSockets, Reconnect-SafeWORKERSQueues, Schedules, IngestWORKFLOWSDurable StateRetry, CompensateOLTPPostgreSQLOLAPClickHouseCACHE, BLOBRedis, S303WHAT IT ALL RUNS ON, AND WHAT WATCHES ITPLATFORMKubernetes on Talos Linux across bare metal and cloudPulumi, FluxCD, External Secrets. Rollback in under three minutesOBSERVABILITYEvery box above reports, and tells me before a user doesPrometheus, Grafana, Sentry, an event pipeline into ClickHouse, SLOs

Drag the figure sideways to follow the path

Selected work

Five products taken from a blank plan to production. Permissive licences, written documentation, real users, and a link to the source of every one that has public source.

Frame Player

Media playbackWindows and macOS

Casts a 4K HDR file to a television exactly as it is: no re-encode, no quality loss, and the app window stays a working remote. Torrents play while they are still downloading.

  • mpv renders into a native child view behind a transparent webview, the whole UI composited on top as HTML. On macOS that meant patching libmpv, whose backend has no window-embedding support at all.
  • Piece priority follows the playhead, the seekbar shades what has already arrived, and the next episode is prefetched.
  • Hover previews sharpen to the exact frame under the cursor. Naive keyframe mapping showed the wrong scene 60% of the time, so the cost of an exact seek is probed per file.
2 platforms
signed, auto-updated by CI
0 re-encodes
on a 4K HDR cast
60% 0
wrong-frame previews
  • Rust
  • Tauri 2
  • Svelte 5
  • TypeScript
  • FFmpeg
  • libmpv
  • Chromecast / DLNA

Gift Fight

Real-time multiplayerTelegram Mini App

A PvP roulette where players bet collectible Telegram gifts against each other, and every round can be recomputed afterwards by anyone who played it. Architected, built and operated end to end.

  • A round in progress lives in a Temporal workflow rather than in a server's memory, so a restart or a release never drops it.
  • Live play runs over Socket.IO beside ordinary HTTP, with blockchain payments isolated behind transfer services and idempotent settlement.
  • Talos Linux and Kubernetes across bare metal and cloud, described in Pulumi, delivered by FluxCD, with secrets that never touch the repository.
120 ms
p95 state sync, 300 sessions
99.5%
workflow completion
< 3 min
release and rollback
~1,500
players at launch

Shut down in 2025, on purpose: the funnel showed free channels bringing non-paying users, so the product was closed on the data rather than carried on. The cluster and the code are still the work.

  • TypeScript
  • React
  • Hono
  • PostgreSQL
  • Temporal
  • Socket.IO
  • Kubernetes
  • Pulumi

Tuned

Document toolingHosted SaaS

Resume tailoring where every variant is a patch over one base document rather than a copy, so a hundred applications stay one source of truth, and nothing silently drifts.

  • A provenance check refuses any claim that doesn't trace back to a source node, so the model can rewrite but cannot invent.
  • The live preview renders the same react-pdf component inside a Web Worker and rasterises it with pdf.js, so page fitting is measured against a real renderer instead of estimated.
  • Anthropic and OpenAI-compatible adapters sit behind a single port; the editor has its own drag-and-drop engine.
  • TypeScript
  • React 19
  • TanStack
  • Tailwind v4
  • Astro
  • pdf.js
  • Bun
  • Elysia
  • oRPC
  • PostgreSQL
  • Drizzle
  • Redis
  • BullMQ
  • Kubernetes
  • Pulumi
  • FluxCD

dubsync

Audio DSPDesktop, CLI and headless

The 4K release ships only the original audio, and the dub you want exists on an old rip that is cut and timed differently. dubsync finds the offset by itself and produces one file with both.

  • The soundtracks are correlated with GCC-PHAT and every result carries a peak-to-sidelobe score, so a bad match is reported rather than silently shipped.
  • Differently cut releases are aligned segment by segment to about 50 ms, frame rates normalised, audio time-stretched instead of clipped, subtitles shifted to match.
  • Correlation is parallelised across cores; the same engine runs from a GUI, a CLI or a CI job on Windows, macOS and Linux.
±50 ms
per-segment alignment
scored
every result, never guessed
3 modes
GUI, CLI, headless
  • Rust
  • FFmpeg
  • egui
  • FFT / GCC-PHAT
  • Matroska

DeskVolt

Device monitoringWindows desktop

Battery levels for wireless peripherals read straight from the devices, with none of the vendor software running in the background to get them.

  • Logitech HID++ 2.0, SteelSeries, Corsair, HyperX and PlayStation DualSense are each queried directly over USB HID, from protocols reverse-engineered rather than published.
  • Native Win32 rendering through windows-rs: Direct2D and DirectWrite, LTO-optimised, under 10 MB resident.
  • Every peripheral sits behind the same trait, so adding one is a single driver module and nothing else.
6 vendors
none of whom document this
< 10 MB
resident memory
0 services
no vendor suite required
  • Rust
  • windows-rs
  • Direct2D
  • DirectWrite
  • hidapi

From a plan to a running service

The same six steps on every product above, whether it ships to a cluster or to an installer. Each one produces an artefact the next step depends on, and something the next person can read.

a deploy is a reviewed commit,
never a hand on a terminal

  1. 01SPEC

    Acceptance cases first

    Written down before implementation starts. It is what a reviewer checks the work against, and what an agent is held to.

  2. 02CONTRACTS

    Types at every seam

    One schema serves validation, types and the generated docs, so both sides of a seam can be built in parallel and a broken state is impossible to express.

  3. 03CI GATES

    Tested against the real thing

    Unit, integration and contract tests, Testcontainers against real PostgreSQL, Redis and NATS. Security and performance are gates, not follow-ups.

  4. 04DELIVERY

    GitOps, not hands

    FluxCD reconciles the cluster to the repository. Releases and rollbacks are the same operation, and both finish in under three minutes.

  5. 05INFRASTRUCTURE

    Written down, not clicked

    Kubernetes on Talos Linux across bare metal and cloud, described in one Pulumi program that anyone on the team can read and change.

  6. 06OPERATION

    I hear about it first

    Metrics, traces and structured logs on every service, SLOs with error budgets, and enough signal to know something is wrong before a user reports it.

Production-proven stack

Tools I have shipped and operated, not ones I have read about.
Chosen per constraint rather than per fashion.

Frontend

  • TypeScript
  • React
  • Next.js
  • Svelte 5
  • Astro
  • Tailwind
  • SSR
  • Effector
  • TanStack
  • Core Web Vitals
  • Web Workers
  • Canvas 2D
  • WCAG
  • Design systems

Backend & data

  • .NET 9
  • Node.js
  • Bun
  • Hono
  • Elysia
  • oRPC
  • PostgreSQL
  • Drizzle
  • ClickHouse
  • Redis
  • NATS
  • Temporal
  • Socket.IO
  • BullMQ
  • Kafka
  • EF Core
  • OpenAPI

Platform & ops

  • Kubernetes
  • Talos Linux
  • Docker
  • Pulumi
  • Terraform
  • FluxCD
  • Cloudflare
  • Hetzner
  • GCP
  • Prometheus
  • Grafana
  • Sentry
  • Actions
  • SLOs

Further afield

  • Rust
  • Tauri 2
  • FFmpeg
  • WebAssembly
  • Win32 / Direct2D
  • USB HID
  • libmpv
  • Audio DSP / FFT
  • HDR / Dolby Vision
  • Applied cryptography
  • Telegram Mini Apps

Available now

You have seen the work. Let’s talk about yours.

Senior product, full-stack or platform roles. I work best owning a feature end to end, in a team where the work gets reviewed. Remote worldwide as a contractor or through an EOR, or hybrid in Yerevan. Contract work and one-off architecture reviews too.

Yerevan, UTC+4remote worldwide, contractor or EOREnglish (full professional), Russian