My Projects

Some of these projects are experiments and aren't released, some have real value. Some aren't even in this list.

Apps & Products

Overtone.art

Live

Photography gallery and storefront I built and operate end-to-end. A Turbo monorepo: NestJS API, Next.js web, React Native mobile app, MCP server, and a Storybook component library. Stripe payments, automated print fulfillment via my own Printify/Prodigi SDKs, an in-browser design editor (canvas-editor), and a two-stage LLM pipeline that drafts artwork descriptions.

Tools: Turbo monorepo, NestJS, Next.js 15, React 19, React Native, Stripe, Anthropic SDK, Storybook, Fabric.js, PostgreSQL, Redis

WallSnap

LiveBeta

Preview a print on your actual wall, at the right size. It started as one feature inside Overtone; I pulled the geometry out into a framework-neutral core so the browser preview and the server-rendered image agree pixel for pixel. Ships as a library, an embeddable widget, an API, and a Shopify app. Refreshing the room catalog before I submit it to the Shopify App Store.

Tools: TypeScript, React, Preact, Vite, Sharp, Hono, Zod, Shopify App Bridge, Prisma, Turborepo, Vitest, Playwright

AngleForge

LiveBeta

Angle-first ad-creative factory. Paste one offer brief and it extracts the persuasion angles worth testing, crosses them with hooks, and renders every combination through deterministic HTML/CSS templates in five style tiers — direct-response, native editorial, lo-fi notes-app, iMessage thread, and As-Seen-On-TV — at exact Meta + Taboola placement sizes. Each variant is linted against per-vertical banned-claims rules before you spend a dollar, then exported as a ZIP whose filenames encode offer_angle_hook_style_size so results roll up by angle. Selected variants push as PAUSED ads to an ad account, and it runs end-to-end with no API keys via a deterministic fixture matrix.

Tools: Next.js, Anthropic Claude, NVIDIA NIM, OpenAI, fal.ai, Playwright, @stream-schema, sharp, Zod

Countersign

Live

Human approval for LangGraph agents. When an agent is about to do something consequential it pauses, a person sees a structured diff instead of a wall of JSON, and the graph resumes with approve, reject, edit, or a written answer. Typed Python SDK on one side, React inbox components on the other, one versioned JSON Schema between them. Open-source SDK plus a hosted console for teams.

Tools: Python, LangGraph, JSON Schema, TypeScript, React, Storybook, Next.js, AWS CDK, pytest, Vitest, Playwright

Timerail

LiveBeta

Headless React calendar and resource scheduler. The hard parts — date math, recurrence, DST, drag and resize, collisions, screen-reader announcements — live in framework-neutral state machines, and the styles are optional and replaceable, so behavior and look can move independently. Day/week/month plus editors and recurrence in the free tier; virtualized resource timelines, capacity rules, export and undo/redo on top of it.

Tools: TypeScript, React 19, state machines, Temporal-aware date math, virtualization, Node.js, PostgreSQL, Vitest, fast-check, Playwright, axe-core

Gallery SaaS

Private

Overtone's architecture, generalized: a multi-tenant gallery and print storefront another photographer could run. NestJS API, tenant storefront, customer account app, operator panel, marketing site, and shared packages for catalog, money, and identity. Payment and fulfillment providers sit behind plug-in boundaries — drawing that line properly is most of why it was worth rebuilding.

Tools: NestJS, TypeORM, PostgreSQL, Next.js 15, React 19, Tailwind CSS, Stripe, Prodigi, EasyPost, AWS S3, Sharp, Three.js, Turborepo

Agent Signals

Private

Tells me when an agent is done. Producers publish a typed signal over MCP or plain HTTP, the broker fans it out over Server-Sent Events, and a SwiftUI menu-bar app on my Mac shows it. Deliberately small — one Zod schema as the cross-language contract, scoped tokens, SQLite. Not a messaging product; plumbing I use every day.

Tools: TypeScript, Next.js, MCP, Server-Sent Events, Zod, SQLite, Swift/SwiftUI, Vitest

Spendgate

Private

Token and dollar budgets enforced inside LangGraph rather than at a proxy, so spend can be attributed at node, subgraph, run, session, and user scope. A breach interrupts the graph at a checkpoint instead of throwing the run away — raise the cap and resume, or abandon it cleanly. Pre-alpha: the accounting works, the hardening does not yet.

Tools: Python, LangGraph, LangChain Core, OpenTelemetry, PostgreSQL/DynamoDB stores, pytest, mypy, Ruff, uv

Portfolio Homepage

This site — and the part I am building right now is the chat. Ask whether I have done something and it answers out of this project wiki rather than out of thin air: pages are picked by exact name and technology matching, with no embedding index and no vector store; they reach the model as reference material the visitor's question never joins; and the ones it used are listed under the answer, so a claim can be checked against the page behind it. Around that: Next.js App Router, a hanging chain of cards on a real Box2D solver, and a resume parsed straight out of a Google Doc. The chain survives the trip to this page — same simulation, it just slides out of the way.

Tools: Next.js, React 19, TypeScript, Anthropic SDK, Planck.js, Tailwind CSS, next-sitemap, Jest

Developer Tools & Libraries

mcpmake

PrivateLive

Turn any API into an MCP server an AI agent can use, in one command — from an OpenAPI spec, Postman collection, HAR capture, or live URL. Generates a clean, typed, editable server you own. Published on npm as mcpmake + @mcpmake/core.

