Перейти к содержимому
КейсМобильное приложение для сети студий красоты

Android-приложение NailLounge для онлайн-записи в студии

Разработали отдельный Android-канал для NailLounge: booking-first приложение на Jetpack Compose, где клиент выбирает услугу, студию, мастера, дату и время, а запись создаётся через защищённый cache/proxy-слой с источником mobile_app.

Booking-first Android UX: услуга → студия → мастер → дата/время → подтверждение
Cache API для салонов, услуг, мастеров, доступных дней, слотов, warmup и POST /mobile/book
Compose + Hilt + Retrofit + AppMetrica, проверка крупного шрифта и high contrast на Pixel

Итог: Собран проверяемый MVP-контур Android-приложения: фирменный Material 3 UI, навигация записи, профили студий и мастеров, интеграция с Nail-Lounge-Cache, AppMetrica-события и roadmap до production-релиза без раскрытия YCLIENTS-токенов.

7

ключевых экранов booking-flow в MVP

3

канала NailLounge связываются через одну booking-архитектуру

1.8×

font scale, который учитывается в Android UX-проверках

API key

мобильный клиент не хранит YCLIENTS partner token

01 / Brief

С чем пришёл клиент

Нужно было собрать сайт сети студий как продукт: с единым бренд-ощущением, быстрым выбором услуги и записью без внешнего визуального разрыва.
01

После запуска сайта и Telegram Mini App у NailLounge появился следующий продуктовый слой: нативный Android-канал, где постоянный клиент может записаться без браузера, сохранить любимую студию и быстрее вернуться к повторной записи.

02

Приложение нельзя было делать отдельной витриной с собственной логикой: источником правды остаются YCLIENTS и Nail-Lounge-Cache, а дизайн должен продолжать брендовую систему студий — espresso, cream, ember, крупные CTA и спокойные motion-состояния.

03

Главный риск мобильного релиза — безопасность и нагрузка на расписание. Нативный клиент не должен хранить чувствительные iClient/YCLIENTS-токены, а запросы дат и слотов должны проходить через proxy/cache-слой с warmup, idempotency и диагностикой.

02 / Execution

Как мы это решали

Решения разложены как цепочка продуктовых слоёв: от входа в запись до аналитики, кэша и SEO-структуры. Каждый слой поддерживает основной сценарий, а не существует ради отдельной технологии.

1

MVP как единый booking-маршрут

В приложении собран маршрут Home → Services → Studios → Masters → DateTime → Confirm → Success, плюс экраны салонов, профиля мастера, визитов и профиля клиента. Выборы сохраняются в состоянии навигации, чтобы пользователь не терял контекст между шагами.

2

Cache API вместо прямого раскрытия токенов

Android вызывает Nail-Lounge-Cache через Retrofit и X-API-Key: salons, services, masters, nearest-slots, available-days-summary, slots, warmup-hint и mobile book. Чувствительные YCLIENTS/iClient данные остаются на серверной стороне.

3

Предзагрузка доступности до открытия календаря

При выборе услуги, студии или мастера приложение отправляет warmup-hint, затем грузит summary дней и prefetch ближайших слотов. Повторный тап по дате может отработать из свежего in-memory cache, а аналитика фиксирует источник network, prefetch или memory.

4

Any master и «Молчаливый мастер» как реальные сценарии

MVP поддерживает выбор конкретного мастера или любого доступного мастера, а услуга «Молчаливый мастер» вынесена в отдельный toggle. При создании записи этот контекст попадает в comment и source mobile_app.

5

Доступность до визуальной полировки

Приложение проектируется под Android-реальность: 44dp touch targets, читаемая плотность, high text contrast, font_scale 1.8, safe zones и сценарий без hover-зависимостей. На Pixel уже зафиксирована необходимость тестировать крупный системный шрифт.

6

Аналитика как часть продукта

AppMetrica встроена как отдельный AnalyticsTracker. События booking_dates_load_success, booking_slots_prefetch_success, booking_submit_success/error и ошибки загрузки позволяют видеть не только факт записи, но и место потери клиента.

03 / Design system

Мобильная версия Studio Ember

Android-приложение наследует дизайн-систему сайта, но переводит её на Material 3: тёмная espresso-сцена, кремовые панели, один яркий orange-action, крупные нижние CTA и понятные состояния загрузки/ошибки/успеха.

Registered token rail

Цвета показаны как роли дизайн-системы, а не как декоративная палитра.

no cyan focus
#FFFFFF

Background

--brand-color-background

Inverse text and host-required white background.

#1A0F06

Foreground

--brand-color-foreground

Primary ink, CTA text on ember, dense copy on cream.

#F97316

Accent

--brand-color-accent

Single dominant action, active focus, emotional emphasis.

#FBF5E8

Surface

--brand-color-surface

Warm editorial panels, fields and light sections.

