ExitMantra — Stock Exit Planning
Powered the backend of a quant-driven investing app across web, iOS, and Android — live Zerodha Kite portfolio sync, 2-channel real-time alerts, and TradingView charts streaming Angel One market data.
- Stack
- Node.js · TypeScript · BullMQ · PostgreSQL · Redis · Strapi · Docker
- Links
- Live
The challenge
ExitMantra tackles the hardest decision in investing: when to get out. It rates every holding Add, Hold, Replace, or Exit, letting an investor review an entire portfolio in seconds. It runs on web, iOS, and Android.
That promise lives or dies on the backend. The app has to know exactly what the user holds, keep it continuously in sync with their broker, and reach them the instant the market moves. I built a large share of the systems that make that happen.
What I engineered
- Zerodha Kite broker integration. Connected users' real brokerage accounts so live holdings flow straight into the app — backed by a resilient portfolio sync engine and an automated report generator built on the synced data.
- Real-time alerting across two channels. Watchlists that fire email and WhatsApp notifications, fanned out through BullMQ job queues so a surge of market events never touches API latency.
- WhatsApp-native authentication. Passwordless login and signup over WhatsApp — frictionless onboarding that meets users where they already are.
- Advanced company screening. A multi-dimensional filtering system and per-stock metrics for surfacing opportunities across the entire market.
- Stock risk calculator. Position-level risk modelling so investors can plan exits before they need them.
- Professional-grade charting. An advanced TradingView chart integration powered by a custom data feeder streaming Angel One market data.
Plus the long tail of features any serious production product demands.
Architecture
A distributed service architecture: Strapi for content and administration; Node/Express services for broker, market-data, and notification domains; PostgreSQL for portfolios and metrics; Redis caching hot market data; BullMQ orchestrating sync jobs and alert fan-out — all containerised with Docker.
The defining design choice is a hard split between user-triggered work (login, filters, reports) and market-triggered work (price moves, alerts, broker syncs). By pushing the second onto queues, a volatile market day degrades gracefully — alerts queue up momentarily, the app itself stays fast.
Impact
- Real broker portfolios synced automatically into the product
- Alerts delivered over two channels without ever blocking the API
- Passwordless WhatsApp onboarding for a mobile-first audience
- Live, professional charting on third-party market data
What I took from it
Financial APIs are the least predictable part of any stack — sessions expire, feeds lag, rate limits bite. Every integration here was built assuming the upstream will fail, and the sync and alert pipelines recover on their own when it does.