A dipstick on the Kenyan economy, and a read on where money is being paid
# Kenya Pulse
**A dipstick on the Kenyan economy, and a read on where money is being paid.**
Thirty published indicators from free sources. Three layers of signal.
One JSON file. No database, no accounts, no paid feeds.
`Python 3` · `React 19` · `Vite` · `PWA` · `MIT`
**Live app:** kenyapulse.gachichio.org ·
**Feed:**
gachichio.org
---
## What it does
Most macro dashboards show numbers. This one answers three questions in order.
| Layer | Question | Method |
|---|---|---|
| **Ladder** | Where is money actually being paid? | Every Kenyan instrument, after withholding tax, less inflation, ranked by **real** return |
| **Chain** | What is coming but has not printed? | Policy rate to GDP across five links, each with its own lag |
| **Breaks** | What is mispriced? | Long-held relationships (bank margin over policy, sovereign spread, real deposit rate…) flagged when they leave their range |
A number alone is noise. A number against its own history is context. A number
against a relationship that has held for twenty years is a signal.
There is deliberately **no composite score**. The headline is the most
actionable fact instead: the best real return available today, and what
standing still in cash costs against it.
---
## Architecture
```
cron: 1st & 16th, plus a lighter Saturday pass
│
▼
CBK ──▶┌──────────────────────┐
NSE ──▶│ │──▶ public/data.json one static file,
FRED ──▶│ kenya_pulse.py │ served by Caddy
IMF ──▶│ │──▶ Telegram alert when something moves
WB ──▶│ reconcile → ladder │ or a rate goes stale
manual ──▶│ chain · breaks │
└──────────────────────┘
│
▼
Kenya Pulse PWA — React + Vite, hosted on Vercel,
installable on Android, iOS and desktop
```
One script writes one file. The app reads it. Nothing else runs.
**Why no database.** Twenty-five years of history is under 2 MB. Postgres to
hold 2 MB buys a daemon, a port, a backup policy and an upgrade path in
exc …