# milo-dotcom/claude-impact-lab-cph architecture

> Architecture diagram of the GitHub repository milo-dotcom/claude-impact-lab-cph, 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/milo-dotcom/claude-impact-lab-cph
- Repository: https://github.com/milo-dotcom/claude-impact-lab-cph

## Overview

ParkRefund helps drivers challenge Danish parking fines: the customer enters or photographs a ticket, reviews an assessment and evidence guidance, gets an appeal draft, and submits the case for human review. The Streamlit app and iOS client share a Python API and claim-intelligence layer; the assessor is grounded by a rules module, while photo evidence receives a separate vision check. The README also describes an operations queue and dashboard. Source excerpts show most customer-flow calls; links to the unsampled dashboard internals are omitted where their wiring is not evidenced.

Main entry points: [`ios/ParkRefund/ContentView.swift`](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/ContentView.swift) (Screen navigation), [`claims.py`](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/claims.py) (Ticket and claim services), [`ios/ParkRefund/API.swift`](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/API.swift) (iOS API client), [`api.py`](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/api.py) (HTTP API and admin queue)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer["Customer experiences"]
  node_streamlit["Web intake and results<br/>[app.py]"]
  node_ios_intake["Ticket intake<br/>[IntakeView.swift]"]
  node_ios_verdict["Verdict screen<br/>[VerdictView.swift]"]
  node_ios_letter["Appeal letter<br/>[LetterView.swift]"]
  node_ios_payout["Payout estimate<br/>[PayoutView.swift]"]
  node_ios_navigation["Screen navigation<br/>[ContentView.swift]"]
end

subgraph group_intelligence["Claim intelligence"]
  node_claim_intelligence["Ticket and claim services<br/>[claims.py]"]
  node_evidence_check["Photo evidence check<br/>[evidence.py]"]
  node_rules["Parking rulebook<br/>[rules.py]"]
end

subgraph group_service["API and operations"]
  node_ios_api["iOS API client<br/>[API.swift]"]
  node_http_api["HTTP API and admin queue<br/>[api.py]"]
  node_ops_dashboard["Operations dashboard<br/>[1_Ops_dashboard.py]"]
end

node_driver(("Driver"))
node_anthropic{{"Anthropic Claude"}}
node_case_handler(("Case handler"))

node_driver -->|"enters claim"| node_streamlit
node_driver -->|"enters claim"| node_ios_intake
node_streamlit -->|"extracts and assesses"| node_claim_intelligence
node_streamlit -->|"checks photos"| node_evidence_check
node_claim_intelligence -->|"uses rulebook"| node_rules
node_evidence_check -->|"formats images"| node_claim_intelligence
node_claim_intelligence -->|"requests model work"| node_anthropic
node_evidence_check -->|"requests photo review"| node_anthropic
node_ios_intake -->|"extracts and assesses"| node_ios_api
node_ios_api -->|"sends requests"| node_http_api
node_http_api -->|"calls claim services"| node_claim_intelligence
node_ios_navigation -->|"starts at"| node_ios_intake
node_ios_navigation -->|"shows assessment"| node_ios_verdict
node_ios_navigation -->|"opens draft"| node_ios_letter
node_ios_navigation -->|"shows estimate"| node_ios_payout
node_ios_verdict -->|"continues"| node_ios_navigation
node_ios_letter -->|"drafts and submits"| node_ios_api
node_ios_payout -->|"requests estimate"| node_ios_api
node_ios_api -->|"submits case"| node_http_api
node_case_handler -.->|"reviews queued cases"| node_http_api

click node_streamlit "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/app.py"
click node_ios_intake "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/IntakeView.swift"
click node_ios_verdict "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/VerdictView.swift"
click node_ios_letter "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/LetterView.swift"
click node_ios_payout "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/PayoutView.swift"
click node_ios_navigation "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/ContentView.swift"
click node_claim_intelligence "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/claims.py"
click node_evidence_check "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/evidence.py"
click node_rules "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/rules.py"
click node_ios_api "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/API.swift"
click node_http_api "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/api.py"
click node_ops_dashboard "https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/pages/1_Ops_dashboard.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_streamlit,node_ios_intake,node_ios_verdict,node_ios_letter,node_ios_payout,node_ios_navigation toneBlue
class node_claim_intelligence,node_evidence_check,node_rules toneAmber
class node_ios_api,node_http_api,node_ops_dashboard,node_case_handler toneMint
class node_driver,node_anthropic toneIndigo
```

## Components

### Customer experiences

- [Web intake and results](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/app.py): `app.py`
- [Ticket intake](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/IntakeView.swift): `ios/ParkRefund/IntakeView.swift`
- [Verdict screen](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/VerdictView.swift): `ios/ParkRefund/VerdictView.swift`
- [Appeal letter](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/LetterView.swift): `ios/ParkRefund/LetterView.swift`
- [Payout estimate](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/PayoutView.swift): `ios/ParkRefund/PayoutView.swift`
- [Screen navigation](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/ContentView.swift): `ios/ParkRefund/ContentView.swift`

### Claim intelligence

- [Ticket and claim services](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/claims.py): `claims.py`
- [Photo evidence check](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/evidence.py): `evidence.py`
- [Parking rulebook](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/rules.py): `rules.py`

### API and operations

- [iOS API client](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/ios/ParkRefund/API.swift): `ios/ParkRefund/API.swift`
- [HTTP API and admin queue](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/api.py): `api.py`
- [Operations dashboard](https://github.com/milo-dotcom/claude-impact-lab-cph/blob/main/pages/1_Ops_dashboard.py): `pages/1_Ops_dashboard.py`

### Other components

- **Driver**
- **Anthropic Claude**
- **Case handler**

## Connections

- Driver → Web intake and results: enters claim (evidence: `README.md`)
- Driver → Ticket intake: enters claim (evidence: `ios/ParkRefund/IntakeView.swift`)
- Web intake and results → Ticket and claim services: extracts and assesses (evidence: `app.py`)
- Web intake and results → Photo evidence check: checks photos (evidence: `app.py`)
- Ticket and claim services → Parking rulebook: uses rulebook (evidence: `claims.py`)
- Photo evidence check → Ticket and claim services: formats images (evidence: `evidence.py`)
- Ticket and claim services → Anthropic Claude: requests model work (evidence: `claims.py`)
- Photo evidence check → Anthropic Claude: requests photo review (evidence: `evidence.py`)
- Ticket intake → iOS API client: extracts and assesses (evidence: `ios/ParkRefund/IntakeView.swift`)
- iOS API client → HTTP API and admin queue: sends requests (evidence: `README.md`)
- HTTP API and admin queue → Ticket and claim services: calls claim services (evidence: `api.py`)
- Screen navigation → Ticket intake: starts at (evidence: `ios/ParkRefund/ContentView.swift`)
- Screen navigation → Verdict screen: shows assessment (evidence: `ios/ParkRefund/ContentView.swift`)
- Screen navigation → Appeal letter: opens draft (evidence: `ios/ParkRefund/ContentView.swift`)
- Screen navigation → Payout estimate: shows estimate (evidence: `ios/ParkRefund/ContentView.swift`)
- Verdict screen → Screen navigation: continues (evidence: `ios/ParkRefund/ContentView.swift`)
- Appeal letter → iOS API client: drafts and submits (evidence: `ios/ParkRefund/LetterView.swift`)
- Payout estimate → iOS API client: requests estimate (evidence: `ios/ParkRefund/PayoutView.swift`)
- iOS API client → HTTP API and admin queue: submits case
- Case handler → HTTP API and admin queue: reviews queued cases (evidence: `README.md`)
