A · TRANSPARENT BY CONSTRUCTION
Every metric is a class. Read the formula, read the SQL.
Each metric (MRR, churn, retention, LTV…) lives in a self-contained Python module with its formula, SQL, edge cases, and API in one place. Compiled SQL travels through a typed query algebra — never string concatenation.
# tidemill/metrics/mrr/metric.py
@register
class MRR(Metric):
"""Active recurring revenue at time t."""
def query(self, spec) -> Select:
...
B · PLUGGABLE CONNECTORS
Webhook or direct database.
Stripe (webhooks → Kafka → PostgreSQL) is the revenue pipeline. QuickBooks Online feeds expense data. Same-database mode supports billing engines that expose a PostgreSQL. Add a new connector in < 200 LOC.
stripe webhook
quickbooks webhook
+ your own translate() + register()
C · YOURS TO RUN
One docker compose up.
PostgreSQL + Redpanda + FastAPI + a React dashboard, behind Caddy with auto-TLS. Deploys on a single €4/mo Hetzner box, or a k3s HA cluster. Your data stays on your infrastructure.
$ docker compose up -d
✓ postgres healthy
✓ redpanda healthy
✓ api listening :8000
✓ caddy tls ready