#0F172A

Muted

--brand-color-muted

Dark stage, footer metadata, overlays behind imagery.

#DFDDDC

Border

--brand-color-border

Rules, card outlines, form borders.

#E2E8F0

Accent secondary

--brand-color-accent-secondary

Secondary text on dark stage, quiet links, dividers.

#C85D26

Measured copper

reference color

Measured evidence from reference surfaces, not a primary token.

`#C85D26` оставляем как measured reference evidence. Основной action и focus остаются на `#F97316`, чтобы система не распалась на два оранжевых акцента.

Component specimen

Запись в студию

Nail artist

Маникюр, укрепление, дизайн

12:3014:0017:45

State

Контекст сохранён

Prefetch
SWR
Reduced motion
Booking context
01defaultCTA ready
02hoverember glow
03focusorange ring
04successcontext saved
Focus-visible и selected states идут через Studio Ember, не через голубой ring. Голубой отсутствует в контракте NailLounge.

Палитра

ink, ember, cream

CTA

один orange-action

Mobile

touch-first booking

Motion

hero + micro states

Компоненты

shared token contract

Флоу

сайт ведет в запись

01

Compose tokens

Палитра зафиксирована в ui/theme: DarkPrimary #F97316, DarkBackground #1D1410, DarkSurface #251912, LightBackground #FBF5E8. Голубого focus-цвета в Android-контракте нет.

02

Material 3 без шаблонности

Используем привычные Android-паттерны — bottom CTA, карточки выбора, календарь, списки мастеров — но сохраняем брендовый характер NailLounge через цвет, плотность и tone of voice.

03

Readable density

MvpReadableDensity защищает ключевой сценарий от поломки на крупном системном шрифте: интерфейс остаётся плотным, но не превращается в мелкий desktop-макет на телефоне.

04

Motion как обратная связь

Анимации не отвлекают от записи: лёгкий вход экранов, состояния загрузки дат/слотов, акцент на выбранном времени и спокойный success state после создания записи.

04 / Android app

Как выглядит мобильный сценарий записи

Визуальный блок собран из реальных экранов Android-приложения: быстрый старт на главной, выбор услуги, выбор мастера, свободные слоты и финальная проверка записи.

Главный экран Android-приложения NailLounge с быстрой записью и нижней навигацией

Главная с быстрой записью

Клиент видит выбранную услугу, салон, мастера и ближайшее окно прямо на первом экране.

Экран выбора услуги в Android-приложении NailLounge

Выбор услуги

148 услуг, поиск, категории и отдельный toggle для сценария «Молчаливый мастер».

Экран выбора мастера в Android-приложении NailLounge

Выбор мастера

Есть сценарий «Любой мастер», рейтинги, фото сотрудников и переход к профилю мастера.

Экран выбора даты и времени в Android-приложении NailLounge

Дата и свободные слоты

Календарь показывает плотность доступности, а выбранное время фиксируется sticky CTA.

Экран проверки записи в Android-приложении NailLounge

Проверка записи

Финальный экран собирает время, услугу, мастера, студию и контакты перед подтверждением.

01

Compose UI

Экран держит выбор услуги, студии, мастера, даты, времени и контактов.

02

ViewModel

StateFlow управляет загрузкой, selected slot, ошибками и success-состоянием.

03

Cache API

Retrofit-слой вызывает summary, slots, warmup и mobile book через API key.

04

YCLIENTS

Запись создаётся через серверный слой, а мобильный клиент не видит токены.

source

Каждая запись маркируется как mobile_app

warmup

Доступность прогревается до открытия календаря

44dp

Touch targets и сценарий под реальные Android-экраны

no PII

Аналитика событий без лишних персональных данных

04 / Stack

На чём собрано

Технический стек показан как производственная схема: интерфейс, интеграции и инфраструктура поддерживают одну цепочку записи.

Android

  • Kotlin 2.4, Gradle 9.4, AGP 9.2, JDK 17
  • Jetpack Compose BOM 2026.06.01 и Material 3
  • Navigation Compose, Lifecycle runtime, SplashScreen
  • minSdk 24, compileSdk/targetSdk 37

Архитектура

  • Clean Architecture: domain, data, ui, di
  • Hilt 2.60, KSP, repository interfaces и ViewModel StateFlow
  • Retrofit + OkHttp + kotlinx.serialization
  • TokenStore, AppSettingsStore и NoOpCacheService как сменяемый contract

Интеграции

  • Nail-Lounge-Cache: salons, services, masters, available-days-summary, slots, warmup-hint, mobile book
  • YCLIENTS API как fallback/read layer в текущем MVP
  • AppMetrica AnalyticsTracker для booking_* событий
  • Coil 3 для медиа студий и мастеров

Вопросы, которые чаще всего задают по проекту

Коротко по техническим и продуктовым решениям NailLounge.