# pooria12/datatest architecture

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

- Interactive diagram: https://gitdiagram.com/pooria12/datatest
- Repository: https://github.com/pooria12/datatest

## Overview

DataMind AI is a browser-based dataset analysis and quality platform. The principal workflow is uploading a CSV/TSV, parsing it, profiling its contents, generating a quality report, and saving the active dataset locally; users can then inspect previews, quality results, and analysis pages. Profiling is a distinct internal layer, with type inference, missing-value and duplicate detection, and statistics feeding the profile. AI insights, cleaning, and authentication are planned rather than implemented. Edges reflect shown calls or documented capabilities; unsampled page internals are not assumed.

Main entry points: [`src/app/router.tsx`](https://github.com/pooria12/datatest/blob/main/src/app/router.tsx) (Page router), [`src/context/DatasetProvider.tsx`](https://github.com/pooria12/datatest/blob/main/src/context/DatasetProvider.tsx) (Dataset state), [`src/lib/profiling/profilingEngine.ts`](https://github.com/pooria12/datatest/blob/main/src/lib/profiling/profilingEngine.ts) (Profiling engine), [`src/lib/storage/datasetRepository.ts`](https://github.com/pooria12/datatest/blob/main/src/lib/storage/datasetRepository.ts) (Dataset repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application shell"]
  node_app["App providers<br/>[App.tsx]"]
  node_router["Page router<br/>[router.tsx]"]
end

subgraph group_workflow["Dataset workflow"]
  node_upload["Upload page<br/>[Upload.tsx]"]
  node_dataset["Dataset state"]
  node_parser["CSV/TSV parser<br/>[csvParser.ts]"]
  node_preview["Data preview<br/>[Preview.tsx]"]
  node_types["Dataset data model<br/>[dataset.types.ts]"]
end

subgraph group_analysis["Analysis and reports"]
  node_dashboard["Dataset dashboard<br/>[Dashboard.tsx]"]
  node_profiler["Profiling engine<br/>[profilingEngine.ts]"]
  node_type["Type inference<br/>[typeInference.ts]"]
  node_missing["Missing values<br/>[missingValues.ts]"]
  node_duplicates["Duplicate detection<br/>[duplicates.ts]"]
  node_statistics["Column statistics<br/>[statistics.ts]"]
  node_qualitygen["Quality scoring<br/>[dataQuality.ts]"]
  node_quality["Quality report<br/>[Quality.tsx]"]
  node_feature["Feature analysis"]
  node_insights["AI insights &#40;planned&#41;<br/>[AIInsights.tsx]"]
  node_cleaning["Data cleaning &#40;planned&#41;<br/>[Cleaning.tsx]"]
end

subgraph group_persistence["Local persistence"]
  node_repository["Dataset repository"]
  node_database[("IndexedDB<br/>[database.ts]")]
end

subgraph group_runtime["Runtime support"]
  node_worker["Health endpoint<br/>[index.ts]"]
end

node_user(("Analyst"))
node_cloudflare(("Cloudflare runtime"))

node_user -->|"opens app"| node_router
node_app -->|"provides routes"| node_router
node_router -->|"routes to"| node_upload
node_router -->|"routes to"| node_preview
node_router -->|"routes to"| node_dashboard
node_router -->|"routes to"| node_quality
node_router -->|"routes to"| node_feature
node_router -->|"routes to"| node_insights
node_router -->|"routes to"| node_cleaning
node_user -->|"submits dataset"| node_dataset
node_dataset -->|"parses file"| node_parser
node_dataset -->|"profiles rows"| node_profiler
node_dataset -->|"generates report"| node_qualitygen
node_dataset -->|"saves dataset"| node_repository
node_profiler -->|"infers types"| node_type
node_profiler -->|"counts missing"| node_missing
node_profiler -->|"detects duplicates"| node_duplicates
node_profiler -->|"builds statistics"| node_statistics
node_repository -->|"reads and writes"| node_database
node_cloudflare -->|"serves health API"| node_worker

click node_app "https://github.com/pooria12/datatest/blob/main/src/app/App.tsx"
click node_router "https://github.com/pooria12/datatest/blob/main/src/app/router.tsx"
click node_upload "https://github.com/pooria12/datatest/blob/main/src/pages/Upload.tsx"
click node_dataset "https://github.com/pooria12/datatest/blob/main/src/context/DatasetProvider.tsx"
click node_parser "https://github.com/pooria12/datatest/blob/main/src/lib/csv/csvParser.ts"
click node_preview "https://github.com/pooria12/datatest/blob/main/src/pages/Preview.tsx"
click node_dashboard "https://github.com/pooria12/datatest/blob/main/src/pages/Dashboard.tsx"
click node_profiler "https://github.com/pooria12/datatest/blob/main/src/lib/profiling/profilingEngine.ts"
click node_type "https://github.com/pooria12/datatest/blob/main/src/lib/profiling/typeInference.ts"
click node_missing "https://github.com/pooria12/datatest/blob/main/src/lib/profiling/missingValues.ts"
click node_duplicates "https://github.com/pooria12/datatest/blob/main/src/lib/profiling/duplicates.ts"
click node_statistics "https://github.com/pooria12/datatest/blob/main/src/lib/profiling/statistics.ts"
click node_qualitygen "https://github.com/pooria12/datatest/blob/main/src/lib/profiling/dataQuality.ts"
click node_quality "https://github.com/pooria12/datatest/blob/main/src/pages/Quality.tsx"
click node_feature "https://github.com/pooria12/datatest/blob/main/src/pages/FeatureAnalysis.tsx"
click node_insights "https://github.com/pooria12/datatest/blob/main/src/pages/AIInsights.tsx"
click node_cleaning "https://github.com/pooria12/datatest/blob/main/src/pages/Cleaning.tsx"
click node_types "https://github.com/pooria12/datatest/blob/main/src/types/dataset.types.ts"
click node_repository "https://github.com/pooria12/datatest/blob/main/src/lib/storage/datasetRepository.ts"
click node_database "https://github.com/pooria12/datatest/blob/main/src/lib/storage/database.ts"
click node_worker "https://github.com/pooria12/datatest/blob/main/worker/index.ts"

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_app,node_router toneBlue
class node_upload,node_dataset,node_parser,node_preview,node_types toneAmber
class node_dashboard,node_profiler,node_type,node_missing,node_duplicates,node_statistics,node_qualitygen,node_quality,node_feature,node_insights,node_cleaning toneMint
class node_repository,node_database toneRose
class node_worker,node_user,node_cloudflare toneIndigo
```

## Components

### Application shell

- [App providers](https://github.com/pooria12/datatest/blob/main/src/app/App.tsx): `src/app/App.tsx`
- [Page router](https://github.com/pooria12/datatest/blob/main/src/app/router.tsx): `src/app/router.tsx`

### Dataset workflow

- [Upload page](https://github.com/pooria12/datatest/blob/main/src/pages/Upload.tsx): `src/pages/Upload.tsx`
- [Dataset state](https://github.com/pooria12/datatest/blob/main/src/context/DatasetProvider.tsx): `src/context/DatasetProvider.tsx`
- [CSV/TSV parser](https://github.com/pooria12/datatest/blob/main/src/lib/csv/csvParser.ts): `src/lib/csv/csvParser.ts`
- [Data preview](https://github.com/pooria12/datatest/blob/main/src/pages/Preview.tsx): `src/pages/Preview.tsx`
- [Dataset data model](https://github.com/pooria12/datatest/blob/main/src/types/dataset.types.ts): `src/types/dataset.types.ts`

### Analysis and reports

- [Dataset dashboard](https://github.com/pooria12/datatest/blob/main/src/pages/Dashboard.tsx): `src/pages/Dashboard.tsx`
- [Profiling engine](https://github.com/pooria12/datatest/blob/main/src/lib/profiling/profilingEngine.ts): `src/lib/profiling/profilingEngine.ts`
- [Type inference](https://github.com/pooria12/datatest/blob/main/src/lib/profiling/typeInference.ts): `src/lib/profiling/typeInference.ts`
- [Missing values](https://github.com/pooria12/datatest/blob/main/src/lib/profiling/missingValues.ts): `src/lib/profiling/missingValues.ts`
- [Duplicate detection](https://github.com/pooria12/datatest/blob/main/src/lib/profiling/duplicates.ts): `src/lib/profiling/duplicates.ts`
- [Column statistics](https://github.com/pooria12/datatest/blob/main/src/lib/profiling/statistics.ts): `src/lib/profiling/statistics.ts`
- [Quality scoring](https://github.com/pooria12/datatest/blob/main/src/lib/profiling/dataQuality.ts): `src/lib/profiling/dataQuality.ts`
- [Quality report](https://github.com/pooria12/datatest/blob/main/src/pages/Quality.tsx): `src/pages/Quality.tsx`
- [Feature analysis](https://github.com/pooria12/datatest/blob/main/src/pages/FeatureAnalysis.tsx): `src/pages/FeatureAnalysis.tsx`
- [AI insights (planned)](https://github.com/pooria12/datatest/blob/main/src/pages/AIInsights.tsx): `src/pages/AIInsights.tsx`
- [Data cleaning (planned)](https://github.com/pooria12/datatest/blob/main/src/pages/Cleaning.tsx): `src/pages/Cleaning.tsx`

### Local persistence

- [Dataset repository](https://github.com/pooria12/datatest/blob/main/src/lib/storage/datasetRepository.ts): `src/lib/storage/datasetRepository.ts`
- [IndexedDB](https://github.com/pooria12/datatest/blob/main/src/lib/storage/database.ts): `src/lib/storage/database.ts`

### Runtime support

- [Health endpoint](https://github.com/pooria12/datatest/blob/main/worker/index.ts): `worker/index.ts`

### Other components

- **Analyst**
- **Cloudflare runtime**

## Connections

- Analyst → Page router: opens app (evidence: `README.md`)
- App providers → Page router: provides routes (evidence: `src/app/App.tsx`)
- Page router → Upload page: routes to (evidence: `src/app/router.tsx`)
- Page router → Data preview: routes to (evidence: `src/app/router.tsx`)
- Page router → Dataset dashboard: routes to (evidence: `src/app/router.tsx`)
- Page router → Quality report: routes to (evidence: `src/app/router.tsx`)
- Page router → Feature analysis: routes to (evidence: `src/app/router.tsx`)
- Page router → AI insights (planned): routes to (evidence: `src/app/router.tsx`)
- Page router → Data cleaning (planned): routes to (evidence: `src/app/router.tsx`)
- Analyst → Dataset state: submits dataset (evidence: `README.md`)
- Dataset state → CSV/TSV parser: parses file (evidence: `src/context/DatasetProvider.tsx`)
- Dataset state → Profiling engine: profiles rows (evidence: `src/context/DatasetProvider.tsx`)
- Dataset state → Quality scoring: generates report (evidence: `src/context/DatasetProvider.tsx`)
- Dataset state → Dataset repository: saves dataset (evidence: `src/context/DatasetProvider.tsx`)
- Profiling engine → Type inference: infers types (evidence: `src/lib/profiling/profilingEngine.ts`)
- Profiling engine → Missing values: counts missing (evidence: `src/lib/profiling/profilingEngine.ts`)
- Profiling engine → Duplicate detection: detects duplicates (evidence: `src/lib/profiling/profilingEngine.ts`)
- Profiling engine → Column statistics: builds statistics (evidence: `src/lib/profiling/profilingEngine.ts`)
- Dataset repository → IndexedDB: reads and writes (evidence: `src/lib/storage/datasetRepository.ts`)
- Cloudflare runtime → Health endpoint: serves health API (evidence: `README.md`)
