Non-profit and education
Our work, filtered to one sector.
Your system of record is a SaaS you can't modify, and it only emits a daily spreadsheet that's a 31-day rolling window rather than a running total, so summing snapshots double-counts and naively diffing them reports 'lost' donors who did nothing. The same data has to drive both a sensitive internal view and a public page that must not leak names or dollar figures.
How we would approach it
Reconstruct the missing daily event stream by diffing consecutive snapshots, modeling window roll-off as its own category so gifts aging out aren't reported as churn, and refuse to compute the misleading cumulative total, naming every field for what's actually true of windowed data. Enforce the public/private split at the API boundary with a separate DTO that has no sensitive fields by construction, served as a stateless Next.js app on Cloud Run reading object storage through a bound service account, with computed results cached behind a short-TTL freshness check.
- TypeScript
- Cloud Run
- Google Cloud
2 published in this sector · 2 written up in full