# Working Context (updated 2026-02-17 9:00 PM ET) ## Active Projects ### Dealspace AI (Deal Room) - **Status:** MVP built and running on port 9300 (forge) - Go + templ + HTMX + SQLite + Tailwind, single binary - Full e2e working: login, dashboard, deals, contacts, audit, analytics, requests - Role-based nav (buyer vs seller views) - Pushed to zurich: 3720ed7 - **Next:** Johan to review, get Misha/PE feedback, iterate on features - Source: `/home/johan/dev/dealroom/` ### Fish Audio S1 TTS / Smart Home Voice - Adrian voice working (ref: bf322df2096a46f18c579d0baa36f41d) - Pipeline proven: Fish API → mp3 → http server → media_player on tablets - Office tablet (office1.tbl) reliable; mbed tablet (Fully REST) unreliable - **TODO:** Persistent TTS service on forge, store API key in Vaultwarden - Vision: contextual voice announcements (deliveries, appliances, Russian for in-laws) - Need Tanya approval before expanding beyond office - **Next feature:** Voice meeting announcements — pre-generate TTS at calendar fetch, play at T-5m - **Architecture decision:** Alert dashboard will merge INTO Message Center (not now, but planned) ### Message Center (MC) — M365 Pipeline - **Working:** MC detects emails/Teams → K2.5 summarizes → POSTs to Fully dashboard - **K2.5 completions API** is the correct endpoint (chat API broken for formatting) - **Conversation-aware**: Johan's replies auto-clear Fully alerts for that Teams conversation - **Group coloring**: Teams messages from same conv share background color (hue from conv ID hash) - **Fireworks API key:** `fw_RVcDe4c6mN4utKLsgA7hTm` (working key — old stale key caused issues) - **OC m365 hook removed**: MC handles everything directly now - Previously reported M365 fetch error (ErrorInvalidUrlQueryFilter ~2/16) — appears resolved ### Fully Dashboard (Forge / Tablets) - **Budget pace indicator:** `usage% / time%` (week = Sat 2pm → Sat 2pm ET) - >100% = red, 90-100% = white, <90% = green. Shows as `⚡ 108%` - **News streams:** Topics (markets, ai, nabl, news, netherlands) each get own bar below alerts - Fetches from James dashboard /api/news, grouped by `topic` field - **Claude usage fixed**: pulls object not array from dashboard API ### News System - **Cron:** Grok 4.1 Fast every 4h (2,6,10,14,18,22 ET) for news scan - **Philosophy:** X/Twitter as radar → then PRIMARY SOURCE. No middlemen. - `topic` field added to James dashboard news API; Topics section groups by topic with emoji headers ### Password Manager Migration: Proton Pass → Vaultwarden - **Status:** Plan defined, awaiting Johan action - **Steps:** 1. Johan creates account at https://vault.inou.com 2. Export from Proton Pass (Settings → Export → CSV or JSON) 3. Import into Vaultwarden (Bitwarden-compatible format) 4. Set SIGNUPS_ALLOWED=false after account created 5. Install Bitwarden app on iPhone, Mac, browser extension → point to https://vault.inou.com - **TODO:** rclone backup to GDrive (needs browser OAuth on Zurich) - Fish Audio API key + other secrets → Vaultwarden ### Domain Registrar Migration - **URGENT: jongsma.me expires 2026-02-28** — transfer to Cloudflare before auto-renewal - stpetersburgaquatics.com expires 2026-03-13 - OpenProvider has ~€80 credits; migrate renewals to Cloudflare going forward - 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 - Cloudflare activation checks triggered; cron job at 4:55 AM to check + add remaining 6 - OpenProvider API creds: `~/.config/openprovider.env` ### Email Migration (Stalwart) - Tanya added 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 was running in background (/tmp/imapsync_tanya.log) — check status - Self-signed cert added but Stalwart ACME override issue still pending ### James Dashboard - Running on port 9200 as dealroom.service - Agent chat still needs testing from Johan's Mac browser ### BlueBubbles / iMessage - Mac Mini M4 (2025) is Johan's daily driver — can run BlueBubbles now - Setup deferred ## Key Context - **Wake permission:** 8 AM+ ET, genuinely important events only - **Briefings:** Johan prefers X/Twitter as primary news source - **OpenClaw patches:** Two source patches need reapplication after updates: - Scope preservation patch - Deleted transcript indexing patch - See 2026-02-16.md for details - **Fireworks for private data** (emails, Teams); Grok OK for public news - **Claude Sonnet 4.6 released** — 1M context (beta), adaptive thinking, context compaction (beta), $3/$15 per M tokens ## Upcoming / Open Threads - **jongsma.me domain transfer** (URGENT — expires 2026-02-28) - **Vaultwarden setup** — Johan needs to create account + import passwords - **rclone backup** for Vaultwarden (needs browser OAuth on Zurich) - **Persistent TTS service** on forge - **BlueBubbles setup** on Mac Mini M4 - **Test xAI/Grok** in morning briefing - **Sophia blood draw** — was today (Tue Feb 17 12:00 PM), Health Link - Fix Stalwart ACME cert issue - Matrix OS — watch only, revisit when mature ## People - **Misha (Michael Muskepo)** — Johan's son, Dealspace AI co-creator with PE guys - **Tanya (Tatyana)** — Johan's wife, gatekeeper for smart home expansion - **Sophia** — daughter (blood draw was today) - **Karina** — associated with Sophia's health link appointment ($65) ## Corrections Learned Today - **"Best over fast, always"** — Johan doesn't want fastest approach, wants best - **Don't bypass root cause** — removing LLM summarization was lazy; fix the prompt instead - **Test with curl before deploying** — always get "curl proof" before pushing code changes - **K2.5 chat API broken for formatting** — use completions API with few-shot pattern instead