Sensitive product · Offline-first · Permissions

    Moodday

    Make personal tracking reliable without presenting it as a clinical tool.

    Moodday is a non-clinical companion for mood and treatment tracking. The redesign focuses on offline continuity, multi-time reminders, privacy and revocable caregiver sharing.

    Role
    Solo product design, UX, architecture and full-stack development
    Period
    2026 redesign
    Status
    Technical release candidate · user beta pending
    Moodday — interface principale

    Verifiable evidence

    122/122

    active tests

    Local baseline verified on July 16, 2026

    7 days

    offline

    Check-ins replayed to Postgres without duplicates

    2 sessions

    caregiver flow

    Invite, observe, revoke and block immediately

    59

    build pages

    Reference production build

    How to read the numbers : Numbers describe an audited local baseline, not clinical efficacy or adoption.

    Context and role

    The product combines very short actions — mood, energy and intake — with information users may consider deeply private.

    The main challenge was not adding charts, but keeping one action consistent across mobile, offline storage, server synchronization and history.

    The scope is explicitly a personal companion: no diagnostic language, treatment recommendation or medical claim.

    Retained constraints

    • Never lose or duplicate a check-in or intake after network loss.
    • Handle multiple times, snooze, as-needed intake, time zones and daylight saving changes.
    • Authorize a caregiver through an active revocable relationship, not a global role.
    • Export and delete data without leaving records outside cascades.
    • Keep medical values, notes and caregiver identities out of analytics.

    Decisions and rejected options

    DECISION 01

    A structured operation queue

    A plain local list could not explain conflicts or safely replay actions.

    Choice
    IndexedDB stores each operation with an ID, status, bounded retry and explicit conflict resolution; the server mirrors it with idempotency.
    Rejected
    An opaque localStorage queue with infinite background retries.
    Trade-off
    More states to test, but diagnostics without exposing sensitive content.
    DECISION 02

    Relationship-level permissions

    A caregiver role alone does not identify whose data can be viewed.

    Choice
    Server checks invitation, relationship, status and revocation on each relevant route.
    Rejected
    Client-side hiding or generic role authorization.
    Trade-off
    More checks and E2E scenarios in exchange for immediate, explainable revocation.
    DECISION 03

    Optional summary, never advice

    A summary can support reflection, while causal language would be misleading.

    Choice
    Trends separate observed facts from correlations and keep summaries optional and non-clinical.
    Rejected
    An AI coach recommending diagnoses or treatment changes.
    Trade-off
    A quieter marketing promise aligned with the product’s actual responsibility.

    Journey architecture

    1. 01

      PWA interface

      Quick check-in, treatments, trends and caregiver role across five main destinations.

    2. 02

      IndexedDB

      Local data and replayable operations with visible status, quotas and conflicts.

    3. 03

      Idempotent actions

      Validation, relationship authorization and server-side deduplication.

    4. 04

      PostgreSQL / Neon

      Durable history, transactional exports and notification journal.

    5. 05

      VAPID + cron

      Multi-time scheduling, concurrent claim and bounded retries.

    Quality and verification

    • E2E for one offline check-in and a full week with page close and reopen.
    • JSON, CSV and PDF exports downloaded and automatically inspected.
    • Account deletion verified through tables without cascades.
    • Caregiver permission matrix covered by positive, negative, refusal and expiry tests.
    • Notification-journal migration tested on an isolated branch then promoted to Neon main with an empty diff.
    Moodday — vue produit

    What is actually delivered

    • A short daily journey that works without a network.
    • Observable sync separating permanent conflicts from transient failures.
    • Idempotent multi-time reminders including daylight saving changes.
    • Limited, explicit and revocable caregiver sharing.
    • Complete export and residue-free deletion for the current scope.

    Known limits

    • The product is not a medical device or diagnostic tool.
    • The usage gate — five people for seven days without assistance — has not been run yet.
    • Time-zone changes and queue compaction still need dedicated hardening.
    • VAPID and cron must be observed in preview and production before broad access.

    Next step

    • Run a seven-day closed beta with five people and measure only activation, core action and technical errors.
    • Test high volume, file storage and time-zone changes.
    • Add a caregiver-access journal users can read.

    Technical foundation

    • Next.js 16
    • React 19
    • TypeScript
    • Prisma
    • PostgreSQL / Neon
    • IndexedDB
    • Playwright
    • Web Push