Fullstack-разработчик · Москва

Иван Титов

Python + React, от схемы данных до продакшна

Делаю продукты целиком — от схемы базы данных до nginx и автодеплоя. Сейчас в продакшне живёт Zapisly — SaaS-платформа онлайн-записи, которую я написал и поддерживаю один.

18 лет · РАНХиГС, прикладная информатика · удалённо или гибрид · полная или частичная занятость · английский B1+

листай
0коммитов в Zapisly за 3 месяца
0строк Python в продакшне
0тестовых файлов, тесты в CI
0миграции базы данных

О себе

Пишу backend на Python и умею довести проект до работающего в интернете продукта: спроектировать данные, подключить платежи, поднять сервер, настроить CI/CD и разобраться, почему в четыре утра отвалился вебхук.

Большой объём в одиночку получается за счёт выстроенного AI-ассистированного процесса: спецификация → план → отдельная ветка → реализация → тесты в CI → автодеплой. ИИ забирает генерацию и рутинный рефакторинг; архитектурные решения, отладку продакшна и разбор инцидентов оставляю за собой. Под каждый проект держу файл правил для ассистента и ставлю технические предохранители — например, git-хук, который не даёт случайно запушить в main.

Есть опыт коммерческой работы на заказ — сайт для сервиса 3D-печати. В команде разработки пока не работал, и иду именно за этим: за код-ревью от сильных инженеров и практикой в большой чужой кодовой базе.

Проекты

Zapisly

в продакшне приватный репозиторий
SaaS-платформа онлайн-записи · автор и единственный разработчик · май 2026 — сейчас

Мульти-тенантная платформа для записи клиентов на услуги: Telegram-бот, REST API и Telegram Mini App. Развёрнута на VPS, работает в продакшне с реальными пользователями.

  • Backend: FastAPI и aiogram 3 — 39 доменных моделей, 40 сервисов бизнес-логики, около 45 000 строк Python
  • Данные: PostgreSQL через SQLAlchemy 2 async и asyncpg, 84 миграции Alembic, Redis и Celery для фоновых задач и отложенных уведомлений
  • Мульти-тенантность: изолированные данные бизнесов на одной платформе плюс режим собственного бота для клиента на premium-тарифе
  • Платежи: YooKassa и интеграция с ФНС «Мой налог» — автоматические чеки для самозанятых
  • Интеграции: двусторонняя синхронизация с Google Calendar по OAuth 2.0, генерация iCalendar-фидов, QR-коды для офлайн-точек
  • Mini App: React 18 + Vite + Tailwind, 91 компонент — запись клиента и кабинет мастера внутри Telegram
  • Предметная логика: расчёт свободных слотов с учётом смен и отпусков, лист ожидания, лояльность и штамп-карты, промокоды, пакеты визитов, реферальные программы, зарплаты мастеров, финансовый учёт, админ-панель с аудит-логом
  • Качество и деплой: 112 тестовых файлов на pytest, CI поднимает реальные PostgreSQL и Redis на каждый push; деплой — push в main → тесты → доставка на сервер → миграции автоматом. Крон-бэкапы БД с ротацией, Sentry

Задача, которой я горжусь: DPI-блокировки Telegram в России

Бот терял большинство запросов к Telegram. Разобрался и починил: webhook переехал на www-субдомен за Cloudflare-прокси, потому что Telegram надолго кеширует IP апекс-хоста и не подхватывал смену адреса; внутри контейнера закрепил IP api.telegram.org, так как обычный DNS отдавал IPv6 без маршрута; на исходящие запросы добавил ретраи сетевых сбоёв. Бот стал работать стабильно.

Python 3.12FastAPIaiogram 3 SQLAlchemy 2 asyncPostgreSQLRedis CeleryAlembicReact ViteTailwindDocker nginxGitHub ActionsCloudflare Sentrypytest

3D Marketplace

приватный репозиторий
Маркетплейс моделей для 3D-печати · fullstack · апрель 2026

Площадка для публикации и продажи STL-моделей с просмотром прямо в браузере.

  • Backend на FastAPI и SQLAlchemy async, авторизация на JWT, Celery для обработки загруженных файлов
  • Просмотр STL-моделей в браузере на Three.js и React Three Fiber, загрузка drag-n-drop
  • Next.js 14 с TanStack Query и Zustand, двуязычный интерфейс RU/EN на i18next
  • End-to-end тесты на Playwright, включая отдельный аудит 3D-вьюера и превью моделей
  • Юридическая база площадки: пользовательское соглашение, политика конфиденциальности, DMCA-политика и форма жалобы на двух языках
  • Развёртывание: Docker Compose, nginx, скрипт деплоя со сборкой на локальной машине
