PregLog — A Private Pregnancy Diary
A personal logging app that combines diary writing, mood tracking, cravings data, and Supabase-based authentication.
Overview
PregLog started because two things happened at once:
Andrew lost interest in leaving dinner reviews, and I got pregnant.
So instead of letting the old project die completely, I repurposed it into something more useful to me.
The goal was to keep myself writing consistently, track how I was feeling day by day, and maybe one day show some of it to my future child.
My mum wrote things like this too. I never really read them properly when I was younger. I was angry at her for a long time. I think if I read them now, I’d probably cry.
That emotional part mattered, but I still approached the project the way I usually do: by turning messy real life into something structured, queryable, and visual.
What I built
PregLog is a small full-stack journaling app built around one daily entry per date.
It allows me to:
- write, edit, and review a pregnancy log for a specific day
- track mood with a simple rating scale
- store cravings as tags
- browse entries through a timeline
- view emotional patterns through basic visualisation
- keep write access private while leaving reading access open
The app uses Supabase for both data storage and authentication, so I can sign in to manage entries while public visitors can only read.
Why I made it this way
I did not want it to be just a notes page.
Pregnancy already feels chaotic enough, so I wanted something with a bit more structure:
- one log per day
- searchable dates
- mood scoring
- cravings as reusable tags
- progress tracking based on gestational age
That structure makes it easier to notice patterns, and also easier to keep going when motivation is low.
Key features
Daily logging
Each entry is tied to a single ISO-formatted date, making it easy to load, edit, and upsert one record per day.
Mood tracking
Mood is stored on a 1 to 5 scale and displayed with emoji-based feedback, making the log feel slightly softer and less clinical.
Cravings as tag data
Instead of burying cravings inside notes, I separated them into tags so they can be aggregated and visualised later.
Timeline + detail view
Entries can be browsed in a paginated timeline, with a separate detail view for reading individual posts more comfortably.
Private write / public read access
Integrated Supabase authentication so I can create and edit entries when signed in, while others can still read the public-facing log.
Pregnancy progress tracking
Added gestational-age calculations, due-date countdown, streaks, and day-based progress indicators to make the app feel like both a diary and a tracker.
Data visualisation
Mood heatmap
A weekly grid showing mood across time, turning emotional logs into a quick-scan pattern view.
Top cravings aggregation
Recurring food obsessions become visible instead of staying buried in text.
Streak tracking
Current and best streak help turn writing into a habit rather than a random activity.
Progress indicators
Gestational age, due date countdown, and elapsed-day progress anchor the experience in time.
Technical implementation
Frontend
- React + TypeScript
- responsive layout
- React hooks for state, pagination, forms
- useMemo for derived metrics (heatmap, streaks, aggregation)
Backend / Data
- Supabase (database + auth)
- one-log-per-day upsert flow
- structured fields (date, mood, cravings, notes)
Auth
- sign in / sign out
- restricted editing
- public read access
Technical details worth mentioning
- ISO-based date handling
- upsert logic keyed by date
- mood aggregation and streak calculation
- tag cleaning / deduplication
- heatmap generation
- responsive rendering
- Supabase auth integration
Outcome
PregLog turned out to be more than a diary.
It combines personal writing, structured tracking, lightweight analytics, and controlled access into something that feels both practical and emotional.
It also confirmed a pattern in my work: I like building tools that turn ordinary life into data you can actually look at.
The log will stay online until early November 2026. After that, it quietly evolves into something else. You can read it here.