Privacy-first AI
Astro AI
An AI astrologer where the personal parts — birth details and past conversations — stay in the browser. A separate FastAPI service handles inference and keeps nothing about the user.

Notes from the build
The challenge
The data that makes the product personal — birth date, time, and place — is also the input the model needs. Keeping that data in the browser while still getting a useful reply was the main constraint. The interface also had to hold multiple saved profiles and chat sessions without a backend to keep state.
How I solved it
- Birth profiles and chats live in IndexedDB through Dexie, with separate tables for sessions and messages.
- Only the details needed for the current reply are sent to the FastAPI backend, which does not store them.
- Each session keeps its own message list, so reopening an old chat restores it where it left off.
- react-markdown with remark-gfm renders the model's formatted replies, so the output stays readable.
The experience
- Users save birth date, time, and place as reusable profiles.
- Past conversations can be reopened from session-based chat history.
- Markdown responses, a dark theme, and layouts that hold up on smaller screens.
Local-first data
Chats and birth profiles persist in IndexedDB through Dexie, so they survive refreshes and revisits without an account on the server. The trade-off is that the data lives on one device: clearing browser storage clears the history.
The backend split
The React app talks to a FastAPI backend that calls the Gemini API for each reply. The backend is stateless — it runs inference and returns a response, which keeps the privacy claim simple to hold.
Keep exploring
