FinTech · Mobile Portfolio Tracking and Trade Alerts

PortfolioPulse: Real-Time Multi-Asset Portfolio and Alert Engine

A cross-platform mobile app (Flutter, live on Android and iOS-ready) for Indian-market traders that pulls every asset class into one live P&L view and sends staged alerts as a position reaches its entry, target, or stop. It runs on a production-grade .NET 10 API with PostgreSQL 16 and a separate 24/7 executor daemon that handles end-of-day ingestion, alert evaluation, and intraday price polling on its own schedule.

PortfolioPulse app iconClient: MindGears Technologies (first-party R&D product)
PortfolioPulse dashboard, holdings, and price alerts screens on mobile

2,300+

Automated Tests

4

Asset Classes

Live 2026

In Production

The Challenge

Holdings are scattered across brokers (Groww, Zerodha, Upstox) with no single view of net worth or true profit and loss

In many Indian households one person tracks the whole family's investments, so a spouse's or parents' holdings end up mixed into the same spreadsheet with no clean way to keep them apart

Stock-only trackers ignore half the portfolio. Indian investors also hold ETFs, mutual funds, and physical gold and silver, invisible in most tools

Broker alerts are a single ping, not a journey. There is no staged notification as a position moves from entry toward its target, or drifts toward its stop

Watching dozens of positions by hand is error-prone. The one moment that matters, the touch of a target or a stop, is the one you miss

Alert noise trains you to ignore alerts. Pings fire for watchlist names you do not even own

Indian mobile networks drop. A cloud-only app becomes unusable on a flaky connection

Our Approach

We built PortfolioPulse as a focused, production-grade full-stack product: a Flutter mobile app backed by a .NET 10 API on PostgreSQL 16, with a separate 24/7 executor daemon that does the market work (end-of-day ingestion, alert evaluation, and intraday price polling) on its own schedule. The centerpiece is the alert engine. Each position gets staged push notifications, not a single ping, as it moves through its journey (buy-range, halfway-to-target, break-even, approaching-stop, target, and stop). The terminal target and stop pushes fire exactly once even with the intraday and end-of-day evaluators running concurrently, guarded by an atomic compare-and-set on the alert row, and the progress milestones are de-duplicated through a trigger-history ledger so each lands a single time. A configurable two-stage trailing stop ratchets protection up as a trade works, and alerts are holdings-aware, so the ones for assets you actually hold surface with a live position line and one-tap Exit or Sell actions. Prices are live where it counts: realtime quotes come from Zerodha Kite Connect (Yahoo Finance as fallback) and stream to the app over SignalR, so the consolidated portfolio recomputes live P&L with no user action. A local Drift and SQLite cache keeps the app fast and readable on a poor connection, reconciling with the server through a debounced sync engine.

Key Features

