Два застосунки на React Native поверх API Zapys24: один для клієнта, який записується, другий для бізнесу, який веде день. Обидва опубліковані в App Store і Google Play. Ось рішення, які їх сформували.
Два застосунки, а не один із перемикачем
У клієнта й власниці салону спільного майже немає: один дивиться, записується й отримує нагадування; друга цілий день працює з календарем, персоналом, клієнтами й грошима. Зведення обох під прапорець ролі дає застосунок, у якому половина навігації завжди зайва.
Тому вони виходять окремо, але проти того самого API. Клієнтський спирається на карту й пошук, бізнесовий — робочий інструмент із календарем у центрі. І тоді кожна сторінка в сторі описує одну річ, чого й чекають на рев’ю.
Знайти салон, а не список салонів
У клієнтському застосунку карта стоїть першою: геолокація пристрою, рендер на Mapbox і результати, привʼязані до того, що справді поруч, а не до списку по всій країні. Запис відкривається шторкою поверх карти, тож вибір часу не коштує розуміння, де це місце.
Пуші, які виправдовують дозвіл
Сповіщення йдуть через Firebase Messaging на обох платформах і категоризуються на сервері, тож нагадування про завтрашній візит і акція — це не одна підписка.
Дозвіл питаємо тоді, коли він має сенс — після того, як запис уже є, — а не на першому запуску. Застосунок, який спалює запит на старті, втрачає саме той канал, який йому потрібен.
Швидко на поганому звʼязку
Серверний стан кешує React Query, а те, що має пережити холодний старт, лягає в MMKV — достатньо швидке, щоб читати синхронно, поки малюється перший екран. Токени живуть у захищеному сховищі платформи, ніколи у звичайному.
Завдяки цьому застосунок на мобільному інтернеті одразу показує вчорашній розклад і за мить його уточнює, замість того щоб крутити спінер.
Чого вимагали сторі
Підписки, куплені в застосунку, перевіряються на сервері через бібліотеку App Store Server — доступ дає чек, а не пристрій. Видалення акаунта доступне і всередині застосунку, і у вебі, бо обидва сторі цього вимагають.
Збірки й публікації йдуть через Expo, що тримає нативний проєкт поза репозиторієм, а реліз — в одній команді.