Why I built it
I built it to track the things I do every day, good and bad, from habits I'm building to what I eat and spend. It holds me accountable while I build good habits, and gives me the data to show I'm making progress on ditching the bad ones.
It was also a way to get hands-on with Vue, Go and GCP. I was new to all three at work, and wanted a project of my own built on similar foundations.
What it does
Tracker has sections for daily habits, a weekly X effect checklist, goals, a budget, a food log and a journal. It sits behind a login, with sign-up turned off.
How it's built
- Code
- A Vue 3 single-page app, built with Vite and Vue Router, talking to a Go JSON API on gorilla/mux. A periodic job keeps goals up to date. The code is in a private repo.
- Data
- Firestore. Passwords are hashed with bcrypt, and sessions live in HttpOnly cookies.
- Hosting
- Google App Engine on the Go 1.26 runtime, serving both the API and the built client from the same origin at tracker.mattlove.dev.
- Deploying
- Shell scripts: one bundles the Go server and the built Vue client together, and another runs
gcloud app deployagainst a pinned project. Locally, Vite and air (hot-reloading the Go server) run side by side.