# arvidsgertners/expense-tracker-cli architecture

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

- Interactive diagram: https://gitdiagram.com/arvidsgertners/expense-tracker-cli
- Repository: https://github.com/arvidsgertners/expense-tracker-cli

## Overview

Expense Tracker is a single-file CLI for adding, listing, deleting, and summarizing expenses. The user supplies a command and options; the script dispatches to the matching handler, which loads or updates local data and prints a result. Listing filters by category, and summaries can filter by category and month. Saves also refresh a CSV export. The graph reflects the sampled script and README; there are no separate application modules or external services.

Main entry points: [`expense_tracker.py`](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py) (JSON expense file)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["CLI interface"]
  node_cli["CLI parser and dispatcher<br/>[expense_tracker.py]"]
end

subgraph group_operations["Expense operations"]
  node_add["Add expense<br/>[expense_tracker.py]"]
  node_delete["Delete expense<br/>[expense_tracker.py]"]
  node_list["List expenses<br/>[expense_tracker.py]"]
  node_summarize["Summarize spending<br/>[expense_tracker.py]"]
  node_lookup["Expense lookup<br/>[expense_tracker.py]"]
  node_idgen["ID generation<br/>[expense_tracker.py]"]
  node_timestamp["Timestamp creation<br/>[expense_tracker.py]"]
end

subgraph group_persistence["Local persistence"]
  node_jsonstore[("JSON expense file<br/>[expense_tracker.py]")]
  node_csvexport["CSV export<br/>[expense_tracker.py]"]
  node_csvfile["CSV file"]
end

node_user(("User"))
node_terminal(("Terminal"))

node_user -->|"runs command"| node_cli
node_cli -->|"dispatches"| node_add
node_cli -->|"dispatches"| node_delete
node_cli -->|"dispatches"| node_list
node_cli -->|"dispatches"| node_summarize
node_add -->|"loads data"| node_jsonstore
node_add -->|"gets ID"| node_idgen
node_add -->|"gets timestamp"| node_timestamp
node_add -->|"saves data"| node_jsonstore
node_delete -->|"finds expense"| node_lookup
node_lookup -->|"loads data"| node_jsonstore
node_delete -->|"saves data"| node_jsonstore
node_list -->|"loads data"| node_jsonstore
node_summarize -->|"loads data"| node_jsonstore
node_jsonstore -->|"refreshes export"| node_csvexport
node_csvexport -->|"writes CSV"| node_csvfile
node_add -->|"prints result"| node_terminal
node_delete -->|"prints result"| node_terminal
node_list -->|"prints table"| node_terminal
node_summarize -->|"prints total"| node_terminal

click node_cli "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_add "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_delete "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_list "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_summarize "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_lookup "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_idgen "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_timestamp "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_jsonstore "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py"
click node_csvexport "https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.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_cli,node_user toneBlue
class node_add,node_delete,node_list,node_summarize,node_lookup,node_idgen,node_timestamp toneAmber
class node_jsonstore,node_csvexport,node_csvfile toneMint
class node_terminal toneIndigo
```

## Components

### CLI interface

- [CLI parser and dispatcher](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`

### Expense operations

- [Add expense](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`
- [Delete expense](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`
- [List expenses](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`
- [Summarize spending](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`
- [Expense lookup](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`
- [ID generation](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`
- [Timestamp creation](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`

### Local persistence

- [JSON expense file](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`
- [CSV export](https://github.com/arvidsgertners/expense-tracker-cli/blob/main/expense_tracker.py): `expense_tracker.py`
- **CSV file**

### Other components

- **User**
- **Terminal**

## Connections

- User → CLI parser and dispatcher: runs command
- CLI parser and dispatcher → Add expense: dispatches
- CLI parser and dispatcher → Delete expense: dispatches
- CLI parser and dispatcher → List expenses: dispatches
- CLI parser and dispatcher → Summarize spending: dispatches
- Add expense → JSON expense file: loads data
- Add expense → ID generation: gets ID
- Add expense → Timestamp creation: gets timestamp
- Add expense → JSON expense file: saves data
- Delete expense → Expense lookup: finds expense
- Expense lookup → JSON expense file: loads data
- Delete expense → JSON expense file: saves data
- List expenses → JSON expense file: loads data
- Summarize spending → JSON expense file: loads data
- JSON expense file → CSV export: refreshes export
- CSV export → CSV file: writes CSV
- Add expense → Terminal: prints result
- Delete expense → Terminal: prints result
- List expenses → Terminal: prints table
- Summarize spending → Terminal: prints total
