Mara

What it is
Mara is an analytics platform for the Nairobi Securities Exchange. It does real-time stock analysis, machine learning price forecasting, portfolio management, and strategy backtesting, and it has a Telegram bot so people can get answers without opening a dashboard.
It is a real product with real users, not a demo. I designed it, built the backend and the frontend, trained the models, deployed it, and I still run it.
Why I built it
Kenyan retail investors have very little tooling. The data exists but it is scattered, mostly unstructured, and priced for institutions. I wanted to find out whether one person could close that gap end to end, and the honest answer is that the modelling was the easy part. Getting reliable NSE data, keeping it fresh, and presenting it in a way that does not mislead someone about to spend their own money turned out to be the actual work.
How it works
- A Django backend owns ingestion, the API, and the scheduled jobs that keep prices current.
- Forecasting runs on scikit-learn. I keep the models deliberately simple, because a model I can explain to a user is worth more here than one that scores marginally better offline.
- A React frontend covers the dashboard, portfolio views, and backtest results.
- A Telegram bot handles the lightweight questions, which is how most people actually use it.
- The whole stack is containerised and deployed with Docker.


The decision I am most sure about
Every number the platform shows is labelled with what it is and what it is not. Backtests report both gross and net returns, forecasts are framed as forecasts, and the disclaimer that this is not financial advice is in the product rather than buried in a footer. It would be easy to make the numbers look better than they are. In a product that touches people’s savings, that is the one thing I am not willing to do.
What it taught me
Operating something is a different skill from building it. Scrapers break, upstream sources change their markup without warning, and a job that silently fails is worse than one that loudly crashes. Most of what I have learned from Mara is about monitoring, retries, and designing for the day the data source stops cooperating.