Moving reminder logic out of Expo made one failure mode obvious
I'm building Flowy, a health tracking app, and the current local-reminder code is split into two parts.
The planner is a pure function. It takes settings and dates and returns identifiers, copy, dates, hours, and repeat flags. A thin Expo adapter asks for permission, cancels the old schedule, and schedules the new plan.
That makes the planner easy to preview and test. It also makes the risky part clearer: cancel-all plus a partial scheduling failure can leave only part of the new plan active.
The useful lesson wasn't just "pure functions test better." Separating the side effects showed exactly where recovery still needs work.