# isaismail322/global_data_dashboard architecture

> Architecture diagram of the GitHub repository isaismail322/global_data_dashboard, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/isaismail322/global_data_dashboard
- Repository: https://github.com/isaismail322/global_data_dashboard

## Overview

This is a Next.js global market dashboard. The home-page server workflow fetches latest market data, news, and events from Supabase, then provides them to the interactive dashboard. The dashboard combines a symbol watchlist and historical/live chart with a news feed and event list/map; client components also subscribe to realtime database changes. The excerpts establish these main calls and data paths; details of some read-but-unsampled views are limited to the source index.

Main entry points: [`lib/supabase.ts`](https://github.com/isaismail322/global_data_dashboard/blob/main/lib/supabase.ts) (Supabase client), [`app/page.tsx`](https://github.com/isaismail322/global_data_dashboard/blob/main/app/page.tsx) (Home page), [`components/dashboard/Dashboard.tsx`](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/Dashboard.tsx) (Dashboard layout), [`components/dashboard/MarketChart.tsx`](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/MarketChart.tsx) (Market chart)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Page and dashboard"]
  node_home["Home page<br/>[page.tsx]"]
  node_dashboard["Dashboard layout<br/>[Dashboard.tsx]"]
end

subgraph group_market["Market intelligence"]
  node_symbol["Symbol watchlist<br/>[SymbolSidebar.tsx]"]
  node_marketchart["Market chart<br/>[MarketChart.tsx]"]
  node_marketquery["Market queries<br/>[market.ts]"]
end

subgraph group_events["Global events"]
  node_eventslist["Events list<br/>[EventsList.tsx]"]
  node_eventsmap["Events map<br/>[EventsMap.tsx]"]
  node_centroids["Country centroids"]
  node_eventsquery["Events query<br/>[events.ts]"]
end

subgraph group_news["News feed"]
  node_newslist["News list<br/>[NewsList.tsx]"]
  node_newsquery["News query<br/>[news.ts]"]
end

subgraph group_data["Data access and contracts"]
  node_supabaseclient["Supabase client<br/>[supabase.ts]"]
  node_contracts["Domain data types"]
end

node_visitor(("Dashboard visitor"))
node_supabase[("Supabase backend")]
node_osm["OpenStreetMap tiles"]

node_visitor -->|"opens"| node_home
node_home -->|"fetches latest"| node_marketquery
node_home -->|"fetches latest"| node_newsquery
node_home -->|"fetches latest"| node_eventsquery
node_home -->|"renders with data"| node_dashboard
node_dashboard -->|"renders"| node_symbol
node_dashboard -->|"renders"| node_marketchart
node_dashboard -->|"renders"| node_newslist
node_dashboard -->|"renders"| node_eventslist
node_marketchart -->|"loads history"| node_marketquery
node_marketchart -->|"subscribes realtime"| node_supabaseclient
node_symbol -->|"reads realtime"| node_supabaseclient
node_newslist -->|"reads realtime"| node_supabaseclient
node_eventslist -->|"subscribes and polls"| node_supabaseclient
node_eventslist -->|"renders locations"| node_eventsmap
node_eventsmap -->|"looks up coordinates"| node_centroids
node_marketquery -->|"queries market data"| node_supabaseclient
node_newsquery -->|"queries news"| node_supabaseclient
node_eventsquery -->|"queries events"| node_supabaseclient
node_eventsmap -->|"loads map tiles"| node_osm
node_supabaseclient -.->|"connects to"| node_supabase

click node_home "https://github.com/isaismail322/global_data_dashboard/blob/main/app/page.tsx"
click node_dashboard "https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/Dashboard.tsx"
click node_symbol "https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/SymbolSidebar.tsx"
click node_marketchart "https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/MarketChart.tsx"
click node_marketquery "https://github.com/isaismail322/global_data_dashboard/blob/main/lib/market.ts"
click node_newslist "https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/NewsList.tsx"
click node_newsquery "https://github.com/isaismail322/global_data_dashboard/blob/main/lib/news.ts"
click node_eventslist "https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/EventsList.tsx"
click node_eventsmap "https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/EventsMap.tsx"
click node_centroids "https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/countryCentroids.ts"
click node_eventsquery "https://github.com/isaismail322/global_data_dashboard/blob/main/lib/events.ts"
click node_supabaseclient "https://github.com/isaismail322/global_data_dashboard/blob/main/lib/supabase.ts"
click node_contracts "https://github.com/isaismail322/global_data_dashboard/tree/main/types"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_home,node_dashboard toneBlue
class node_symbol,node_marketchart,node_marketquery,node_supabase toneAmber
class node_eventslist,node_eventsmap,node_centroids,node_eventsquery toneMint
class node_newslist,node_newsquery toneRose
class node_supabaseclient,node_contracts,node_visitor,node_osm toneIndigo
```

## Components

### Page and dashboard

- [Home page](https://github.com/isaismail322/global_data_dashboard/blob/main/app/page.tsx): `app/page.tsx`
- [Dashboard layout](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/Dashboard.tsx): `components/dashboard/Dashboard.tsx`

### Market intelligence

- [Symbol watchlist](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/SymbolSidebar.tsx): `components/dashboard/SymbolSidebar.tsx`
- [Market chart](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/MarketChart.tsx): `components/dashboard/MarketChart.tsx`
- [Market queries](https://github.com/isaismail322/global_data_dashboard/blob/main/lib/market.ts): `lib/market.ts`

### Global events

- [Events list](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/EventsList.tsx): `components/dashboard/EventsList.tsx`
- [Events map](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/EventsMap.tsx): `components/dashboard/EventsMap.tsx`
- [Country centroids](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/countryCentroids.ts): `components/dashboard/countryCentroids.ts`
- [Events query](https://github.com/isaismail322/global_data_dashboard/blob/main/lib/events.ts): `lib/events.ts`

### News feed

- [News list](https://github.com/isaismail322/global_data_dashboard/blob/main/components/dashboard/NewsList.tsx): `components/dashboard/NewsList.tsx`
- [News query](https://github.com/isaismail322/global_data_dashboard/blob/main/lib/news.ts): `lib/news.ts`

### Data access and contracts

- [Supabase client](https://github.com/isaismail322/global_data_dashboard/blob/main/lib/supabase.ts): `lib/supabase.ts`
- [Domain data types](https://github.com/isaismail322/global_data_dashboard/tree/main/types): `types`

### Other components

- **Dashboard visitor**
- **Supabase backend**
- **OpenStreetMap tiles**

## Connections

- Dashboard visitor → Home page: opens
- Home page → Market queries: fetches latest (evidence: `app/page.tsx`)
- Home page → News query: fetches latest (evidence: `app/page.tsx`)
- Home page → Events query: fetches latest (evidence: `app/page.tsx`)
- Home page → Dashboard layout: renders with data (evidence: `app/page.tsx`)
- Dashboard layout → Symbol watchlist: renders (evidence: `components/dashboard/Dashboard.tsx`)
- Dashboard layout → Market chart: renders (evidence: `components/dashboard/Dashboard.tsx`)
- Dashboard layout → News list: renders (evidence: `components/dashboard/Dashboard.tsx`)
- Dashboard layout → Events list: renders (evidence: `components/dashboard/Dashboard.tsx`)
- Market chart → Market queries: loads history (evidence: `components/dashboard/MarketChart.tsx`)
- Market chart → Supabase client: subscribes realtime (evidence: `components/dashboard/MarketChart.tsx`)
- Symbol watchlist → Supabase client: reads realtime (evidence: `components/dashboard/SymbolSidebar.tsx`)
- News list → Supabase client: reads realtime (evidence: `components/dashboard/NewsList.tsx`)
- Events list → Supabase client: subscribes and polls (evidence: `components/dashboard/EventsList.tsx`)
- Events list → Events map: renders locations (evidence: `components/dashboard/EventsList.tsx`)
- Events map → Country centroids: looks up coordinates (evidence: `components/dashboard/EventsMap.tsx`)
- Market queries → Supabase client: queries market data (evidence: `lib/market.ts`)
- News query → Supabase client: queries news (evidence: `lib/news.ts`)
- Events query → Supabase client: queries events (evidence: `lib/events.ts`)
- Events map → OpenStreetMap tiles: loads map tiles (evidence: `components/dashboard/EventsMap.tsx`)
- Supabase client → Supabase backend: connects to
