Я не нашла удобный планировщик для себя. Вот почему я сделала свой

—

от автора

Когда я увлекаюсь проектом, то могу буквально им жить. Ловлю гиперфиксацию: хочется доделать ещё одну вещь, потом ещё одну в рамках проекта. В это время быт и здоровье уходят на второй план. И когда я наконец отвлекаюсь от проекта, обнаруживаю, что в других сферах тоже накопились дела, либо же имеется напаханное поле.

Грамотное планирование дел - важная часть гармоничной жизни

Грамотное планирование дел — важная часть гармоничной жизни

Мне хотелось сохранить способность увлекаться и при этом вовремя замечать, чему ещё нужно моё внимание. Я стала искать планировщик, в котором можно было бы держать в поле зрения разные сферы жизни, выбирать приоритеты и превращать большие цели в конкретные дела. Удобного для себя варианта я не нашла и решила сделать свой, который назвала «Сферы«.

Что уже есть у планировщиков

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

Todoist позволяет собрать задачи в проекты, назначить приоритеты и выбрать нужные дела через фильтры. Если уже понятно, какие списки тебе нужны, можно настроить представление под себя.

TickTick объединяет задачи, календарь и трекер привычек. В нём можно одновременно спланировать неделю и отмечать то, что хочешь делать регулярно.

SingularityApp позволяет смотреть на один проект как на список, календарь, канбан-доску или диаграмму Ганта. Можно выбрать представление под конкретный проект и способ работы.

С помощью проектов, списков или меток в этих сервисах можно организовать и работу, и личные дела. Мне хотелось, чтобы сферы жизни уже были частью интерфейса. Если я давно ничего не записывала про здоровье или быт, в списке задач мне может просто нечего быть видно. А когда у каждой сферы есть своё место, я могу заметить и пустую карточку, и дело, которое давно откладываю.

Как личные наблюдения превратила в ТЗ для приложения

Я сформулировала для себя рабочую гипотезу: если держать разные сферы на виду, а цель доводить до конкретного действия и времени, мне будет проще выбрать, чему уделить внимание сегодня.

Из неё получились четыре вопроса, для которых я спроектировала отдельные экраны:

  1. Сферы — что сейчас происходит в разных частях моей жизни?

  2. Цели — чего я хочу добиться и с какого шага могу начать?

  3. Планер — куда это дело помещается по времени?

  4. Сегодня — что из всего этого актуально прямо сейчас?

Для проверки я взяла повседневные сценарии. Записать дело, найти его через несколько дней, переименовать, поставить на конкретное время, увидеть уведомление. Ещё два условия задала для первой версии: пройти основные сценарии без аккаунта и открыть план без интернета. Так стало понятно, что нужно довести до рабочего состояния для первого выпуска.

Экран. Почему я выбрала карточки

Рис. 1. Экран «Сферы» на Android с демонстрационными данными.

Рис. 1. Экран «Сферы» на Android с демонстрационными данными.

Я сделала сетку карточек, чтобы можно было одним взглядом увидеть несколько сфер. У каждой есть название, значок и цвет. Цвет помогает быстро различать карточки, а название объясняет их даже без цвета. Крупное число показывает, сколько дел в сфере. Короткая подпись даёт контекст: например, в Работе есть дело на сегодня, а в Учёбе — дело, которое сегодня выполнять не нужно. Делала приложение сугубо полезным для применения на практике, поэтому добавляла понятные значки и цвета.

Пустые карточки тоже остаются на экране. На скриншоте у Здоровья ноль дел, но сфера видна рядом с Работой. Так я могу сама решить, надо ли записать туда что-то сейчас. Ноль в карточке означает ноль записанных дел. По нему я не оцениваю, насколько хорошо у меня обстоят дела со здоровьем.

Я добавила в поиск контекст родительских разделов и показала путь к записи в результатах. Обзор дел ребёнка собирает записи из вложенных разделов, а при открытии ведёт к исходному делу. Это позволило сохранить вложенность и сократить путь до записи. Для проверки использовали и старые задачи, у которых имя было только в названии раздела.

Экран цели. Что делать после «я хочу»

