Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for Sakhi
Sakhi: My Project Story
A financial literacy companion for women, built with care—in **17 languages.
Inspiration
Financial literacy remains out of reach for many, especially women in rural and semi-urban India. I wanted to build something that felt like a friend—approachable, non-judgmental, and available in the language and context people already use. The name Sakhi (सखी) means “female friend” in Hindi: someone you can ask anything, without fear of sounding “silly.”
I was inspired by:
- Inclusive design — Tools that work for users with varying literacy levels and tech comfort.
- AI as a guide — Using generative AI not to replace human advice, but to explain concepts simply and suggest next steps.
- Real numbers — Moving from “save more” to “save ₹X per day” so goals feel concrete and achievable.
So I set out to build an app where women could learn basics, save toward goals, invest with awareness, earn through skills and ideas, and chat with an AI that speaks their language—and that replies in the same language, same manner, and same friendliness as the user. Ask in Hindi, get Hindi back; ask in a warm, casual way, get a warm, casual friend in return.
What it does
Sakhi is a financial literacy app that helps women learn, save, invest, earn, and chat—all in 17 languages. Users can:
- Learn — Look up any financial term (e.g. “FD”, “SIP”) and get a simple, clear explanation in their language.
- Save — Set a goal (e.g. “school fees”, “₹50,000 in 12 months”) and get a personalized plan with daily, weekly, and monthly amounts plus a recommended saving product and tips.
- Invest — Explore schemes, use investment calculators, and get AI-powered suggestions.
- Earn — Track income, explore business ideas, match skills to opportunities, and use learning modules.
- Chat (“Ask Sakhi”) — Talk to a chatbot that replies in the same language, same manner, and same friendliness as the user. Whether the user writes in Hindi, Tamil, English, or any of the 17 languages—formally or casually—Sakhi mirrors that tone so the conversation feels like talking to a friend.
The app also includes a Community (resources, events, feed), Calculators (SIP, lumpsum, retirement, emergency fund, child education, car loan, personal loan, salary, inflation, goal-based), and a Profile and About section. Everything is designed to feel approachable and inclusive, with a consistent theme and support for multiple languages and tones.
How I built it
I split the product into three layers:
| Layer | Tech | Role |
|---|---|---|
| Backend | Python, FastAPI | REST API, CORS, route modules: /learn, /invest, /save, /earn, /chat |
| AI | Google Gemini 2.0 Flash | Chat, saving plans, term explanations, invest/earn suggestions |
| Frontend | Flutter (Dart) | Mobile + web app, UI, API client, calculators, community screens |
The frontend talks to the backend via a single ApiService (e.g. post('/chat/', body)), and the backend delegates to Gemini clients in gemini/ (e.g. chat_client, save_client, learn_client).
Backend: FastAPI app with one router per domain (learn, invest, save, earn, chat). Each domain has a matching Gemini client that handles prompts and, where needed, JSON parsing (e.g. saving plans). I built Sakhi in 17 languages so the app and AI adapt to the user’s choice.
Frontend: Flutter app with a central AppTheme, bottom navigation (Home, Calculations, Community, Ask Sakhi, About, Profile), and feature folders (learn/, save/, invest/, earn/, calculators/). Calculators use standard formulas (compound interest, SIP, etc.) and custom painters (e.g. PieChartPainter) for charts. The chat screen sends messages to /chat/ and displays replies with loading and error handling.
Deployment: Backend is set up for Railway (railway.json); run locally with uvicorn or python main.py. Frontend builds for Android, iOS, web, and desktop via Flutter.
Challenges I ran into
1. Getting reliable JSON from Gemini — Gemini sometimes wrapped JSON in markdown code blocks. I had to strip those and handle minor formatting before json.loads(). I added a cleanup step (e.g. re.sub(r"json|", "", text).strip()) in save_client and similar clients.
2. Bilingual and culturally relevant content — I wanted Sakhi to feel local and the chatbot to reply in the same language and friendliness as the user. Getting this consistent, user-matching behavior required careful system prompts (e.g. “respond in the same language and level of formality/friendliness as the user”).
3. Calculator accuracy and edge cases — Formulas for SIP, inflation, and loans had to match standard financial conventions. I handled edge cases (zero rate, long tenures) and clear labels so users understood “estimated returns” vs “invested amount.”
Accomplishments that I'm proud of
- 17 languages — Building Sakhi in 17 languages so women across regions can use it in the language they’re most comfortable with.
- Adaptive chatbot — A chatbot that replies in the same language, manner, and friendliness as the user, making conversations feel natural and friend-like.
- Full stack in one product — A working Flutter app (mobile + web) backed by FastAPI and Gemini, with Learn, Save, Invest, Earn, and Chat all integrated.
- Real financial tools — Multiple calculators (SIP, lumpsum, retirement, emergency fund, loans, etc.) and AI-generated saving plans with daily/weekly/monthly breakdowns and product suggestions.
- Inclusive, friend-like design — An app that feels like a Sakhi: approachable, non-judgmental, and tuned for varying literacy and tech comfort.
- Clean, modular codebase — Clear separation of routes, Gemini clients, and frontend features so the project is easy to maintain and extend.
What I learned
Backend & APIs: FastAPI for async REST APIs, type hints with Pydantic, and separation between routes and business logic. Getting reliable structured JSON from an LLM with strict prompts and cleanup. Keeping secrets in environment variables and using CORS consciously.
Frontend & UX: Flutter for one codebase across mobile and web, shared theming and navigation, and managing loading/error states when calling the backend. Using custom painters, fl_chart, and percent_indicator to visualize finance.
Financial concepts (and a bit of math): I implemented calculators with standard formulas:
- Compound interest (e.g. lumpsum and SIP):
A = P \left(1 + \frac{r}{100}\right)^n \quad \text{(lumpsum)}
For SIP (monthly investment M, rate r per period, n periods):
FV = M \cdot \frac{\left(1 + \frac{r}{1200}\right)^n - 1}{\frac{r}{1200}} \cdot \left(1 + \frac{r}{1200}\right)
- Goal-based saving — \text{monthly} = \frac{\text{target}}{\text{months}}, then weekly and daily.
- Emergency fund — 3–6 months of expenses as a guide for users and AI plans.
I also learned how to prompt Gemini for structured plans and for explanations that match the user’s language and tone.
What's next for Sakhi
I'd like to add voice input for Ask Sakhi, expand to even more languages beyond the 17 I support today, and optional reminders for saving goals. I also want to tighten production security (CORS, rate limiting, and safe handling of user data).
Thank you for reading my story. I hope Sakhi feels like a small step toward making finance a little more friendly for everyone.
Built With
- bhashini
- fastapi
- flutter
- gemini
- postgresql
- python
Log in or sign up for Devpost to join the conversation.