diff --git a/services-overview.md b/services-overview.md
new file mode 100644
index 0000000..d46d2d6
--- /dev/null
+++ b/services-overview.md
@@ -0,0 +1,89 @@
+# Services overview
+
+Live at (docs-server polls Gitea every 5 min, so changes appear shortly after `git push`).
+
+Every service running in the homelab, with its access URL(s) and host. **External** URLs go through Zoraxy (CT 108) and are reachable from the internet. **Internal** are LAN-only (`192.168.1.0/24`). Per [[feedback_internal_only]], new services default to internal.
+
+## AI / ML
+
+| Service | External | Internal | Host | Doc |
+|---|---|---|---|---|
+| LobeChat | | `192.168.1.40:14001` | CT 104 | — |
+| LiteLLM (gateway) | | `192.168.1.40:14000` | CT 104 | [[mcp-gateway]] |
+| MCP Gateway | | `192.168.1.40:8080` | CT 104 | [[mcp-gateway]], [[mcp-servers]] |
+| ComfyUI | — | `192.168.1.40:18188` | CT 104 | [[comfyui]] |
+| Nexa | — | — | CT 104 | [[nexa]] |
+| n8n (automation) | — | `192.168.1.40:15678` | CT 104 | — |
+
+## Files / storage
+
+| Service | External | Internal | Host | Doc |
+|---|---|---|---|---|
+| Nextcloud | | `192.168.1.41:11000` | CT 105 | — |
+| Immich | | `192.168.1.40:12000` | CT 104 | — |
+| Paperless-ngx | | — | CT 104 | [[doc-ingestion]] |
+| Karakeep (Hoarder) | | `192.168.1.40:17001` | CT 104 | — |
+| Memos | | `192.168.1.40:17000` | CT 104 | — |
+| Audiobookshelf | — | `192.168.1.40:13100` | CT 104 | — |
+| Garage S3 | | `192.168.1.40:10004` | CT 104 | — |
+| UNAS NFS | — | `192.168.1.30:/share/…` | UNAS | [[storage]] |
+
+## Identity / secrets
+
+| Service | External | Internal | Host | Doc |
+|---|---|---|---|---|
+| Pocket-ID (OIDC IdP) | | `192.168.1.5:11000` | CT 110 | [[pocket-id]] |
+| Vaultwarden | | `192.168.1.40:11001` | CT 104 | — |
+| Infisical | — | `192.168.1.7:8200` | CT 112 | [[secrets-manager]] |
+
+## Dev / source
+
+| Service | External | Internal | Host | Doc |
+|---|---|---|---|---|
+| Gitea | | `192.168.1.42:3000` | CT 111 | [[dev-environment]] |
+| Coder | | `192.168.1.42:7080` | CT 111 | [[dev-environment]] |
+| Docs (mkdocs) | — | `192.168.1.8:13080` | CT 109 | — |
+
+## Home / IoT
+
+| Service | External | Internal | Host | Doc |
+|---|---|---|---|---|
+| Home Assistant | | `192.168.1.60:8123` | VM 100 | — |
+| Mainsail (3D printer) | — | `192.168.1.189` | external box | — |
+| OCPP (EV charging) | | `192.168.1.60:8887` | VM 100 | — |
+| Traccar | — | `192.168.1.40:15000` | CT 104 | — |
+| Gotify | | `192.168.1.40:10003` | CT 104 | — |
+
+## Monitoring / ops (CT 109)
+
+| Service | External | Internal | Host | Doc |
+|---|---|---|---|---|
+| Homarr (dashboard) | — | `192.168.1.8:7575` | CT 109 | — |
+| Grafana | — | `192.168.1.8:3000` | CT 109 | — |
+| Prometheus | — | `192.168.1.8:9090` | CT 109 | — |
+| Loki | — | `192.168.1.8:3100` | CT 109 | — |
+| Arcane (Docker UI) | | `192.168.1.8:10002` | CT 109 | [[arcane]] |
+| Dozzle (logs) | — | `192.168.1.8:10001` | CT 109 | — |
+| Wetty (SSH-in-browser) | — | `192.168.1.8:4090` | CT 109 | — |
+| Backrest (backups UI) | — | `192.168.1.3:9898` | CT 103 | [[backrest-ct103]] |
+
+## Network / infra
+
+| Service | External | Internal | Host | Doc |
+|---|---|---|---|---|
+| AdGuard Home (DNS) | — | `192.168.1.2` (admin: `:80`) | CT 102 | [[adguard-dns]] |
+| Zoraxy (reverse proxy) | — | `192.168.1.4:8000` | CT 108 | [[zoraxy]] |
+| Proxmox PVE | — | `https://192.168.1.20:8006` | nuc | [[homelab-architecture]] |
+| D-Link router | — | `192.168.1.1` | router | — |
+
+## External-only (third party hosted)
+
+| Service | External | Notes |
+|---|---|---|
+| Shepard | | proxied to `192.168.1.49` |
+| Shepard API | | `192.168.1.49:8080` |
+| Shepard Auth | | `192.168.1.49:8082` |
+
+## Maintenance
+
+This overview lives in `/docs/services-overview.md`. To add or change a service, edit, commit, push — docs-server picks it up within 5 min. Cross-reference: `/docs/ct-inventory.md` for sizing/role, `/docs/services/zoraxy.md` for the authoritative external route list, Homarr (`http://192.168.1.8:7575`) for the visual board.