Sultan
Платформа для полевого персонала
2022 - 2023 · Кроссплатформенная мобильная и серверная архитектура
Платформа для полевого персонала итальянской строительной компании — нативные приложения для iOS и Android плюс устанавливаемое PWA на едином бэкенде Firebase, с отметкой времени по QR и геолокации, цифровой подписью документов, чатом и админ-бэк-офисом на Vue.
Один персонал, три нативных клиента и общее ядро Firebase
Sultan — это платформа для полевого персонала, созданная для итальянской строительной и промышленной компании, где люди, использующие программу, находятся на объектах, а не за столом. Моей задачей была архитектура, связывающая три клиентских приложения — нативное iOS, нативное Android и устанавливаемое PWA — с единым бэкендом Firebase и веб-админ-бэк-офисом.
Продукт существует потому, что повседневная реальность cantiere (стройплощадки) не вписывается в обычный офисный инструмент. Работники перемещаются между объектами, связь ненадёжна, а компании по-прежнему нужны точные записи отметок, подписанные документы и надёжный канал, чтобы достучаться до каждого. Sultan превращает это в единую операционную систему: каждый работник носит с собой приложение, каждый объект — это место, где можно отметиться, а бэк-офис видит всё это в реальном времени.
Вместо того чтобы поставлять единый обёрнутый webview, проект запускает три настоящих клиента на общем контракте. Приложение iOS написано на SwiftUI со структурой MVVM — отдельные view-модели для дашборда, объектов, отметки времени, календаря, расходов, документов, чата, аутентификации и определения местоположения. Приложение Android — нативный Kotlin с той же структурой MVVM, внедрением зависимостей Hilt и репозиториями Firebase. Третий клиент — PWA на Nuxt 3, созданное с помощью Nuxt UI, Pug и @vite-pwa/nuxt, устанавливаемое на главный экран и работающее с офлайн-режимом через Dexie и IndexedDB. Все три обращаются к одному и тому же проекту Firebase, поэтому отметка времени с iPhone, телефона Android или веб-приложения попадает в одно и то же место.
Общее ядро — Firebase: Firestore для данных, Firebase Auth для идентификации и ролей, Cloud Functions для доверенной серверной логики, Storage для документов и Cloud Messaging для push-уведомлений. TypeScript-пакет @sultan/shared содержит доменные модели — пользователей, объекты, отметки времени, расходы, документы, подписи, объявления, чат-группы, сообщения, события, инструменты, отчёты о работе и уведомления — так что одни и те же структуры соблюдаются приложениями, функциями и админ-панелью. Триггеры Firestore поддерживают всё в синхронизации: записи расходятся по индексам Algolia для поиска и по push-уведомлениям для сообщений чата, событий календаря, изменений объектов и обновлений отметок времени.
Самая чувствительная с точки зрения безопасности часть — отметка времени. Работник не просто нажимает кнопку; он сканирует QR-код, физически присутствующий на объекте. Эти коды создаются вызываемой Cloud Function, зарезервированной для администраторов, которая подписывает полезную нагрузку объекта как JWT ES256 и отрисовывает её в QR-изображение. Сканирование кода открывает приложение с проверяемым токеном, поэтому timbratura (отметка) подтверждает и объект, и то, что код подлинный, а не сфабрикованный. Поток отметки также фиксирует геолокацию и поддерживает режим бригадира — руководитель объекта может отметиться за себя или за других присутствующих работников — плюс записи о командировках и расходах, привязанные к той же записи.
Помимо отметки времени, Sultan охватывает остальную часть трудовых отношений. Работники получают персональные документы — расчётные листки и LUL, документы по СИЗ и социальному обеспечению — и подписывают их в цифровом виде через специальную функцию sign-document, так что у компании есть отслеживаемая запись о вручении и ознакомлении. Доска объявлений рассылает общекорпоративные сообщения, групповой чат с модерацией администраторами поддерживает доступность команд, а календарь объединяет запланированные события с собственной историей отметок работника. Инструменты и оборудование отслеживаются по объектам, и всё важное приходит в виде push-уведомления.
Сторона компании — это отдельный админ-бэк-офис на Vue. Созданный с помощью Vuex, vuexfire, Google Maps, календаря и Algolia, он даёт администраторам живую карту объектов и отметок, справочники сотрудников и отчёты по каждому сотруднику, управление документами и объявлениями, отслеживание инструментов и экспорт рабочих часов в Excel, формируемый на стороне сервера с помощью хелперов pdf-lib и xlsx в слое функций. Доступ с учётом ролей — работник, бригадир, администратор и супер-администратор — работает согласованно от Cloud Functions до того, что разрешено делать каждому клиенту.
Результат — платформа, выстроенная вокруг поля, а не офиса: нативные приложения, которые правильно ощущаются на каждом телефоне, устанавливаемый веб-вариант на случай отката, бэк-офис, отражающий объекты в реальном времени, и ядро Firebase, которое сохраняет надёжность авторизации, подписи и синхронизации даже тогда, когда работа происходит вдали от хорошего соединения.
Показанные скриншоты анонимизированы: реальные имена, адреса и ссылки на документы заменены вымышленными данными.
Галерея







