IS
/projects

Projects

Shipped products I've built and led — not demos, but things people actually use.

Ipak Yuli Bank2020 — present

Retail and corporate online banking: cards, loans, deposits, payments. Nuxt/Vue, SSR, performance for millions of clients.

Role: Web development lead

Nuxt 4Vue 3TypeScriptSSRPiniaPHP/Yii2

Why
I lead the bank’s web direction: the public site and the customer account area in three locales (uz/ru/en) — cards, loans, deposits, payments — for retail and corporate clients under heavy traffic.

How
A full migration of a large production site from Nuxt 2 / Vue 2 to Nuxt 4 / Vue 3, preserving the multilingual route map and the legacy Yii2 CMS. SSR + Pinia + nuxt-security; a polyglot infrastructure behind nginx: the Nuxt front-end, Redis, MinIO. Dedicated edge/CDN cache engineering (Cloudflare, route rules, a build-time cache-buster). Tests: Vitest, Cypress, Storybook. Pages are assembled entirely component-by-component on the CMS side, with no structure defined in front-end code (a CMS editor builds pages from components, the front-end renders them via SSR).

MONIX2025 — present

A fintech with a Visa credit card: a limit up to 50M UZS, cashback up to 30%, 62 interest-free days and 9% on the balance, a referral program. iOS/Android + website.

Role: Web development lead

Nuxt 4Vue 3TypeScriptStrapiSSRRedis

Why
The web presence of the MONIX fintech product (a Visa credit card): a multilingual landing page, a referral program, deep-linking into the iOS/Android apps. Editors manage the content through a headless CMS, and the site renders it via SSR.

How
Nuxt 4 + Vue 3.5 + Vite 7 + strict TS + Tailwind 4; Strapi 5 as the headless CMS. The key decision is an SSR-aware proxy with two URLs: the browser hits `/strapi/*` through the Nuxt proxy, while SSR goes directly over the internal Docker network, so the CMS is never exposed to the internet. Referral attribution runs on Redis sessions (a custom Koa middleware) plus QR generation. The whole stack (Nuxt + Strapi + Postgres + Redis + MinIO) comes up with a single `make dev`.

Calorie counting in Telegram: a food photo → calories and macros, a food diary, charts, Whoop sync, a Premium subscription.

Role: Solo developer

PythonTelegram Bot APIOpenAI GPT-4oSQLAlchemySupabasematplotlib

Why
A pet project: counting calories without manual entry — snap a photo of your food and the bot estimates calories and macros. A food diary, charts, Whoop sync, a Premium subscription.

How
Python 3.12 + python-telegram-bot; food recognition via GPT-4o-mini (vision) with a defensive JSON parser for the model’s “dirty” output (the user’s description is the source of truth for portions). A clean layered architecture: handlers → services → repositories → models. SQLAlchemy 2.0 + Alembic, Postgres/Supabase, matplotlib for charts, a tornado webhook. Whoop via OAuth2 (calories burned), Telegram Payments for Premium. pytest + CI tests, spec-driven development with an AI assistant.

An embeddable chat widget on the bank’s website: an AI bot finds the right materials and answers questions about banking services.

Role: Front-end development, backend API integration, coordination with the AI bot team

Vanilla JSViteYarn workspacesJest

Why
An embeddable chat widget for the bank’s website: an AI assistant finds materials and answers questions about banking services. The widget is written in pure ES-module JS.

How
Framework-free, in pure ES-module JS — Vite in library mode builds UMD + ESM bundles with isolated, namespaced CSS, so it embeds safely into any third-party page. A Yarn monorepo of several packages (with a shared-core that defines common components). An explicit state machine for the chat lifecycle, event-driven pub/sub, a delegated-token model (the widget stores no credentials — it delegates to the host page, 401-aware). B2C onboarding with SMS-OTP and reCAPTCHA v2. Deployed to MinIO/CDN via GitHub Actions, tested with Jest + jsdom.

open source

49 repos · 12 followers

contributions1060 contributions this year