DV
Back to all projects

Denver Urban Pulse

Production BI Dashboard — Live City Analytics

Interactive analytics dashboard with daily-refreshed data from 4 public APIs. Three-layer data pipeline (raw → staging → marts), choropleth map, heatmaps, KPI cards with sparklines, and global filtering.

Next.js TypeScript PostgreSQL Python Leaflet Recharts Railway Vercel
Denver Urban Pulse

Overview

Denver Urban Pulse is a public BI dashboard built on live Denver open data, refreshed daily. It tracks the city’s operational pulse across crime, traffic crashes, 311 service requests, and air quality — broken down by neighborhood. The goal: give residents, journalists, and city stakeholders a clear picture of what’s happening without digging through raw government datasets.

Architecture

┌─────────────────────────────────────────────────────┐
│                    Data Sources                      │
│  ArcGIS (Crime, Crashes, 311)  ·  AirNow API (AQI)  │
└──────────────────────┬──────────────────────────────┘
                       │  daily cron (06:00 UTC)

┌─────────────────────────────────────────────────────┐
│              Python Pipeline (Railway)               │
│  Migrations → Ingestion → Staging → Marts            │
└──────────────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│              PostgreSQL (Railway)                     │
│  raw (5 tables) → staging (5) → marts (9)            │
└──────────────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│          Next.js API Routes (Vercel)                 │
│  /city-pulse/kpis  · /categories · /heatmap          │
│  /category-trends  · /neighborhoods                  │
│  /environment/aqi  · /environment/comparison          │
└──────────────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│            React Dashboard (Vercel)                   │
│  KPIs · Map · Charts · Heatmap · Ranking · Filters   │
└─────────────────────────────────────────────────────┘

Key Features

Data Sources

SourceProviderRefresh
Crime incidentsDenver Open Data (ArcGIS)Daily, last 90 days
Traffic crashesDenver Open Data (ArcGIS)Daily, last 90 days
311 service requestsDenver Open Data (ArcGIS)Daily, last 90 days
Air quality (AQI)AirNow APIDaily, last 90 days
Neighborhood boundariesDenver Open Data (GeoJSON)On change

Tech Stack

LayerTechnology
FrontendNext.js 16 (App Router), React 19, TypeScript 5.9
StylingTailwind CSS 4, shadcn/ui, IBM Plex Sans
ChartsRecharts 3
MapLeaflet + React Leaflet
DatabasePostgreSQL (Railway)
APINext.js Route Handlers (7 endpoints)
Data PipelinePython 3.12 daily cron (Railway)
DeployVercel (frontend), Railway (DB + pipeline)
TestingJest 30, React Testing Library