Skip to content

About

Private mood journal: log your mood up to three times a day (morning, afternoon, evening), see weekly stats, get reminders, and export a weekly reflection prompt for Claude. Data stays on the device. Built with Expo / React Native.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Mood Tracker icon

Mood Tracker

A personal Android app for logging your mood three times a day, growing good habits, and reflecting on your week with Claude. No backend, no API keys; everything stays on the phone. Expo (SDK 57), React Native, TypeScript. English and European Portuguese.

Features

  • Check-ins: morning, afternoon and evening; mood 1–5 plus a note, each showing the date and time it was logged. The Check-in tab is for today; the last 7 days can be edited from the History calendar.
  • Moon: today's phase (🌒 Waxing crescent…) next to the date on the Check-in tab, worked out on the phone with no internet.
  • Sleep: the morning check-in asks how you slept and for how long (in half hours). It's always part of the Claude reflection.
  • Habits: doses of what you want less of (🚬 🌿 🍺, "≈ roughly" for estimates), good habits to tick (💧 🚶 🤝 🛠️), habits to balance counted against a sweet spot per day, week or month (☕ 1–2 cups a day: a day inside it is the win; 🍷 up to 3 a week: each day under the cap so far is a win), and what you did instead.
  • Balance and savings: light vs heavy points per week, and a jar of what you kept away compared with your usual amount: euros with prices (Dutch prices by default), doses without. "How is this worked out?" under the jar shows the sum per habit.
  • Money switch: Settings → Habits turns money on or off everywhere (prices, savings in euros, bank statements, the Money section). Off only hides it; payments, prices and merchant links are kept.
  • This week: weekly table and averages, habits, and a reflection prompt for Claude. The arrows step back through earlier weeks, as far as your first check-in.
  • Urges: the 🌊 button names the habit and what you felt just before (restlessness, boredom, sadness, emptiness, fear…), shows the craving map's line for those feelings, then two minutes of breathing, or ten minutes of something else with a gentle bell at the end. The week shows which feelings came before your urges, and they go into backups and, with habits on, the Claude prompt.
  • Urge forecast: when three or more urges in the last four weeks came at this time of day (in three-hour windows), the check-in screen gives a heads-up, names the feeling that usually came first and shows its craving-map line.
  • Bank statement: import a Revolut CSV in Settings. Card payments, cash withdrawals and fees are spread over the days and the check-ins of the same part of the day, and shown next to what your habits estimate (doses × price): per check-in in History, per week on the spending card, and as a 💳 tile in the month totals. Transfers, top-ups and exchanges are left out; importing the same statement twice changes nothing.
  • Estimated vs spent: once a statement is imported, two bars per habit compare what your check-ins estimate (for priced habits) with what you really spent: the week shown on the week tab, the last 30 days in History. Tap a merchant under "Where the money went" to link it to one of your habits (any of them, at most one per merchant); links are kept for every statement and travel in backups. Each check-in in History also shows what was spent at linked merchants per habit (🍺 €9.50 · ☕ €3.20), as plain amounts.
  • Month totals: under the History calendar, every total for the month shown (check-ins and mood, steps, unlocks, sleep, each habit, urges, money kept), as small tiles two to a row, each over a strip of daily bars; tap a bar to open that day.
  • Levels: XP for check-ins, notes, full days, habit wins, urges let pass and streak weeks. Level titles follow your voice (Lao Tzu: raindrop → still lake). XP only goes up, a low day counts as much as a good one, and one missed day a week is a rest day that keeps your streak.
  • History: three sections switched at the top, and it remembers the last one: Calendar (6 months, the selected day's check-ins, editing the last week, and the month totals), Month (your level, patterns from the last 30 days and a "Reflect on my month" prompt) and Money (what doses cost in the last 30 days and in all, estimated vs spent, and one bar per week or month of what you really spent since your first check-in; only when there's money to show).
  • Swipe between tabs: Check-in, This week, History and Settings sit side by side; swipe left or right, or tap the tab bar.
  • Time zone: check-in times are shown in the phone's time zone (automatic, follows you when you travel) or a fixed one you pick in Settings.
  • Reflect with Claude: shares a summary of the week to the Claude app. Habits are included only if you switch that on.
  • Voices: 15 voices (Lao Tzu, Marcus Aurelius, Rumi, Alberto Caeiro, Thich Nhat Hanh…) change the wording, emojis, colours and Claude prompt, and show a sourced quote of the day. They can also take turns, changing every day or every week among the voices you pick.
  • Pause: counted breathing, or a focus timer that ends with a bell.
  • Home-screen widget: a greeting, today's three check-ins as mood-coloured tiles, the week as dots and (when it's tall enough) the quote of the day, in your voice and theme. Tap a slot to check in, the week for stats, or Pause to breathe.
  • Optional: reminders, phone unlock counts (needs Usage access), and steps (needs Physical activity).
  • App lock (optional): fingerprint, face or phone PIN on opening and after a minute away. The app is hidden in recent apps while it's on.
  • Backup: choose a folder on the phone once, then "Back up now" saves a dated JSON file there, and the weekly automatic backup saves one when you open the app and the last is a week old. Old backups are kept. You can still export through the share sheet or import a file. Uninstalling deletes the app's data but not the folder.

Development

npm install
npx expo start      # Expo Go; unlocks and steps need a real build
npm test
npm run typecheck
npm run lint
npm run format

Code is organised in three layers, domain/, infrastructure/ and ui/, imported via @domain/…, @infrastructure/…, @ui/… and @modules/…. Text lives in src/ui/foundation/i18n/locales/{en,pt}. See AGENTS.md for the conventions.

Releasing

  1. Bump expo.version and expo.android.versionCode in app.json, then push.
  2. Run gh release create v<version> --generate-notes.
  3. After about 5 minutes, the APK appears on the release. Install it on the phone and allow "install unknown apps".

CI runs the checks on every push and builds the APK only for releases. Updates keep your data as long as the signing key stays the same. To use your own key, set the ANDROID_KEYSTORE_BASE64, ANDROID_KEYSTORE_PASSWORD and ANDROID_KEY_ALIAS secrets.

About

Private mood journal: log your mood up to three times a day (morning, afternoon, evening), see weekly stats, get reminders, and export a weekly reflection prompt for Claude. Data stays on the device. Built with Expo / React Native.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages