I have done commercial web development since 2019. Now I build web products end to end and work on existing systems. The public projects below cover APIs, integrations, Telegram bots and Mini Apps, and LLM features.
Open to contract work: a fixed-price project, hourly or monthly work, a seat on your team, or taking over an existing codebase. Telegram @sinnercode · portfolio
Recorded from the Pulse demo on GitHub Pages. The traffic is synthetic.
2025 – now · Senior Full-Stack Developer · Independent / Contract
Full-cycle web products and work on existing systems: architecture, dashboards and admin panels, APIs and integrations, optimizing queries, job queues and large imports, CI/CD, monitoring, backup and restore, code review, refactoring and releases.
2023 – 2025 · Full-Stack Developer · Independent projects and contracts
Services with subscriptions, payments and automation: a SaaS for links and contacts, a Telegram sales platform with automatic delivery of digital goods, a website analytics service. I designed the API and database, built the UI, deployed and supported them. Next.js, TypeScript, Node.js, Python, PostgreSQL, Redis, Nginx.
2021 – 2023 · Full-Stack Developer · Contract development
Internal web apps for sales departments and service companies: a CRM for handling requests, a document portal with approvals, supplier catalog sync with price and stock updates. React, TypeScript, Node.js, PostgreSQL, Redis, Docker.
2019 – 2021 · Web Developer · Freelance
Websites and online stores for small businesses: an auto parts store with CSV import, a site for a chain of repair shops with a cost calculator and requests sent to a CRM, WordPress sites with custom themes. JavaScript, PHP, WordPress, MySQL.
The commercial code from this work is private, so the public repositories below are standalone projects built on made-up data.
The demos run on GitHub Pages without a backend. The API is replaced by code in the browser.
Pulse · TypeScript, Fastify, SQLite, React · demo · write-up
Cookieless web analytics with uptime monitoring. Each rollup row stores a HyperLogLog sketch: an exact set up to 512 hashes, then 2048 registers. That is how unique visitors are merged across time buckets.
Relay · Python, FastAPI, Redis, SQLite, React · demo · write-up
Takes webhooks from Tilda, amoCRM and Bitrix24 and delivers them to Telegram, Google Sheets, amoCRM and email. The Redis queue is built on sorted sets: a worker claims a job with a lease (120 seconds by default) in one Lua script, and if the worker dies, the job goes back to the queue when the lease runs out.
DocMind · Python, FastAPI, pgvector, React · demo · write-up
Answers questions over PDF, DOCX, HTML files and web pages with citations, and has a Telegram bot. Sources go out over SSE before the model is called, so each [n] is clickable as soon as it streams in. The demo has no LLM: it searches with BM25 in the browser.
Zernolist · React, aiogram 3, FastAPI, SQLAlchemy · demo · write-up
A coffee and tea shop inside Telegram, with payment in Stars or on receipt. The server prices every order from the catalog and ignores client prices: a test sends price: 1 and still gets the catalog subtotal.
FlowDesk · Next.js, Fastify, Prisma, PostgreSQL · demo · write-up
A CRM with a deals kanban and roles. Refresh tokens rotate, and a reused one revokes every token from that login. A conditional updateMany inside a transaction stops two concurrent refreshes from both getting a new pair.
n8n-home-ai-workflows · n8n, Ollama, Qdrant, Docker Compose
Four workflows: meeting notes to Notion via Claude, a family calendar digest, document Q&A on local models, an error handler. Code-node logic is built from ES modules, and the tests run the jsCode stored in the workflow JSON. No live demo, and I haven't run the workflows against live Anthropic, Notion, Google or Telegram accounts.
Smaller demos are in portfolio: a landing page with a cost calculator, an async scraper, a lead-collection bot and an Excel dashboard.
Write-ups on how specific parts of these projects work. Each one quotes the code, links to the lines at a pinned commit, then says what the tests cover and where the code is still thin. Index: notes/.
- My Redis queue claimed jobs atomically and still handed the same job to two workers: two races, a test that forces them on every run, and the fix
- Relay's delivery queue on two Redis sorted sets with a 120-second lease
- How FlowDesk rotates refresh tokens with a conditional UPDATE and a cross-tab lock
- How Zernolist prices an order on the server and accepts each Telegram Stars charge once
- How DocMind sends sources before the first token and links [n] markers mid-stream
- How Pulse counts unique visitors with a daily salt and a sparse-to-dense HyperLogLog
Bugs I filed against my own projects and haven't fixed yet:
- Relay: an event is stored but never queued if enqueue fails
- DocMind:
docmind askfinds nothing afterdocmind ingestwith default settings
Telegram @sinnercode · portfolio
Коммерческая веб-разработка с 2019 года. Сейчас занимаюсь разработкой веб-продуктов полного цикла и развитием существующих систем. В открытых проектах выше — API, интеграции, Telegram-боты и Mini Apps, функции на LLM. Беру проекты с фиксированной ценой, почасовую и помесячную работу, могу войти в вашу команду или разобраться в чужом коде.
- 2025 — сейчас. Senior Full-Stack Developer, independent / contract. Полный цикл разработки веб-продуктов и развитие существующих систем.
- 2023–2025. Full-Stack Developer, независимые проекты и контракты. Сервисы с подписками, платёжными интеграциями и автоматизацией.
- 2021–2023. Full-Stack Developer, контрактная разработка. Внутренние веб-приложения для отделов продаж и сервисных компаний.
- 2019–2021. Web Developer, фриланс. Сайты и интернет-магазины для малого бизнеса.
Коммерческий код из этой работы закрыт, поэтому открытые репозитории выше — самостоятельные проекты на выдуманных данных. README у них на английском; у всех, кроме Relay, есть русская версия или короткий пересказ по-русски.
Разборы того, как устроены отдельные части проектов, с кодом и ссылками на строки:
- Очередь на Redis атомарно забирала задачи и всё равно отдавала одну и ту же двум воркерам: две гонки, тест, который ловит их при каждом запуске, и исправление
- Очередь доставок Relay на двух sorted set в Redis с арендой задачи на 120 секунд
- Ротация refresh-токенов в FlowDesk через условный UPDATE и блокировку между вкладками
- Как Zernolist считает цену заказа на сервере и принимает каждый платёж в Telegram Stars один раз
- Как DocMind отдаёт источники раньше первого токена и превращает [n] в ссылки на лету
- Как Pulse считает посетителей через суточную соль и HyperLogLog
Написать: Telegram @sinnercode, портфолио.

![DocMind demo: a question, the answer streaming with [1] and [2], and the matching source cards highlighted](/sinnercode228/sinnercode228/raw/main/assets/docmind-answer.webp)