# Caddy Deployment for HTML Artifacts
When the user wants to *see* the built HTML in a browser (especially on their phone or from Telegram), deploy to the infrastructure's Caddy server for a real HTTPS URL.
## When to deploy
- User asks to "see" the mockup/page (not just hear about it)
- The artifact is a self-contained HTML file
- User is on a phone or messaging platform where `file://` paths don't work
- You want a clickable link, not instructions to open a local file
## Standard deployment
```bash
# 1. Copy to web root (filename = URL path)
cp /path/to/source.html /var/www/static/
chmod 644 /var/www/static/
# 2. Add Caddy route if needed (edit /etc/caddy/Caddyfile)
# Append a new @ handle block before the closing brace
# Pattern:
# @ path /
# handle @ {
# root * /var/www/static
# file_server
# }
# 3. Reload Caddy
caddy reload --config /etc/caddy/Caddyfile
# 4. Verify
curl -sI https://core.itpropartner.com/
# Expect 200
# 5. Send link
# https://core.itpropartner.com/
```
## Pitfalls
- **File permissions matter.** A file with `600` returns 403 even with the correct root. Always `chmod 644`.
- **URL path = filename.** `/var/www/static/voip-demo` → `/voip-demo`. Drop the `.html` extension from the URL unless the filename has it.
- **404 after adding route?** Check file permissions first. If the file is `644`, check it actually exists at the exact path.
- **Don't add duplicate routes** — if a handler already covers that path prefix (e.g. `core.itpropartner.com { ... }` with `file_server`), just copy the file; no Caddyfile edit needed.
## Pages deployed to date (for reference)
| Path | What it serves | Description |
|---|---|---|
| `/vehicles.json` | JSON | Vehicle database for Apex |
| `/capabilities` | Directory | Portal mockup / capabilities page |
| `/ringlogix` | HTML | RingLogix API reference docs |
| `/voip-demo` | HTML | VoIPSimplicity auto-provisioning demo |
| `/call-flow` | HTML | Inbound call flow diagram |
| `/portal` | HTML | Customer portal dashboard |