Tools: TypeScript monorepo, Anthropic SDK, swagger-parser, citty, Handlebars, json-schema-to-zod, Vitest

Frontend Debugger

Gives a coding agent eyes on a running interface: component trees and state for React, Vue, Svelte and Angular, visual diffs attributed to the subtree that caused them, accessibility, and replayable failures — not just screenshots. Built on the Chrome DevTools Protocol, with no instrumentation added to the app under test, and shipped as an MCP server, a CLI, an Electron app, and a CI package. Tools load progressively so the agent context stays small until there is something to look at.

Tools: Chrome DevTools Protocol, TypeScript, MCP SDK, Electron, rrweb, axe-core, pixelmatch, Next.js, Prisma, Stripe, Vitest

btw

Personal knowledge agent for code snippets, reusable skills, and project context — it works out what stack you are in and surfaces the relevant thing. One TypeScript core behind a terminal UI, a macOS app, an MCP server for coding tools, a Chrome extension, and a Telegram bot. Internal, but one domain layer serving that many clients without duplicating storage is the interesting part.

Tools: TypeScript monorepo (Turbo), ESLint/Prettier

canvas-editor

Private

Pluggable canvas editor built on Fabric.js: layers, undo/redo, crop, snapping, pattern tiling, product-mockup preview, and PNG/SVG/JSON export. Framework-agnostic core plus a React binding. Published on npm under @overtone-art; powers the Overtone.art design tools.

Tools: TypeScript, Fabric.js, React, tsup, AWS S3 adapter, Turbo, Vitest

Coding Agent Skills

Private

My own coding-agent skills, versioned like code. Each one packages a repeated workflow — scope, what to read first, tool preferences, safety limits, how to verify — so it can be loaded on demand instead of re-pasted into a prompt. Templates and validation scripts keep them structurally consistent. Internal infrastructure, not a product.

Tools: Markdown, YAML front matter, shell validation scripts, GitHub Actions

printify-sdk

GitHub

Typed TypeScript client for Printify's API — shops, catalogs, products, images, orders, shipping, errors. Written so Overtone's fulfillment code never touches raw HTTP. Published on npm.

Tools: TypeScript, Vitest, ESLint

prodigi-print-api

GitHub

Typed client for Prodigi's Print API v4 — quotes, orders, variants, assets, normalized errors — plus a small React explorer for poking at the integration without wiring diagnostic UI into a storefront. Overtone and Gallery SaaS both consume it through their fulfillment boundary.

Tools: TypeScript, tsup, Vitest, ESLint/Prettier

Store AI

GitHub

One state machine for consuming AI streams, with adapters for React, Vue, Angular, Svelte, Solid, Preact, Lit, Redux Toolkit, Zustand, Jotai, Valtio, Nanostores, and TanStack Store. The same stream lifecycle — partial, complete, cancelled, failed — mapped into whatever reactivity the host framework already has. Transport stays outside the package.

Tools: TypeScript monorepo (Turbo)

stream-schema

GitHub

Renders structured model output while it is still arriving: reconstructs partial JSON as it streams, then validates the finished value properly. Core plus React, Vue, and Zod integrations. Built because waiting for one final JSON object makes an AI interface feel broken. AngleForge runs on it.

Tools: TypeScript, tsup, Vitest

zustand-sagas

GitHub

Redux-Saga-style generator orchestration for Zustand, no Redux required: watchers, cancellation, concurrency, task composition, all typed, with Zustand still owning the state. A separate app consumes the published package against a normal Vite build rather than a workspace link, which is where API problems actually show up.

Tools: TypeScript, Zustand, tsup, Vitest

vue-sagas

GitHub

Saga-style side effect management for Vue/Pinia — framework-neutral core, then Vue and Pinia adapters. (Just a fun experiment, not sure if it has real-world use; the interesting bit was comparing Redux-derived orchestration against Vue reactivity.)

Tools: TypeScript, Vue, Pinia, Nx, Vite, Vitest

ripple-text

GitHub

Physics-driven text animation engine — characters react to mouse/touch via ripple waves and field effects (water caustics). Plain TypeScript rather than a component, so the page keeps its own layout and styling. It is what the headline on this site runs on.

Tools: TypeScript, Vite

Learning & Courses

learn-ai

GitHub

A hands-on, project-based curriculum that goes from LLM fundamentals to production RAG and agents — in both TypeScript and Python. 24 numbered modules plus deep-dive companions, each runnable code you build, break, and extend across three depth lanes: use the ecosystem, hand-implement one core piece, or build the machinery from scratch (BPE tokenizer, attention head, vector index, ReAct loop).

Tools: TypeScript + Python monorepo (pnpm, uv), Jest, Anthropic / OpenAI / NVIDIA NIM providers, Chroma/Qdrant, LangGraph, MCP

learn-fullstack

GitHub

A hands-on, project-based course from TypeScript basics to two production capstones — a Trello-lite Kanban board and a Slack-lite realtime chat. End-to-end TypeScript: React, Next.js, Node/NestJS, REST + GraphQL, Postgres raw and via Prisma, auth, realtime, Docker, testing, CI/CD. 30 numbered modules plus 20 lettered deep-dives across three depth lanes, with tutor/exam/progress slash commands.

Tools: TypeScript monorepo (Turbo, pnpm), React 19, Next.js, NestJS, GraphQL, Prisma, PostgreSQL, Docker, Vitest, Storybook

© 2026 Ilia Dzhiubanskii · Charlotte, NC