Consolidated multi-asset portfolio across stocks, ETFs, mutual funds, and physical gold and silver, with invested value, current value, and P&L (including today's P&L) in one dashboard

Multiple named portfolios for the common case where one person tracks the family's investments (self, spouse, parents), each viewable on its own or rolled up into the consolidated total

Live P&L with no refresh: the consolidated view overlays realtime prices streamed over SignalR and recomputes totals on-device

Multi-level alert engine (buy-range, half-target, break-even, near-stop, target, and stop) with each stage pushed once, plus a configurable two-stage trailing stop

Holdings-aware alerts with Active, In-Holdings, and Completed tabs, a live position line on alerts for assets you hold, and one-tap Exit or Sell and add-transaction actions

Signal, not noise: an 'only notify for assets I hold' filter (default on), while buy-range and the daily summary always come through

Broker statement import with one-tap parsers for Groww and Zerodha (Upstox, Paytm Money, and generic CSV also built in)

Interactive charts: a stock-overview preview that opens a fullscreen landscape candlestick chart with an optional buy-price marker

Persistent notification inbox: every push is captured server-side and synced into an in-app feed, so nothing is lost when the app was closed at delivery

Offline-capable via a local SQLite cache with resilient cloud sync (periodic, on-reconnect, and debounced after edits)

Secure accounts: JWT auth with a security stamp that invalidates every existing session the instant a password or email changes, plus rate-limited OTP password reset

Built for a real launch: in-app feedback, Terms and Privacy screens, and Beta indicators that auto-clear at v1.0.0

PortfolioPulse consolidated dashboard showing total P&L, an asset-class donut, and per-class breakdown cards
Consolidated view: total P&L across every asset class, the day's movement, and a stocks, mutual funds, and ETF breakdown that recomputes on-device as realtime prices stream in over SignalR.
PortfolioPulse holdings list with per-position P&L, quantity, and last traded price
Holdings across every portfolio, sorted by P&L, each row carrying quantity, last traded price, position P&L, and the day's move. The folder label on each row is the portfolio it belongs to, which is how one person tracks a whole family's holdings without mixing them together.
PortfolioPulse price alerts with Active, In-Holdings, and Completed tabs and stop-to-target progress bars
The staged alert engine: Active, In-Holdings, and Completed tabs, with each position's live distance to its stop and next target, and a flag the moment the buy zone is hit.

Scope & Scale

1,306

Flutter Tests

1,063

.NET Tests

NSE + BSE

Exchanges Covered

23yr

Trailing-Stop Backtest

Tech Stack

FlutterDartRiverpodDrift (SQLite)fl_chart.NET 10ASP.NET CoreSignalRPostgreSQL 16DapperEF CoreFirebase Cloud MessagingZerodha Kite Connect

Technical Challenges We Solved

Fire-exactly-once staged alerts under concurrent evaluators

Each position moves through buy-range, halfway-to-target, break-even, approaching-stop, target, and stop. The terminal target and stop pushes fire exactly once, even when the intraday poller and the end-of-day evaluator both decide the level has been reached at the same instant, guarded by an atomic compare-and-set on the alert row. The progress milestones in between are de-duplicated through a trigger-history ledger, so each stage lands a single time.

Race-safe holding recompute on the money path

Every holding recompute runs inside the write transaction under a PostgreSQL advisory lock, so concurrent edits to the same portfolio serialize instead of interleaving. Sells are checked against units held by a race-safe oversell guard, and transaction sync is idempotent through a client-supplied id backed by a unique-indexed upsert, so a retried request cannot double-apply.

Configurable two-stage trailing stop

Protection ratchets up in two stages as a trade works in the holder's favour and never loosens. The default was stress-tested across roughly 23 years of NSE price history (about 98,000 simulated trades) and outperformed the flat and volatility-scaled alternatives tested. This was an engineering-rigor exercise to validate a design default, not a promise of returns.

Offline-first sync over flaky networks

A local Drift and SQLite cache keeps the app fast and readable on a poor connection. It reconciles with the server through a debounced sync engine that runs periodically, on reconnect, and after edits, and the intraday evaluator rejects stale or outlier ticks before they can trigger a level.

Realtime pricing with a hard fallback

Realtime quotes come from Zerodha Kite Connect and stream to the app over SignalR, so the consolidated portfolio recomputes live P&L with no user action. Yahoo Finance is the fallback source, and end-of-day ingestion retries and fails loudly instead of silently writing stale data.

The Result

PortfolioPulse runs live in production for Indian-market traders as a full-stack investment companion. Holdings and alerts update in real time, and the app pushes the moments that matter (entry, halfway, break-even, near-stop, target, and stop) with held-asset-only filtering to keep the noise down. One consolidated view across brokers, asset classes, and every portfolio in the household replaces the old spreadsheet-and-screenshot workflow.

Reliability was a first-class requirement, not an afterthought. Realtime pricing runs on Zerodha Kite Connect with a Yahoo fallback, end-of-day ingestion retries and fails loudly instead of silently writing stale data, and the 24/7 executor logs every job cycle to a structured Postgres store with 90-day retention. Releases are health-checked (a timestamped release, a symlink swap, and health checks on both services) with automatic rollback to the previous release on any failure.

PortfolioPulse is MindGears' own R&D product and a proof point for what we ship: a realtime, cross-platform financial application taken end to end, from live broker data to a polished, accessible mobile app, with the money-path correctness, security, and operational discipline a finance app demands. The default two-stage trailing stop was stress-tested across roughly 23 years of NSE price history (about 98,000 simulated trades) to validate a design default, not as a promise of returns. Fully automated trade execution via Zerodha is next on the roadmap.

What Keeps It Running

2,300+ automated tests, green on every release (1,306 Flutter, 1,063 .NET)

24/7 executor daemon logs every job cycle to a structured Postgres store with 90-day retention

Health-checked releases: timestamped release, symlink swap, health checks on both services, automatic rollback on failure

End-of-day ingestion retries and fails loudly instead of silently writing stale data

Health checks guard both the API and the executor daemon

Building a realtime finance or trading app?

Money-path correctness, staged alert engines, realtime price layers, offline-first mobile. We've taken these end to end in production. Tell us what you're working on.

Get a Free Quote