Pulse: Team Analytics SaaS
A multi-tenant analytics platform that turns scattered team data into one weekly signal founders actually read.
- Year
- 2024
- Timeline
- 10 weeks
- Category
- SaaS Platform
- −31%
- Trial-to-paid churn
- <200ms
- p95 dashboard load
- 12k/s
- Events ingested at peak
The Problem
A B2B startup lost trial users because product data lived in five disconnected tools. Founders had no view of engagement, and churn was invisible until customers left. They needed a SaaS that aggregated usage and surfaced risk, without a data team.
The Solution
Pulse: a multi-tenant analytics SaaS with org isolation, role-based access, Stripe subscriptions, and streaming ingestion. A worker rolls events into per-tenant metrics and emails a weekly digest flagging churn-risk accounts.
My Role
Sole engineer and architect. Designed the multi-tenant data model, built the Next.js dashboard and NestJS API, set up Stripe billing, and shipped the AWS deploy with CI/CD.
Tech Stack
- Next.js
- NestJS
- PostgreSQL
- Prisma ORM
- Redis
- Stripe
- AWS
- Docker
- GitHub Actions
How it fits together.
The high-level architecture: services, data stores, and the external systems they talk to.
Approach
The core decision was tenant isolation by row, not database. A shared schema with
tenantId on every table kept ops simple while Prisma middleware enforced the boundary
on every query. Ingestion is decoupled via a Redis queue, and a nightly rollup
pre-computes dashboard metrics, which kept p95 load under 200ms as volume grew.
Highlights
- Stripe webhooks drive subscription state, no manual plan management.
- Feature flags gate plan tiers without redeploys.
- The weekly digest became the main retention lever, surfacing churn risk early.
Screens