# kimi-yaps/dropcsv architecture

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

- Interactive diagram: https://gitdiagram.com/kimi-yaps/dropcsv
- Repository: https://github.com/kimi-yaps/dropcsv

## Overview

1. **Repository shape**
   - This is a single-project **ASP.NET Core MVC** application: `DropCSV.sln` contains one web app project, `DropCSV`.
   - The app is organized around the standard MVC boundary: **Controllers**, **Models**, **Views**, plus `wwwroot` for static assets.

2. **Primary purpose**
   - The naming strongly suggests the app is centered on **CSV upload/handling**.
   - The dedicated `CsvController` and `Views/Csv/Upload.cshtml` indicate a focused workflow for uploading CSV data, separate from the default home pages.

3. **Request entry and app bootstrap**
   - `Program.cs` is the application startup entrypoint and defines the middleware/routing pipeline.
   - `appsettings.json` and `appsettings.Development.json` provide environment-specific configuration, but no additional infrastructure-specific config is visible in the tree.

4. **Controller layer**
   - `HomeController` serves the general site pages: `Index` and `Privacy`.
   - `CsvController` is the functional endpoint for the CSV feature, likely handling GET/POST for the upload page and any processing of submitted files.

5. **View model boundary**
   - `CsvUploadViewModel` represents the upload form/state for the CSV workflow.
   - `SavedDataViewModel` suggests the controller returns processed or persisted CSV-derived results back to the UI.
   - `ErrorViewModel` is the standard model for error rendering.

6. **Presentation layer**
   - Views are Razor pages under `Views/Home` and `Views/Csv`.
   - `Views/Shared/_Layout.cshtml` defines the common page shell, while `_ViewStart.cshtml` and `_ViewImports.cshtml` wire shared Razor behavior.
   - `Views/Shared/_ValidationScriptsPartial.cshtml` indicates the app uses client-side validation support for forms.

7. **Front-end assets**
   - `wwwroot` contains the static delivery layer: custom CSS/JS plus bundled third-party libraries.
   - Bootstrap is included for layout/styling, and jQuery validation plus unobtrusive validation support form validation on the client side.

8. **Likely data flow**
   - A browser requests the CSV upload page through `CsvController`.
   - The controller populates `CsvUploadViewModel` for the form.
   - The user submits the CSV form back to the controller.
   - Processed results are passed to a view through `SavedDataViewModel`, while errors use `ErrorViewModel`.

9. **System boundaries**
   - The repository shows a **self-contained UI application**; no separate API service, database project, message queue, or background worker is present in the tree.
   - Any file parsing, transformation, or temporary storage appears to be handled inside the web app itself rather than by an external subsystem.

10. **Operational/runtime context**
   - The app runs on the .NET runtime as a conventional MVC web site.
   - Deployment/runtime concerns are limited to standard ASP.NET Core hosting and environment configuration; there is no evidence of cloud-native orchestration or external integrations in this repo.

