mpeshekhonov
RU

Projects

Real case studies: problem → role → stack → outcome.

X5 Tech

Procurement approval module (NKZ 3.0)

Procurement approval at X5: roles, statuses, and long flows in one UI

ReactTypeScriptKeycloakOrvalOpenAPIViteTanStack Queryreact-hook-form

Problem

The procurement approval module outgrew the legacy frontend: teams needed one interface for roles, statuses, drafts, and long approval flows.

Role

Built the module UI: RBAC matrix, state transitions, validated forms, change history. Owned the migration to Vite, added code splitting, Keycloak SSO, and Orval from OpenAPI.

  • Consolidated procurement approval into one predictable interface
  • Migration to Vite and code splitting improved long-flow performance
  • Orval removed manual type updates when backend contracts changed

POTALONU / PREEGLOS

PREEGLOS — seat map editor

In-house seats.io alternative: venue editor and seat-picker widget

Next.jsReactCanvasPostgreSQLDrizzle ORMAuth.jsDockerCI/CD

Problem

The ticketing service needed its own seats.io-like venue editor and seat picker widget that could be embedded into event sites without external SaaS.

Role

Canvas hall-layout editor, embeddable seat picker, events and bookings. Storefront, checkout, and Mini App on the same API.

  • Organizers create venue layouts and connect seat selection without custom work per venue
  • Embeddable seat-picker widget works on the storefront and in Telegram Mini App
  • Hall, seat, and purchase data stay inside the product infrastructure

sendonate.com

sendonate.com — donations and OBS overlay

Streamer donations: dashboard, Mini App, and OBS overlay

ReactViteTypeScriptTelegram Mini AppWebSocketOrvalDjango REST

Problem

Streamers accept tips in Telegram, configure alerts in a dashboard, and show them in OBS — three clients, one sendonate backend.

Role

In monolith/sendonate: React + Vite dashboard, Telegram Mini App, and websocket-pages for OBS. Evolved donation widget designs and streamer-dashboard functionality; Orval from OpenAPI, alert queue, and WebSocket reconnect.

  • Three clients share one API — tips are not lost between Mini App, dashboard, and stream
  • OBS overlay queues alerts during donation bursts
  • Sentry and Orval simplify production error tracking and contract sync

ZodiacLab

ZodiacLab — marketplace and consultations

Services marketplace with catalog, orders, and in-browser video consultations

Next.jsReactTypeScriptNest.jsWebRTCSocket.ioOrvalPlaywright

Problem

The product needed a storefront, account area, chats, and live A/V consultations between users — with tight client–backend alignment.

Role

zodiaclub-front on Next.js 15: catalog, account, chats. WebRTC via Socket.io signaling, Orval, Playwright e2e. Nest.js backend extensions.

  • Users complete the journey from catalog to paid consultation in one product
  • Video calls run on WebRTC with ICE candidate queueing before connection setup
  • OpenAPI contracts stay aligned between client and backend via Orval

SmartPrice

SmartPrice — smart pricing

Web system for price lists, tech cards, and financial model for production

Next.jsReactTypeScriptTailwind CSSZustandOrvalREST APIAxios

Problem

Production teams need one UI for own prices, tech cards, supplier and competitor prices, financial model and accounting — instead of scattered spreadsheets.

Role

Built the frontend on Next.js 16 and React 19: price lists, tech cards, financial model, accounting, staff. Zustand stores, REST via axios services, OpenAPI client generation (Orval), UI from Figma.

  • Core flows (own prices, tech cards, financial model, accounting, staff) run against the API in production-core
  • API types and client stay in sync with the backend via OpenAPI and Orval
  • Complex tables and price versions match real Figma screens

ZodiacLab

ZodiacLab — Telegram bot for clients and specialists

Telegram hub: role menus, notifications, and AI consultant

Nest.jsTelegram Bot APITypeORMPostgreSQLnode-cronTypeScript

Problem

Clients and specialists need quick actions and reminders in Telegram alongside the web cabinet.

Role

