Планировщик здоровья Gesundheitsplanner
Планировщик здоровья Gesundheitsplanner
Обзор проекта
Наш заказчик – владелец запатентованной методологии по самодиагностике и составлению программ тренировок для поддержания и укрепления здоровья.
В чем суть методологии: в зависимости от состояния здоровья и результатов 12-ступенчатой диагностики клиенту подбирается индивидуальная программа упражнений. Программа подразумевает возможность отслеживать свой прогресс, что мотивирует вести здоровый образ жизни.
До момента обращения к нам, вся работа велась в оффлайн формате. Клиентов принимали лично, самодиагностику и учет состояния их здоровья вели вручную. Методология доказала свою эффективность, но организация процесса отнимала много ресурсов. Заказчик задумался об автоматизации.
Задача
Задачей, с которой обратился к нам заказчик, был перенос уже отработанной в оффлайне методики в цифровой формат. На первое место выходила необходимость автоматизировать процесс и сделать его более удобным для клиента. Также это был дополнительный канал дистрибуции методики и привлечения аудитории в проект.
Решение
На начальном этапе мы провели воркшоп на территории клиента и определили стратегию работы. Решением стало мобильное приложение для iOS и Android. Основной сложностью была адаптация методологии заказчика к цифровому формату, так как использование ее в начальном варианте приводило к неправильной обработке пользовательских данных и, как следствие, составлению некорректной программы тренировок. Разобравшись в нюансах, мы помогли клиенту адаптировать методологию и реализовали корректный алгоритм на стороне бэкенда.Приложения для iOS и Android были выпущены в ноябре и декабре 2020 года. Доступны к скачиванию в Google Play и App Store.
Функционал
При регистрации в приложении пользователь оставляет данные о показателях своего здоровья – 12 шагов с опросом и самодиагностикой. Пользователю помогают видео и графики, которые наглядно объясняют, как проводить самодиагностику. В частности, нужно будет сделать несколько тестовых упражнений, отметить, что из этого делать сложно, в какой части тела есть боль и напряжение.
После каждого блока упражнений пользователю предлагается оценить, насколько сложно было выполнять то или иное упражнение, были ли болезненные ощущения. В дальнейшем приложение будет использовать эти данные для корректировки программы тренировок.
Свой прогресс можно отследить в разделе My Activity.
В приложении предусмотрены три уровня подписки – базовый, продвинутый и для экспертов в области физиотерапии (еще в разработке). Базовая подписка дает бесплатный доступ на 3 месяца, в продвинутой есть бесплатный пробный период.
Как работает приложение
Компонентный подход и MVVM
Мобильная часть проекта построена на основе паттерна MVVM. Подход RX задействован всего на 5-10%. По UserFlow проект реализован так, чтобы бэкенд мог диктовать дальнейший путь клиента. После того как пользователь проходит квиз – отвечает на 12 вопросов о своем здоровье – бэкенд берет на себя просчеты по сложной логике и определяет, направить пользователя дальше по сценарию, на самодиагностику, или нужно задать дополнительные вопросы, потому что показатели достигли риск-левела.
Важным этапом стала реализация решения по определению приложением состояния, с которого конкретный пользователь продолжает его использовать. На так называемой “линии разрыва”, в ситуации, если пользователь не закончил прохождение квиза и закрыл приложение, менялся UserFlow. При следующей итерации пользователь должен был попасть на тот шаг, на котором остановился. Часть роутинга была на бэкенде, при этом каждый мобильный клиент кэшировал состояния, на которых останавливался клиент. Если клиент очень давно не заходил в приложение, бэкенд сбрасывал точку входа.
iOS приложение построено на таблицах. Оно использует различные динамические виджеты, которые могут находиться в разных состояниях, в зависимости от того, на каком этапе пользователь с ним взаимодействовал. Например, не знакончил квиз и перешел в другой виджет. Вместе с MVVM это породило хороший подход к компонентности. Все прописывалось отдельно, разбивалось на компоненты, которые можно протестировать отдельно, проводилось через рефакторинг, чистилось, дорабатывалось. На View реализовывались компоненты, к ней была привязана модель, которая реактивно обновлялась. MVVM использовался как связка.
Экран Body Array
Еще одной интересной задачей была реализация экрана Body Array, схематичного изображения тела человека спереди и сзади, на котором пользователь отмечает свои болевые точки и зоны дискомфорта. Требовалось понять, как определить конкретную область, на которую указал пользователь. После небольшого исследования за основу мы взяли идею двухслойного векторного изображения. Верхний слой – not user interactable (не воспринимает жесты), нижний – с разноцветной подсветкой каждой зоны тела. Нижний слой невидим, но реагирует, когда пользователь ставит отметку на изображении. Далее, специальный color picker считывает цвет, на который пришлась отметка и передает информацию о соответствующей части тела в обработку.
Взаимодействие с пользователем
В рамках одного экрана мы хотели переключать разные компоненты представления. Так, на первых этапах взаимодействия с пользователем приложение имеет чатообразный вид. Создается симуляция общения в формате вопрос-ответ. При этом приложение учитывает реакцию пользователя и его действия. Это удалось реализовать с помощью стандартной таблицы UI Tableview и прописыванием конфигураторов ячеек, которые определяют дальнейшее поведение каждой компоненты. Благодаря роутингу UserFlow, пользователь может завершить квиз позже, вернувшись к тому же экрану, на котором остановился.
Основная сложность приложения заключается в динамическом роутинге. Дальнейший путь клиента определяется по многим критериям и факторам. Здесь это реализовано совместно с бэкендом и entry point, точкой, которая дает информацию о клиенте. Таким образом, в зависимости от состояния кэшей, UX Flow, приложение решает, куда вести клиента дальше. Внутри это все выглядит изолированно, т.к. благодаря компонентной модели, через реализованные Dependency Injection, быстро собирается компонента, определяющая, куда дальше вести пользователя.
Технологии:
iOS: Swift / iOS SDK
Android: Kotlin
BE: NodeJS, NestJS, Angular, Sendgrid, Cloudinary
Android: Kotlin
BE: NodeJS, NestJS, Angular, Sendgrid, Cloudinary
Отзыв:
Christian Bethmann, основатель "Gesundheitsplaner"
“Воркшоп и то как команда Konig Labs подошла к поиску подходящего решения оказались очень эффективными для нас. Код написан чисто и понятен нашим текущим разработчикам. Мы довольны функциональностью и дизайном приложения. В общем, это было хорошее начало для совместной работы”.
Проверенный отзыв в системе Clutch