Платформа умного города для муниципальных документов и планов
Moydom (moydom.ru) создаёт сервисы для умного города. Мы сделали для компании муниципальную платформу для работы с документами, планами зданий и процессами городских служб. Города производят огромный бумажный след, а вместе с ним — визуальные материалы: поэтажные планы, планиметрию и карты с пометками. Moydom собирает всё это в одну мультитенантную систему, и работа больше не зависит от разрозненных файлов и десктопных программ.
Мы вели проект с командой из четырёх full-stack-разработчиков: итеративная разработка заняла 9–12 месяцев, а дорожную карту мы по ходу согласовывали с клиентом.
Ключевые возможности
- Обработка документов: загруженные документы в фоне проходят OCR и генерацию PDF, и сканы превращаются в текст, с которым платформа может работать.
- Редактор планов на Canvas: сотрудники рисуют, измеряют и размечают поэтажные планы и планиметрию прямо в браузере, без десктопных программ.
- Рендеринг карт: карты и планы отрисовываются в отдельном модуле, независимо от работы с документами.
- Независимый модуль биллинга: у биллинга свои границы, и он не расползается по остальной платформе.
- Мультитенантная архитектура: каждая муниципальная организация работает в своём тенанте, со строгим разделением данных между организациями.
- Ролевая модель доступа: права построены на муниципальных ролях — делопроизводителях, инспекторах и администраторах.
- Асинхронные очереди задач: долгие задачи выполняют воркеры RabbitMQ, поэтому интерфейс не тормозит, пока они идут.
Архитектура и технологический стек
Модульный бэкенд на Laravel
Бэкенд построен на Laravel 9 с MySQL и Redis. Биллинг, обработка документов и рендеринг карт — отдельные модули с чёткими границами. Такое разделение позволяет каждому модулю развиваться и масштабироваться самостоятельно. А ещё оно позволило небольшой команде работать параллельно, не правя постоянно один и тот же код.
Фронтенд на Vue 3 и Inertia.js
Интерфейс сделан на Vue.js 3 с Inertia.js и Tailwind CSS. С Inertia маршруты и контроллеры Laravel рендерят страницы Vue напрямую. Большое приложение с множеством админских экранов остаётся в одной кодовой базе без отдельного слоя API для каждого экрана.
Редактор планов на Canvas
Планы и планиметрия редактируются на HTML5 Canvas. Рисование и аннотации выполняются на стороне клиента поверх плана, поэтому сотрудники могут размечать чертёж и делать замеры, не выходя из браузера и ничего не устанавливая.
Очереди воркеров RabbitMQ для OCR и генерации PDF
OCR отсканированных документов и генерация PDF занимают гораздо больше времени, чем обычный веб-запрос. Вместо того чтобы заставлять пользователей ждать, приложение ставит такие задачи в очереди RabbitMQ и сразу отвечает. Процессы-воркеры забирают задачи и обрабатывают их в фоне. Когда тяжёлой работы становится больше, можно добавить воркеров, и страницы, которыми пользуются люди, не начнут тормозить.
Мультитенантность и контроль доступа для муниципальных организаций
Когда одной платформой пользуются несколько муниципальных организаций, она должна гарантировать, что ни одна из них не увидит документы другой. Разделение тенантов соблюдается во всей платформе. Внутри каждого тенанта ролевая модель доступа повторяет реальные муниципальные роли, поэтому делопроизводители, инспекторы и администраторы получают ровно те права, которые нужны для их работы. Та же архитектура даёт понятный путь для подключения новых муниципалитетов.
Наша роль
Мы руководили разработкой в роли тимлида: проектировали архитектуру модульного бэкенда, сделали редактор планов, инфраструктуру очередей и мультитенантную модель доступа и на протяжении всей итеративной разработки согласовывали дорожную карту с клиентом.
Смежные работы
WClinic — ещё один проект, где мы были тимлидом и много занимались интеграциями: запись в сеть клиник поверх клинической CRM. О консалтинге для госсектора читайте в нашем техническом исследовании для Министерства здравоохранения Тверской области. Такие платформы — часть нашей услуги разработки веб-приложений.



