# mrunclejhay/csv-splitter architecture

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

- Interactive diagram: https://gitdiagram.com/mrunclejhay/csv-splitter
- Repository: https://github.com/mrunclejhay/csv-splitter

## Overview

CSV Splitter is a Flask web app for uploading a CSV, splitting it into row-limited files, tracking background progress, and downloading the results as a ZIP. The main workflow runs from the browser interface through upload validation and task dispatch, then through CSV processing and archive creation; the browser polls task status before downloading. The graph separates request handling, background processing, and file/task state. The README also describes progress updates, validation, and error handling; those are represented in the shared route and worker components. Only app.py was sampled, so links for unsampled frontend behavior are limited to the documented interactions.

Main entry points: [`templates/index.html`](https://github.com/mrunclejhay/csv-splitter/blob/main/templates/index.html) (Splitter UI), [`app.py`](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py) (SplitTask Worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Browser Interface"]
  node_ui["Splitter UI<br/>[index.html]"]
end

subgraph group_requests["Flask Requests"]
  node_routes["Flask Routes<br/>[app.py]"]
  node_upload["Upload Handler<br/>[app.py]"]
  node_status["Status Handler<br/>[app.py]"]
  node_download["Download Handler<br/>[app.py]"]
end

subgraph group_processing["Split Processing"]
  node_task["SplitTask Worker<br/>[app.py]"]
  node_csv["CSV Chunking<br/>[app.py]"]
  node_archive["ZIP Creation<br/>[app.py]"]
end

subgraph group_state["Task And Files"]
  node_taskmap["Active Tasks<br/>[app.py]"]
  node_files["Uploaded And Output Files<br/>[app.py]"]
end

node_browser(("User Browser"))

node_browser -->|"opens app"| node_ui
node_ui -->|"requests page"| node_routes
node_routes -->|"renders page"| node_ui
node_ui -->|"submits CSV"| node_upload
node_upload -->|"saves upload"| node_files
node_upload -->|"registers task"| node_taskmap
node_upload -->|"starts worker"| node_task
node_task -->|"reads CSV"| node_files
node_task -->|"chunks rows"| node_csv
node_csv -->|"writes parts"| node_files
node_task -->|"archives parts"| node_archive
node_archive -->|"writes ZIP"| node_files
node_task -->|"updates task"| node_taskmap
node_ui -->|"polls progress"| node_status
node_status -->|"reads task"| node_taskmap
node_ui -->|"requests ZIP"| node_download
node_download -->|"checks task"| node_taskmap
node_download -->|"sends ZIP"| node_files
node_status -->|"returns progress"| node_ui
node_download -->|"delivers archive"| node_browser

click node_ui "https://github.com/mrunclejhay/csv-splitter/blob/main/templates/index.html"
click node_routes "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"
click node_upload "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"
click node_status "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"
click node_download "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"
click node_task "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"
click node_csv "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"
click node_archive "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"
click node_taskmap "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"
click node_files "https://github.com/mrunclejhay/csv-splitter/blob/main/app.py"

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_ui,node_browser toneBlue
class node_routes,node_upload,node_status,node_download toneAmber
class node_task,node_csv,node_archive toneMint
class node_taskmap,node_files toneRose
```

## Components

### Browser Interface

- [Splitter UI](https://github.com/mrunclejhay/csv-splitter/blob/main/templates/index.html): `templates/index.html`

### Flask Requests

- [Flask Routes](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`
- [Upload Handler](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`
- [Status Handler](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`
- [Download Handler](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`

### Split Processing

- [SplitTask Worker](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`
- [CSV Chunking](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`
- [ZIP Creation](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`

### Task And Files

- [Active Tasks](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`
- [Uploaded And Output Files](https://github.com/mrunclejhay/csv-splitter/blob/main/app.py): `app.py`

### Other components

- **User Browser**

## Connections

- User Browser → Splitter UI: opens app
- Splitter UI → Flask Routes: requests page
- Flask Routes → Splitter UI: renders page
- Splitter UI → Upload Handler: submits CSV
- Upload Handler → Uploaded And Output Files: saves upload
- Upload Handler → Active Tasks: registers task
- Upload Handler → SplitTask Worker: starts worker
- SplitTask Worker → Uploaded And Output Files: reads CSV
- SplitTask Worker → CSV Chunking: chunks rows
- CSV Chunking → Uploaded And Output Files: writes parts
- SplitTask Worker → ZIP Creation: archives parts
- ZIP Creation → Uploaded And Output Files: writes ZIP
- SplitTask Worker → Active Tasks: updates task
- Splitter UI → Status Handler: polls progress
- Status Handler → Active Tasks: reads task
- Splitter UI → Download Handler: requests ZIP
- Download Handler → Active Tasks: checks task
- Download Handler → Uploaded And Output Files: sends ZIP
- Status Handler → Splitter UI: returns progress
- Download Handler → User Browser: delivers archive
