Hey, I'm Shohjahon Rajabov 👋
Building scalable backends, AI systems, and automation.
Python backend & AI developer in Tashkent, Uzbekistan. I design the APIs, the Telegram bots, and the AI on top - then ship and run them in production.
Three layers, one engineer
I own features the whole way down - so the API, the UI, and the box it runs on all agree with each other.
Backend & APIs
Async FastAPI and Django services on PostgreSQL. Typed contracts at every layer, Redis caching, and Celery for the heavy lifting.
- REST API design
- Async SQLAlchemy
- Redis + Celery
Bots & automation
Production Telegram bots on aiogram 3 - downloaders, CRM, anonymous chat - plus automation scripts that delete repetitive work.
- aiogram 3 / Pyrogram
- Queue-backed at scale
- Workflow automation
AI & infrastructure
OpenAI-powered chatbots and NLP, shipped with Docker behind Nginx. CI/CD on every push and Linux servers I actually run.
- OpenAI / NLP
- Docker + Nginx
- CI/CD & Linux ops
Principles I don't compromise on
A short list of the things I hold constant across every project - no matter the stack, the deadline, or the size of the team.
Correctness first
Typed contracts at every boundary and explicit error handling. Failures should be loud and diagnosable - never silently swallowed behind a catch-all.
Async by default
I/O-bound work belongs on the event loop. Async FastAPI, async ORM sessions, and background queues keep services responsive under concurrent load.
Automate the boring parts
If I do it twice by hand, I script it. Bots, deploy pipelines, and tooling exist so the repetitive work runs itself and I focus on the hard problems.
Ship, then sharpen
A working ugly slice beats a polished plan. I get it deployed end-to-end, watch it under real traffic, and harden from there with data, not guesses.
Tashkent
Uzbekistan · UTC+5
A few things I've shipped
Side projects, client work, and open-source contributions.
Real client work for Adjaster UZ, an insurance-adjustment company: their official website plus the backend and Telegram bots behind the Evroprotokol (on-the-spot accident report) service. This one is live and used by the company.
A multi-tenant e-commerce backend in Django REST Framework: each vendor gets their own shop on a subdomain with SSL and its own API docs. Auth, catalog, and orders, with Celery and Redis for background work. Built as a deep dive into DRF and multi-tenancy - it runs and has pytest coverage, but isn't hosted as a live service.
From the blog
Notes on engineering, tools, and building things.
What three Telegram bots taught me about state
The anonymous chat bot worked perfectly on my laptop and fell apart the first time I ran two processes. Here is what I changed.
The caching bug that made me stop trusting TTLs
A product price kept showing the old value after an update. TTL-only caching was the problem; tag-based invalidation was the fix I still use - including on this site.
Patterns I use with async SQLAlchemy 2.0
The repository pattern, dependency injection, and a few sharp edges from the async path.
Have a project in mind?
I'm open to freelance work, collaborations, and interesting problems. Tell me what you're building.