Main entry points: [`DropCSV/Controllers/CsvController.cs`](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Controllers/CsvController.cs) (CsvController), [`DropCSV/Views/Shared/_Layout.cshtml`](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Shared/_Layout.cshtml) (Layout), [`DropCSV/Controllers/HomeController.cs`](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Controllers/HomeController.cs) (HomeController), [`DropCSV/Program.cs`](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Program.cs) (Program.cs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_grp_app["ASP.NET Core app"]
  node_n_solution["DropCSV.sln<br/>solution<br/>[DropCSV.sln]"]
  node_n_project["DropCSV<br/>web project<br/>[DropCSV.csproj]"]
  node_n_program["Program.cs<br/>startup<br/>[Program.cs]"]
  node_n_settings["appsettings<br/>config<br/>[appsettings.json]"]
end

subgraph group_grp_feature["CSV workflow"]
  node_n_csvctl["CsvController<br/>[CsvController.cs]"]
  node_n_csvvm["Upload VM<br/>view model"]
  node_n_savedvm["Saved VM<br/>view model"]
  node_n_csv_upload["Upload page<br/>view<br/>[Upload.cshtml]"]
end

subgraph group_grp_ui["MVC UI"]
  node_n_homectl["HomeController<br/>[HomeController.cs]"]
  node_n_errvm["Error VM<br/>view model<br/>[ErrorViewModel.cs]"]
  node_n_home_index["Home page<br/>view<br/>[Index.cshtml]"]
  node_n_home_privacy["Privacy page<br/>view<br/>[Privacy.cshtml]"]
  node_n_error_view["Error page<br/>view<br/>[Error.cshtml]"]
  node_n_layout["Layout<br/>razor shell<br/>[_Layout.cshtml]"]
  node_n_razor_start["ViewStart<br/>razor config<br/>[_ViewStart.cshtml]"]
  node_n_razor_imports["ViewImports<br/>razor config"]
  node_n_validation["Validation partial<br/>razor partial"]
  node_n_css["site.css<br/>styles<br/>[site.css]"]
  node_n_js["site.js<br/>scripts<br/>[site.js]"]
  node_n_bootstrap["Bootstrap<br/>vendor ui"]
  node_n_jquery["jQuery<br/>vendor js<br/>[jquery.js]"]
  node_n_jqval["jQuery Validate<br/>vendor validation<br/>[jquery.validate.js]"]
  node_n_jqval_unob["Unobtrusive validate<br/>vendor validation"]
end

node_n_solution -->|"contains"| node_n_project
node_n_project -->|"starts at"| node_n_program
node_n_program -->|"routes to"| node_n_homectl
node_n_program -->|"routes to"| node_n_csvctl
node_n_program -.->|"reads config"| node_n_settings
node_n_homectl -->|"renders"| node_n_home_index
node_n_homectl -->|"renders"| node_n_home_privacy
node_n_homectl -->|"uses"| node_n_errvm
node_n_homectl -->|"returns"| node_n_error_view
node_n_csvctl -->|"binds"| node_n_csvvm
node_n_csvctl -->|"renders"| node_n_csv_upload
node_n_csvctl -->|"returns"| node_n_savedvm
node_n_csvctl -->|"uses"| node_n_errvm
node_n_csvctl -->|"wraps in"| node_n_layout
node_n_csv_upload -->|"includes"| node_n_validation
node_n_razor_start -->|"applies"| node_n_layout
node_n_razor_imports -.->|"supports"| node_n_csv_upload
node_n_layout -->|"uses"| node_n_css
node_n_layout -->|"uses"| node_n_js
node_n_layout -->|"depends on"| node_n_bootstrap
node_n_layout -->|"depends on"| node_n_jquery
node_n_validation -->|"depends on"| node_n_jqval
node_n_validation -->|"depends on"| node_n_jqval_unob

click node_n_solution "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV.sln"
click node_n_project "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/DropCSV.csproj"
click node_n_program "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Program.cs"
click node_n_homectl "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Controllers/HomeController.cs"
click node_n_csvctl "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Controllers/CsvController.cs"
click node_n_csvvm "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Models/CsvUploadViewModel.cs"
click node_n_savedvm "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Models/SavedDataViewModel.cs"
click node_n_errvm "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Models/ErrorViewModel.cs"
click node_n_home_index "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Home/Index.cshtml"
click node_n_home_privacy "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Home/Privacy.cshtml"
click node_n_csv_upload "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Csv/Upload.cshtml"
click node_n_error_view "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Shared/Error.cshtml"
click node_n_layout "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Shared/_Layout.cshtml"
click node_n_razor_start "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/_ViewStart.cshtml"
click node_n_razor_imports "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/_ViewImports.cshtml"
click node_n_validation "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Shared/_ValidationScriptsPartial.cshtml"
click node_n_css "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/css/site.css"
click node_n_js "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/js/site.js"
click node_n_bootstrap "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js"
click node_n_jquery "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/lib/jquery/dist/jquery.js"
click node_n_jqval "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/lib/jquery-validation/dist/jquery.validate.js"
click node_n_jqval_unob "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"
click node_n_settings "https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/appsettings.json"

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_n_solution,node_n_project,node_n_program,node_n_settings toneBlue
class node_n_csvctl,node_n_csvvm,node_n_savedvm,node_n_csv_upload toneAmber
class node_n_homectl,node_n_errvm,node_n_home_index,node_n_home_privacy,node_n_error_view,node_n_layout,node_n_razor_start,node_n_razor_imports,node_n_validation,node_n_css,node_n_js,node_n_bootstrap,node_n_jquery,node_n_jqval,node_n_jqval_unob toneMint
```

## Components

### ASP.NET Core app

Single web application project and its runtime entrypoint.

- [DropCSV.sln](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV.sln): solution · Solution containing the single web project. · `DropCSV.sln`
- [DropCSV](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/DropCSV.csproj): web project · ASP.NET Core MVC application project. · `DropCSV/DropCSV.csproj`
- [Program.cs](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Program.cs): startup · Application bootstrap and middleware/routing setup. · `DropCSV/Program.cs`
- [appsettings](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/appsettings.json): config · Application configuration and environment overrides. · `DropCSV/appsettings.json`

### CSV workflow

Focused upload-and-display flow for CSV handling.

- [CsvController](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Controllers/CsvController.cs): controller · CSV upload and processing entrypoint. · `DropCSV/Controllers/CsvController.cs`
- [Upload VM](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Models/CsvUploadViewModel.cs): view model · Form state and inputs for CSV upload. · `DropCSV/Models/CsvUploadViewModel.cs`
- [Saved VM](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Models/SavedDataViewModel.cs): view model · Processed or persisted CSV results for display. · `DropCSV/Models/SavedDataViewModel.cs`
- [Upload page](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Csv/Upload.cshtml): view · CSV upload form and results page. · `DropCSV/Views/Csv/Upload.cshtml`

### MVC UI

Shared presentation layer, Razor views, and static assets.

- [HomeController](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Controllers/HomeController.cs): controller · General site pages such as index and privacy. · `DropCSV/Controllers/HomeController.cs`
- [Error VM](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Models/ErrorViewModel.cs): view model · Standard model for error pages. · `DropCSV/Models/ErrorViewModel.cs`
- [Home page](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Home/Index.cshtml): view · Landing page view. · `DropCSV/Views/Home/Index.cshtml`
- [Privacy page](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Home/Privacy.cshtml): view · Privacy page view. · `DropCSV/Views/Home/Privacy.cshtml`
- [Error page](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Shared/Error.cshtml): view · Shared error rendering view. · `DropCSV/Views/Shared/Error.cshtml`
- [Layout](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Shared/_Layout.cshtml): razor shell · Common page chrome and navigation. · `DropCSV/Views/Shared/_Layout.cshtml`
- [ViewStart](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/_ViewStart.cshtml): razor config · Sets shared Razor defaults. · `DropCSV/Views/_ViewStart.cshtml`
- [ViewImports](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/_ViewImports.cshtml): razor config · Imports shared Razor namespaces and helpers. · `DropCSV/Views/_ViewImports.cshtml`
- [Validation partial](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/Views/Shared/_ValidationScriptsPartial.cshtml): razor partial · Client-side validation scripts for forms. · `DropCSV/Views/Shared/_ValidationScriptsPartial.cshtml`
- [site.css](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/css/site.css): styles · Custom site styling. · `DropCSV/wwwroot/css/site.css`
- [site.js](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/js/site.js): scripts · Custom client-side behavior. · `DropCSV/wwwroot/js/site.js`
- [Bootstrap](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js): vendor ui · Bundled CSS/JS framework for layout and styling. · `DropCSV/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js`
- [jQuery](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/lib/jquery/dist/jquery.js): vendor js · Bundled JavaScript dependency. · `DropCSV/wwwroot/lib/jquery/dist/jquery.js`
- [jQuery Validate](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/lib/jquery-validation/dist/jquery.validate.js): vendor validation · Client-side validation library. · `DropCSV/wwwroot/lib/jquery-validation/dist/jquery.validate.js`
- [Unobtrusive validate](https://github.com/kimi-yaps/dropcsv/blob/master/DropCSV/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js): vendor validation · ASP.NET-style validation adapter for Razor forms. · `DropCSV/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js`

## Connections

- DropCSV.sln → DropCSV: contains · The solution hosts the single MVC app.
- DropCSV → Program.cs: starts at · Program bootstraps the web host.
- Program.cs → HomeController: routes to · Default MVC routing reaches the home controller.
- Program.cs → CsvController: routes to · Feature routing reaches the CSV controller.
- Program.cs → appsettings: reads config · Startup loads environment configuration.
- HomeController → Home page: renders · Home controller serves the landing page.
- HomeController → Privacy page: renders · Home controller serves the privacy page.
- HomeController → Error VM: uses · Errors are rendered with the shared error model.
- HomeController → Error page: returns · Shared error page displays failures.
- CsvController → Upload VM: binds · Upload form state is represented by the CSV upload model.
- CsvController → Upload page: renders · GET/POST flow centers on the CSV upload view.
- CsvController → Saved VM: returns · Processed CSV results are passed back to the UI.
- CsvController → Error VM: uses · Failures can fall back to the shared error model.
- CsvController → Layout: wraps in · Feature views use the shared layout shell.
- Upload page → Validation partial: includes · Upload form pulls in client-side validation scripts.
- ViewStart → Layout: applies · ViewStart enables the shared page shell.
- ViewImports → Upload page: supports · Razor imports support view compilation and helpers.
- Layout → site.css: uses · Layout references custom styling.
- Layout → site.js: uses · Layout references custom scripting.
- Layout → Bootstrap: depends on · Layout is built on Bootstrap assets.
- Layout → jQuery: depends on · Scripts rely on jQuery.
- Validation partial → jQuery Validate: depends on · Validation partial loads jQuery Validate.
- Validation partial → Unobtrusive validate: depends on · Validation partial loads unobtrusive validation.
