ПроєктиПроєкт для клієнта

Set Hub Team — застосунок для команди студії

Нативний застосунок для iPhone і Android: команда бачить свій день, підтверджує броні й завдання просто зі сповіщення і записує зустрічі з клієнтами. Face ID на вході, дані клієнтів — лише в пам’яті, а віджет і екран блокування показують зйомку без імен гостей і сум.

  • Expo SDK 58 · React Native 0.88
  • Swift · Kotlin
  • APNs · FCM напряму
  • Live Activities · WidgetKit
  • Face ID · Keychain
Set Hub Team

У цифрах

29маршрутів API лише для застосунку команди — роль обрізає дані на сервері
30 споза застосунком — і він знову закритий Face ID чи відбитком
0посередників для push: Apple APNs із JWT ES256 і Google FCM v1 напряму із сервера
2 годзапису зустрічі на телефоні: частини по 20 хвилин, розшифровка з позначками часу

Завдання

Команда студії цілий день на ногах: зустрічає групи, переставляє світло, приймає оплату, відповідає гостям. Відкривати CRM у браузері телефона, щоб дізнатися, хто наступний на даху, незручно, а сповіщення в месенджерах тонуть серед особистих. Водночас у CRM — телефони, електронні адреси й суми гостей, і такі дані не мають залишатися на екрані, у знімках екрана, у перемикачі застосунків і в резервних копіях.

Що всередині

День студії на одному екрані

Екран «Today» показує зйомку, яка йде зараз, зі зворотним відліком, наступну бронь, лічильники запитів, повідомлень, чернеток і завдань, а також гроші місяця — лише тим, кому роль дозволяє бачити гроші. Співробітникові приходить день без сум, оплати, джерела й контактів гостя: роль обрізає дані на сервері, а не ховає їх в інтерфейсі.

Захист рівня банківського застосунку

Вхід — поштою й паролем, далі — ключ пристрою у зв’язці ключів лише цього телефона, без синхронізації з iCloud. Face ID чи відбиток під час запуску й після 30 секунд поза застосунком, шторка в перемикачі застосунків, знімки й запис екрана в релізній збірці заборонені, дані клієнтів — лише в пам’яті, резервне копіювання Android вимкнено, мережа — лише https. Тимчасовий пароль усередину не пускає, а зміна пароля чи ролі в CRM гасить ключ на всіх телефонах.

Push напряму в Apple і Google — з кнопками

Сервер сам підписує запити до APNs (HTTP/2, JWT ES256) і до FCM v1 службовим обліковим записом Google — без Expo й посередників. Один рядок — одне сповіщення, кілька — зведення. У сповіщенні є дії: закрити завдання, взяти завдання чи запит собі — сервер виконує їх, навіть коли застосунок закритий, повтор безпечний, а якщо запит уже взяв колега, застосунок так і скаже.

Live Activity «Іде зйомка»

На екрані блокування й у Dynamic Island — який сет знімають, до котрої, зворотний відлік і смуга прогресу, а ще скільки зйомок сьогодні попереду. На Android — закріплене сповіщення, яке саме зникає, коли бронь закінчується. Імен гостей і сум там немає: екран блокування бачать усі довкола.

Віджети й «Capture» одним дотиком

Віджети «Today» для початкового екрана й екрана блокування на iPhone і для головного екрана на Android: що йде зараз, що пізніше, скільки завдань. Розклад віджета система перераховує в хвилини початку й кінця броней і опівночі за годинником студії, тому він точний навіть без мережі. «Capture» відкривається кнопкою в Пункті керування, кнопкою дії, через Siri і Spotlight на iPhone та плиткою швидких налаштувань на Android.

«Capture» у кишені: підтвердити, змінити, відхилити

Той самий розбір, що й у CRM: написав «Jane booked Rooftop Nov 20 2–6pm, $450 Peerspace» — отримав чернетку броні, де сумнівні поля підсвічено. Черга підтвердження з нативними меню й вибором дати, «підтвердити всі» однією кнопкою; накладка — відмова з поясненням, хто й де вже стоїть. Нова бронь, завдання, запит чи витрата створюються тими самими функціями сервера, що й у CRM, тому правила й журнал спільні.

Запис зустрічі з клієнтом

Як диктофон: хвиля, таймер, пауза, а телефон можна заблокувати — запис іде у фоні. Звук пишеться частинами по 20 хвилин, сервер склеює їх в один файл без перекодування, розбираючи контейнер MP4 вручну, і розшифровує з позначками часу по частинах. Через пару хвилин у «Capture» — чернетка з клієнтом, датами й бюджетом, а звук можна слухати з перемотуванням по фразах. Звук зберігається 7 днів, розшифровка — назавжди.

Шторки, анімації та звіти про помилки

Оплата, перенесення, статус і контрольні точки завдання відкриваються шторками поверх списку — нативними formSheet на iOS і Android. Списки з’являються драбинкою, позначки «готово» спрацьовують одразу, поки запит іде на сервер, і все це враховує системне налаштування «зменшення руху». Помилки JavaScript із телефонів надходять на сервер знеособленими — пошту й довгі номери замазано, — а однакові групуються разом.

Екрани

Вхід — лише за Face ID; через 30 секунд поза екраном застосунок закривається сам
Вхід — лише за Face ID; через 30 секунд поза екраном застосунок закривається сам
Віджет на початковому екрані: що знімають зараз і що пізніше — без імен гостей
Віджет на початковому екрані: що знімають зараз і що пізніше — без імен гостей
Live Activity на екрані блокування: сет, час і зворотний відлік
Live Activity на екрані блокування: сет, час і зворотний відлік
Статус оплати — шторкою поверх броні, без переходу
Статус оплати — шторкою поверх броні, без переходу
Завдання команди: прострочені — червоним, пріоритет, наступна контрольна точка
Завдання команди: прострочені — червоним, пріоритет, наступна контрольна точка
Завдання з контрольними точками: хто й коли позначив виконане
Завдання з контрольними точками: хто й коли позначив виконане
«Capture» на телефоні: правила не впевнені в імені клієнта — поле підсвічено
«Capture» на телефоні: правила не впевнені в імені клієнта — поле підсвічено
Гроші місяця — лише власникові й головному менеджерові
Гроші місяця — лише власникові й головному менеджерові
Запис зустрічі до двох годин: розшифровка й чернетка підуть у «Capture»
Запис зустрічі до двох годин: розшифровка й чернетка підуть у «Capture»

Технології

Expo SDK 58, React Native 0.88 і React 19 з React Compiler; навігація — Expo Router з нативною панеллю вкладок: на iOS 26 — «рідке скло», на Android — Material 3. Дані — TanStack Query без кешу на диску: закрили застосунок — даних клієнтів на телефоні немає. Спільне ядро із застосунком для гостей — формати часу за годинником студії, API-клієнт і типи відповідей — лежить в одному монорепозиторії.

Нативну частину написано вручну: Live Activity, віджети й кнопка Пункту керування — на Swift у розширенні, плитка швидких налаштувань і приймач натискання на віджет — на Kotlin, а для кожного — свій плагін конфігурації Expo. Збірка — локальна, без хмарних збирачів, через Xcode і Gradle. Застосунок зібрано й перевірено на симуляторі iPhone та емуляторі Android; роздача команді через TestFlight — після реєстрації акаунта розробника студії.

Команді потрібен інструмент у кишені?

Розкажіть, що ваші люди роблять на ногах і що їм доводиться відкривати по десять разів на день. Зберемо застосунок для iPhone і Android з однієї кодової бази — з вашими правами доступу й вашим захистом даних.

WhatsApp