```plaintext
%% Internal Registry for CI/CD (ADR-0020)
%% Flowchart showing dual-path for external vs internal access
flowchart TB
subgraph external["🌐 External Access"]
internet["Internet"]
cloudflare["☁️ Cloudflare
⚠️ 100MB upload limit"]
external_url["git.daviestechlabs.io"]
end
subgraph internal["🏠 Internal Access"]
internal_url["registry.lab.daviestechlabs.io
✅ No upload limits"]
end
subgraph gitea["📦 Gitea Instance"]
direction TB
git_server["Git Server"]
docker_registry["Docker Registry"]
pypi_registry["PyPI Registry"]
end
subgraph runners["🏃 CI/CD Runners"]
gitea_runner["Gitea Actions Runner
(in-cluster)"]
end
subgraph operations["📋 Operations"]
small_ops["Small Operations
• git clone/push
• pip install
• docker pull"]
large_ops["Large Uploads
• docker push (20GB+)
• pypi upload"]
end
%% External path (limited)
internet --> cloudflare
cloudflare -->|"100MB limit"| external_url
external_url --> gitea
small_ops --> cloudflare
%% Internal path (unlimited)
gitea_runner -->|"Direct"| internal_url
internal_url --> gitea
large_ops --> internal_url
classDef external fill:#e74c3c,color:white
classDef internal fill:#27ae60,color:white
classDef gitea fill:#f39c12,color:black
classDef runner fill:#3498db,color:white
class internet,cloudflare,external_url external
class internal_url internal
class git_server,docker_registry,pypi_registry gitea
class gitea_runner runner
```