Selected work
Some of what’s in service
Retail, manufacturing, healthcare, hospitality, field services, education, media — different trades,
the same story every time: the work outgrew the spreadsheet and started costing money.
Curl School
Hairdressers buy a course, a seminar seat or an expert certificate and have access the
same minute — from the phone they work with all day. Everything around the sale, from
the invoice to the certificate, is the system’s job rather than the office’s.
- Built
- Course platform, seminar ticketing, certification applications, admin back office, two locales
- Runs on
- Next.js 16 · React 19 · NestJS · Prisma · PostgreSQL
- Handles
- Card payments, phone-number sign-in over SMS, e-mail + Telegram delivery, certificate issuing
- Result
- Enrolment, payment, access and the certificate happen without anyone in the office touching an order
Why it’s built this way
The audience barely reads e-mail — inboxes sit full for weeks. So nothing that costs
money depends on e-mail alone: every decision, invoice and access link is duplicated
to Telegram and SMS.
MakeKudri
A hair-care brand sells to shops and to people, and one system carries an order from paid
to handed over — the stock it comes off, the receipt the tax office wants, the courier
waybill and the money it earned.
- Built
- Storefront plus CRM — catalogue and price lists, warehouses and stock audits, B2B/B2C orders, consignment, expenses and P&L, reports
- Runs on
- NestJS · Next.js · Drizzle ORM · PostgreSQL · TypeScript
- Handles
- Nova Poshta waybills and tracking, Checkbox fiscal receipts, Monopay acquiring, wholesale and retail pricing
- Result
- One record carries the order from payment to delivery: the money lands on it once, stock is reserved and written off against it, the waybill is made from it, and nobody retypes an address between three systems
Why it’s built this way
Two steps stay with a person on purpose: a manager confirms the order before stock is
reserved, and makes the waybill from it. The payment, the bank fee, tracking, cash on
delivery and the evening list of unpaid orders run by themselves.
The whole system, with screenshots.
Web app
Journalist Tool
A journalist drops in the recording of an interview and gets back the transcript
and a usable first draft of the piece — instead of an evening spent typing out
an hour of audio.
- Built
- Web app — upload, transcription, draft generation, sign-in; runs in the browser, nothing to install
- Runs on
- TypeScript · Fastify · Deepgram · Gemini
- Handles
- Long audio files, speech-to-text, a draft written from the transcript
- Result
- An hour of interview comes back as a transcript with a draft attached — the reporter edits instead of types
Why it’s built this way
Transcribing is the boring half of an interview; writing the first draft is the half
that eats the evening. Doing both from one upload turns a night of typing into a
review — which is the only part a journalist is actually paid for.
Web app
NestorDoc
A doctor talks to a patient and the consultation writes itself up. The visit is
transcribed as it happens, and the notes — history, likely diagnosis, prescriptions,
advice — are drafted by the time the patient leaves the room.
- Built
- Web app for live consultations, structured medical notes, document generation, accounts and usage billing
- Runs on
- TypeScript · NestJS · Next.js · Prisma · WebSocket · Deepgram · OpenAI
- Handles
- Live transcription with speaker roles, ICD-10 coding, document generation, four interface languages, per-consultation AI cost tracking
- Result
- The write-up is finished when the consultation ends, instead of in the evening after clinic
Why it’s built this way
A raw transcript is not a medical note. The hard part is knowing which voice is the
doctor, which sentence is a complaint and which is a prescription — so the system
settles who is speaking first, and only then writes anything down.
Connexa
A mobile app that turns a scanned QR code or a paper business card into a real,
synced LinkedIn connection — so the stack of cards from a conference actually
becomes a contact list.
- Built
- iOS and Android app, API, LinkedIn sync, contact management, subscriptions
- Runs on
- React Native · NestJS · PostgreSQL · Supabase · RevenueCat
- Handles
- LinkedIn sign-in and profile sync, QR and business-card scanning, deep links, subscription billing
- Result
- The stack of cards from a conference is a synced contact list before the flight home
Why it’s built this way
A conference hands you fifty cards in two days and none of them end up in your phone.
Scanning is the easy half; the app’s real work is keeping the contact current
afterwards, which is the part that normally rots within a month.
ParentHive
A mobile app where parents arrange the school run together — matching families going
the same way, signing up volunteer drivers, and pushing the notification that says
who is picking up whom.
- Built
- iOS and Android app, a replacement backend, volunteer sign-up, real-time notifications, live ride status
- Runs on
- React Native · NestJS · Drizzle ORM · PostgreSQL · AWS
- Handles
- Phone sign-in, ride matching, push notifications, a live activity on the lock screen while a ride is running
- Result
- Parents settle the week’s school run in the app instead of a chat group nobody can follow
Why it’s built this way
The app was live the whole time its backend was being replaced underneath it. The new
API had to answer the old contract endpoint for endpoint before anything moved, so no
parent ever saw the transition happen.
Partizan Outreach
Finds the LinkedIn posts a team’s future clients are discussing while they are still fresh,
and drafts a comment in that audience’s own language. People read it, edit it and post it
themselves — the tool only reads.
- Built
- Multi-tenant web app with workspaces and roles, a daily post scanner, comment drafts, Telegram delivery, trial and weekly billing, a public landing page
- Runs on
- NestJS · React 19 · Drizzle ORM · PostgreSQL · Playwright · Claude
- Handles
- An encrypted read-only LinkedIn session, post scoring by freshness and live threads, a Telegram bot with quiet hours, Monopay payments at the National Bank rate
- Result
- A team starts the day with a short list of fresh posts worth answering, each with a draft, instead of scrolling the feed
Why it’s built this way
It never comments, likes or connects on anyone’s behalf — that is the product’s boundary,
not a missing feature. Finding the post and drafting the answer is the slow part; posting
it is the part that has to stay human.
In service since 2026
HoReCa Outreach
Prepares outreach to restaurants, cafés and coffee shops: maps every venue in a city, works
out who owns it and what it already runs on, and drafts a first message. Once the team approves it, the
system sends it.
- Built
- Multi-tenant dashboard with roles, city mapping, venue research, owner discovery, a knowledge base per business, message drafts, a background worker
- Runs on
- Next.js 16 · better-auth · Drizzle ORM · SQLite · Playwright · Claude
- Handles
- Google Places grid search across a city, venue websites and socials, the POS and delivery software they use, Instagram reads under rate limits
- Result
- A city’s venues turn into a list of named owners, each with a reasoned first message, instead of cold calls from a map
Why it’s built this way
A message is only as good as the research behind it. So the work goes into finding the
owner and what bothers them — their reviews, the software on their site — and nothing goes
out until a person has read the message and approved it.
NoScam
A free site that teaches people not to fall for subscription traps: a $0.99 “trial” that
turns into hundreds a year and can’t be cancelled. I built it after my wife bought an
“AI English tutor” and kept being charged after she cancelled.
- Built
- A six-lesson course with quizzes and clickable fake app screens, a site check that walks a quiz funnel in a real browser up to the price, app-store review reading, AI analysis of screenshots, 43 languages
- Runs on
- Effect-TS · Foldkit · Playwright · Claude · monobank acquiring
- Handles
- JavaScript-only funnels, Google Play and App Store reviews, a queue for heavy checks, month-long result caching, pictures that try to give the AI instructions, voluntary one-off payments in ₴, € or $
- Result
- Anyone can paste a link and see the real yearly price and the traps before paying
Why it’s built this way
A tool against dark patterns can’t use them. So it is free, has no ads and no
subscription, calls its verdict an opinion rather than a fact, and links every trap it finds
to a lesson, so people learn to spot the next one without it.
Under NDA — overall information only
Four more, in outline
Client names — and for some, the product name too — stay where they belong. What the
system does, what I did on it and what it’s built from is fair to share.
Field services marketplace
AirConnect
A marketplace for heating, cooling and water-heating work. A homeowner posts the job,
matching contractors spend credits to respond, and the two of them finish the
conversation inside the app.
- Client
- Withheld — NDA
- My role
- The whole platform — API, both web apps, admin, mobile
- Runs on
- NestJS · Next.js · Drizzle · PostgreSQL · Socket.IO · Expo
- Result
- A homeowner’s job reaches matching contractors in minutes, and the platform earns on every response
Manufacturing
Garment Production System
A clothing factory always knows what is being sewn, from which fabric and print, against
which order — and where every order stands right now. Orders arrive from the shop’s
CRM, the floor works from them, and the money is counted in the same place.
- Name & client
- Withheld — NDA
- My role
- Lead developer, still on it
- Runs on
- NestJS · React · PostgreSQL · CRM sync workers
- Result
- The floor knows what to sew and against which order; the office sees where an order stands without asking
Education & psychology
Report Writing Tool
School psychologists feed in rating scales, classroom observations and interviews, and
the tool drafts the evaluation report they would otherwise write by hand. A report
that used to take seven working days now takes about two hours.
- Name & client
- Withheld — NDA
- My role
- Backend and the report generation engine
- Runs on
- NestJS · TypeORM · PostgreSQL · React · OpenAI + Gemini · S3
- Result
- A report that used to take seven working days is finished in about two hours
Health & fitness
Nutrition & Training Platform
A mobile app for personal trainers and the clients they coach. Clients log workouts,
meals and progress; the trainer sees at a glance who is following the plan and who
quietly stopped — instead of chasing every one of them over chat.
- Name & client
- Withheld — NDA
- My role
- Backend engineer on the microservice platform
- Runs on
- NestJS microservices · NATS · Prisma · Supabase · Expo
- Result
- A trainer keeps a full roster on track from one screen instead of chasing every client through chat