Nonprofit Fundraising Platform
Multi-tenant SaaS platform for universities and nonprofits to run fundraising campaigns with real-time donation tracking, ambassador programs, customisable branding, and enterprise-grade scalability on Kubernetes.
🔒 Private / client work — the live site and code are under NDA. Happy to walk through the architecture and my role on a call.
Project Overview
A full-featured fundraising platform that enables organisations to launch and manage fundraising campaigns. The system supports multi-tenant isolation with per-organisation databases, real-time donation feeds via Server-Sent Events, ambassador fundraising pages, configurable challenges, and white-label branding — all managed through a Wagtail CMS admin.
Key Features
- Multi-tenant architecture with shared main DB and per-org donation databases
- Real-time donation feed powered by SSE microservices (FastAPI and Rust/Axum) with Redis pub/sub
- Ambassador program — personal fundraising pages with individual goals and leaderboards
- Campaign thermometers, time-limited challenges, and cause designations
- White-label branding per organisation (logos, colours, fonts, custom domains)
- SSO authentication via OIDC (Google, Azure AD, Okta)
- Celery background tasks for stats aggregation and cache warming
- Bot detection and rate limiting on SSE connections
- Distributed tracing with OpenTelemetry and Jaeger
- End-to-end test suite with Playwright
Architecture
Multi-service stack: Django/Gunicorn for the web tier, FastAPI/Hypercorn and Rust/Axum for async SSE streaming over HTTP/2, Celery workers for background processing, MySQL for multi-tenant storage, and Redis for caching and pub/sub. Media served from Azure Blob Storage behind a CDN. Deployed to Kubernetes via Helm with auto-scaling, pod disruption budgets, and health probes. Performance-tuned from 70+ queries down to 9 on complex campaign pages through N+1 elimination and multi-layer caching.