01 The Problem
OneUp is a pre-revenue startup building a text-message-based coaching platform for teenagers. The founders had product data sitting in a production database, but no way to actually see how their beta cohorts were engaging with the product.
Every question about user behavior meant someone manually querying the database and reporting back. There was no live view, no way to track trends over time, and no way to catch problems as they happened.
02 The Approach
Data Mapping
Connected to the production database and mapped tables for users, check-ins, and coaching stages.
SQL Logic
Wrote all underlying queries using CTEs and generate_series to calculate expected activity per user.
Dashboard Build
Built two cohort dashboards covering enrollment, activation, engagement trends, and behavioral growth.
Deployment
Deployed Metabase on AWS EC2 on a custom subdomain so the team didn’t need database access.
Team Access
Migrated the local build to the live server and set up individual logins.
03 The Result
Two dashboards tracking real cohorts across 10+ metrics
Enrollment, activation, engagement trends, and behavioral growth — all in one place the team could open anytime.
Completion rates over 100%
Found and fixed a mismatched date range that was inflating completion metrics.
Duplicate profile records
Traced skew to duplicate user profiles, then rebuilt the calc to use actual first activity instead of a stored date.
One cohort completed ~78% of check-ins; another ranged 23–64%
A difference worth flagging directly — not a vague “engagement feels low.”
04 Business Impact
Self-Serve Data
Founders check real numbers without asking for a report.
Turned a Hunch into a Number
“Some students seem less engaged” became a specific, verified gap.
Caught Bad Data Early
Fixed two accuracy bugs before they led to a wrong call.
Cohort Comparison
Made it possible to compare cohorts for the first time.
05 What I Learned
This was my first time deploying something live, not just analyzing data in a notebook. I picked up Metabase and Docker on the fly and set up a custom subdomain so the team could reach it without needing AWS access.