Built with Claude Code, from an analysis of 147 of my own repositories — ~2,400 commits, ~800k lines of hand-written code, not agent-generated. Every claim on this page comes from that analysis, not invented copy.
Fifteen years of writing production code, the last five as the sole backend and edge engineer on one platform — architecture, implementation, operations, end to end.
Edge & Serverless
Cloudflare Workers, Durable Objects and Workflows, wired into service-oriented systems of a few dozen Workers apiece. WebSocket Hibernation for stateful real-time sessions; Queues, R2 and KV for the async and storage layer.
Cloudflare Workers · Durable Objects · Workflows · Queues · R2 · KV · Wrangler
Backend & APIs
Contract-first REST APIs — Hono, OpenAPI 3.1, Zod — with a typed client generated straight from the spec, plus data-driven RBAC and GraphQL where the product calls for it.
Hono · OpenAPI 3.1 · Zod · GraphQL (Apollo) · CASL / RBAC · Firebase Auth
Video & Streaming
GPU-accelerated FFmpeg transcoding — single-pass, multi-rendition, NVENC — feeding an HLS ladder, plus a Video.js player with custom watch-time and anti-fraud plugins.
FFmpeg / NVENC · HLS · Video.js · BullMQ · Google Pub/Sub
Payments
Stripe Connect marketplace payments — tiered platform fees, multi-party revenue splits, processed through a queue-driven transfer pipeline.
Stripe Connect · Revenue-split engineering · Webhook verification
Data
Multi-domain schemas on serverless MySQL at the edge, migrated live from Prisma to Kysely with a custom AST-level plugin. ClickHouse for the analytics ingestion that has to keep up.
Prisma · Kysely · TiDB / MySQL · PostgreSQL · Supabase · ClickHouse · Redis
Selected technical work
Nine problems, each solved with the primitive that actually fit — not the one that was trendy.
OpenAPI on Cloudflare Workers, backed by KV and Durable Objects
The contract-first API behind videos, channels, organizations, creators, vendors, ecommerce and sponsorships — one service on Cloudflare Workers. Every route extends a single PlatformOpenApiRoute base class; Zod schemas come from the same Prisma types the database uses, so the OpenAPI spec it produces is generated, not hand-maintained. That spec feeds a typed client the admin app, storefront and player all consume instead of three hand-written SDKs. Role and permission checks are resolved centrally and cached in KV, invalidated on every role change, so a hot path doesn't re-derive access on every request — and organization, creator, vendor and superadmin all hit the same endpoints through one actor/scope layer, including an "acting on behalf of" mode, instead of each handler hand-rolling its own tenant check. Heavier stateful work — checkout sessions, campaign chat, notification fan-out — is delegated over service bindings to Durable Objects sitting behind it.
A cart had to stay in sync across a video player's iframe and the host page's cart dropdown — through reconnects, not just while the tab stayed open. Built as a Durable Object WebSocket hub on the Hibernation API: sessions rebuild from getWebSockets() on cold start, updates debounce before they fan out, and the object self-destructs on a schedule tied to how many people are still connected.
Durable Objects · WebSocket Hibernation
Provisioning a tenant without a runbook
A new tenant needs a fully configured Supabase project — schema, RLS policies, triggers, auth hooks — without anyone running commands by hand. Built as a 9-step Cloudflare Workflow: create the project, poll for health with linear backoff, run the migration SQL, wire the auth hooks, store the generated secrets in KV.
Cloudflare Workflows · Supabase provisioning
One decode, four renditions, no upscaling
A GPU transcoding pipeline — download, transcode, distribute, three BullMQ stages — turns one upload into a full adaptive-bitrate HLS ladder. The transcode step decodes once and splits into per-rendition NVENC encodes inside a single filter graph, with a CPU fallback path and a portrait-aware, fps-derived quality ladder.
FFmpeg / NVENC · BullMQ · Google Pub/Sub
Splitting one payment four ways, in the background
A marketplace order has to pay out the platform, the vendor, the creator and the organization — each on its own fee tier. Built as a Cloudflare Queues consumer sitting between the order and the Stripe transfer: it retries on missing data instead of failing the order, and groups each split with transfer_group and source_transaction so Stripe's own ledger reconciles back to the order, not just to the account.
Stripe Connect · Queue-driven transfers
Migrating the query layer without stopping traffic
Moved a production API's query layer from Prisma to Kysely one endpoint at a time, writing a custom Kysely plugin that rewrites boolean columns to MySQL tinyint at the AST level — so the two ORMs could disagree about types without anyone noticing.
Prisma → Kysely · Custom AST plugin
Making a view count mean something
View counts are easy to inflate. Built a watch-time plugin that only counts a view after 2.5 seconds of sustained playback inside 5-second segments, adjusted for playback rate and deduped with a running set so a seek-back can't double-count. A separate Deno KV service caps it at two counted views per device fingerprint per day, checked with retries before the number reaches a dashboard.
Video.js plugin · Deno KV fingerprinting
Copying objects between clouds, signed by hand
Moving objects between S3-compatible providers server-side meant signing every request myself — AWS SigV4, HMAC key derivation, canonical requests — using only Web Crypto, no AWS SDK. A Durable Object drives the copy through storage.setAlarm() recursion instead of a long-running loop, so it survives a Worker's CPU and wall-clock limits one chunk at a time, with D1 as the job registry behind a small live dashboard.
Every storefront page view used to mean a live API call — for content that's mostly static and read far more than it's written, that's the wrong trade. A coordinator Durable Object dedupes incoming writes and dispatches a small fleet of generator Durable Objects — one per entity, channel and homepage — that pre-render each write to a static JSON file. Pages read that file instead of hitting the API, and each write purges only the specific cache URLs it affected — not the whole cache.
Sole engineer across architecture, implementation and operations for a video and marketplace platform — Cloudflare Workers and Durable Objects for the real-time layer, GPU transcoding and edge delivery for video, Stripe Connect for marketplace payments.
Full-stack Magento 1 and 2 development on remote client engagements — custom themes, backend modules and extensions, plus Vue.js interfaces beyond the Magento frontend layer.
03
Nordic Web Team — Magento Front-End DeveloperApr 2014 – Dec 2019
Custom themes and UI components across 30+ Magento storefronts. Migrated stores from Magento 1 to 2 and built custom PHP extensions giving merchants admin-level control over storefront behavior.
04
Self-employed — Freelance Web DeveloperFeb 2013 – Apr 2014
Custom themes and UI components for Magento, WordPress, Drupal and OpenCart, including a Swiss client engagement.
05
Magendoo Interactive — Front-End DeveloperJul 2012 – Feb 2013
Magento Enterprise and Community themes for two of Romania's largest retailers, built from PSD / AI / layered-PDF designs.
06
Inside Media Communication — Web DeveloperMar 2011 – Jul 2012
Frontend themes for a custom-built CMS, plus interactive UI components with jQuery UI.
07
Casalife-Romania — Asistent2010
Early, non-technical role in e-commerce operations — inventory, product photography and copywriting, order fulfillment.