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

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.