Back to Documentation
Tutorial30 minutes

Building a Real-Time Dashboard

Learn how to create a live data dashboard using Munashe Tech API and WebSocket connections

Prerequisites
  • Node.js 18+ and npm/yarn installed
  • Basic knowledge of React and Next.js
  • A Munashe Tech account with API access
  • Familiarity with TypeScript (recommended)

Step-by-Step Guide

1
Set Up Your Project
5 min
  • Create a new Next.js project with TypeScript
  • Install required dependencies
  • Set up your Munashe Tech API credentials
Code
# Create new Next.js project
npx create-next-app@latest dashboard-app --typescript

# Install dependencies
cd dashboard-app
npm install @munashetech/sdk socket.io-client recharts

# Create .env.local file
echo "NEXT_PUBLIC_MT_API_KEY=your_api_key_here" > .env.local
2
Initialize the SDK
3 min
  • Create a lib directory for SDK configuration
  • Initialize the Munashe Tech SDK with your API key
  • Set up WebSocket connection for real-time updates
Code
// lib/munashetech.ts
import { MunasheTech } from '@munashetech/sdk';

export const mtClient = new MunasheTech({
  apiKey: process.env.NEXT_PUBLIC_MT_API_KEY!,
  environment: 'production',
  enableRealtime: true
});

// Configure WebSocket for real-time data
export const realtimeConnection = mtClient.realtime.connect({
  autoReconnect: true,
  heartbeatInterval: 30000
});
3
Create Dashboard Layout
8 min
  • Build a responsive dashboard layout
  • Add navigation sidebar
  • Create placeholder cards for metrics
Code
// app/dashboard/page.tsx
import { DashboardMetrics } from '@/components/dashboard/metrics';
import { RealtimeChart } from '@/components/dashboard/chart';

export default function Dashboard() {
  return (
    <div className="min-h-screen bg-background">
      <nav className="border-b">
        <div className="container mx-auto px-4 py-4">
          <h1 className="text-2xl font-bold">Real-Time Dashboard</h1>
        </div>
      </nav>
      
      <main className="container mx-auto px-4 py-8">
        <div className="grid gap-6 md:grid-cols-3 mb-8">
          <DashboardMetrics />
        </div>
        
        <div className="grid gap-6 md:grid-cols-2">
          <RealtimeChart />
        </div>
      </main>
    </div>
  );
}
4
Fetch Real-Time Data
7 min
  • Set up React hooks for data fetching
  • Subscribe to real-time data streams
  • Handle connection states and errors
Code
// hooks/useRealtimeData.ts
import { useState, useEffect } from 'react';
import { realtimeConnection } from '@/lib/munashetech';

export function useRealtimeData() {
  const [data, setData] = useState([]);
  const [isConnected, setIsConnected] = useState(false);

  useEffect(() => {
    // Subscribe to data stream
    const subscription = realtimeConnection.subscribe('metrics', {
      onData: (newData) => {
        setData(prev => [...prev, newData].slice(-50));
      },
      onConnect: () => setIsConnected(true),
      onDisconnect: () => setIsConnected(false),
      onError: (error) => console.error('Stream error:', error)
    });

    return () => subscription.unsubscribe();
  }, []);

  return { data, isConnected };
}
5
Build Metric Cards
5 min
  • Create reusable metric card components
  • Display real-time statistics
  • Add loading and error states
Code
// components/dashboard/metrics.tsx
'use client';

import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { useRealtimeData } from '@/hooks/useRealtimeData';
import { TrendingUp, Users, Activity } from 'lucide-react';

export function DashboardMetrics() {
  const { data, isConnected } = useRealtimeData();
  
  const metrics = [
    {
      title: 'Active Users',
      value: data.length > 0 ? data[data.length - 1].users : 0,
      icon: Users,
      trend: '+12.5%'
    },
    {
      title: 'Requests/sec',
      value: data.length > 0 ? data[data.length - 1].rps : 0,
      icon: Activity,
      trend: '+8.2%'
    },
    {
      title: 'Uptime',
      value: '99.9%',
      icon: TrendingUp,
      trend: 'Stable'
    }
  ];

  return (
    <>
      {metrics.map((metric, i) => (
        <Card key={i}>
          <CardHeader className="flex flex-row items-center justify-between pb-2">
            <CardTitle className="text-sm font-medium">
              {metric.title}
            </CardTitle>
            <metric.icon className="h-4 w-4 text-muted-foreground" />
          </CardHeader>
          <CardContent>
            <div className="text-2xl font-bold">{metric.value}</div>
            <p className="text-xs text-muted-foreground">{metric.trend}</p>
          </CardContent>
        </Card>
      ))}
    </>
  );
}
6
Add Real-Time Charts
7 min
  • Integrate Recharts library
  • Create live updating line charts
  • Implement smooth animations
Code
// components/dashboard/chart.tsx
'use client';

import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { useRealtimeData } from '@/hooks/useRealtimeData';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';

export function RealtimeChart() {
  const { data, isConnected } = useRealtimeData();

  return (
    <Card className="col-span-2">
      <CardHeader>
        <CardTitle className="flex items-center gap-2">
          Live Metrics
          {isConnected && (
            <span className="flex h-2 w-2 rounded-full bg-green-500">
              <span className="animate-ping absolute h-2 w-2 rounded-full bg-green-400 opacity-75" />
            </span>
          )}
        </CardTitle>
      </CardHeader>
      <CardContent>
        <ResponsiveContainer width="100%" height={350}>
          <LineChart data={data}>
            <CartesianGrid strokeDasharray="3 3" />
            <XAxis dataKey="timestamp" />
            <YAxis />
            <Tooltip />
            <Line 
              type="monotone" 
              dataKey="value" 
              stroke="hsl(var(--primary))" 
              strokeWidth={2}
              dot={false}
              isAnimationActive={true}
            />
          </LineChart>
        </ResponsiveContainer>
      </CardContent>
    </Card>
  );
}
Testing Your Dashboard

Now that you've built your dashboard, let's test it:

  1. 1.Start your development server: npm run dev
  2. 2.Navigate to http://localhost:3000/dashboard
  3. 3.Verify the WebSocket connection indicator shows green (connected)
  4. 4.Watch as metrics update in real-time every few seconds
  5. 5.Open browser DevTools to monitor WebSocket messages

Troubleshooting Tips

  • • Ensure your API key is valid and has real-time access enabled
  • • Check browser console for WebSocket connection errors
  • • Verify network requests in DevTools Network tab
  • • Make sure you're not behind a firewall blocking WebSocket connections

Next Steps

Enhance Your Dashboard
Add filters, date ranges, and export functionality
Add Authentication
Secure your dashboard with user authentication

Have Questions?

Join our community or reach out to our support team