docs: restore sanitized operational documentation after credential purge

This commit is contained in:
root
2026-07-23 12:05:47 -04:00
parent e44bba1826
commit f5285ae7f1
8 changed files with 832 additions and 0 deletions
+252
View File
@@ -0,0 +1,252 @@
# IT Pro Partner — Complete Key Inventory
**Generated:** 2026-07-23
**Sanitized:** 2026-07-23 (plaintext secrets replaced with storage references)
**Scope:** All SSH keys, API tokens, service credentials, device keys, and passwords across the infrastructure
**⚠️ SENSITIVE:** All credential values live in the listed storage locations. See Hudu for API keys (layout 49).
---
## 1. SSH Keys
| Key Name | File | Type | Fingerprint (SHA256) | Purpose | Deployed To |
|----------|------|------|-----------------------|---------|-------------|
| **itpp-infra** | `/root/.ssh/itpp-infra` | ED25519 | `Jxh0bbT9dUV3q1DYYB3hHyhy/1TDj7Q8U4xrVmB38uQ` | Universal server admin key | All servers (Core, app1, app2, app3, wphost02, app1-bu, home router) |
| **wisp_rsa** | `/root/.ssh/wisp_rsa` | ED25519 | `MxQw1oh90NibSgN2mDbKP+07/jE4FEUEBbFAzuk5DcI` | WISP MikroTik CCR router SSH | Home CCR router (10.77.0.2 via WireGuard) |
| **germaine-personal** | `/root/.ssh/germaine-personal` | ED25519 | `dDbLH+bdPFcGU0mm1DpGa43ec0nUZ88YnpCi4p63y3I` | Germaine's personal key (from his machines) | Germaine's devices → Core |
| **homelab** | `/root/.ssh/homelab` | ED25519 | `c1nts4wR9EU06/O/k895Pb2tGZublgnGWG6NoQrK/qs` | Homelab Proxmox/QNAP access | vm-host-01, vm-host-02, QNAP NAS |
| **siteground.key** | `/root/.ssh/siteground.key` | RSA (encrypted) | N/A (RSA, encrypted) | SiteGround SFTP backup (port 18765) | SiteGround shared hosting |
| **authorized_keys** | `/root/.ssh/authorized_keys` | — | — | Who can SSH into Core | Core (this server) |
### SSH Key Details
```
itpp-infra.pub: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII4dxTH11aJkBqCY8lXl1kTfZ8yXWhTcthHnt1MtAuIE itpp-infra
wisp_rsa.pub: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDnI4UwwPL8gJvtP/Jr7qiw0Qj/bQBwi2+f03p730xvn wisp-backup
germaine-personal.pub: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID2H/2VMn8i7YSUUpcag6yXiI6nB3T99h7JIOs5/+73r germaine@itppartner
homelab.pub: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHT+727Cti4cZ2x6CiYDeDKZ9BhvCJCzTHlO9vMInHie homelab-itpp
```
---
## 2. Server Root Passwords
**Storage:** Hudu (Vaultwarden asset) + `/root/.hermes/.env` (netcup CCP section)
| Server | IP | Provider | Access | Notes |
|--------|-----|----------|--------|-------|
| **Core** | 152.53.192.33 | netcup RS 2000 | SSH key only | `itpp-infra` key, password auth disabled |
| **app1** | 152.53.36.131 | netcup RS 4000 | Via root or ippadmin+sudo | Root password in Vaultwarden |
| **app2** | 152.53.39.202 | netcup RS 4000 | Via root or ippadmin+sudo | Root password in Vaultwarden |
| **app3** | 152.53.241.111 | netcup RS 4000 | Via root or ippadmin+sudo | Root password in Vaultwarden |
| **app1-bu** | 5.161.114.8 | Hetzner CPX11 | itpp-infra SSH key | Warm standby, offline by default |
### Admin Account (all servers)
- **Username:** `ippadmin`
- **Password:** → Vaultwarden entry "ippadmin"
- **Sudo:** Yes (full sudo access)
- **SSH:** Key-based only (`itpp-infra`)
---
## 3. Cloud & Infrastructure API Keys
**Storage:** All in `~/.hermes/.env` + Hudu API assets (layout 49)
| Service | Hudu Asset | Storage Location | Status |
|---------|-----------|------------------|--------|
| **Hetzner Cloud** | [177] | `/root/.hermes/scripts/.hetzner_token` + `/root/.hermes/.env` | ✅ Verified Jul 22 |
| **Cloudflare DNS** | [165] | `~/.hermes/.env``CLOUDFLARE_API_TOKEN` | ✅ Active (verified by health check) |
| **Wasabi S3** | [176] | `/root/.aws/credentials` | ✅ Active |
| **netcup API** | [166] | `~/.hermes/.env``NETCUP_API_KEY` | ✅ Active |
| **netcup CCP** | [167] | `~/.hermes/.env``NETCUP_CUSTOMER_NUMBER` + `NETCUP_CCP_PASSWORD` | ✅ Active |
| **Gitea (OLD/DEAD)** | — | ⚠️ **EXPIRED** — still in homelab + itpp-infrastructure remotes | ❌ INVALID (verified Jul 23) |
| **Gitea (ACTIVE)** | — | All other repos + `gitea-backup.sh` — ippadmin | ✅ Active (verified Jul 23) |
---
## 4. AI Provider API Keys
All stored in `/root/.hermes/.env` and Hudu API assets (layout 49).
| Provider | Hudu Asset | Purpose | Status |
|----------|-----------|---------|--------|
| **admin-ai** (LiteLLM) | [126] Hermes Primary Key | Primary model gateway (all models) | ✅ Active |
| **Anthropic** | [150] | Claude models | ✅ Active |
| **OpenAI** | [149] | GPT models | ✅ Active |
| **DeepSeek** | [152] | DeepSeek models | ✅ Active |
| **Google Gemini** | [161] / [151] | Gemini models | ✅ Active |
| **xAI (Grok)** | [154] | Grok models | ✅ Active |
| **OpenRouter** | [153] | Multi-provider routing | ✅ Active |
| **Mistral** | [155] | Mistral models | ✅ Active |
| **Groq** | [157] | Fast inference | ✅ Active |
| **Fireworks AI** | [156] | Serverless inference | ✅ Active |
| **Perplexity** | [159] | Search-augmented LLM | ✅ Active |
| **Cohere** | [158] | Cohere models | ✅ Active |
| **AI21 Labs** | [160] | Jurassic models | ✅ Active |
| **MiniMax** | [187] | MiniMax M3 | ✅ Active |
| **Z.ai (GLM)** | [188] | GLM models | ✅ Active |
| **Alibaba Qwen** | [189] Alibaba Qwen (DashScope) | Qwen models | ✅ Active |
| **Deepgram** | [162] | STT (voice transcription) | ✅ Active |
---
## 5. Communication APIs
**Storage:** All in `~/.hermes/.env` + Hudu API assets (layout 49)
| Service | Hudu Asset | Storage | Status |
|---------|-----------|---------|--------|
| **Telegram Bot** | [170] | `~/.hermes/.env``TELEGRAM_BOT_TOKEN` | ✅ Active |
| **Twilio (Live)** | [184] Twilio Live | `~/.hermes/.env``TWILIO_ACCOUNT_SID` + `TWILIO_AUTH_TOKEN` | ✅ Active |
| **Twilio (Test)** | [185] Twilio Test | `~/.hermes/.env``TWILIO_TEST_ACCOUNT_SID` + `TWILIO_TEST_AUTH_TOKEN` | ✅ Active |
| **Twilio API Key** | [186] Twilio API Key | `~/.hermes/.env``TWILIO_API_KEY_SID` + `TWILIO_API_KEY_SECRET` | ✅ Active |
| **ElevenLabs** | [148] | `~/.hermes/config.yaml` (auxiliary vision / TTS) | ✅ Active |
| **Email SMTP/IMAP** | — | `/root/.config/himalaya/shonuff.pass` | ✅ Active |
| **Email account** | — | `shonuff@germainebrown.com` — MXroute via mail.germainebrown.com:2525 (SMTP) / :993 (IMAP) | ✅ Active |
---
## 6. VoIP / RingLogix
**Storage:** `~/.hermes/.env` + Hudu API assets
| Credential | Hudu Asset | Storage |
|-----------|-----------|---------|
| **RingLogix Client ID** | [174] | `~/.hermes/.env``RINGLOGIX_CLIENT_ID` |
| **RingLogix Client Secret** | [175] | `~/.hermes/.env``RINGLOGIX_CLIENT_SECRET` |
| **RingLogix Username** | — | `~/.hermes/.env``RINGLOGIX_USERNAME` |
| **RingLogix Password** | — | `~/.hermes/.env``RINGLOGIX_PASSWORD` |
| **RingLogix Domain** | — | `~/.hermes/.env``RINGLOGIX_DOMAIN` |
---
## 7. MSP / RMM / Security APIs
**Storage:** All in `~/.hermes/.env` + Hudu API assets
| Service | Hudu Asset | Storage | Status |
|---------|-----------|---------|--------|
| **SyncroMSP** | [168] Token + [169] API Key | `~/.hermes/.env``SYNCROMSP_API_TOKEN` + `SYNCROMSP_API_KEY` | ✅ Active |
| **Bitdefender GZ** | [172] | `~/.hermes/.env``BITDEFENDER_API_KEY` | ✅ Active |
| **VirusTotal** | [171] | `~/.hermes/.env``VIRUSTOTAL_API_KEY` | ✅ Active |
| **UISP/UNMS** | [173] | `~/.hermes/.env``UISP_API_KEY` | ✅ Active |
---
## 8. Search & Data APIs
| Service | Hudu Asset | Storage | Status |
|---------|-----------|---------|--------|
| **Firecrawl** | [164] | `~/.hermes/.env``FIRECRAWL_API_KEY` | ✅ Active |
| **Exa AI Search** | [163] | `~/.hermes/.env``EXA_API_KEY` | ✅ Active |
---
## 9. Database Credentials
| Database | Host | User | Password Location | Purpose |
|----------|------|------|-------------------|---------|
| **MySQL (apex track)** | 127.0.0.1:33060 (SSH tunnel from wphost02) | `apextrackexperience_1781549652` | `wp-config.php` on wphost02 | Apex Track Experience WordPress |
| **MySQL (CloudPanel)** | app3:3306 | `root` | `/root/.my.cnf` on app3 (also in Vaultwarden) | CloudPanel WordPress hosting |
| **LiteLLM Postgres** | app1 (Docker) | (in docker-compose) | `/root/docker/litellm/docker-compose.yml` on app1 | LiteLLM operational DB |
---
## 10. Docker Services
| Service | URL | Credential Location | Storage |
|---------|-----|--------------------|---------|
| **Vaultwarden** | vault.itpropartner.com / vault.iamgmb.com | Admin Token → `/root/docker/vaultwarden/.env` on Core | Docker env file |
| **DRE Portal** | portal.debtrecoveryexperts.com | Basic Auth (htpasswd) | `/etc/caddy/dre-passwd` |
| **SearXNG** | (internal, no public endpoint) | (none) | — |
| **DocuSeal** | sign.core.itpropartner.com / sign.iamgmb.com | (none / app-managed) | — |
| **Uptime Kuma** | uptimekuma.itpropartner.com | (app-managed) | — |
| **Open WebUI** | admin-ai.itpropartner.com | `admin@itpropartner.com` (password: ask Sho'Nuff) | Not in .env |
| **Mealie** | recipe.iamgmb.com | `G@germainebrown.com` (password → Vaultwarden) | Vaultwarden |
| **Ops Portal** | ops.itpropartner.com | `ippadmin` (password → `~/.hermes/.env`) | `~/.hermes/.env` |
---
## 11. VPN & Network Keys
### WireGuard (Core)
| Item | Value |
|------|-------|
| **Interface** | `wg0` |
| **Core Private Key** | → `/etc/wireguard/wg0.conf` on Core |
| **Core IP** | `10.77.0.1/24` |
| **Listen Port** | `51821` |
| **Home Peer Public Key** | `1fPwdGQ20CxlZCQZQV134olDcE91hfp78yNDeaKJZzg=` |
| **Home Peer Endpoint** | `76.195.7.60:13231` |
| **Routed Networks** | `10.1.0.0/16`, `10.2.0.0/16`, `172.16.1.0/24`, `172.18.18.0/24` |
### Tailscale
| Node | IP | Type | Status |
|------|-----|------|--------|
| core | 100.71.155.7 | Linux | ✅ Online |
| app1 | 100.90.186.109 | Linux | ✅ Online |
| app2 | 100.117.164.66 | Linux | ✅ Online |
| app3 | 100.72.15.12 | Linux | ✅ Online |
| app1-bu | 100.112.23.21 | Linux | ⚠️ Offline (7d) |
| iphone-15-pro-max | 100.106.231.86 | iOS | ✅ Online |
| ipp-g-lap | 100.120.64.120 | macOS | ✅ Online |
| m4-mac-mini | 100.116.232.65 | macOS | ✅ Online |
---
## 12. UniFi / UDM Pro Device Keys
| Site | Key Location | Type | Status |
|------|-------------|------|--------|
| **Grand Lake Club** | UniFi Network Controller → Settings → API | Local Network API Key | ✅ Stored, pending direct verification |
| **Liberty Tire** | UniFi Network Controller → Settings → API | Local Network API Key | ✅ Stored, pending direct verification |
---
## 13. Unknown / Not Found
The following credentials are known to exist but were not found in the standard locations:
| Item | Notes |
|------|-------|
| **Open WebUI admin password** | Recovery manual says "in .env or ask Sho'Nuff" — NOT in current .env. Must ask Germaine. |
| **Hudu API key** | In skill docs (`hudu-management`) — used programmatically, not in .env. |
| **Traccar/FleetTracker360 admin** | Not in .env. May be Docker env or app-managed. |
| **Twenty CRM credentials** | Docker on Core, env at `/root/docker/twenty/.env` (not read). |
| **WordPress site DB passwords** | Various sites, typically in `wp-config.php` on wphost02 or app3. |
| **app1-bu root password** | Hetzner CPX11 — accessed via itpp-infra SSH key only. |
| **ComfyUI / Z4** | GPU server allocated for TripFlow — credentials not yet documented. |
| **Home MikroTik admin** | SSH via `admin@10.77.0.2` with `wisp_rsa` key. RouterOS password in router config (not extracted). |
---
## 14. Key Rotation & Audit Notes
- **Last full audit:** 2026-07-23
- **Last sanitization:** 2026-07-23 — all plaintext secrets removed; use Hudu + file paths for values
- **Hetzner token:** Rotated Jul 22 (old tokens in Hudu were invalid)
- **Twilio:** Live + test credentials both present in Hudu [184]/[185]/[186]
- **OpenRouter:** Fallback routing key — keep active even if not primary
- **admin-ai:** Primary gateway — all model calls route through this
- **Backups:** All .env + config files included in daily Hermes backup to S3
### Recovery Priority
If Core is lost, you need these to rebuild (in order):
1. `/root/.ssh/itpp-infra` — SSH to all servers
2. `/root/.hermes/.env` — All API keys and secrets
3. `/root/.aws/credentials` — S3 access for backups
4. `/root/.hermes/config.yaml` — Full Hermes config
5. `/root/.config/himalaya/shonuff.pass` — Email access
### Hudu API Assets (layout 49)
All API keys are documented as Hudu assets. List them via:
```
GET https://hudu.itpropartner.com/api/v1/companies/1/assets?page=1&per_page=25
```
Filter by `asset_layout_id == 49` to see all API keys with their Hudu asset IDs and storage locations.
+26
View File
@@ -0,0 +1,26 @@
# AI Model Chain — IT Pro Partner
**Updated:** July 21, 2026
**Sanitized:** July 23, 2026 (plaintext keys removed)
**Gateways:** admin-ai (self-hosted LiteLLM), OpenRouter, DeepSeek, Google, xAI
## Chain
| # | Model | Provider | Key Storage |
|---|---|---|---|
| Primary | GPT-5.5 | admin-ai | Hudu [126] Hermes Primary Key |
| F1 | GPT-5.5 | OpenRouter | Hudu [153] |
| F2 | DeepSeek v4 Pro | DeepSeek | Hudu [152] |
| F3 | Gemini 3.5 Flash | Google | Hudu [161] / [151] |
| F4 | Grok 4.5 | xAI | Hudu [154] |
## Admin-AI (LiteLLM)
- URL: `admin-ai.itpropartner.com` (app1, 152.53.36.131)
- Master key: `/root/docker/litellm/.env` on app1 (Hudu [178] LiteLLM Master Key)
- Hermes virtual key: Hudu [126] Hermes Primary Key (GPT-5.5 + DeepSeek v4 Pro routing)
## Credential Storage
- Config: `/root/.hermes/config.yaml`
- Hudu: All API assets under layout 49 at https://hudu.itpropartner.com — search "AI Provider" or by model name
- Git: `itpp-infrastructure/docs/model-chain.md` (this file, sanitized)
- Full inventory: `itpp-infrastructure/docs/key-inventory.md`
+39
View File
@@ -0,0 +1,39 @@
# Ops Portal Changelog
## 2026-07-20 — Major audit and fix session
### Fixed
- **`/api/health` returning 404:** Caddy `handle_path` was stripping the path → changed to `handle`, port corrected to 8090
- **`/api/servers` returning null:** Server list now returns all 5 servers with live ping health
- **Server IPs stale:** app1-bu updated to 5.161.225.131, legacy entries removed
- **Page titles inconsistent:** All 11 pages standardized to "X — IT Pro Partner Ops" format
- **Missing nav icons:** All 11 nav items now have SVG icons
- **FleetTracker360 missing from nav:** Added to navigation with car icon
- **Backups page no data:** `s3_buckets``s3_backups` key fix
- **FleetTracker360 page no nav:** Added ops.css, app.js, utils.js includes
- **Network page dark sidebar:** Replaced with standard top nav bar
- **Cache-busting broken:** All JS/CSS references now versioned with timestamps
- **Mobile nav broken:** `.nav-links.open` CSS rule missing → hamburger menu now toggles properly on iOS/Android
- **Auth guard race condition:** IIFE scripts replaced with DOMContentLoaded event listeners — pages now load data when user is authenticated
- **Cost page broken:** Missing `loadData` function → defined and wired
- **Dependency diagram 404:** File copied to static dir, link corrected
- **Logs page mangled title:** Triple-nested `<title>` tags from sed accident → cleaned
- **Config page scripts directory:** Now populates directory listing when clicked
- **Services page:** Server column added showing "Core (152.53.192.33)"
- **Dashboard auto-refresh on tab focus:** Visibility API handler added
- **Critical service protection:** hermes, caddy, ops-portal restarts blocked via API
### Removed
- Duplicate server entries: "app1 (AI Stack)" and "Docker Box (legacy)"
- Server count: 7 → 5 clean entries
### Changed
- Admin credentials: germaine/itpp2026! → ippadmin (password → Vaultwarden)
- JWT_SECRET made persistent in /root/.hermes/.env to survive restarts
- Collector timeout: 20s → 90s to handle 94K-file S3 bucket scanning
## Jul 17, 2026 — Initial deployment
- Ops portal deployed on Core as FastAPI app
- Caddy reverse proxy configured
- 10 HTML pages created
- Ops collector built for S3, system health, server status
+55
View File
@@ -0,0 +1,55 @@
# Ops Portal — ops.itpropartner.com
## Architecture
- **Server:** Core (152.53.192.33, netcup RS 2000)
- **Backend:** FastAPI at `/opt/ops-portal/server.py` (port 8090)
- **Proxy:** Caddy → reverse_proxy to 127.0.0.1:8090
- **Static files:** `/opt/ops-portal/static/` — 11 HTML pages, ops.css, app.js, utils.js
- **Auth:** JWT via `POST /api/auth/login`, token in localStorage
- **Data:** `/var/www/ops/data/ops-status.json` (5-min collector refresh)
- **Collector:** `/root/.hermes/scripts/ops-data-collector.py` — Wazuh, Bitdefender, S3, UISP, system health
- **Systemd:** `ops-portal.service`, env from `/root/.hermes/.env`
- **Credentials:** ippadmin (password → Vaultwarden / `~/.hermes/.env`)
## Pages (11 total)
| Page | Path | Description |
|------|------|-------------|
| Dashboard | / | System health, widgets, audit log |
| Services | /services.html | Systemd service control, audit log, server column |
| Servers | /servers.html | 5 servers with ping health |
| Network | /network.html | UISP data (44 sites, 90 devices), DNS zones |
| Backups | /backups.html | S3 bucket status (6 buckets) |
| FleetTracker | /fleettracker360.html | Traccar device tracking |
| Cron Jobs | /cron.html | Hermes cron jobs with expandable scripts |
| Config | /config.html | Active configs, /root/.hermes/scripts/ listing |
| Logs | /logs.html | Aggregated log viewer |
| Audit | /audit.html | Full audit trail |
| Costs | /cost.html | API cost tracking by model |
## API Endpoints
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| POST | /api/auth/login | No | JWT authentication |
| GET | /api/health | No | Health check, DB status |
| GET | /api/status | JWT | Full dashboard data (17 sections) |
| GET | /api/servers | JWT | Server list with IPs |
| GET | /api/servers/health | JWT | Ping health (all 7 LIVE) |
| GET | /api/audit-log?limit=N | JWT | Audit trail entries |
| GET | /api/ft360/status | JWT | FleetTracker device data |
## Critical Services (API restart blocked)
hermes, hermes-assistant, hermes-browser, caddy, ops-portal, mysql-tunnel
## Dashboard Widgets
- System Health — Core metrics (jobs, disk, memory, S3, APIs)
- Wazuh Security — agent count, alerts
- Bitdefender GravityZone — 9 managed endpoints
- Alerts and Notifications — DR issues, backup failures, cron errors
- Quick Actions — Restart Ops Portal
## Recovery
```
systemctl restart ops-portal
systemctl reload caddy
python3 /root/.hermes/scripts/ops-data-collector.py
```
+68
View File
@@ -0,0 +1,68 @@
# Project Log — All Completed Projects
## 2026-07-20
### Ops Portal Audit and Overhaul
- Full audit of all 11 pages, 7 API endpoints, and 5 dashboard widgets
- Fixed 15 bugs: auth guards, cache-busting, mobile nav, page titles, missing icons, data keys
- Added 3 new widgets: Wazuh Security, Bitdefender GravityZone, Alerts and Notifications
- Standardized credentials: ippadmin (password → Vaultwarden / `~/.hermes/.env`)
- Added critical service protection (hermes/caddy/ops-portal restart blocked via API)
- Server list cleaned up (7→5), dependency diagram fixed, config page scripts listing
### Backup-Restore Enhancements
- Added manual backup with domain dropdown and note field
- Added restore history logging with formatted 4-column table
- Fixed Caddy routing and timeouts (restore was returning 404 via proxy)
- Fixed mobile toggle on domain expansion cards
- 9 WordPress sites under daily backup (1 AM and 1 PM)
### Docs Written
- `/root/projects/ops-portal/README.md` + `CHANGELOG.md`
- `/root/projects/backup-restore/README.md` + `CHANGELOG.md`
---
## 2026-07-17 — Backup-Restore Initial Deployment
- Flask backup/restore app deployed on app3 (152.53.241.111)
- Daily snapshots scheduled at 1 AM and 1 PM
- Caddy reverse proxy from my.itpropartner.com
- 9 WordPress sites configured
## 2026-07-21 — Home Lab Consolidation
### Proxmox Migration
- vm-host-02 VMs migrated/destroyed: graylog, zabbix, fog, Ubuntu-Server
- vm-host-01 now hosts: docker-host-01, adguard-home
- vm-host-02 cleared for GPU installation (RTX 3090 pending verification)
- QNAP NFS shared storage created (2TB pool, mounted on both Proxmox hosts)
### DNS Infrastructure
- Technitium DNS deployed on app2 (dns1.itpropartner.com)
- DoH upstreams: Quad9, Cloudflare, Google
- Home DNS chain: docker-host-01 AdGuard → dns1 Technitium → vm-host-01 AdGuard
- Firewall locked: port 53 restricted to 76.195.7.60
### Twilio
- Toll-free number verification submitted for IT Pro Partner
- Use case: customer notifications, appointment reminders, IVR
### Mattermost
- Branding configured: IT Pro Partner NOC
- Channel structure designed (13 channels)
- Mobile push investigation: HPNS required for background notifications
### Gift-a-Roast
- Domain giftaroast.com purchased, DNS live (Cloudflare → app1)
- ElevenLabs TTS + Deepgram STT keys verified
- Architecture: Twilio Voice → STT → AI → TTS → caller
### Uptime Kuma
- Backed up (361MB, 25 monitors), updated to latest
### IRS
- Name change letter drafted: CG Premier Transport LLC → IT Pro Partner LLC
- Georgia Secretary of State filing confirmed
### Skills Updated
- 10 skills patched: docker-service-deployment, home-lab-*, server-architecture-plan, twilio-10dlc, vaultwarden-management, voip-portal, hudu, syncromsp, recurring-information-scout