In zodiaclub-backend: polling bot, account link to the cabinet, role menus (client / specialist), pushes for consultations, reviews, earnings, and profile views. Button hub with deep links to the site.

  • Client and specialist get a reminder one hour before a consultation
  • Specialists get digests: reviews, weekly earnings, profile views
  • Duplicate pushes are blocked by dedup records in PostgreSQL

ZodiacLab

ZodiacLab — Telegram bot for admins and moderators

Staff moderation and alerts without opening the web admin panel

Nest.jsTelegram Bot APITypeORMPostgreSQLTypeScript

Problem

Admins and moderators need to react quickly to specialist applications, support tickets, and reviews from Telegram.

Role

Separate Nest.js admin bot: ADMIN/MODERATOR linking, permission-based alerts, in-chat actions (approve / reject / take ticket / reply), action audit log, Open in admin button.

  • Staff get role- and permission-based pushes, separate from the user bot
  • Applications, tickets, and review moderation can be handled in Telegram
  • Every action is written to an audit log

ZodiacLab

ZodiacLab — CRM bot and Mini App

Specialist database, pipeline, and tasks inside Telegram

Node.jsExpressGrammyPostgreSQLTelegram Mini AppDocker

Problem

The sales team needed a light CRM for specialists: contacts, pipeline stages, tasks, and stats — without a heavy external system.

Role

Self-hosted Express + Grammy + PostgreSQL service: admin/manager/viewer roles, specialist DB import, Telegram bot and Mini App (tasks, stats), cron reminders.

  • Specialist database and pipeline are available from the bot and Mini App
  • Tasks get morning reminders on an MSK schedule
  • Deployed via Docker / Coolify on own infrastructure

NLMK

Cast iron release registration

Production data for blast furnace operations instead of spreadsheets

ReactTypeScriptKeycloakTanStack TableTanStack QuerySentryREST API

Problem

Blast furnace operators recorded cast iron releases manually: data was hard to filter by shift, and plant network connectivity was unreliable.

Role

Built a React SPA with TanStack Table for large datasets, React Query caching, and Sentry monitoring. Integrated Keycloak authentication.

  • Core shop-floor operations moved into one web interface
  • Filtered, sortable tables handle large datasets without UX degradation
  • Sentry reduced time to diagnose production issues

SmartFish

SmartFish KKM — tablet POS

React Native (Expo) POS: shifts, sales, payments, and card terminal

React NativeExpoTypeScriptExpo RouterNativeWindZustandEASREST API

Problem

SmartFish retail needed a tablet POS: open a shift, build a cart, take cash and card, and talk to the in-store POS terminal.

Role

Built a React Native and Expo app (Expo Router, NativeWind, Zustand): cashier auth, shifts, catalog, cart, payments (cash / card / QR on terminal), cashier vs admin/manager roles, EAS builds.

  • Cashiers run shifts and sales from a tablet in the store
  • Card payments go to the POS terminal over LAN with receipt printing
  • Role split: cashier on a shift, admin/manager in view mode without opening a shift

SmartFish

SmartFish — management platform

Fish-farm management UI: sites, workshops, warehouses, staff

ReactTypeScriptViteEffectorFSDOrvalYandex MapsRecharts

Problem

The production service has dozens of entities, roles, and API contracts: operators need one predictable interface instead of scattered screens.

Role

Build smartfish-frontend on React + TypeScript: sites, pools, warehouses, workshops, staff, RBAC, Yandex Maps, and analytics. Client and types are generated from OpenAPI (Orval).

  • Modular structure keeps production screens in clear boundaries instead of one large SPA
  • RBAC, maps, warehouses, and analytics live in one UI for operational roles
  • OpenAPI keeps frontend and backend types in sync

Citilink

E-commerce migration to Next.js

Catalog and homepage: Symfony to Next.js without losing SEO

Next.jsReactTypeScriptJavaScriptREST APISSRJestGit

Problem

A major e-commerce site migrated catalog and homepage from legacy PHP/Symfony to Next.js while keeping filters, SSR, and microservice alignment.

Role

