Перейти до вмісту

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, яке зберігає надійність авторизації, підпису та синхронізації навіть тоді, коли робота відбувається далеко від доброго з’єднання.

Показані скріншоти анонімізовано: справжні імена, адреси та посилання на документи замінено вигаданими даними.

Галерея