Skip to content
← Back to selected work
Project Case Study

Analytics API

Django REST API and Next.js dashboard organized around analytics aggregation.

Problem

A dashboard needs activity and engagement data shaped for presentation without spreading aggregation rules across frontend components.

Constraints

  • Keep data shaping on the server side so dashboard views stay focused on display logic.
  • Expose a REST boundary that makes analytics queries explicit.
  • Avoid claiming performance wins without measured evidence from the deployment.

Architecture

The dashboard talks to a Django REST API that owns analytics endpoints and aggregation-focused data access before the Next.js UI renders the result.

01

Next.js dashboard

02

Django REST API

03

Analytics endpoint layer

04

Aggregation/query logic

05

Activity data store

06

Dashboard visual states

Dashboard requests a specific analytics view from the REST API

API endpoint validates the requested shape and delegates aggregation

Aggregation logic queries activity and engagement data

The API returns presentation-ready summaries

The dashboard renders the response without duplicating backend query rules

Tradeoffs

  • Server-side aggregation simplifies frontend code, but API changes need careful coordination with dashboard views.
  • REST keeps the boundary straightforward, but each new analytics shape needs an intentional endpoint contract.
  • Pre-shaped responses reduce UI work, but they can become too specific if dashboard needs change quickly.

Failure modes

  • Expensive aggregation can slow dashboard responses if query shape and indexes are not revisited as data grows.
  • A partial backend failure can make charts look empty unless the UI distinguishes no data from failed data.
  • Time-window and filtering assumptions can produce misleading summaries if they are not visible in the interface.

What I would improve next

  • Add explicit empty, loading, and failed states per dashboard panel.
  • Document endpoint contracts with example request and response payloads.
  • Introduce measured query profiling before making any optimization claims.