BLM Agency
Студия full-stack / Москва
Сайты, веб-приложения и Telegram-боты — целиком, от базы данных до интерфейса.
Листайте — лента едет вбокЕго чувствуешь по тому, как всё работает — быстро, предсказуемо, без сюрпризов. Беру задачу целиком: данные, архитектуру, бэкенд и интерфейс.
Сначала — понятная модель и чистые границы слоёв. Потом — скорость и детали: состояния загрузки, ошибок, пустых экранов. Именно они решают, останется человек или уйдёт.
— сначала работает, потом красиво, потом быстро
Бот для продажи битов: каталог, оплата, автоматическая выдача файлов, админка и аналитика. Ниже — рабочий макет диалога.
# хендлер каталога битов@router.message(Command("beats"))async def catalog(msg: Message): beats = await db.get_beats(limit=5) kb = build_catalog_kb(beats) await msg.answer("Свежие биты:", reply_markup=kb)# покупка → инвойс Telegram Payments@router.callback_query(F.data.startswith("buy:"))async def buy(cb): await send_invoice(cb)
Мини-приложение: геймифицированный to-do. Задачи дают опыт, опыт двигает уровень и серию. Отметьте пару задач — прогресс живой.
// начисление опыта и уровеньfunction complete(task) { state.xp += task.points; if (state.xp >= state.need) { state.level++; state.need = Math.round(state.need * 1.4); } Telegram.WebApp.HapticFeedback .notificationOccurred("success"); render();}
Дашборд для админки: динамика выручки и таблица треков. Кликните по заголовку столбца — сортировка живая.
| Трек ↑ | Прослуш. ↑ | Доход ₽ ↑ |
|---|
# агрегат выручки по дням@app.get("/api/stats")async def stats(db = Depends(get_db)): rows = await db.execute( select(Sale.day, func.sum(Sale.amount)) .group_by(Sale.day) ) return [{"day": d, "rev": r} for d, r in rows]
Сначала — задача и данные, а не фреймворк. Проектирую модель и границы слоёв, чтобы потом ничего не переписывать.
Бэкенд и фронтенд как одна система. Короткие итерации, честные состояния, никакой магии, которую нельзя объяснить.
Скорость, детали, edge-кейсы. Передаю то, что переживёт нагрузку и правки — с документацией и без костылей.
Сайт, веб-приложение, бот или мини-приложение — напишите, с чего начать. Отвечаю по делу и без воды.