Contributed to online store migration: Next.js SSR, filters, sort, URL-state pagination, REST API with backend teams. Code review, Jest.

  • Online store catalog on Next.js with SEO preserved
  • URL-synced filters for wholesale and retail flows
  • REST contracts aligned with backend and microservices

BI.ZONE

Threat Intelligence

Threat intelligence: relationship graphs, reports, and heavy grids

ReactD3.jsGraphQLApollo ClientMobXReact QueryOrvalHighcharts

Problem

Security analysts needed entity graphs, filters over large datasets, and configurable dashboards in one product.

Role

Entity analysis page: relationship graph on D3.js, advanced filters, GraphQL reports on Apollo Client. @bizone npm packages, virtualized heavy lists.

  • Analysts explore entity relationships in an interactive graph
  • Dynamic reports connect to the same data model as core workflows
  • Virtualization keeps heavy lists responsive in the browser

POTALONU

potalonu.com — events and tickets

Events storefront and ticket purchase on web and Telegram Mini App

Next.jsOrvalTanStack Querynext-intlTelegram Mini AppChart.js

Problem

The ticketing service needed matching purchase flows in the browser and Telegram, plus analytics for organizers.

Role

Built the Next.js 16 storefront: Orval, TanStack Query, React Hook Form + Zod, next-intl, Mini App on `@twa-dev/sdk`, Chart.js analytics.

  • Ticket purchase works on web and Mini App with shared logic
  • Organizers get basic sales analytics
  • Localization covers core user flows

NDA

Marketplace (NDA)

Marketplace from scratch: catalog, checkout, i18n

Next.jsTypeScriptTailwind CSSOrvalReact Hook FormZodnext-intlPlaywright

Problem

An NDA client needed the full user journey from catalog to checkout with localization and observability.

Role

Built the Next.js 14 app: Orval, TailwindCSS, React Hook Form + Zod, next-intl, Storybook, Playwright e2e, and Sentry in production.

  • User flow from catalog to checkout lives in one application
  • OpenAPI client is generated automatically — fewer integration bugs
  • Playwright and Storybook guard UI regressions

In2View

In2View — B2B research platform

Matching respondents and clients for customer development research

ReactRedux ToolkitFirebaseGatsbyFramer MotionJWT

Problem

The startup needed an MVP: respondent search, surveys, roles, reports, and a marketing site — from zero to production.

Role

Built the platform on React + Redux Toolkit and REST API, marketing on Gatsby + Contentful, Firebase Auth with 2FA and PWA.

  • MVP shipped to production with roles and survey-based matching
  • PWA and 2FA met baseline enterprise client requirements
  • Marketing site and app evolved in parallel

Rostelecom

Yaga — enterprise task tracker

Business process template module in a Jira-like system

ReactTypeScriptRedux ToolkitOpenAPIREST API

Problem

The enterprise system needed configurable process templates without code changes for each new workflow.

Role

Template module on React + Redux Toolkit, REST via OpenAPI. Task breakdown, code review, memoization on heavy screens.

  • Process templates configurable without developer involvement
  • OpenAPI contract kept frontend and backend aligned
  • Team worked in Scrum with regular code review

SberTech

SberTech — corporate knowledge base

Confluence-like product: micro frontends, UI Kit, and automated tests

ReactTypeScriptModule FederationWebpackUI KitPlaywrightJest

Problem

An internal corporate knowledge base needed independent sections, a shared UI Kit, and stable user flows for teams maintaining documentation and work materials.

Role

Built new React features, improved UI Kit components, and integrated application parts into a micro frontend architecture via Module Federation. Wrote automated tests for user flows, including Playwright e2e tests.

  • New functionality shipped inside one Confluence-like product without a separate app
  • UI Kit kept the interface consistent across knowledge-base sections
  • Playwright tests covered key user flows and reduced regression risk

SberTech

OpenSearch Dashboards + Vault

Certificate automation and log visualization

Node.jsOpenSearch DashboardsVaultGitLab CIJestKibana

Problem

OpenSearch Dashboards had to integrate with Vault and rotate TLS certificates without manual ops.

Role

