A microservices backend that auto-detects bank SMS, uses Mistral AI to extract transaction data, and tracks expenses — all through event-driven Kafka pipelines.
Handles signup, login, and JWT token management. On signup, publishes user creation event to Kafka for downstream services.
Manages user profiles. Listens to Kafka user_service topic — auto-creates profile when Auth Service publishes signup event.
Core business logic — expenses, budgets, spending limits with reset timestamps, category detection, and time-filtered analytics (7D/30D/3M/6M).
Flask service that receives raw bank SMS, filters using keywords (Dr./Cr./Debited), extracts amount via regex, and uses Mistral AI to identify the merchant. Publishes parsed data to Kafka.
Mobile app sends credentials → Auth Service creates account, generates JWT tokens, publishes event to Kafka topic user_service
User Service consumes Kafka event → automatically creates user profile. Zero manual API calls needed.
React Native app's SMS listener hook detects incoming bank SMS on Android (filters by keywords: Dr., Cr., Debited, AvlBal). Duplicate prevention with 5-second window.
SMS sent to DS Service → regex extracts amount (Rs./INR/₹) → Mistral AI extracts merchant name → maps to known merchants (Paytm, Amazon, Flipkart etc.) → determines credit/debit type
Parsed data published to Kafka topic expense_service → Expense Service consumes it → expense saved with category, amount, merchant, and timestamp
User views spending summaries (7D/30D/3M/6M), sets budget limits with reset capability, sees credit vs debit breakdown — all on the mobile dashboard.
Each microservice owns its MySQL schema — true data isolation, independent scaling.
Services communicate via Kafka, not REST calls. Loose coupling, async processing, fault tolerance.
Mistral AI for intelligent merchant extraction from unstructured bank SMS text.
Stateless auth with short-lived access tokens and UUID-based refresh tokens.
Full stack (7 containers) defined in one file — one command to spin up the entire system.
Reverse proxy with SSL termination, path-based routing to all services behind a single domain.