Loading...
Loading...

Screenshot 1 of 7
Small habits. Daily wins. Lasting growth.
DIDT source repositories remain private during alpha development.
Alpha launched
React Native and Expo client with habit management, daily tracking, history, recovery, and theme support.
Functional
Shared NestJS API with PostgreSQL/Prisma persistence and backend-owned tracking rules for mobile and web.
Approaching Alpha
Next.js client integrating the same authenticated API, dashboard, habits, categories, and history workflows.
Delivered a validated mobile alpha backed by server-authoritative tracking, calendar-aware eligibility, history, and recovery workflows. The same API now supports ongoing web alpha development without duplicating core domain rules across clients.
DIDT is a cross-platform habit tracking application built around quick daily tracking, recoverable habit management, and trustworthy progress. Its React Native mobile client has reached the alpha milestone, supported by a shared NestJS API and PostgreSQL database. The Next.js web client is being developed against the same backend contracts.
Mobile and web applications independently connect to the same backend API; neither communicates through the other.
From validated mobile alpha to a shared web experience: designing habit tracking around server-owned calendar truth, forgiving corrections, and recoverable data.
Daily habit tracking should take seconds, but recurring schedules, missed days, changing goals, and accidental taps can make progress feel unreliable. DIDT focuses on one simple loop: know what applies today, record it quickly, correct mistakes without penalty, and understand progress over time.
DIDT separates its React Native / Expo mobile client and Next.js web client from a shared NestJS REST API backed by Prisma and PostgreSQL. The backend owns authentication, habit lifecycle, schedule eligibility, occurrence identity, and tracking history. Clients render authoritative API responses rather than independently calculating which habits belong to a calendar day.
A tracking occurrence represents one habit on one eligible calendar date. Completed Boolean habits can be undone; quantitative progress can be incremented, decremented, or corrected. Once an occurrence exists, its tracking configuration is snapshotted, so later edits to a target, unit, or schedule do not silently rewrite that day's history. The user's stored timezone keeps Today and historical queries consistent across clients.
Older dates are not always reconstructable from today's habit configuration. DIDT distinguishes a known occurrence, a known non-occurrence, and an unknown historical state. Unknown dates are not counted as misses, and days without applicable habits remain neutral. This preserves honest completion rates even when a habit has been edited or its earlier lifecycle is incomplete.
Habit management must support change without making tracking fragile. DIDT separates active, archived, and recently deleted records; deleted items can be restored during a 30-day recovery window. Undo and correction flows reconcile with server state, helping the UI recover from interrupted requests without inventing progress or double-counting completions.
The mobile application reached its alpha launch milestone after extensive functional and integration validation. The shared backend is functional for both clients, and the Next.js application is approaching its matching alpha milestone. The project remains in active development; public release, usage growth, and production-scale performance claims are intentionally not presented as completed outcomes.
Separating domain rules from presentation has made it possible to build mobile first and then introduce a web client without implementing a second source of truth. The most important design choices were not visual: stable calendar semantics, non-destructive recovery, explicit correction behavior, and meaningful tests at the API and client boundaries.