FastAPIPostgreSQLCelery JWTNext.js 14TypeScript Three.jsPlaywrightDocker

Scan & Print

в продакшне открытый код
Корпоративный сайт сервиса 3D-печати · frontend · коммерческий заказ · апрель — май 2026

Сайт для действующей компании 3D-печати и сканирования (Пенза, на рынке с 2018 года): каталог услуг, портфолио работ, блог, приём заявок. Работа по заказу клиента. 95 коммитов, около 5 000 строк TypeScript.

  • Next.js 16 и React 19 на TypeScript, стилизация на Tailwind CSS 4
  • Динамические маршруты для услуг, кейсов портфолио и статей блога
  • 3D-элементы на Three.js и React Three Fiber, анимации на GSAP и Motion
  • Форма заявки: React Hook Form с валидацией через Zod, отправка письма через nodemailer
  • SEO: программная генерация sitemap.xml и robots.txt, микроразметка FAQ
Next.js 16React 19TypeScript Tailwind 4Three.jsGSAPZod

Music Player

открытый код
Десктопный аудиоплеер · Python и PySide6 · июнь 2026

Плеер на 5 500 строк с честной архитектурой MVVM — модели, сервисы, viewmodel'ы и представления разделены, а не свалены в один файл.

  • Локальная библиотека: сканирование папок, чтение метаданных через mutagen, обложки альбомов
  • Интеграция с Яндекс.Музыкой по OAuth (device code flow)
  • Интернет-радио с каталогом станций, плейлисты, очередь воспроизведения
  • Поиск по мере набора, режимы повтора и перемешивания, светлая и тёмная темы
  • GitHub Actions собирает бандл PyInstaller и установщик для Windows через Inno Setup
PythonPySide6mutagen PyInstallerInno SetupGitHub Actions

Парсеры 2ГИС

открытый код
Сбор данных · Python · февраль — март 2026

Парсеры карточек организаций из 2ГИС по городу и области: контакты, адреса, категории — в структурированную выгрузку для дальнейшей работы.

  • Браузерная автоматизация с обходом ленивой подгрузки списка и пагинации
  • Headless-режим для запуска на сервере без графической оболочки
  • Отдельные сценарии для города и для области, устойчивые селекторы ссылок
PythonSeleniumheadless

Бот рассылки коммерческих предложений

открытый код
Автоматизация продаж · Python · февраль 2026

Холодная e-mail-рассылка по базе организаций, собранной парсером 2ГИС: очередь из Excel, отправка по расписанию, разбор ответов SMTP и отчёты в Telegram.

  • Защита от блокировки: одно письмо за проход с паузой 4–6 минут, экспоненциальный бэкофф на спам-отказах и кулдаун после трёх подряд
  • Статусы вместо памяти: результат каждой отправки пишется в базу, падение процесса не теряет прогресс и не создаёт дублей
  • Разбор ошибок SMTP: несуществующий адрес закрывается навсегда, таймаут возвращается в очередь отдельным скриптом
  • Целостность данных: flock на файле базы и атомарная запись — параллельный отчёт не прочитает половину файла
Pythonsmtplibpandas Telegram Bot APIflock

Навыки

Языки

Python, TypeScript, JavaScript, SQL, Java (базово)

Backend

FastAPI, aiogram 3, SQLAlchemy 2 (async), Alembic, Celery, Pydantic

Базы данных

PostgreSQL (asyncpg), Redis, SQLite

Frontend

React 18/19, Next.js 14–16, Vite, Tailwind CSS, Three.js / React Three Fiber, React Hook Form + Zod, TanStack Query, Zustand

Инфраструктура

Docker, Docker Compose, nginx, GitHub Actions, Linux VPS, Cloudflare, Let's Encrypt, Sentry

Тестирование

pytest, pytest-asyncio, Playwright

Интеграции

Telegram Bot API и WebApp, YooKassa, ФНС «Мой налог», Google Calendar API + OAuth 2.0, iCalendar

Инструменты

Git, Claude Code, Cursor, GitHub Copilot

Ещё из практики

Fabric-мод на Java 17

Анализ рыночных данных игрового аукциона: накопление статистики цен, торговая логика, режим «сухого прогона» для безопасной обкатки. Gradle, около 3 000 строк.

Парсеры организаций из 2GIS

Сбор данных по региону на Python, дедупликация записей, выгрузка результатов в Excel.