The challenge
The client's analytics dashboard was built as a Django monolith during their MVP phase. As they scaled to 2,000+ active users, the cracks started showing: page loads hit 4.2 seconds, the frontend couldn't support real-time data updates, and their engineering team spent 40% of sprint time on maintenance instead of shipping features.
They needed a modern frontend without disrupting their existing API layer — and critically, without any downtime for their paying customers.
Our approach
We ran a 2-week discovery phase to map every dashboard view, API dependency, and user workflow. Rather than a big-bang rewrite, we designed a strangler-fig migration: a new Next.js frontend consuming the existing Django REST API, page by page.
We set a strict performance budget — LCP under 1.2s, CLS under 0.1 — enforced in CI on every pull request. Feature flags allowed us to roll out the new frontend incrementally: 10%, 25%, 50%, 100% of traffic, with real-time error monitoring at each stage.
Key technical decisions:
- Next.js App Router for streaming SSR and granular caching
- TanStack Query for server state management with optimistic updates
- Chose NOT to rebuild the API — the Django backend was solid, the frontend was the bottleneck
What we built
A complete frontend rebuild that maintained API compatibility while dramatically improving performance and developer experience. The new system included:
- Real-time dashboard updates via WebSocket integration
- Responsive design supporting desktop and tablet workflows
- Automated performance regression testing in CI
- Feature flag system for safe incremental rollout
- Comprehensive monitoring and alerting via Datadog