Inspiration
I've always liked things that don't feel like obligations, which is why Stardew Valley came to mind. Tending a small farm every day makes repetition feel rewarding instead of tedious, so I wanted mood tracking to feel the same way — less like a form, more like watering a plant. I paired it with lofi music so the check-in itself would feel calm, not like another task.
What it does
You log your mood once a day with a tap on a wheat-themed icon, plus an optional note. Entries build into a calendar heatmap, so you can see patterns across the month instead of just remembering fragments. A streak counter tracks consistency, and a lofi playlist plays in the background the whole time.
How we built it
I used plain HTML, CSS, and JavaScript, since the project didn't need a framework. Entries and streaks are stored in localStorage, so nothing leaves the user's device. The calendar regenerates each time an entry is saved, and the music cycles through a local playlist using the element.
Challenges we ran into
We were experimenting more than we had before with DOM elements in JavaScript, which resulted in problems such as mood selection having a bug where the "active" state wouldn't clear between taps, so old and new selections sometimes both stayed highlighted. The Save button was also submitting the form and reloading the page instead of saving, which quietly erased entries — that one took a while to track down. Getting the playlist to move automatically to the next track took some debugging too.
Accomplishments that we're proud of
Getting the music to play seamlessly, and getting mood selection to reliably save and reflect back to the user. Those were the two hardest parts, so having them work end-to-end felt like the real win.
What we learned
I learned how to build a dynamic calendar in JavaScript from scratch, and how to use localStorage to persist data without a backend.
What's next for Mood Tracker
I want to push the pixel-art style further, and gamify the streak system so longer streaks unlock new plants or crops — something a user can watch grow over time.