Small improvements around Dashboards–Vault integration in Node.js, GitLab CI certificate rotation, and Jest tests in pipeline.

  • Certificates rotate via CI without manual steps
  • Jest covers critical integration steps
  • Visualization module wired into corporate environment

SmartFish

SmartFish — storefront and B2B API

NestJS backend for orders, cart, payments, and admin (akvaprom / B2B)

NestJSTypeORMPostgreSQLOpenAPIDockerWebSockets

Problem

Public storefront, B2B cabinet, and Aquaprom share one API — orders, cart, RBAC, and payments in one backend.

Role

Extend smartfish-landing/apps/backend: orders, cart, payments, promocodes, bonus system, admin, RBAC. TypeORM + PostgreSQL, webhooks, websockets.

  • B2B and retail hit the same backend via /backend-api
  • Admin covers catalog, users, promocodes, and bonus flows
  • Contracts feed b2b-sm and landing-smartfish frontends

SmartFish

SmartFish — akvaprom.kg storefront

Next.js online store: catalog, checkout, bonuses, promocodes, SEO

Next.jsReactTypeScriptTailwind CSSFramer MotionYandex Metrika

Problem

Marketing site and online shop on one domain (akvaprom.kg): catalog, checkout, profile, bonuses, and promocodes separate from the ERP client.

Role

Storefront on Next.js: homepage with carousels and categories, shop, checkout, profile, bonuses, promocodes, Yandex Metrika, Framer Motion.

  • Shoppers go from homepage to checkout without opening the ERP
  • Bonuses and promocodes are part of the online-store user flows
  • akvaprom.kg storefront reached the first page of Yandex for its target direction

SmartFish

SmartFish — Telegram bots

B2B Telegram reports and retail order alerts

NestJSTelegram Bot APITypeORMPostgreSQLnode-cron

Problem

B2B managers need morning/noon order summaries in Telegram; retail needs instant alerts on new orders.

Role

In smartfish-landing/backend: telegram-reports (daily B2B XLSX reports, reminders), aquaprom-telegram (webhook bot, subscribers), retail order notifications.

  • Scheduled B2B report posts to chat with XLSX attachment
  • New retail order triggers a Telegram message
  • Bot subscribers and commands stored in PostgreSQL

Stratwise

Stratwise.ai — trading strategies

Strategy builder and quote charts

ReactViteTradingViewRechartsFirebaseaxios

Problem

Traders needed a web UI to compose strategies and view live quotes.

Role

Built screens on React + Vite, Firebase integration, TradingView lightweight-charts and Recharts, REST via axios.

  • Users compose and review strategies in one interface
  • Quote charts sync with REST data
  • Firebase covers auth and basic settings storage

Quan2um

Quan2um — crypto exchange

Trading terminal: order book, orders, Solana wallet

LitSolanaweb3.jssocket.ioesbuildTradingView

Problem

The exchange needed a fast trading UI with a live quote stream and Solana wallet integration.

Role

Built the UI on Lit, market stream via socket.io, web3.js and wallet adapters, esbuild pipeline.

  • Orders and order book update over WebSocket without page reload
  • Solana wallet connected to trading flows
  • esbuild enables fast UI development iterations

Maximaster / e-commerce

Online store on 1C-Bitrix

Catalog, cart, and filters in commercial e-commerce

1C-BitrixPHPHTML5CSS3SCSSjQueryJavaScriptWebpack

Problem

A cosmetics store needed a responsive catalog, filters, and cart within 1C-Bitrix and Symfony.

Role

Extended 1C-Bitrix components and templates: catalog, product pages, filters, cart. HTML5, CSS3/SCSS, jQuery, JavaScript, Webpack, Git. PHP/Symfony backend integration.

  • Responsive catalog and product pages across breakpoints
  • Filters and cart stable in production
  • Commercial team delivery with Git and code review

Maximaster / e-commerce

fitomarket.ru

Phytoproducts store on Bitrix

1C-BitrixPHPHTML5SCSSjQueryJavaScriptWebpackGit

Problem

Bitrix e-commerce with a large catalog needed stable filters and a fast product page.

Role