Я хотела сохранить в карточке цели ответ на вопрос «зачем мне это?» и дать возможность вернуться к нему через несколько недель. Поэтому у цели есть отдельное место для причины, срока и этапов.

Рис. 2. Карточка цели в тестовой сборке Android. Видны причина, срок, возможное препятствие и этапы.

Рис. 2. Карточка цели в тестовой сборке Android. Видны причина, срок, возможное препятствие и этапы.

В карточке есть блок «Если станет трудно». Его смысл — заранее подумать, что может помешать, и выбрать ответ. Например: «Если вечером устану и не захочу читать главу, прочитаю две страницы». У такого подхода есть параллель в исследованиях implementation intentions. Питер Голлвитцер и Вероника Брандштеттер изучали разницу между намерением достичь цели и планом действия при конкретном условии. Эта работа даёт рамку для объяснения интерфейса. Эффект самого приложения в исследовании на пользователях мы не измеряли. Gollwitzer & Brandstätter, 1997

Вот как может выглядеть весь путь. Я выбираю сферу «Дом», записываю цель «Разобрать вещи перед переездом», добавляю шаг «Разобрать один ящик» и выделяю на него 15 минут в воскресенье. Большая цель остаётся в своём разделе, а в плане дня появляется действие, которое можно выполнить.

Рис. 3. Как я задумала переход от сферы жизни к одному делу в плане.

Рис. 3. Как я задумала переход от сферы жизни к одному делу в плане.

Планер и будильник. Как дело доходит до нужного момента

Рис. 4. Недельный план. У прогулки есть интервал, у подготовки плана недели — день без привязки ко времени.

Рис. 4. Недельный план. У прогулки есть интервал, у подготовки плана недели — день без привязки ко времени.

У дела может быть фиксированное время, а может быть только день. Я хотела сохранить эту разницу. Если я знаю, что собираюсь гулять в 21:30, мне нужно видеть время в плане. Если я хочу в воскресенье разобрать ящик, но пока не знаю во сколько, могу оставить дело на этот день и вернуться к нему позже. Экран «Сегодня» сужает обзор до ближайших дел, а в планере можно посмотреть, как выглядит неделя.

Будильник понадобился мне потому, что я могу аккуратно всё записать и снова уйти в проект. Когда наступает время прогулки, я хочу увидеть название дела, ради которого поставила сигнал. И хочу иметь возможность выключить или отложить его прямо из уведомления. Так у будильника появилась связь с задачей и её расписанием.

Технически цепочка разделена на две части:

  1. Логика приложения рассчитывает время. Она берёт время из плана, учитывает настройку «напомнить заранее» и пропускает выполненные дела. Для дела на 18:00 с напоминанием за 15 минут могут быть запланированы сигналы на 17:45 и 18:00.

  2. Нативный модуль Android отвечает за срабатывание. Модуль написан на Kotlin. При доступе к точным будильникам он использует AlarmManager.setAlarmClock. Если доступ закрыт, код пробует setAndAllowWhileIdle, у которого время доставки менее предсказуемо. Системный планировщик позволяет назначить событие, даже когда экран приложения закрыт.

В процессе аудита мы разделили обработку команд будильника и восстановление расписания. Команды запуска, выключения и откладывания теперь принимает закрытый AlarmReceiver. Восстановление по системным событиям вынесено в отдельный BootReceiver. Так кнопки уведомления продолжают работать через системный PendingIntent, а стороннее приложение не может напрямую отправить команду во внутренний обработчик.

Как я работала с ИИ-ассистентом

Разработка шла небольшими циклами. Я объясняла, что хочу сделать в приложении, и приносила конкретные проблемы. Вместе с ассистентом мы превращали их в сценарии, по которым можно понять, исправилась ли ошибка. Ассистент помогал читать код, искать причины, вносить изменения, готовить проверки и собирать APK. Я решала, какие функции нужны мне в повседневной жизни, и проверяла отдельные сценарии на телефоне.

Один из таких циклов начался с переименования дела. Сценарий оказался точнее, чем «проверить сохранение»: изменить заголовок и сразу нажать «Сделано», пока поле ещё в фокусе. Раньше обработчик мог взять предыдущее значение. Мы сделали так, чтобы сохранение читало актуальный черновик, а новое название и отметка о выполнении записывались одной операцией. Затем проверили повторное открытие карточки и возврат с экрана.

