HOOP
Более спокойный и честный к данным интерфейс для открытого клиента носимого устройства: новый бренд, переработанный Home и нативный мост для бэкапов — поверх движка OpenStrap Edge под лицензией MIT.
- Кольца со значениями внутри
- Мониторы здоровья и стресса
- Бэкап в «Файлы» или Drive
- Новый знак и система иконок
- Направление
- Мобильные
- Год
- 2026
- Авторство
- Доработанный open source
- Статус
- Роль
- Мой слой: редизайн, ребрендинг, работа над интерфейсом и контрастом, нативный мост для бэкапов, исправления надёжности и iOS-сборка.
- Платформы
- iOS-приложение · личная сборка
- Языки
- EN · DE · ES · FR · HI · ZH
- Стек
- Flutter · Dart · Swift · UIKit document picker · SQLite (upstream) · flutter_test · Xcode
Изыскания — контекст и задача.
Задача
Отличный открытый движок за интерфейсом в духе беты — и никакого простого способа хранить бэкап вне телефона.
OpenStrap Edge — открытое приложение на Flutter (MIT), которое подключается к браслету WHOOP по Bluetooth и считает сон, восстановление и нагрузку прямо на телефоне — без подписки и без облака. Его движок, от восстановленного протокола до аналитики и фоновой синхронизации, — работа контрибьюторов OpenStrap.
Интерфейс же выглядел как бета от сообщества. Home открывался приветствием и кнопкой-шестерёнкой; в кольцах стояли иконки, а цифры — под ними; маскоты, приглашения в Discord и просьбы о спонсорстве спорили с данными за внимание. Простого способа вынести зашифрованный бэкап за пределы телефона не было — потерянный или заменённый iPhone мог означать потерянную историю.
HOOP — моя личная сборка для ежедневного использования. Задача, которую я себе поставил: оставить движок апстрима ровно таким, какой он есть, и переработать тот слой, на который я действительно смотрю каждое утро, — бренд, экран Home, цветовую систему, — а также добавить способ хранить копию данных вне телефона.
План — сначала — чертёж системы.
Решение
Мой слой поверх OpenStrap Edge: новый бренд и система иконок, переработанный Home с честными мониторами, графитовая палитра с тестами контраста, нативный мост бэкапа в «Файлы» / Drive и исправления надёжности.
Правило было простым: не трогать движок. Всё, что ниже интерфейса, — протокол Bluetooth, аналитика на устройстве, хранение — остаётся в апстриме. Поверх него у HOOP появились свой знак и надпись: они нарисованы один раз в векторе и выводятся во все размеры иконок iOS и Watch небольшим генератором с PNG-кодировщиком без альфа-канала, как того требует App Store. Home перестроен вокруг трёх колец со значениями внутри, за ними — два монитора, которые сравнивают ночные сигналы с личной нормой и пишут «калибровка», а не гадают. Графитовая палитра с одним цветом на показатель заменила маскотов и призывы сообщества, а тесты контраста следят, чтобы каждая пара цветов читалась. Нативный мост на Swift передаёт зашифрованный бэкап в системный выбор файлов iOS — в «Файлы» или Google Drive. Исправления гонки в очереди, логирования на iOS и обновления скрытых вкладок вышли вместе с 21 новым автотестом.
Ключ модулей
- Компактная шапка: переключатель даты и значок устройства с зарядом и статусом
- Кольца сна, восстановления и нагрузки со значениями внутри
- Монитор здоровья: четыре ночных сигнала относительно личной нормы
- Монитор стресса с графиком за 7 ночей, где пропуски остаются видимыми
- «Мой день» с периодами сна, дневным сном и активностями; плитки «Моей панели»
- Графитовая тёмная и светлая темы, обе проверены на контраст
- Зашифрованный бэкап в «Файлы» или Google Drive и восстановление
- Тёмная и светлая альтернативные иконки приложения
Ключевые решения
-
Почему форкнут интерфейс, а не движок
Движок апстрима зрелый и активно поддерживается. Если его не трогать, остаётся чёткая граница между работой контрибьюторов и моей, а дверь для обновлений из апстрима остаётся открытой.
-
Почему мониторы воздерживаются
Показатель здоровья с ложной уверенностью хуже, чем никакого. Мониторы сравнивают с надёжной личной нормой, пока её нет — показывают «калибровку», а пропуски на графике за 7 ночей остаются видимыми.
-
Почему иконки — из одного вектора
Знак, заставка и все размеры иконок выводятся из одних и тех же контуров, поэтому бренд не «плывёт» между размерами, а правило App Store об отсутствии альфа-канала соблюдается в коде.
-
Почему бэкап идёт через выбор файлов
Место сохранения выбирает пользователь — iCloud Drive, Google Drive или любой провайдер «Файлов», — а приложение передаёт через мост путь к файлу, а не байты базы данных в памяти.
Детали — мобильные экраны.
Все мобильные экраны 04
Ведомость материалов — стек и почему он.
| Слой | Материал | Почему |
|---|---|---|
| 01Данные | Upstream: on-device SQLite (OpenStrap Edge) | Данные о здоровье остаются на телефоне; HOOP добавляет копию вне его — под контролем пользователя. |
| 02Логика | Dart · monitor and day-data models | Новая логика мониторов читает сохранённую достоверность и воздерживается ниже порога. |
| 03Аналитика | Upstream on-device analytics (unchanged) | Сон, восстановление, нагрузка и стресс считаются движком OpenStrap — это указано, а не присвоено. |
| 04Интерфейс | Flutter · custom painters · graphite theme | Один векторный источник для бренда и иконок; более спокойный Home, где главное — данные. |
| 05Инфраструктура | Swift MethodChannel · UIDocumentPicker · flutter_test goldens | Нативный экспорт бэкапа и эталонные рендеры на синтетических данных для каждого экрана на этой странице. |
Стек
Сдача — итог и ссылки.
Проверенные факты
- новый автотест
- 21
- Источник: локальная рабочая копия, сентябрь 2026
- набора иконок из одного векторного источника
- 3
- Источник: локальная рабочая копия, сентябрь 2026
Хотите увидеть систему в работе?
Покажу систему вживую на демо-данных и расскажу о решениях, которые за ней стоят.
Запросить демонстрацию
