Hi, I'm Azizhon Bahodyrov
React / Next.js Developer
I've been the only frontend person on admin panels running real orders and real couriers. Right now I'm building a shop and CRM for a local business, and posting about it as I go.
TashkentWhat I've built
Three projects, three different situations. One's a production system I can only talk about, the code belongs to a company. Another's fully open, you can read every line. The last one I'm building right now, in public.
Noor, operations and merchant admin systems
Food delivery platform · React developer, 2024-2025
Three separate frontend codebases at the same company, three different roles across them.
Merchant admin panel
Built solo, start to finish: orders, tariffs, billing and commissions, promo codes, invoices, reports, and partner integrations. This is the panel businesses on the platform use to run their day. Realtime chat over a raw WebSocket, with custom hooks and an auth-wait handshake I worked out with the backend, it waits briefly after connecting for a token before starting real work. Later I added a full cash and billing system with commission tracking.
Central operations admin (cpanel)
The biggest and hardest of the three: courier management, live tracking, in-app chat, vehicle and battery logistics, and the company's financial transactions. I was the main architect and built almost all of it alone through the first year, then brought in and reviewed a successor once my focus shifted to the merchant panel.
Customer-facing website
Contributor on a Next.js 15 site, focused on live GPS courier tracking with animated route drawing on the map, plus rendering and memory optimization for that live view. Also touched i18n, Framer Motion, OTP auth, and the Docker and GitHub Actions deploy.
Company code. I was a contributor or the main author, but it isn't mine to link.
Vocabulary, spaced-repetition word trainer
Personal project · open source
A vocabulary trainer with two independent SM-2 tracks, the same spaced-repetition algorithm Anki uses. Recognizing a word and producing it from memory are different skills with different forgetting curves, so they get separate schedules. Next.js App Router and TypeScript throughout. Word data sits behind a repository interface: it lives in Notion today, and swapping the storage later means writing one new class instead of a rewrite. Pronunciation runs on the Web Speech API instead of a paid TTS service.
- Two independent SM-2 tracks: recognition and production, scored separately
- Repository pattern. Notion today, swapping storage is one new class
- Next.js App Router, TypeScript, Tailwind, Prisma and Postgres for streak data
- Speech playback via the Web Speech API, no paid TTS service
Built with Claude Code. I read and understand all of it.
View on GitHubMaxler, shop and CRM for a real business
Own initiative · sports-nutrition franchise
My own initiative. I built it for a real local sports-nutrition business so I'd have something working to show them. They don't have a legal entity yet, so no payment gateway either, orders go out instantly over the Telegram Bot API instead. Next.js, React 19, Tailwind CSS v4, TypeScript, Feature-Sliced Design.
- No legal entity yet, so no payment gateway. Orders go out instantly via Telegram Bot API
- Phased delivery: a working MVP first, catalog, cart, instant order, then iterate
- Next.js, React 19, Tailwind CSS v4, TypeScript, Feature-Sliced Design
My own project, private for now while it's unfinished.
tg-notion-sync, Telegram to Notion finance automation
Personal project · Node.js service
My bank sends transaction alerts in Telegram, and copying each one into my Notion finance tracker by hand is exactly the kind of task I kept putting off. The regular Bot API can't help here: it can't read another bot's messages in a chat unless my own bot has admin rights there, and you can't arrange that for personal bank notifications. So this service logs into Telegram as a normal user account over MTProto, the same protocol the official app uses, and listens to that chat in real time.
- Reads a personal chat via MTProto (GramJS), since the Bot API can't access another bot's messages there
- Parses bank notifications with regex into amount, currency, date, card, balance, and merchant
- Writes to Notion automatically, matching the card to the right account
- Doesn't auto-guess spending categories, that's left for manual entry since guessing would be unreliable
Built with Claude Code. I read, understand, and maintain all of it.
View on GitHubHow I work
Three habits that show up in every project above.
Ship in phases
A working MVP first, the core flow, nothing decorative, then iterate based on what people actually use. That's how Maxler is being built right now: catalog and instant checkout before anything else.
Own the whole frontend layer
Customer-facing storefronts and the internal admin/CRM screens no one outside the company ever sees. I'm equally comfortable on both sides of that line, often in the same project.
Say where the edge is
If a feature depends on a backend endpoint that doesn't exist yet, I say so and stop there instead of faking it with a workaround.
What I build with
By category, not by trend.
Notes from the Telegram channel
I write about the work as it happens: decisions, dead ends, and what Maxler looks like this week.
Translated from Russian automatically, that's the language I write in.
Questions worth answering before you ask
I can own the entire frontend layer alone, the customer-facing side and the admin/CRM side both, and make the architecture calls there. Backend I can write and understand with AI helping me, enough for something light like tg-notion-sync, but not a production backend for a whole startup on my own. I'd rather pair with someone who owns that full-time.
Not yet. I write and understand backend code with AI's help, Prisma schemas, API routes, small services, but that's light work, not production-grade on my own yet. I'll call myself full-stack once I've owned a backend the way I've owned frontends.
I ship in phases: a working MVP first, then iteration based on what's actually used. Maxler is being built that way right now, in the open.
No, it's my own initiative, built for a real local business so I'd have a finished product to bring them. It's still in progress.
I directed and designed it with Claude Code rather than typing every line myself. I read and understand everything in it, and that's the part that matters to me.
No, that code belongs to the companies I worked for. I can talk through what I built and why in detail, but I won't link a repository that isn't mine to share.
The short version
I'm a React developer based in Tashkent, writing under Untra.dev. Two years of production React across two startups, most of it as the only frontend person in the room, so I got used to making a call and living with it.
At Noor, a food-delivery platform, I built its merchant admin panel almost entirely alone, and was the main architect of its much larger internal operations system before handing it off to a successor I brought in myself. Before that, at Buchet.uz, I contributed to a flower-delivery admin panel and designed its role-based access system from scratch.
Right now I'm building Maxler, a shop and CRM for a real local sports-nutrition business, on my own initiative. Vocabulary, an open-source word trainer, is already finished and live on GitHub.
I'm not senior yet, and backend still isn't where frontend is for me. I'm closing both gaps on purpose, and I write about that process on the Telegram channel, not just the finished results.
Let's talk
Telegram is where I actually check messages.
Or by email: azizhonbahodyrov@gmail.com