С интерфейсом мы работали похожим способом. Для пробного аудита прошли несколько вымышленных сценариев в узкой веб-вёрстке. Один касался первого запуска, другой — поиска семейного дела, третий — прогресса цели. Так заметили, например, что учебные записи могут смешиваться с личным планом, а переход к детскому делу требует слишком много шагов. Это были проходы ассистента с синтетическими данными. Они помогли найти места для проверки, а удобство для живых новичков ещё предстоит оценить отдельно.

Отдельно мы исследовали идею облачного наставника. На вымышленных примерах сравнивали несколько конфигураций моделей: дают ли они пригодный структурированный ответ, различают ли дату и срок, задают ли уточняющий вопрос в неоднозначной ситуации. В итоговом сравнении было 18 сценариев, два повтора и четыре конфигурации — 144 результата. Один вывод из этой работы оказался особенно практичным: сортировку простых дел можно оставить локальной, а разговор с наставником рассматривать как самостоятельную облачную функцию со своими проверками, квотами и расходами.

Почему первой вышла офлайн-версия

Для первой версии я оставила то, что сама хотела открывать каждый день: сферы, цели, дела, планер, поиск, повторы и будильник. В Beta можно начать без регистрации. Облачный наставник и синхронизация относятся к полной версии.

Интерфейс приложения написан на React Native с Expo и TypeScript. Навигация устроена через Expo Router, состояние хранится через Zustand, а Android-будильник вынесен в нативный модуль. Правила расчёта времени, работы с целями и проверки резервных копий можно проверять отдельно от отрисовки экранов.

Данные Beta хранятся на устройстве. При смене телефона нужен экспорт и ручное восстановление. Поэтому мы проверяли формат резервной копии: приложение читает поддерживаемые старые форматы, валидирует содержимое перед применением и исключает секретные поля из экспорта. Отдельная задача релиза — проверить, что данные остаются на месте при перезапуске и обновлении APK.

Что мы проверили перед выпуском

В отчёте по «Сферы Beta» 1.0.6 зафиксировано 217 пройденных регрессионных тестов. На чистом эмуляторе Android 16 отдельно установили подписанный APK. Открыли основные экраны в авиарежиме, создали русскоязычные дела и цель по локальному шаблону, нашли и переименовали дело, проверили сохранение после принудительного завершения приложения и после обновления APK. Для будильника подтвердили появление локального уведомления и его снятие кнопкой «Выключить».

На своём Huawei я вручную проверила более раннюю сборку: открыла разделы, нашла существующее дело и подтвердила, что сигнал будильника слышен. Это отдельный результат. Финальную Beta проверяли на эмуляторе с выключенным звуком, а длительное фоновое поведение и восстановление сигнала после перезагрузки Huawei в том прогоне не проверяли.

На сайте я сделала короткое демо, чтобы механику можно было попробовать до установки. В нём можно вписать цель, добавить несколько дел и попробовать уложить их в выбранное время. При проверке демо мы поймали баг, которого не было на коротких примерах: длинное название без пробелов растягивало страницу с 390 до 943 пикселей. Исправили перенос текста и повторили проверку на ширинах 320, 390 и 430 пикселей. Этот случай хорошо показывает, зачем в тесте нужен произвольный ввод, даже если сама форма кажется простой.

Каким получилось моё первое приложение

В «Сферах» есть вещи, которые я сделала именно для себя. Мне хочется видеть рядом работу, дом и здоровье, даже когда голова занята одним проектом. Хочется хранить большую цель отдельно от дел на сегодня. И хочется, чтобы в 18:00 телефон напомнил мне о прогулке, которую я сама решила поставить в план.

Это моё первое приложение, и мне было важно довести его до того момента, когда я могу установить его на телефон и записать туда своё настоящее дело.
Если вы тоже делаете планировщик под себя, мне интересно, какую одну деталь вы бы изменили в привычных приложениях и почему.

ссылка на оригинал статьи https://habr.com/ru/articles/1104654/