jsondash is a multi-stack analytics application that turns raw JSON into a structured dashboard. Its goal is simple: make JSON-based reporting easier to inspect, easier to share, and easier to ship across different platforms without changing the product idea.
The same application is implemented in four stacks: React + TypeScript, Angular + TypeScript, Flask + Python/HTML/CSS/JavaScript, and WPF + C#/XAML. Each implementation can load local JSON files, infer schema automatically, generate KPI cards and summaries, render quick charts, display a full ApexCharts gallery, and keep source rows searchable in one screen.
- Preview
- Why jsondash
- Technology stack
- Features
- Quick start
- Run each stack manually
- How to use the app
- Example JSON
- Example code
- JSON shape expectations
- Project structure
- Architecture notes
- Verification
- License
The screenshots below were captured in Chrome from local application runs using the shared sample dataset.
- Provide a single analytics product that works across web, server-rendered, and desktop environments.
- Turn unfamiliar JSON into a readable operational dashboard in minutes.
- Offer a practical starting point for internal reporting tools, analytics surfaces, and dashboard-driven products.
- Make stack comparison easier when teams need to choose between React, Angular, Flask, or WPF.
| Stack | Language(s) | Rendering model | Charting approach | Start command |
|---|---|---|---|---|
| React | TypeScript | Client-side SPA | react-apexcharts |
.\launch.ps1 -Stack React |
| Angular | TypeScript | Client-side SPA | ng-apexcharts + apexcharts |
.\launch.ps1 -Stack Angular |
| Flask | Python, HTML, CSS, JavaScript | Server-rendered web app | ApexCharts in the browser | .\launch.ps1 -Stack Flask |
| WPF | C#, XAML | Native Windows desktop app | Embedded Apex gallery via WebView2 | .\launch.ps1 -Stack WPF |
- Load local JSON files directly from the UI.
- Restore the shared
sales.jsonsample in one click. - Detect numeric, categorical, and date-like fields automatically.
- Show KPI cards for dataset shape.
- Generate numeric summaries with averages, minimums, and maximums.
- Render trend and breakdown panels from inferred fields.
- Render a complete ApexCharts gallery with line, area, bar, pie, donut, radial bar, scatter, bubble, heatmap, candlestick, box plot, radar, polar area, range bar, range area, and treemap views.
- Search and inspect raw rows without leaving the page or window.
Use the launcher to choose a stack interactively:
.\launch.ps1Or start a specific implementation directly:
.\launch.ps1 -Stack React
.\launch.ps1 -Stack Angular
.\launch.ps1 -Stack Flask
.\launch.ps1 -Stack WPF- Windows PowerShell
- Access to the project folder
- Node.js 20+ recommended
- npm
- Python 3.11+ recommended
pythonavailable on PATH
- .NET SDK with Windows desktop support
- Windows environment
- WebView2 runtime available on the machine for the embedded Apex gallery
cd .\react
npm install
npm run dev -- --host 0.0.0.0Default local URL:
http://localhost:5173
cd .\angular
npm install
npm run live-demoDefault local URL:
http://localhost:4200
cd .\flask
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe app.pyDefault local URL:
http://127.0.0.1:5000
cd .\wpf
dotnet build
dotnet run- Launch the stack you want to explore.
- Click
Load sampleto open the shared sales dataset instantly. - Click
Load JSON fileorOpen JSON fileto load your own file. - Review the KPI cards to confirm row and field counts.
- Check the detected field tags to see how the parser classified your data.
- Read the numeric summary to understand averages, minimums, and maximums.
- Use the quick charts for a fast first pass.
- Scroll to the Apex gallery to explore the same data through multiple chart families.
- Use the search box in the data explorer to inspect matching rows.
Use a structure like this when you want the automatic schema detection and chart generation to work well.
The repository already includes a ready-to-load sample at shared/sample-data/sales.json.
{
"sales": [
{
"date": "2025-01-01",
"region": "EU",
"channel": "Direct",
"revenue": 1200,
"orders": 24,
"margin": 312
},
{
"date": "2025-01-02",
"region": "US",
"channel": "Partner",
"revenue": 1800,
"orders": 31,
"margin": 455
},
{
"date": "2025-01-03",
"region": "APAC",
"channel": "Direct",
"revenue": 1660,
"orders": 29,
"margin": 401
}
]
}Top-level arrays also work:
[
{ "date": "2025-01-01", "region": "EU", "revenue": 1200, "orders": 24 },
{ "date": "2025-01-02", "region": "US", "revenue": 1800, "orders": 31 },
{ "date": "2025-01-03", "region": "APAC", "revenue": 1660, "orders": 29 }
].\launch.ps1 -Stack Angularcurl http://127.0.0.1:5000/api/dashboardasync function handleFile(file: File) {
const raw = await file.text();
const parsed = JSON.parse(raw);
setDashboard(analyzeJson(parsed));
}const options = {
chart: { type: "line", height: 280 },
series: [
{
name: "Revenue",
data: [1200, 1800, 1660, 1940]
}
],
xaxis: {
categories: ["2025-01-01", "2025-01-02", "2025-01-03", "2025-01-04"]
}
};cd .\flask
.\.venv\Scripts\python.exe app.pyThe parser is flexible, but the smoothest path is:
- A top-level array of objects.
- Or a top-level object containing one array of objects.
- Numeric fields for metrics and chart values.
- Category or date-like fields for grouping and trend views.
Examples that work well:
[
{ "date": "2025-01-01", "region": "EU", "revenue": 1200, "orders": 24 },
{ "date": "2025-01-02", "region": "US", "revenue": 1800, "orders": 31 }
]{
"sales": [
{ "date": "2025-01-01", "region": "EU", "revenue": 1200, "orders": 24 },
{ "date": "2025-01-02", "region": "US", "revenue": 1800, "orders": 31 }
]
}The repository includes a shared sample dataset used by every implementation:
shared/sample-data/sales.json
jsondash/
├── angular/
│ ├── src/
│ └── angular.json
├── docs/
│ └── assets/
├── flask/
│ ├── static/
│ ├── templates/
│ └── app.py
├── react/
│ ├── src/
│ └── package.json
├── shared/
│ └── sample-data/
├── wpf/
│ ├── Models/
│ ├── Services/
│ ├── ViewModels/
│ └── MainWindow.xaml
├── .gitignore
├── launch.ps1
├── LICENSE
└── README.md
Every stack follows the same product logic:
- Find the active dataset.
- Inspect the available keys.
- Infer which keys are numeric, categorical, and date-like.
- Build summary metrics.
- Create lightweight trend and breakdown charts.
- Feed a larger chart gallery from the inferred structure.
Every implementation is organized around the same flow:
- Hero and source selection
- KPI row
- Field scan and numeric summary
- Quick charts
- Full Apex gallery
- Searchable row explorer
This repository is useful when you need to:
- Compare frontend and desktop delivery approaches.
- Run the same product in different environments.
- Benchmark how fast a concept can move across frameworks.
- Choose the implementation style that best fits a team or deployment target.
Verified locally during setup:
- Angular:
npm run build - React:
npm run build - Flask: test client request returns
200 - WPF:
dotnet build
node_modules, virtual environments, build output, logs, and editor-only folders are excluded through.gitignore.- The repository is intended to publish only source, shared data, launcher scripts, assets, and public documentation.
License MIT. See LICENSE.
Feel free to use this project however you like - fork it, ship it, tear it apart, build something bigger on top of it. If you end up using it in something public, a small credit or a link back would make my day, but it's not a requirement. Thanks for taking a look.

