Personal project · just for fun

echo

A just-for-fun mood journal with astrology-inspired AI reflections, built end to end.

React · TypeScript · FastAPI · PostgreSQL · OpenAI / Gemini · Stripe

Echo mood picker asking "What's your current frequency?" with five mood options

overview

Echo started as a bit of fun: a mood journal that doesn't take itself too seriously. You drop a mood in one tap, Echo shows it next to the local weather and the moon phase, and an AI guide can turn it into a short, astrology-inspired reflection.

I don't present the astrology as science; it's the playful theme. The point for me was building a complete product on my own: accounts, data, AI integration, payments and deployment.

screens

Screenshots use a local demo account with made-up entries; the live weather shown is real.

features

One-tap mood log

Five moods with intensity, tags and a note. Entries can be exported to CSV.

Mood history

An intensity chart over 7 or 30 days, with totals, average intensity and dominant mood.

Live context

Local weather from Open-Meteo and the moon phase, worked into rule-based tips on the Insights page.

AI reflections

Guides send your mood and chart details to OpenAI or Gemini for a short reflection, which can be saved and exported as a PDF.

Accounts and credits

Google sign-in with JWT sessions, and a credits system connected to Stripe Checkout for the paid guides.

Shipped, not just built

Dockerised frontend and API, deployed as two Fly.io apps with PostgreSQL, on echo.quetzal.digital, a domain I bought just for experimenting.

how it's built

Frontend

  • React, TypeScript and Vite with Tailwind CSS
  • Zustand stores for auth, moods, credits and readings
  • Browser geolocation with Open-Meteo weather and reverse geocoding

Backend

  • FastAPI with SQLAlchemy on PostgreSQL
  • Google OAuth sign-in issuing JWT sessions
  • Swappable AI provider (OpenAI or Gemini) with token-usage logging
  • Stripe Checkout, rate limiting, CSV and PDF export

engineering

One AI interface, two providers

Reading generation goes through a single service that can call OpenAI or Gemini by configuration, with a mock mode when no key is set, so the app runs locally for free.

Usage you can see

Every AI call records the model, token counts, guide and success or failure, which made cost and errors visible from day one.

Calculations in plain code

Sun sign, moon phase and the other chart details are computed in my own code (TypeScript and Python), so prompts get consistent inputs rather than asking the model to work them out.

End-to-end ownership

Auth, data model, payments, rate limiting, exports, Docker images and Fly.io deployment, all built and wired together by me.

status

Works today

  • Mood logging, history chart and CSV export
  • Insights with weather and moon phase
  • AI reflections with four guides and PDF export
  • Google sign-in, credits and Stripe Checkout

Not yet, or out of scope

  • Runs on Fly.io at echo.quetzal.digital, a domain I bought just for experimenting, so it may not always be up.
  • Astrology is a playful theme, not a claim; the Insights tips are rule-based, not AI.
  • No automated test suite.
  • The repository stays private.