An app icon showing a large checkmark.

A New Day

Personal project 2019 – present Mental health PWA
A zoomed-out view of an early Figma prototype containing many screens.
An early prototype of what would become A New Day. I discarded all but one feature.

I just need something to help me...do the things everybody else thinks are normal.

— Anonymous user with PTSD
Three screenshots of A New Day app showing the initial state of the basic list, the multi-list, and the multi-list containing unchecked to-do items.
The redesigned, single-minded version of A New Day.
Three screenshots of A New Day app showing the Settings views: Appearance, List organization, and Date & Privacy options.
Settings are intentionally limit user choices to appearance, a single optional feature, and data export.

Streaks, no. Because I do not need...a record of my failures.

— Anonymous user
A type sample showing the basic character set of Public Sans.
Sample of Public Sans.
sequenceDiagram
    autonumber
    participant Timer as setTimeout (midnight)
    participant State as State Store
    participant Reset as reset.ts
    participant DB as db.ts (IndexedDB)
    participant App as App.svelte
    actor User

    Timer->>State: scheduled callback fires
    State->>State: checkForReset('midnight')
    State->>Reset: resetIfNeeded(current)
    Reset->>Reset: dateKey(now) !== lastResetKey
    Reset-->>State: new state (completed → false)

    State->>State: store.set(next)
    State->>DB: saveState(db, next)
    State->>State: resetNotification.set({ timestamp })
    State-->>App: onMidnightReset subscription fires
    App->>App: announce('It's a new day…')
    App-->>User: Toast: "It's a new day. The list has been reset."
    State->>Reset: scheduleMidnight(callback)
    Note right of State: Re-arms timer for next midnight
The midnight reset feature in A New Day that unchecks all checked todo items.