JustToday
A neurodivergent-friendly routine execution engine
JustToday is a real-time routine execution companion for people who struggle with starting. It's not a habit tracker or planner — it's a calm, judgment-free guide that helps you get through your day one step at a time, adapting to the energy you actually have.
Most productivity apps optimize for planning. JustToday solves a different problem: execution. The question isn't “did you complete your habit?” but “what do you do right now, with the energy you actually have today?”
The Problem
Planning isn't the bottleneck. Starting is.
Habit trackers reward streaks. Planners optimize for scheduling. Todo apps fill up with items that never get touched. All of these tools assume the hard part is remembering what to do — but for many neurodivergent users, the hard part is initiating.
Existing tools also assume consistent capacity. They don't account for the fact that the same person has a Low day and a Flow day — and needs their tool to adapt, not judge.
JustToday doesn't ask what you planned. It asks how you're feeling today, and guides you from there.
Core Systems
Three interlocking systems, built from first principles
Each system solves one piece of the execution problem — and they compound when combined.
Each task in a routine template carries three boolean flags: lowIncluded, steadyIncluded, flowIncluded. Selecting an energy level each morning filters the task list dynamically via a pure deriveTasksForPace() function. A Low day shows only essentials; a Flow day surfaces bonus tasks. The template is never edited — the run adapts at runtime.
A routine run is a live, mutable snapshot created from a template. The timer uses absolute Unix timestamps (startedAt, plannedEndAt) rather than interval counters, so it survives app backgrounding and system interruptions without drift. Remaining time is computed from Date.now() on each tick. All state transitions — start, pause, resume, skip, extend, advance — are pure functions: (currentRun, ...args) => RoutineRun. No side effects; fully testable.
Partway through building, I noticed the energy + routine system felt incomplete. Reading Getting Things Done by David Allen surfaced what was missing: a trusted system for capturing open loops. JustToday now incorporates projects, tasks organized by Today/Later, and a weekly review workflow — GTD's capture and clarify phases adapted for neurodivergent users who need low-friction entry points over rigid structure.
Design Layer
Neurodivergent-first UX
Every interaction is designed to reduce cognitive load, not add to it.
The run screen surfaces 2 primary actions (Pause / Done with this), not 8. "Need more time" reveals extension options only when tapped — reducing visible decisions from 8+ to 2, then 3.
"How are you feeling today?" not "Select mode." "Done with this →" not "Skip." Overtime messages are non-judgmental: "It's okay to take your time." "No rush."
Energy is selected fresh each day. Optional items expire at midnight — no rollover pressure, no record of failure. The app never reminds you what you didn't do.
44pt+ touch targets, color contrast optimized for calm readability, VoiceOver/TalkBack labels on all interactive elements, letter-spacing tuned for dyslexic users.
Engineering Architecture
Two codebases. One engine.
iOS and web are built as separate codebases rather than a shared monorepo package — a deliberate pragmatic choice for v1 that allows platform-specific optimizations without coordination overhead.
State management
Mobile uses React Context + useState with auto-save to AsyncStorage on every mutation. Web uses Zustand with persist middleware and localStorage. Both call the same pure engine functions — the divergence is only in how state is held and persisted, not in the logic itself.
Platform-aware audio
Audio resolves by platform file extension: soundEngine.web.ts uses the Web Audio API; the native version uses expo-av. Metro and Next.js auto-resolve the right file by platform. An audio queue prevents overlapping announcements.
Key technologies
What I Learned
The biggest design insight was that a tool for neurodivergent users needs to be honest about capacity — not optimistic. The energy mode system came from recognizing that the same person has a Low day and a Flow day, and their tool should reflect that without judgment.
The GTD integration came from noticing a gap: routines help you execute known sequences, but users also needed a trusted place for everything else floating in their head. Reading Getting Things Done mid-build surfaced what was missing — and integrating it showed that good product thinking is iterative, not planned from the start.
Combining energy-aware execution with GTD-style capture is what makes JustToday feel complete. Neither system works as well alone.