# jakobaiodev/vinted-product-uploader architecture

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

- Interactive diagram: https://gitdiagram.com/jakobaiodev/vinted-product-uploader
- Repository: https://github.com/jakobaiodev/vinted-product-uploader

## Overview

This is a small, single-command Go uploader. The principal workflow reads and validates product rows, prepares a Vinted session, uploads each product’s images and listing, then records a per-row result. Optional branches support proxies and DataDome challenges through CapSolver; dry-run validation is also documented. The implementation is concentrated in cmd/main.go, so several distinct responsibilities share that path. The README documents the overall sequence; excerpts do not show every internal call or dispatch.

Main entry points: [`cmd/main.go`](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go) (Row uploader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["Inputs and validation"]
  node_command["CLI command<br/>[main.go]"]
  node_configuration["Environment config<br/>[main.go]"]
  node_csv["CSV and images<br/>[main.go]"]
  node_validation["Validation / dry run<br/>[main.go]"]
end

subgraph group_upload["Vinted upload"]
  node_orchestrator["Row uploader<br/>[main.go]"]
  node_session["Session setup<br/>[main.go]"]
  node_image_upload["Photo upload<br/>[main.go]"]
  node_listing["Listing submission<br/>[main.go]"]
end

subgraph group_operations["Results and integrations"]
  node_results["Result CSV<br/>[main.go]"]
  node_proxy["Proxy service"]
  node_capsolver["CapSolver"]
end

node_user(("Operator"))
node_vinted["Vinted"]

node_user -->|"runs"| node_command
node_command -->|"loads settings"| node_configuration
node_command -->|"reads products"| node_csv
node_command -->|"validates rows"| node_validation
node_command -->|"uploads rows"| node_orchestrator
node_csv -->|"supplies rows"| node_validation
node_validation -->|"permits upload"| node_orchestrator
node_orchestrator -->|"prepares session"| node_session
node_session -->|"warms session"| node_vinted
node_orchestrator -->|"uploads photos"| node_image_upload
node_image_upload -->|"sends photos"| node_vinted
node_orchestrator -->|"posts listing"| node_listing
node_listing -->|"creates item"| node_vinted
node_orchestrator -->|"appends status"| node_results
node_configuration -.->|"configures proxy"| node_proxy
node_image_upload -.->|"solves challenge"| node_capsolver
node_capsolver -.->|"returns challenge cookie"| node_vinted

click node_command "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"
click node_configuration "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"
click node_csv "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"
click node_validation "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"
click node_orchestrator "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"
click node_session "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"
click node_image_upload "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"
click node_listing "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"
click node_results "https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go"

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_command,node_configuration,node_csv,node_validation toneBlue
class node_orchestrator,node_session,node_image_upload,node_listing toneAmber
class node_results,node_proxy,node_capsolver toneMint
class node_user,node_vinted toneIndigo
```

## Components

### Inputs and validation

- [CLI command](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`
- [Environment config](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`
- [CSV and images](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`
- [Validation / dry run](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`

### Vinted upload

- [Row uploader](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`
- [Session setup](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`
- [Photo upload](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`
- [Listing submission](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`

### Results and integrations

- [Result CSV](https://github.com/jakobaiodev/vinted-product-uploader/blob/main/cmd/main.go): `cmd/main.go`
- **Proxy service**
- **CapSolver**

### Other components

- **Operator**
- **Vinted**

## Connections

- Operator → CLI command: runs (evidence: `README.md`)
- CLI command → Environment config: loads settings (evidence: `README.md`)
- CLI command → CSV and images: reads products (evidence: `README.md`)
- CLI command → Validation / dry run: validates rows (evidence: `README.md`)
- CLI command → Row uploader: uploads rows (evidence: `README.md`)
- CSV and images → Validation / dry run: supplies rows (evidence: `README.md`)
- Validation / dry run → Row uploader: permits upload (evidence: `README.md`)
- Row uploader → Session setup: prepares session (evidence: `README.md`)
- Session setup → Vinted: warms session (evidence: `README.md`)
- Row uploader → Photo upload: uploads photos (evidence: `README.md`)
- Photo upload → Vinted: sends photos (evidence: `README.md`)
- Row uploader → Listing submission: posts listing (evidence: `README.md`)
- Listing submission → Vinted: creates item (evidence: `README.md`)
- Row uploader → Result CSV: appends status (evidence: `README.md`)
- Environment config → Proxy service: configures proxy (evidence: `README.md`)
- Photo upload → CapSolver: solves challenge (evidence: `README.md`)
- CapSolver → Vinted: returns challenge cookie (evidence: `README.md`)
