diff --git a/HEARTBEAT.md b/HEARTBEAT.md index 4660a12..c8f0951 100644 --- a/HEARTBEAT.md +++ b/HEARTBEAT.md @@ -51,7 +51,7 @@ Watch for new Spacebot releases that may fix the worker dispatch issue: Spawn a subagent to think through ONE concrete suggestion: ``` -sessions_spawn(task="inou daily suggestion: review memory/inou-context.md and recent inou work, then propose ONE specific thing Johan could do today to move inou forward (building/product focus only, not marketing). Post to dashboard news and send Signal. Keep it to 2-3 sentences max.", label="inou-nudge") +sessions_spawn(task="inou daily suggestion: review memory/inou-context.md and recent inou work, then propose ONE specific thing Johan could do today to move inou forward (building/product focus only, not marketing). Post to dashboard news and send Telegram. Keep it to 2-3 sentences max.", label="inou-nudge") ``` **Good suggestions:** a feature gap to close, a bug to fix, a UX improvement, an integration to build, a technical decision to make, a missing data source to add, a doctor/specialist workflow to improve. @@ -78,7 +78,7 @@ Florida = "every day is the same." Don't report normal weather. ### Briefings Dashboard (ALWAYS!) After generating any briefing (morning, afternoon, or ad-hoc): 1. **POST to dashboard:** `curl -X POST http://localhost:9200/api/briefings -H 'Content-Type: application/json' -d '{"title":"...","date":"YYYY-MM-DD","weather":"...","markets":"...","news":"...","tasks":"...","summary":"..."}'` -2. **Include link in Signal message:** http://100.123.216.65:9200 +2. **Include link in Telegram message:** http://100.123.216.65:9200 3. **Verify it worked:** `curl -s http://localhost:9200/api/briefings | jq '.briefings | length'` This is NON-NEGOTIABLE. Johan expects briefings on the dashboard. @@ -189,7 +189,7 @@ curl -X POST http://localhost:9200/api/news -H 'Content-Type: application/json' -d '{"title":"...","body":"...","type":"info|success|warning|error","source":"..."}' ``` -Only ping Johan on Signal if truly urgent (big position moves, breaking news). +Only ping Johan on Telegram if truly urgent (big position moves, breaking news). Update `memory/heartbeat-state.json` with `lastTechScan` timestamp after running. **Johan's Open Positions:** @@ -380,14 +380,14 @@ Week runs Thu 10PM → Thu 10PM ET (Anthropic changed reset window — previousl **Alert rules — read carefully:** - **Pace ≤ 100%:** NOT an alert. Tracking correctly. Mention in briefing, nothing more. -- **Pace > 100% (burning faster than week allows):** Signal Johan. No Fully tablet. -- **Sudden jump ≥ 4% in ≤ 4h:** Signal Johan immediately. No Fully tablet. +- **Pace > 100% (burning faster than week allows):** Send ntfy alert (forge-alerts). No Fully tablet. +- **Sudden jump ≥ 4% in ≤ 4h:** Send ntfy alert immediately (forge-alerts). No Fully tablet. - **NEVER post Claude usage to the Fully tablet (port 9202).** It's not urgent enough for that surface. **The James dashboard (port 9200) status bar** shows current usage — that's enough passive visibility. **If fetch fails (Cloudflare challenge = expired cookies):** -- **ALERT JOHAN IMMEDIATELY via Signal** — don't go silent! +- **ALERT JOHAN IMMEDIATELY via ntfy (forge-alerts)** — don't go silent! - Message: "⚠️ Claude usage fetch failed - cookies expired. Need fresh cookies from Chrome." - Instructions: F12 → Application → Cookies → claude.ai → copy sessionKey + cf_clearance - Update `config/claude-cookies.json` diff --git a/TOOLS.md b/TOOLS.md index d011169..b673fd5 100644 --- a/TOOLS.md +++ b/TOOLS.md @@ -129,7 +129,7 @@ Things like: - **Public IP:** 47.197.93.62 (not static, but rarely changes) - **Location:** St. Petersburg, Florida - **Caddy (reverse proxy):** 192.168.0.2 / Tailscale: 100.84.42.55 (caddy) - - SSH: `tailscale ssh root@caddy` or `ssh root@caddy` (key installed) + - SSH: `ssh root@192.168.0.2` (direct LAN, key installed) — do NOT use Tailscale (requires re-auth) - Config: `/etc/caddy/Caddyfile` ### James Server (Hetzner) diff --git a/memory/2026-03-01.md b/memory/2026-03-01.md index b330c61..a2c7406 100644 --- a/memory/2026-03-01.md +++ b/memory/2026-03-01.md @@ -117,3 +117,32 @@ tw.config.js custom colors: accent=#22C55E, navy=#0A1628, navy-light=#111f38 - Host: mail.inou.com, Port: 465 (implicit TLS — 587 is OAuth2 only) - User: noreply, Pass: InouNoreply2026! + +--- + +## 05:20 ET — vault1984 /hosted page polish session + +### Changes made (commits 6ad6fca, c3695cd, and ongoing) +- **Geo detection fixed:** `/geo?lat=X&lon=Y` now reverse-geocodes via Nominatim OSM (free, no key). LAN visitors get real city/country via browser geolocation. +- **Nav:** vault1984 left-aligned (`w-full px-8`, no `max-w-7xl` centering on nav bar). Hosted link → gold `#D4AF37` with pulsing dot animation. +- **Zürich card bg:** `#1a1600` → `#3d2e00` (visibly amber/golden) +- **"You" card:** city / country / region on separate lines (was jammed as "Saint Petersburg, United States") +- **Flexbox cards:** already fixed (5 cards in one row via flex:1 min-width:0) +- **Sources page:** `/sources` live at vault1984.com/sources — all complaint quotes with verbatim text + URLs (1Password forum, Bitwarden GitHub/Community, LastPass HN) +- **Viewport fix (spawned Opus):** Two root problems at 1200px viewport — nav items crowded + cards cut off below fold. Opus tasked to: shrink nav (text-2xl, gap-4, drop '— $12/yr'), remove security model box (~200px saved), cap SVG map at max-height:380px. Target section height ~639px, fits in 1136px (1200 - 64px nav). + +### Key file locations +- `/home/johan/dev/vault1984/cmd/vault1984/website/hosted.html` — main hosted page +- `/home/johan/dev/vault1984/cmd/vault1984/website/sources.html` — new sources page +- `/home/johan/dev/vault1984/api/routes.go` — added `/sources` route +- `/home/johan/dev/vault1984/api/handlers.go` — GeoLookup with Nominatim lat/lon path + +### Running state +- Binary: `/home/johan/dev/vault1984/vault1984` +- Live: `http://localhost:1984` and `https://vault1984.com` +- Opus agent session: `clear-summit` (pid 2981583) — fixing viewport + +### Johan feedback patterns this session +- "the viewport is getting worse" → screenshots showed wrong Chrome tab; actual issue was 200+px of wasted margins + unconstrained SVG map height +- Wants evidence before "done" — always take screenshot after changes +- Card layout: each DC gets name + flag + subtitle + live dot, "You" card gets city/country/region split diff --git a/memory/claude-usage.db b/memory/claude-usage.db index 710c35b..d8bb84a 100644 Binary files a/memory/claude-usage.db and b/memory/claude-usage.db differ diff --git a/memory/claude-usage.json b/memory/claude-usage.json index 075a798..acbfad3 100644 --- a/memory/claude-usage.json +++ b/memory/claude-usage.json @@ -1,9 +1,9 @@ { - "last_updated": "2026-03-01T05:00:02.046165Z", + "last_updated": "2026-03-01T11:00:02.177637Z", "source": "api", - "session_percent": 0, - "session_resets": null, - "weekly_percent": 38, - "weekly_resets": "2026-03-06T03:00:00.008306+00:00", - "sonnet_percent": 31 + "session_percent": 5, + "session_resets": "2026-03-01T15:00:00.133133+00:00", + "weekly_percent": 52, + "weekly_resets": "2026-03-06T03:00:00.133152+00:00", + "sonnet_percent": 52 } \ No newline at end of file diff --git a/memory/screenshot.png b/memory/screenshot.png new file mode 100644 index 0000000..0a32b2d Binary files /dev/null and b/memory/screenshot.png differ diff --git a/scripts/daily-updates.sh b/scripts/daily-updates.sh index 3264c44..cbeeeff 100755 --- a/scripts/daily-updates.sh +++ b/scripts/daily-updates.sh @@ -172,3 +172,29 @@ fi echo "" echo "=== Update complete. Log: $LOG ===" + +# --- Caddy Pi (192.168.0.2) --- +echo "" +echo "--- Caddy Pi ---" +CADDY_RESULT=$(ssh -o ConnectTimeout=10 -o BatchMode=yes root@192.168.0.2 " + apt-get update -qq 2>/dev/null + UPGRADABLE=\$(apt list --upgradable 2>/dev/null | grep -v Listing | wc -l) + if [ \"\$UPGRADABLE\" -gt 0 ]; then + DEBIAN_FRONTEND=noninteractive apt-get upgrade -y -qq 2>&1 | tail -3 + echo \"upgraded:\$UPGRADABLE\" + else + echo \"upgraded:0\" + fi + # Commit and push any Caddyfile changes + cd /etc/caddy + if ! git diff --quiet HEAD Caddyfile 2>/dev/null; then + git add Caddyfile && git commit -m \"auto: Caddyfile update \$(date +%Y-%m-%d)\" && git push + echo 'caddyfile:committed' + else + echo 'caddyfile:unchanged' + fi + # Reboot if needed + [ -f /var/run/reboot-required ] && echo 'reboot:required' || echo 'reboot:no' +" 2>/dev/null || echo "ssh:failed") +echo "Caddy Pi: $CADDY_RESULT" +update_json "caddy_pi.result" "\"$CADDY_RESULT\""