Self-hosted web analytics: page views and session times on a private dashboard I control end to end.

Role

Developer

Timeline
May 2023

Technologies

  • JS
  • Node.js
  • Express.js
  • MySQL
  • ZingChart
  • ZingGrid

Tools

  • DigitalOcean
  • GitHub
  • MySQL Workbench
  • Postman

Background

Started as a project for CSE 135 (Online Database Analytics Applications) at UCSD. I was curious which of my pages people actually visit and how long they stay. Existing analytics tools gave me more than I needed while taking my data elsewhere. So I built my own tracker.

Solution

A Node/Express endpoint collects visit data into MySQL, and a private dashboard renders traffic in ZingChart charts and tables. Login-gated so the analytics are mine alone.

Process

Deciding what was worth tracking came first: page views, session duration, and little else. Then schema design for event data, the collection code, and the dashboard. Verified end-to-end by browsing my sites and watching numbers land correctly.

Final Product

Impact

It replaced guessing with real numbers for my own projects. It was also a solid full-stack exercise, since instrumentation, storage, and visualization all touch the same data.

Reflection

Designing a schema for append-heavy event tracking was new to me, and worth the effort. Handling higher volume and per-event drill-down charts would come next.