# Session Handoff — 2026-08-15 Evening
**Started:** ~14:00 UTC  
**Ended:** ~17:00 UTC  
**Context:** Vault browser setup + index link fixes  
**Next session:** Pick up here, no need to re-read prior context unless asking for history

---

## What we built today

### Vault browser (LIVE)
- **URL:** `https://vault.robblake.cloud/vault/index.html`
- **Backend:** Python HTTP server on port 9124, root = `/root/.hermes/`
- **Systemd:** `vault-browser.service` — enabled, Restart=always, bind 0.0.0.0
- **TLS:** Dedicated Let's Encrypt cert for `vault.robblake.cloud` (expires 2026-11-13, auto-renews via certbot standalone)
- **nginx:** proxy_pass `http://127.0.0.1:9124` in `/etc/nginx/sites-available/vault.robblake.cloud`
- **DNS:** A record `vault.robblake.cloud` → `2.25.172.164` (live)

### Vault structure
```
/root/.hermes/vault/
├── index.html                    ← clickable vault browser
├── Ideas/
│   ├── _README.md
│   ├── Templates/new-idea.md
│   └── Active/performance-lead-gen-offer/README.md
├── Projects/
│   ├── _README.md
│   ├── Active/
│   │   ├── playwright-install/README.md
│   │   ├── claude-code-cli-install/README.md
│   │   ├── claude-cowork-standing-instruction/README.md
│   │   └── motion-canvases/
│   │       ├── premium-line-bail-bonds.html  ← 4 motion canvases
│   │       ├── free-website-local-services.html
│   │       ├── performance-lead-gen-offer.html
│   │       └── website-audit-track.html
│   └── Archived/
├── Reference/
│   ├── _README.md
│   ├── playwright-vps.md
│   ├── claude-code-cli.md
│   └── ghl-funnel-gotchas.md
└── [Syncthing-synced Cowork folders from Connie]
```

### Work files (outside vault, also served)
```
/root/.hermes/work/
├── ghl/SESSION-HANDOFF-premium-line-landing-pages.md
├── free-site-template/index.html
├── outreach-templates-ai-services.md
└── outreach-templates-ai-services-v2.md
```

### Motion canvases (4 active + 1 retroactive)
1. **Premium Line (Bail Bonds)** — product built, outreach stalled. Walk-in was wrong channel.
2. **Free Website (Local Services)** — Gannon case study in progress, no outreach system.
3. **Performance Lead-Gen Offer** — analyzed, not deployed. Per-qualified-lead billing, HVAC niche.
4. **Website Audit Track** — tool built, no sales process.
5. **Retroactive: Premium Line stall analysis** — outreach failure, not product failure.

Each canvas maps: sell vs deliver, ICP, list compilation, hook, outreach sequence, conversion mechanism, fulfillment, kill criteria, next steps.

### Index.html link fix
- Changed all `../vault/...` to `/vault/...` and `../work/...` to `/work/...`
- Fixed back-links in all 4 motion canvas HTML files: `../index.html` → `/vault/index.html`
- Server root is `/root/.hermes/`, so vault paths need `/vault/` prefix

---

## What still needs doing

### Outreach sequences
The motion canvases have drafted sequences but they're thin. Each needs:
- Exact subject lines for cold email
- SMS templates (post-opt-in only)
- FB DM scripts
- Voicemail scripts
- Timing + cadence locked

### Performance lead-gen pilot
- HVAC niche selected for Colorado 90-day pilot
- Per-qualified-lead billing + $97-147/mo platform fee
- Need 5 prospects interviewed BEFORE building offer
- Reconciled recommendation doc at: `/root/.hermes/vault/"Free Website Local Services - Lead Magnet"/2026-08-15_reconciled-recommendation.md`

### Gannon case study
- gannonsgaragedoors.com domain not yet live (parked page)
- Free site template built at `/root/.hermes/work/free-site-template/`
- Need to push domain live + wire to GHL for tracking

### nginx vault serving (abandoned)
- Direct nginx serving from `/root/.hermes/vault` fails because `/root` is 700, www-data can't traverse
- Bind mount `/var/www/vault` also failed (nginx mount namespace sees empty dir)
- **Current solution:** nginx proxy to Python HTTP server on 9124 — works, keep this
- **Do not retry** serving vault directly via nginx without a different architecture

### vault-indexing skill
- Exists at `~/.hermes/skills/vault-indexing/`
- Enforces updating `/root/.hermes/vault/index.html` when saving docs
- Primary delivery: `https://vault.robblake.cloud/` (MEDIA: prefix as fallback)

---

## Key gotchas for next session

1. **Windows HTML download issue:** Connie maps `.html` to "download" not "open." Use `https://vault.robblake.cloud/` URLs instead of MEDIA: prefix when possible.
2. **Server root is `/root/.hermes/`:** The Python server runs from `/root/.hermes/`, so vault files are at `/vault/...` and work files at `/work/...`.
3. **systemd unit location:** `/etc/systemd/system/vault-browser.service` — if it dies, `systemctl restart vault-browser.service`.
4. **Certbot cert:** standalone cert for `vault.robblake.cloud` at `/etc/letsencrypt/live/vault.robblake.cloud/`. Renews automatically.
5. **Rob's preference:** don't build full outreach sets blind — build ONE test pour, his approval, THEN batch the rest.
6. **Memory is at 99%:** 11,899/12,000 chars. Next session may need a prune before saving new facts.

---

## Session metadata
- **Profile:** default
- **Model:** stepfun/step-3.7-flash:free (Nous)
- **VPS:** 2.25.172.164
- **Syncthing:** vault folders syncing to Connie + Obsidian
- **Claude Code CLI:** v2.1.197 at `/root/.hermes/npm-global/bin/claude`, authenticated
