ToScan: сервис технического SEO-аудита сайтов
Краулер с JavaScript-рендерингом, ежедневное сканирование сайтов по расписанию и уведомления о критичных изменениях метрик

Берем Flask-проекты под ключ: доработка действующего сервиса, HTTP-слой над расчетным или ML-ядром на Python, сопровождение чужого кода. С Python работаем с 2010-х. На оценке скажем, если новому публичному API лучше подойдет FastAPI или Node.js.
Flask — легковесный микрофреймворк на Python с открытым исходным кодом. Ядро не содержит админку, ORM, авторизацию — все эти вещи подключаются расширениями при необходимости. Структуру проект не задает: сервис собирается из модулей (blueprints).
Долгое время его брали как легкий HTTP-слой над Python, в том числе для API. Для нового публичного API сегодня чаще выбирают более современные альтернативы, но Flask по-прежнему используется в действующих сервисах.
Доработка действующего сервиса, в том числе после другого подрядчика
HTTP-слой над расчетным или ML-ядром на Python, без монолита Django
Только нужные расширения: не подключаем админку и ORM, если они не требуются
Реализуем бизнес-логику в слое сервисов и blueprints, а не в обработчиках запросов
Передаем исходный код, тесты и карта модулей
Больше десяти лет работаем с Python: подскажем, если Flask не лучший вариант
Поможем с выбором альтернативы, если Flask не подходит
Обновим устаревшую версию фреймворка
Принципы, по которым мы ведем проекты
С вами говорят те, кто делает проект. Спросите про границы модулей маршрутов, выбор SQLAlchemy или стоимость обновления расширений — разберем на сроках и рисках, а не «так принято в микрофреймворках».
Договоренности, задачи и архитектурные решения фиксируем в системе управления задачами. Меньше споров «кто что сказал», проще держать обязательства.
Каждый проект живет в Git. Готовый функционал сразу попадает на тестовую среду — проверяете сценарии до боевого запуска. Развертывание — рутина: хоть правка в одну строку, хоть релиз на сотню задач.
Перед оценкой доработки смотрим код, список расширений и lock-файл зависимостей. На проекте трех лет и старше оценка растет нелинейно: сначала видно, какую структуру собрали до нас.
Код пишем так, чтобы с ним было комфортно работать самим — его подхватит и любая другая команда, в том числе ваша. Слой сервисов и границы модулей задаем с первых спринтов, а не «потом наведем порядок». Переписывать на другой стек не предлагаем, пока вы сами не приняли это решение.
Исходники, права, окружения — ваши. Проект можно передать штату или другому подрядчику: тесты, инструкция по развертыванию и карта модулей входят в поставку.
Не обещаем, что микрофреймворк сам закроет админку, доступ и безопасность. Отвечаем за то, чтобы сервис оставался управляемым, а каждая доработка была предсказуема по срокам и бюджету
Для нового публичного API Flask не навязываем: FastAPI и Node.js на горизонте трех-пяти лет часто дешевле. На действующем сервисе считаем отдачу доработки, а не переписывания.
Маленький сервис стартует быстрее Django, если не собирать админку и ORM с нуля. Сборка «батареек» расширениями съедает недели — закладываем в оценку.
Каждое расширение — своя команда, цикл релизов, риск брошенного пакета. Учитываем обновления, поиск специалистов и онбординг на чужую структуру.
Права доступа и CSRF (подделка межсайтовых запросов) не из коробки. Критичные сценарии покрываем тестами; дыры в расширениях ловим до релиза, а не по инциденту.
Lock-файл зависимостей и план обновления Flask с расширениями — регулярная статья, не сюрприз после поломки. Форк пакета — крайний случай.
Все, что не приближает релиз, — потери. Flask-Admin, очереди и кастомный слой «на всякий случай» убираем из первого релиза.
Flask дает свободу собирать стек. С расширениями, чужой структурой и возрастом кода нужно работать, и мы не скрываем, чем это бьет по срокам и бюджету.
ORM, админка, формы, авторизация приходят из разных пакетов. У каждого свой релизный цикл, что приводит к поломкам или необходимости самостоятельно поддерживать брошенные пакеты.
Фиксируем зависимости, проверяем сборку в CI
В дорожную карту закладываем обновление расширений
Нет канона вроде приложений Django. Команды собирают модули по-своему. Онбординг новой команды дороже, чем на фреймворке со строгой структурой.
До оценки смотрим модули маршрутов и слой сервисов
Документируем карту модулей, пока она еще умещается в голове
Для CSRF, сессий и ролей подключают малоизвестные расширения с угрозой для безопасности
Согласуем реализацию и расширения заранее
Критичные сценарии покрываем тестами до релиза
Что такое Flask: микрофреймворк, ядро и расширения
Когда уместен тонкий HTTP-слой над Python-ядром
Flask и Django: админка из коробки или сборка самим
Когда для нового API лучше FastAPI или Node.js
Цена расширений, брошенных пакетов и передачи проекта
Применяемые технологии Flask-разработки
Рассказываем о нашем опыте с технологией в блоге

Python для бизнеса: анализ данных, компьютерное зрение, машинное обучение и веб-разработка на Django и Flask. Разбираем ...

Сравниваем Django и Flask: встроенные возможности, базы данных, авторизацию, админ-панель, безопасность и гибкость. Разб...

Как мы работаем с молодыми организациями, которым важно быстро проверять гипотезы и быть максимально гибкими.
Разбираемся, что и зачем строим. Созвоны, бриф, разбор существующего репозитория, списка расширений и текущих версий Python/Flask. Фиксируем границы работ и риски обновления.
Помогаем сформулировать ТЗ, если его еще нет. Пользовательские сценарии, интеграции, границы модулей маршрутов, схема базы, план развертывания.
Рабочие ветки, проверка кода, pytest. Промежуточные демо на тестовой среде. Прогресс видно в работающем функционале.
Весь заявленный функционал реализован. Список задач закрыт. Дальше — доводка до боевой готовности.
Проверяем, выдержит ли система реальную нагрузку. Безопасность, очереди, отказоустойчивость, мониторинг.
Запуск в боевой среде. Релиз — первый день нормальной жизни продукта.
Продукт живет и меняется. Чиним, обновляем, наращиваем. Берем ту часть, которую держать в штате вам невыгодно.
Переносим данные, гасим зависимости, ничего не теряем. Финал — тоже инженерная задача.
Разные задачи — разные договоренности. Не подгоняем вас под один контракт. Выбираем формат под зрелость продукта и ваш аппетит к риску.
Для условий высокой неопределенности. Вы проверяете гипотезы, мы пишем код под них — без жестких оценок и сроков. Платите за реальные часы по итогам периода.
Оплата: фактические часы (T&M)
Кому: стартапам в поиске рабочей модели
Вы знаете задачу и считаете отдачу. Мы составляем ТЗ, фиксируем бюджет и сроки — и держим слово. Никаких сюрпризов в счете.
Оплата: фиксированная по смете (Fixed Price)
Кому: устоявшемуся бизнесу для оптимизации затрат
Есть дорожная карта, но жизнь вносит правки. Рамочный договор: смета на релизы и оплата по факту за то, что вышло за рамки.
Оплата: Fixed Price + T&M
Кому: проектам с просчитанной экономикой при средней неопределенности
Бюджеты, с которыми мы можем работать
Ответим в течение 1 рабочего дня
Уточним задачу и предложим формат сотрудничества
Подготовим оценку сроков и бюджета
Подскажем, что приложить: бриф, схему данных, список интеграций, ссылку на репозиторий
Запустим разработку после согласования условий
Соседние технологии Python и форматы работы с Flask