Тренировка NotSoEasy
Немного истории соло-девелопера
Идея приложения зародилась после того, как я растерял все свои заметки по тренировкам, которые вручную заполнял пару лет.
Первый прототип быстро собрал в Godot. Потом начал писать бэк на Go (классный язык, кстати). Написал api сервер, отдельный сервер под админку, саму админку тоже написал. И уже начал было прикручивать еще один сервер аутентификации, но наткнулся на PocketBase и свернул все свои самописные сервера. Зато укрепил знания по бэкенду, изучил Go и Docker, в общем не зря потратил время 🥲.
Само приложение решил писать на Flutter потому что планировал кроссплатформ. Сделал два захода, не понравилось и решил писать нативно на Swift (классный язык, кстати). Написал MVP и решил сделать еще один заход на Flutter. С третьего раза распробовал и все пошло как по маслу.
Стэк
- MVVM, Clean Architecture. Вью модели на сервис локаторе;
- стейт менеджмент сначала делал на InheritedWidget, ChangeNotifier и ListenableBuilder. Потом переписал на Bloc;
- GoRouter -> HyperRouter -> GoRouter;
- Hive для хранения пользовательских настроек;
- для форм FocusNode, FormState, FormFieldState и валидаторы;
- для темы ThemeData, ColorScheme, ThemeExtension и кастомные виджеты;
- Markdown для текста с сервера;
- SDK PocketBase;
- локальные нотификации;
- Mocktail для тестов.
Бэкенд сделал на PocketBase с написанием некоторых кастомных эндпоинтов api на Go и SQL. Всю бизнес логику старался оставить на бэке, фронт в основном просто отрисовывает json.
Нарисовал логотип и иллюстрации, написал весь текст, задизайнил UI, подготовил ASO и залил в сторы.
Функционал на момент написания (версия 1.5.1):
- регистрация/аутентификация как по почте так и с помощью OAuth провайдеров, восстановление пароля;
- лента тренировок с деталями прошлых тренировок;
- гибкое выполнение тренировки с удобными инпутами;
- информация с техникой выполнения;
- список программ, плюс предустановленные шаблоны;
- гибкая настройка программы;
- изменение уровня и других пользовательских данных;
- настройка нотификаций и времени отдыха;
- документы и обратная связь.
Так как делал для себя, то догфудил приложение. Постоянно вношу правки, добавляю новые фичи и итерирую дизайн. Планирую добавить статистику, лидерборд, сконнектить пользователей и премиум фичи.
Дизайн и Приложения
![Дмитрий Поярков Дмитрий Поярков](/api/files/10h3nkp0ft3so3i/9ghnsdf2ql84asv/1588467300382_me_yUlxaOILQL.jpg?thumb=100x100)
Дмитрий Поярков
UI дизайнер, UX дизайнер, Бэк-энд, Графический дизайнер, Иллюстратор и Фронт-энд
![Тренировка NotSoEasy](/api/files/2n9wxef87ex02sb/edutvymn8qyfhhj/preview_min_e6C6MhYcGg.png)
![1_min_3e7Vlo7ZNx.png](/api/files/6n5uqluz2p0o1wa/a5h9hrqet5aw55o/1_min_3e7Vlo7ZNx.png)
![light_min_cYALTAzlae.png](/api/files/6n5uqluz2p0o1wa/zb713pi51bosyhh/light_min_cYALTAzlae.png)
Цветовая схема для светлой темы
![dark_min_FwOVLUuGBf.png](/api/files/6n5uqluz2p0o1wa/lgb4bjlxu1l7pwa/dark_min_FwOVLUuGBf.png)
Цветовая схема для темной темы
![4_min_ArQrm4QvbW.png](/api/files/6n5uqluz2p0o1wa/5n6dbmjxiwf9v4i/4_min_ArQrm4QvbW.png)
![5_min_2VFPX1z96C.png](/api/files/6n5uqluz2p0o1wa/nhejxy9oc21bol3/5_min_2VFPX1z96C.png)
![6_min_MPIS4ZTs79.png](/api/files/6n5uqluz2p0o1wa/x05mnxkeyx52pym/6_min_MPIS4ZTs79.png)
![7_min_6wUBMGU03O.png](/api/files/6n5uqluz2p0o1wa/3gldhtdxn12pacz/7_min_6wUBMGU03O.png)
![8_min_Kda8XMOtyj.png](/api/files/6n5uqluz2p0o1wa/o1sky4m6i9v5vxp/8_min_Kda8XMOtyj.png)
![9_min_dVJHmWSwfw.png](/api/files/6n5uqluz2p0o1wa/fqzr5kfa0af2jl3/9_min_dVJHmWSwfw.png)
![Чевостик — развивающая платформа для детей](/api/files/gep06m3e72hoo3x/aff2xlx3ru3igjm/earth_1_min_wrMIBDS41u.png?thumb=300x300)