Extended catalog, filters, and product cards; optimized frontend for mobile traffic.

  • Catalog and filters stable in production
  • Product pages adapted for mobile

Energosoft

energosoft.ru

Power metering for energy retail companies

Symfony1C-BitrixPHPjQueryJavaScriptSCSSWebpackGit

Problem

An electricity accounting service for energy retail companies relied on heavy postback forms; users needed a responsive UI for forms and reports.

Role

Migrated forms and tables to AJAX, extended UI on Symfony + Bitrix.

  • Forms and reports work without full page reload
  • Users complete common flows faster

Baucenter

Baucenter

Online store on Next.js

Next.jsReactTypeScriptHTML5SCSSREST APIWebpackGit

Problem

A building supplies store needed catalog and cart on a modern frontend stack.

Role

Built catalog and cart UI on Next.js, responsive layout and backend API integration.

  • Catalog and cart work on mobile and desktop
  • Changes shipped without storefront downtime

Specdep

specdep.ru

Corporate site on Bitrix

1C-BitrixPHPHTML5SCSSjQueryJavaScriptWebpackGit

Problem

The corporate site needed frontend maintenance and growth on legacy Bitrix.

Role

Maintained and extended site sections, built new blocks on Bitrix + jQuery.

  • New sections shipped on schedule within CMS
  • Shared SCSS stack across pages

Energosoft

workshop.energosoft.com

Electricity accounting for energy retail companies

1C-BitrixPHPHTML5SCSSjQueryJavaScriptWebpackGit

Problem

Energy retail companies needed a web UI for electricity accounting: forms, tables, and reports.

Role

Built the client side of the service: AJAX forms and tables, integration with Symfony/Bitrix backend.

  • Client UI stable in production
  • Forms synced with backend

FC Zenit

tickets.fc-zenit.ru

Ticket sales and stadium map

CanvasJavaScriptREST API

Problem

Fans needed to pick a seat on an interactive stadium map and complete checkout.

Role

Stadium map rendering on Canvas, integration with ticket sales backend.

  • Interactive seat selection on arena map
  • Map synced with seat availability

Commercial project

Aurumline WebView

WebView client for mobile app

ReactTypeScriptWebView

Problem

The mobile app needed an embedded web client with WebView constraints.

Role

Adapted React UI for WebView: viewport, navigation, native bridge.

  • UI works in iOS and Android WebView
  • Navigation aligned with native shell

Commercial project

DuckMaster — Telegram game

Game Mini App: onboarding, combat mechanics, stable releases

ReactRedux-SagaViteVitestWebSocketTelegram Mini App

Problem

The Telegram game needed new onboarding and attack mechanics without hurting performance on low-end devices.

Role

Moved game logic into Redux-Saga, optimized Vite builds and WebP conversion, covered key flows with Vitest.

  • New onboarding and attacks shipped without core-loop regressions
  • WebP and chunking reduced asset weight on mobile clients
  • Vitest guards game-flow releases

Commercial project

HandStars — Telegram game

Mini App with real-time, TonConnect, and motion

ReactMobXsocket.ioTonConnectOrvalFramer MotionTelegram Mini App

Problem

The game had to run in Telegram WebApp: sockets, TON wallet, animations, and analytics in one client.

Role

Built UI on React + MobX, real-time via socket.io, TonConnect, Orval for REST, Framer Motion and Lottie for motion.

  • Playable Mini App with TON payments
  • Real-time events don't block UI thanks to a dedicated state layer
  • Telegram analytics wired for product decisions

Commercial project

IT career simulator

Pixel-art developer career game in Telegram

Next.jsZustandSupabaseTelegram WebAppTailwind CSS

Problem

A lightweight game MVP inside Telegram needed persistent progress between sessions.

Role

Built the game on Next.js App Router, Zustand, Radix UI, Supabase SSR for profile and progress, WebApp viewport adaptation.

  • Playable MVP inside Telegram without a separate install
  • Progress persists in Supabase between sessions
  • UI adapted to WebApp constraints

Open to offers

Senior Frontend / Fullstack — remote or hybrid. Message on Telegram or email; I usually reply within a day.