manydoro
manydoro — помидорный таймер для тех, кому платят за часы. Запускаете помидорку по проекту, заканчиваете её, и приложение записывает отработанное — вместе с овертаймом.
Как это работает
Проект описывается двумя числами, и они решают всё. Есть ставка в час и общая стоимость — приложение выводит бюджет часов и дневную норму помидорок, которая следит за дедлайном и рабочими днями. Есть только ставка — остаётся почасовка с заработком. Нет ни того, ни другого — считается одно время, без нормы и плана: для проектов, которые делаются для себя.
Две фазы заканчиваются по-разному, и это намеренно. Помидорка не выключается сама: если вы в потоке, она уходит в овертайм и записывает всё. Перерыв заканчивается ровно на своём номинале — следующую помидорку вы начинаете осознанно, а не обнаруживаете уже идущей.
Один таймер на все устройства
Начали на маке, продолжили на айфоне. Идущая фаза едет через iCloud как append-only журнал событий: на телефоне она видна живой активностью на экране блокировки, на маке — в строке меню, с остатком времени и кольцом прогресса.
Интересное тут — сам журнал. Репликация состояния по правилу «побеждает последний» исправно порождала инциденты: свежештампованный простой гасил живую помидорку, одна фаза записывалась дважды, на спящем маке оставалась фаза-призрак. События вылечили класс проблем, а не отдельные случаи: они неизменяемы и идемпотентны, а текущее состояние — чистая свёртка над ними, поэтому любой порядок доставки и любые дубликаты дают один и тот же ответ на всех устройствах.
Мотивация
Я считаю работу в часах и работаю помидорками, и ни одно приложение не делало обе вещи. Трекеры времени знают про ставку, но не знают про фокус; помидорные таймеры знают про фокус, но считают, что деньги — чья-то чужая забота. manydoro — тот, который мне был нужен: таймер говорит не только сколько я уже работаю, но и сколько осталось от бюджета и сколько стоит сегодняшний день.