Startup · 2025 · ~2 daqiqa o‘qiladi
Tashkent Metro — mobil ilova backend'i
Toshkent metrosi uchun mobil ilovaning to'liq backend'i: GeoDjango xaritalar, real-time ogohlantirishlar, push-bildirishnomalar. Play Market'da 100K+ yuklab olingan.
Python · Django · DRF · PostGIS · Channels · Firebase · Docker
- 100K+ yuklab olish
- 3 oyda relizgacha
- 3 til (uz/ru/en)
- real-time + push
Mundarija
Muammo#
Toshkent metrosidan har kuni yuz minglab odam foydalanadi, lekin yo'lovchida zamonaviy raqamli yordamchi yo'q edi: qaysi stansiya ochiq, qaysi liniyada uzilish bor, xarita qayerda — bu ma'lumotlar tarqoq va eskirgan holda edi. Inlab startup'i buni hal qiladigan mobil ilova qurishga kirishdi. Backend, deploy, CI/CD va push-bildirishnomalar to'liq mening zimmamda edi — mobil jamoa tayyor API kutardi.
Yechim#
Uch oyda (2025 sentabr–noyabr) MVP'dan Play Market relizigacha yetkazilgan Django backend: stansiya va liniyalarning geo-ma'lumotlari, uch tildagi kontent, jonli ogohlantirishlar va shaxsiy kabinet — hammasi bitta API ortida.
Arxitektura#
Backend to'rtta modulga bo'lingan (har biri alohida Django app):
- metro — liniyalar va stansiyalar: koordinatalar PostGIS
PointFieldda, geo-so'rovlar uchun GiST indekslar; har stansiyaning ochiq/qisman/yopiq holati; - alerts — xizmat ogohlantirishlari: Django Channels (WebSocket) orqali ilovaga jonli yetkaziladi;
- notifications — Firebase FCM push: qurilmalar ro'yxati (Android/iOS), mehmon-foydalanuvchilarni ham qamraydi — push olish uchun ro'yxatdan o'tish shart emas;
- accounts — JWT + Google Sign-In, profil va sevimli stansiyalar.
Infratuzilma: Docker image GitHub Actions'da quriladi, GHCR registriga
yuklanadi va VPS'ga avtomatik deploy bo'ladi — git push dan production'gacha
qo'l tegmaydi.
Qiyin qarorlar#
Real-time'ni ikki kanalga bo'lish. Ogohlantirish ilova ochiq turganda WebSocket orqali bir zumda kelishi kerak, yopiq turganda esa push bo'lib borishi kerak. Yechim: ogohlantirish bir marta yoziladi, signal ikkala kanalga — Channels guruhiga ham, FCM navbatiga ham — birdan tarqaydi. Bitta manba, ikki yetkazish yo'li: nosinxronlik muammosi sinfan yo'qoladi.
Geo-ma'lumotlar va ko'p tillilik. Oddiy kenglik/uzunlik ustunlari o'rniga
PostGIS tanlandi — "eng yaqin stansiya" kabi so'rovlar bazada, indeks bilan
ishlaydi. Tarjimalar uchun alohida jadval o'rniga JSONField ({"uz": ..., "ru":
..., "en": ...}) — schema soddaligi uchun ongli trade-off: tillar soni qat'iy
va kontent hajmi cheklangani uchun bu yechim JOIN'larsiz tezroq ishlaydi.
Natija#
- Ilova Play Market'da jonli — 2026-yil avgust holatiga 100 000+ yuklab olish;
- Backend uch tilda kontent beradi, real-time va push barqaror ishlaydi;
- 3 oylik muddat ichida noldan production'gacha — CI/CD tufayli reliz jarayoni bir buyruqqa tushgan.
Kod — startup mulki (yopiq). Arxitektura va yechimlar haqida savollar bo'lsa — bog'laning.
Aloqador maqolalar
Darslik · 14.08 · ~2 daqiqa
Django sozlamalarini .env bilan boshqarish: to‘g‘ri yo‘l
settings.py ichida parol saqlash — klassik xato. django-environ bilan sozlamalarni muhitga chiqarish, settings'ni base/dev/prod'ga bo‘lish va bu nima uchun xavfsizlik masalasi ekani haqida.
Darslik · 14.08 · ~1 daqiqa
Video: Pythonda operatorlar — o‘zbek tilida
YouTube darsim: Python operatorlari — arifmetik, taqqoslash va mantiqiy operatorlar misollar bilan.
Maqola · 14.08 · ~2 daqiqa
Bu sayt qanday qurilgan: Django + HTMX, SPA'siz
Nega shaxsiy saytimni React'da emas, Django monolit + HTMX'da qurdim: qarorlar, trade-off'lar va solo-developer uchun arxitektura printsiplari.