# 2026-02-17

## Password Manager Migration: Proton Pass → Vaultwarden
- Leaving Proton ecosystem (mail → Stalwart) means losing Proton Pass too
- **Decision: migrate to Vaultwarden** (already running at vault.inou.com)
- **Steps:**
  1. Johan creates account at https://vault.inou.com
  2. Export from Proton Pass (Settings → Export → CSV or JSON)
  3. Import into Vaultwarden (compatible with Bitwarden import format)
  4. Disable signups after account created (set SIGNUPS_ALLOWED=false in docker-compose)
  5. Install Bitwarden app on iPhone, Mac, browser extension — point server to https://vault.inou.com
- **TODO:** Set up rclone backup to GDrive (needs OAuth browser auth on Zurich)
- Fish Audio API key and other secrets should move here from plaintext files

## Domain Registrar Migration Plan
- OpenProvider has ~€80 credits remaining
- As domains come up for renewal, transfer to Cloudflare Registrar instead
- **URGENT: jongsma.me expires 2026-02-28** — transfer to CF before auto-renewal
- stpetersburgaquatics.com expires 2026-03-13
- Full renewal schedule: zavtra(May), inou(Jun), unbelievable(Jul), x4(Aug), e-consultants(Sep), muskepo.nl(Sep), busel(Oct), localbackup(Oct), johanjongsma(Nov), 851brightwaters(Dec), flourishevents(Jan27), muskepo.com(Jan27), harryhaasjes(Feb27)

## DNS Migration
- Changed NS to Cloudflare for ALL 10 remaining domains via OpenProvider API
- OpenProvider API creds: `~/.config/openprovider.env`
- Cloudflare activation checks triggered, cron job at 4:55 AM to check + add remaining 6

## Email Migration
- Added Tanya to Proton Bridge (account #2, pw: dxk6YlYpRgr3Z7fw3BhXDQ)
- Stalwart: all users recreated with `"roles":["user"]` — needed for IMAP auth
- imapsync working via SSH tunnel (localhost:9930 → zurich:993)
- Tanya sync running in background (/tmp/imapsync_tanya.log)
- K2.5 subagent spawned for Tanya inbox cleanup (envelope metadata only)

## Stalwart Fixes
- Self-signed cert added but Stalwart not loading it (ACME override issue)
- SSH tunnel workaround for imapsync (bypasses TLS + firewall)
- UFW on Zurich: allowed all Tailscale traffic (`ufw allow in on tailscale0`)

## AgenticMail
- Discovered: github.com/agenticmail/agenticmail — MCP layer on Stalwart for AI agents
- 3 days old, 7 stars — too new for production. Bookmarked for later.
- Interesting: SMS/Google Voice integration, outbound PII scanning

## BlueBubbles / iMessage
- Mac Mini M4 (2025) is Johan's daily driver, BYO network
- Can run BlueBubbles today — no need to wait for M4 Max laptop
- Setup deferred to tomorrow

## M365 → Fully Tablet Alerts (afternoon session)
- **Pipeline working**: MC detects emails/Teams → K2.5 summarizes → POSTs to Fully dashboard
- **K2.5 chat API is broken for formatting** — thinking model narrates "The user wants..." instead of following instructions
- **K2.5 completions API works perfectly** — few-shot prompt with `\nAlert:` completion pattern, `stop:["\n"]`
- **Johan's messages filtered out** — fixed DisplayName check (was checking URL field before)
- **Conversation-aware**: Johan's replies auto-clear Fully alerts for that Teams conversation
- **Group coloring**: Teams messages from same conversation share background color (hue from conv ID hash)
- **Fireworks API key mismatch fixed**: MC had stale key `fw_TGADpSki7zak4K9JxPzbXU`, updated to working `fw_RVcDe4c6mN4utKLsgA7hTm`
- **OC m365 hook removed**: Agent was unreliable (localhost web_fetch blocked), MC handles everything directly now
- HTML entity stripping added (&nbsp;, &amp;, etc.)

## Fully Dashboard Improvements
- **Budget pace indicator**: `usage% / time%` — shows how fast we're burning weekly Anthropic budget
  - Week runs Sat 2pm → Sat 2pm ET
  - >100% = red (overspending), 90-100% = white (on pace), <90% = green
  - Shows as `⚡ 108%` with color
- **Claude usage fixed**: James dashboard API returns object not array — was showing "undefined"
- **News streams**: Each topic (markets, ai, nabl, news, netherlands) gets its own bar below alerts
  - Fetches from James dashboard /api/news, grouped by topic field

## News System
- Added `topic` field to James dashboard news API
- Topics section on James dashboard groups news by topic with emoji headers
- **Cron job**: Grok 4.1 Fast runs every 4h (2,6,10,14,18,22 ET) for news scan
- **Philosophy**: X/Twitter is radar (what's happening), then go to PRIMARY SOURCE (Anthropic blog, SEC filings, whitehouse.gov, etc.). Never cite middlemen (CNBC, Guardian) when source exists.
- Johan wants raw signal, not editorial filter

## Key Corrections
- **"Best over fast, always"** — Johan doesn't want fastest approach, wants best
- **Don't bypass, fix root cause** — removing LLM summarization was lazy; fix the prompt instead
- **Test with curl before deploying** — always get "curl proof" before pushing code changes
- **Fireworks guarantees privacy; Grok (xAI) does not** — use Fireworks for anything touching private data (emails, Teams). Grok OK for public news scanning.
- **Claude Sonnet 4.6 released today** — 1M context (beta), adaptive thinking, context compaction (beta), $3/$15 per M tokens

## Sophia
- Blood draw at 12:00 PM, Health Link, 851 Brightwater Blvd NE, $65 (Karina)
