← all projects
Full-Stack Backend

DayTrack

Personal daily-tracking backend — morning and evening check-ins, mood tracking, financial accounts and expenses, media uploads, historical views, automated email reminders, and analytics over your longitudinal data.

A life-logging API: structured morning/evening check-ins, mood + finance + media tracking, scheduled email reminders (cron + Resend), S3-presigned media uploads, and insights/analytics across historical entries.

Node.js
TypeScript
Express
MongoDB

Problem Statement

People who want to understand their own lives — mood patterns, spending, daily habits — have to stitch together a journal app, a budgeting app, and a photo store, none of which talk to each other or surface trends. There's no single backend that captures a structured day (how you felt, what you spent, what happened, photos) and turns months of it into insight, with gentle reminders to keep the streak going.

Proposed Solution

DayTrack is a backend for personal daily tracking. Users do a morning and evening check-in, log mood, manage financial accounts and expenses, attach media, browse and search history, receive automated email reminders, and get analytics/insights computed over their longitudinal data.

Full Solution Details

  • Daily check-ins — separate morning and evening flows.
  • Mood tracking + analytics — capture mood and analyze trends over time.
  • Finance — financial accounts and expense management alongside the daily log.
  • Media — upload and store photos/files per entry.
  • History — historical data views and search.
  • Automated reminders — scheduled emails nudging users to check in.
  • Insights — comprehensive analytics across the accumulated data.

Technical Documentation

Node + TypeScript + Express + MongoDB (Mongoose). Notable building blocks from the dependency set: node-cron drives the scheduled reminder jobs; Resend sends the emails; moment-timezone handles per-user timezones (essential so a 'morning' reminder fires in the user's morning, not the server's); @aws-sdk/client-s3 + s3-request-presigner handle media via presigned uploads (bytes go straight to S3, not through the API — the same stateless-files pattern across his projects); multer for upload handling, Joi + express-validator for validation, JWT + bcryptjs for auth, and helmet / compression / express-rate-limit / morgan / winston for a production-shaped HTTP layer. tsconfig-paths enables clean path aliases.

Tech Stack

Node.js, TypeScript, Express, MongoDB/Mongoose, AWS S3 (presigned uploads), node-cron, Resend (email), moment-timezone, Joi, express-validator, JWT, bcryptjs, helmet, compression, express-rate-limit, Winston.

System Design

User ──JWT──► DayTrack API (Express)
   ├── morning / evening check-ins → MongoDB (entries, mood, finance)
   ├── media: presigned S3 upload (bytes bypass the API)
   ├── history: views + search
   └── analytics: trends over longitudinal data
        ▲
   node-cron scheduler → Resend email reminders
        (moment-timezone → fire in the user's local morning/evening)
   Hardening: helmet · compression · rate-limit · validation (Joi + express-validator) · Winston

Smart Architectural Decisions

  • Timezone-correct scheduling. Using moment-timezone so reminders fire in each user's local morning/evening (not server time) is the detail that makes a habit app actually work — and is easy to get wrong.
  • Cron + transactional email, no heavy queue. node-cron + Resend gives reliable scheduled reminders without standing up a job queue/worker fleet — right-sized for the problem.
  • Presigned S3 uploads. Media bytes go directly to S3 rather than through the API, keeping the server light — the consistent stateless-files pattern seen across WorkSight, Pracket, Dondie, and Storex.
  • Production-shaped from the start. helmet, compression, rate limiting, dual validation (Joi + express-validator), structured Winston logging, and path aliases show it was built like a real service, not a prototype.
  • Unified daily model. Combining mood + finance + media + check-ins in one backend is what enables cross-domain insight that separate apps can't.

Impacts

A single backend that captures a structured day across mood, money, and media, reminds users (in their own timezone) to keep logging, and turns the accumulated history into analytics — the data foundation for genuine personal insight.

Demonstrated Skills

Backend engineering (Express + MongoDB, layered + hardened HTTP); scheduled jobs done correctly (node-cron + timezone-aware firing); transactional email (Resend); presigned S3 media uploads; validation (Joi + express-validator); auth (JWT + bcrypt); analytics over time-series personal data; production hygiene (helmet, rate limiting, logging).

Notes

  • The timezone detail is the tell: firing reminders in each user's local morning/evening (moment-timezone) shows he sweats the details that make a product actually usable — a subtle bug source most people miss.
  • Right-sized infra: cron + Resend for reminders (no queue/worker fleet) and presigned S3 uploads (no bytes through the API) demonstrate pragmatic, cost-aware backend decisions — consistent with his other services.
  • Production hygiene in a personal project: helmet, compression, rate limiting, dual validation, and Winston logging show he defaults to building things properly.
  • Cross-domain data modeling (mood + finance + media in one daily entry) is what makes the analytics meaningful — product thinking, not just CRUD.
Ask me anything