Projects I’ve built.
Products and open-source libraries, each with its own page: the problem, the decisions and the handover.
- movar.fyi (opens in a new tab)
Movar puts the right language in front of you on Google, YouTube, and multilingual sites — without translating a thing.
Live · 1.9.0 on Firefox Add-ons
WXT, React, TypeScript, Tailwind CSS
Movar puts the right language in front of you on Google, YouTube, and multilingual sites — without translating a thing.
Live
1.9.0 on Firefox Add-ons
WXT, React, TypeScript, Tailwind CSS
- stitchapi.dev (opens in a new tab)
A TypeScript library: declare an endpoint once — its types, auth, and resilience — and call it like a local function. No server, no codegen, no config files.
Live · 0.7.0 on npm, 1.0 in release candidate
TypeScript, Node.js
A TypeScript library: declare an endpoint once — its types, auth, and resilience — and call it like a local function. No server, no codegen, no config files.
Live
0.7.0 on npm, 1.0 in release candidate
TypeScript, Node.js
A library for evidence-fusion language detection of short strings, with an auditable confidence trail.
Live · 0.6.1 on npm
TypeScript
A library for evidence-fusion language detection of short strings, with an auditable confidence trail.
Live
0.6.1 on npm
TypeScript
A cross-platform sleep and display-sleep inhibitor for Node — zero dependencies, no native addons.
Live · 0.6.0 on npm
TypeScript, Node.js
A cross-platform sleep and display-sleep inhibitor for Node — zero dependencies, no native addons.
Live
0.6.0 on npm
TypeScript, Node.js
A drift-prevention framework: it tracks every place the same fact lives — code, docs, generated files — and reconciles them when one changes.
In use · in StitchAPI’s repo, not released publicly
TypeScript, Node.js
A drift-prevention framework: it tracks every place the same fact lives — code, docs, generated files — and reconciles them when one changes.
In use
in StitchAPI’s repo, not released publicly
TypeScript, Node.js
A library where every config value is an inert, importable, validated descriptor, bound explicitly per runtime.
Design phase · no code yet
TypeScript, Node.js, Cloudflare Workers
A library where every config value is an inert, importable, validated descriptor, bound explicitly per runtime.
Design phase
no code yet
TypeScript, Node.js, Cloudflare Workers
Before the studio
Work I’ve done for others.
Whole products, or my part of them. They stay unnamed — naming them is their owners’ call — and each names my role.
Ad platforms
Streaming TV ad tools
Internal tools for a streaming TV platform’s ad business, with UI generated from schemas: creating ads and running the calculations behind them.
My role: Lead engineer
Internal ad portals
Internal portals for an advertising business.
My role: Lead engineer
Ad campaign back office
For a video streaming platform: ad campaigns, audience analytics and cost forecasts.
My role: Lead engineer
Platforms & tools
Form builder
Schema-driven forms with configurable fields, validation rules and response collection.
My role: Lead engineer
Session replay extension
A browser extension that turns a recorded session into a clickable replay, for demos and bug reports.
My role: Full-stack engineer
Open government data API
A REST API over public datasets, with search, sorting and filtering for the services that integrate with it.
My role: Full-stack engineer
Finance & insurance
Insurance claims portal
Self-service claims, step by step: guided forms, document uploads and status tracking.
My role: Lead engineer
Mobile banking web client
Everyday banking in the browser, with customer support built in.
My role: Frontend engineer
Investment portal
Configurable, shareable dashboards of market data, news and search.
My role: Frontend engineer
Commerce & supply chain
Supply-chain traceability
Material provenance and verified sourcing data, shared between partners on a blockchain.
My role: Lead engineer
White-label storefronts
E-commerce for independent sellers: mobile-first, themed per store.
My role: Full-stack engineer
Warehouse management
Inventory, stock movements and warehouse records.
My role: Full-stack engineer
Construction tendering platform
For the construction industry: contractor discovery, company profiles, industry articles and ad placements, run from a CMS.
My role: Full-stack engineer
Maritime procurement
Sourcing, quotes, orders and supplier messaging for ship operators.
My role: Frontend engineer
Mobility & energy
Truck fleet monitoring
Live location, vehicle health diagnostics, alerts and reports for fleet managers.
My role: Lead engineer
Microgrid maintenance
Asset management and configurable maintenance workflows.
My role: Full-stack engineer
Car leasing portal and app
Compare vehicles, calculate prices and send counteroffers, on the web and on mobile.
My role: Full-stack engineer
Interactive subway map
A canvas-drawn map with touch support and offline mode, and the CMS, ad marketplace, contracts and analytics behind it.
My role: Full-stack engineer
Games
Multiplayer browser game
Battles, character progression, chat and leaderboards.
My role: Full-stack engineer
Have something to build?
Tell me what you’re working on. I’ll tell you whether I’m the right person for it.
No pressure. Just a conversation.