~/work/museanalytics
MuseAnalytics
Visitor analytics for the Colby College Museum of Art
A full-stack data analytics platform that gives Colby College Museum of Art staff real-time visibility into visitor metrics, with sub-100ms dashboards backed by Redis and async PostgreSQL.
<100ms
dashboard response times
Async
SQLAlchemy 2.0 + PostgreSQL data layer
CI/CD
automated tests, lint & build checks
muse-analytics-6d539db2920e.herokuapp.com

01 · the problem
The Colby College Museum of Art collects visitor data but had no fast way to see it. Staff needed a dashboard that answers questions instantly, not reporting queries that crawl through raw records on every page load.
02 · what I built
- Built the platform end-to-end with FastAPI on the backend and React + TypeScript + Tailwind CSS on the frontend.
- Engineered a high-performance data layer using SQLAlchemy 2.0 and async PostgreSQL, significantly improving concurrency for complex reporting queries.
- Integrated Redis caching to serve pre-computed analytics, achieving sub-100ms dashboard response times for museum staff.
- Containerized the application with Docker and built a CI/CD pipeline with GitHub Actions automating pytest runs, Docker image build validation, and linting.
03 · the pipeline
- 1
collect
Visitor data flows into PostgreSQL through the FastAPI backend.
- 2
compute
Analytics are pre-computed instead of being recalculated per request.
- 3
cache
Redis serves the pre-computed metrics, keeping dashboard responses under 100ms.
- 4
visualize
A React + Tailwind dashboard gives staff real-time visibility into visitor metrics.
- 5
ship
GitHub Actions runs pytest, lint, and Docker build validation on every change.
04 · key decisions
Async from the data layer up
SQLAlchemy 2.0's async support with PostgreSQL means concurrent reporting queries don't block each other; the dashboard stays responsive even when staff pull complex reports simultaneously.
Cache the answer, not the query
Pre-computing analytics and serving them from Redis turns expensive aggregations into sub-100ms lookups. Staff get real-time-feeling dashboards without hammering the database.
CI/CD on day one
Tests, linting, and Docker build validation run automatically on every push: the kind of pipeline discipline I learned shipping at Google, applied to a campus project.
05 · where it stands
- ✓Sub-100ms dashboard responses for museum staff.
- ✓Real-time visibility into visitor metrics for the Colby College Museum of Art.
- ✓Fully containerized with automated CI/CD.