#23
YouTube + Spotify playlists on the dashboard
New
Mentioned 2026-05-04 ~00:30 ET (mid-Bidet-recovery tangent)
Mark wants a YouTube playlist (Matt Wolf, Future Tools, plus a couple others — most-recent content) and a Spotify podcast playlist on the live dashboard. "Pretty sure Claude has connections to Spotify and YouTube — so we can get that part of my life controlled as well."
Server-side path: YouTube Data API v3 (free, no OAuth needed for public playlists) + Spotify Web API (OAuth for personal podcasts). 30-min build of a `/dashboard/data` extension that surfaces 3-5 latest items per source as cards with thumbnail/title/click-through.
Next: confirm channel list, then build.
#1
Domain transfer Namecheap → Cloudflare Registrar
Low
Mentioned 2026-05-03 morning brain dump
Domain in Namecheap, paid through 2030. DNS already on Cloudflare. Transfer would save ~$19/yr at 2030 renewal. Detail file: reference_thebarnetts_info_domain.md.
Next: request Namecheap auth code → initiate Cloudflare Registrar transfer. Urgency: Low — domain safe through 2030.
#3
Server-side /brief endpoint for 7 AM morning brief
Medium
Mentioned 2026-05-02 evening
Tasker currently speaks a static greeting. Want dynamic calendar + health + TP3 status. Pairs with the broader rule: "reports must regenerate from scratch daily."
Next: Apex cron 6:55 AM generates fresh brief text → Tasker GETs at 7:00 AM.
#5
Phone-local Gemma Bidet (standalone APK)
Low
Mentioned 2026-05-03 morning brain dump
Pixel 8 Pro with Tensor G3 supports Gemma via Google AI Edge SDK / MediaPipe LLM Inference. Mark saw the Edge dev app running Gemma locally.
Next: research session — what dependencies, APK size, on-device Whisper integration, vs current Apex flow.
#6
mark@thebarnetts.info → breezy@gmail master-calendar plan
Medium
2026-05-03 morning + evening architecture call
Architecture: ONE master calendar at breezybarnett16@gmail.com (the Pixel's primary). Pull events via Google's native SHARE/SUBSCRIBE — NOT manual copy.
Done: mark@thebarnetts.info shared with breezy@gmail via API. Owed: Mark accepts the share. Mom shares fran@thebarnetts.info with breezy@gmail (her phone, one-time). Optional re-OAuth workspace-mcp on breezy@gmail for full multi-cal coverage.
Next: Mark accepts share + walks Mom through her share next visit.
#7
Drive Mode — Android Auto detection → boost-capture mode
Low
2026-05-02 evening, deferred
Need car BT name — three carkit devices paired. Detection via Android Auto app foreground would be cleaner.
Next: decide what Drive Mode should DO (speak all notifications? log "in-car" tag?).
#8
OMI answer-quality drop investigation
Medium
2026-05-02 night
Mark noticed OMI replies got worse — "was Claude or Opus, now partial." Unknown if model selector changed in OMI app, backend swapped, or something else.
Next: dive into OMI app settings, verify model + behavior. Affects daily use.
#11
Workspace admin / domain-wide control of thebarnetts.info
Low
2026-05-03 afternoon
Mark hit Google's Secure-by-Default policy iam.disableServiceAccountKeyCreation. Pivoted to Option B (User OAuth + admin scopes), then realized Mom's calendar — the actual goal — is already reachable via her existing share. Confirmed full-week pull 2026-05-03 PM.
Next: if Mark wants directory tools later, build a small `tp3-admin-mcp` with admin.directory scopes. Skip until needed.
#12
Mom's calendar in morning brief
Medium
2026-05-03 afternoon
Data layer DONE — Mom's reads work through Mark's existing OAuth via her share. Confirmed 2026-05-03 PM. Awaiting `/brief` endpoint (tangent #3) to fold in her week. Apply feedback_mom_visibility_is_family_care_2026-05-03.md framing — visibility/care, not control.
Next: ride along when /brief ships.
#15
Family Fun Call Sunday reminder cycle
Done
2026-05-03 afternoon
Recurring Google Calendar event "Send Family Fun Call email" Sunday 12 PM ET created. Google's notification system pings Mark; he triggers the send manually ("send fun call" in chat or Gmail). Human-in-the-loop kept on purpose.
#16
SMS-as-Claude-chat (text Claude conversationally from the phone)
Medium-High
2026-05-03 PM
Two paths: (A) Tasker self-route — contact "Claude AI" with Mark's own number, profile intercepts SMS → POST to /ask → speak via existing ntfy → Ray-Bans channel. (B) Twilio number + webhook ($1/mo + per-msg).
Recommend Path A. Builds on existing infra. Mark texts → Apex Claude responds → Ray-Bans speak.
Next: /ask endpoint already shipped. Add Tasker SMS-Sent profile pointed at "claude@self".
#17
Apex 64GB RAM upgrade — pending Mark's job security
Low
2026-05-03 PM ("I just need to make sure I have a job first.")
Apex = Minisforum EliteMini, board "HPBSD" (Shenzhen Meigao). 1×16GB DDR5-5600 SO-DIMM in slot 1, slot 2 empty. SMBIOS MaxCapacity = 64 GB exactly — Mark's 2×32GB plan is the ceiling. Detail file: reference_apex_hardware_2026-05-03.md.
Next (when Mark green-lights): verify BIOS update, pick a kit at Micro Center (Crucial CT2K32G56C46S5 or Kingston FURY Impact KF556S40IBK2-64), MemTest86 overnight.
#18
eGPU / OptiLink shared between Apex and G16 (brainstorm)
Low
2026-05-03 PM ("Is plug-and-play RAM is that what I'm after?")
External plug-and-play RAM doesn't exist on consumer hardware (latency physics — RAM lives on the memory bus). The eGPU question is real: OptiLink uses OCuLink (PCIe-over-cable). G16 likely lacks OCuLink (rare on laptops); confirm via Device Manager when convenient. If G16 has Thunderbolt 3/4, separate TB eGPU is possible but lower bandwidth.
Better answer to Mark's underlying need: don't share GPU hardware, share GPU workloads. Apex with eGPU runs LLM inference; G16/phone/iPad sends API calls over Tailscale. Already the working pattern via Bidet AI / Ollama.
#20
/ingest control-char tolerance — patched in container, source commit owed
Medium
2026-05-03 PM
Tasker's HTTP Request action embedded raw newlines into JSON body (multi-line notification text in `%evtprm2`/`%evtprm3` had unescaped `\n`). FastAPI's strict parser threw `JSONDecodeError`. /ingest 500'd, Tasker auto-retried, error dialog showed up.
In-container fix applied: json.loads(strict=False) + form-urlencoded fallback + last-resort raw-text capture. Verified: broken JSON now returns HTTP 200 with text intact.
Owed: patch lives only in the running container. If tp3_memory_api image is rebuilt, fix is lost. Apply same edit to the source on Apex and commit.
#21
Legacy Soil V3 — drop "V3" label once V2 fully archived
Low
2026-05-03 evening brain dump
Drive folder structure created. Legacy Soil V3/ is the new source-of-truth root. Legacy Soil Archive/V1/ populated with old V1 brain dumps + early drafts (23 files). V2 source folders STAY in place at Legacy Soil/ because the deploy pipeline tar+SCPs from Legacy Soil/Handoff_Package/Website_Source/.
V3 audit pass DONE 2026-05-03 evening — every V3 doc internally V3-only, v2/v3 labels stripped, V2-only artifacts moved behind a single /v2-archive.html pill. Mother Pile vs Unconditional Forest disambiguated everywhere. Pearl Granulator manual added as a homepage pill.
Owed for cleanup: port any V2 content not yet ported, repoint deploy script to Legacy Soil V3/Website_Source/, move Legacy Soil/ tree into Archive/V2/, rename V3 → just Legacy Soil/.
Trigger: Mark explicitly says V2 is dead. NOT before.
#10
Grind / Find Your Grind retrospective video archive
Retired
2026-04-22 — DONE
Mark explicitly retired this from active. Listed only so it doesn't accidentally come back. Ship & forget.
Shipped — these are done, kept for the record
#2
Voice-query / Computer trigger — server fully operational
Done
2026-05-02 evening → shipped 2026-05-03 PM
/ask endpoint LIVE on Apex tp3_memory_api with calendar context. Verified: "Does Mom have lunch with anyone this week?" → "Yes, she has lunch with Judy on Wednesday from 1 PM to 3:30 PM." 1-2s response, ntfy → Ray-Bans speaks.
LLM stack: Anthropic (if key set) → Gemini 2.5 Flash → Ollama. Calendar context: /ask calls workspace-mcp (port 8766) at request time, pulls 7-day window of Mark's primary + Mom's fran@thebarnetts.info, caches 5 min.
OMI integration: /omi/ask + /.well-known/omi-tools.json deployed. Verified 0.95s and 2.5s responses. App "Ask TP3" CREATED in Mark's OMI account 2026-05-03 PM via adb-driven mobile form. Install pending — when Mark tapped Add, Apex briefly dropped from network. Resume install when convenient.
Still owed: TP3 vector context in /ask (top-3 memory hits for the question) + Ollama Apex recovery (background, not blocking). Mark side: install Ask TP3 in OMI app via the 12-step flow.
#4
Dashboard UI restoration — v2 layout shipped
Done
2026-05-03 morning + evening
Investigation: the "original pretty Claude-Design version" Mark remembered does NOT exist in any git history — tp3_scripts/tp3_memory_api.py was untracked in the Apex repo, so previous prettier revisions were overwritten with no recoverable diff. Built NEW pretty dashboard in Anthropic's brand voice (warm cream/coral/charcoal, Fraunces+Inter+JetBrains Mono).
v2 layout (2026-05-03 evening): Quick Links top → Calendar → Inbox → Live System metrics (real Apex RAM/CPU/GPU/VRAM via scheduled task) → Services → Ollama → Recent Activity → Sources. Source committed fc0cc8b on Apex (file is now tracked).
#4b
Reports page restructure — pill-first
Done
2026-05-03 evening
Static page at https://reports.thebarnetts.info/ (Cloudflare Pages, project barnett-reports). Top 5 pill cards + scrollable archive (~95 reports), newest first. Generator tp3_morning_digest_web.py rewritten — update_index_html regenerates the entire index from scratch each run via Python templates + auto-detection of latest dated files. Runs daily 6:30 AM ET via Apex scheduled task.
Caveat (2026-05-04): Mark's complaint that reports are "the same with the date changed" is real for the Morning Digest content itself — generator produces NEW HTML but underlying digest content is regurgitated. Generator-content gap is on Claude's plate.
#4c
G16 heartbeat poster — Live System dashboard card
Done
2026-05-03 evening
Live G16 RAM/CPU/GPU sit next to Apex on the Live System dashboard card. Verified via curl https://memory.thebarnetts.info/system/metrics — g16.stale=false, age ~61s, hostname BreezyGirl, RTX 4070 Laptop, 15.5 GB RAM.
Implementation: bash heartbeat /home/g16/tp3_g16_metrics.sh + self-respawning loop wrapper tp3_g16_metrics_loop.sh (pidfile-guarded). Windows scheduled task TP3 G16 Metrics nudges WSL every 1 min via setsid nohup ~/tp3_g16_metrics_loop.sh & disown.
#9
Watchdog "effectiveness" alert false-positives — resolved
Done
2026-05-02 night, repeatedly over recent days
Live dashboard /dashboard/data returns CORRECT counts. Freshness alarm scheduled task running every 30 min, today's log shows age=0-3 min ok consistently, no false fires since 2026-05-02 15:23 UTC. Morning digest patched (regex fix for HTML comments before <h2>).
Root cause: stale report files generated during a brief outage that never refreshed. Today's regex patch + accurate live dashboard + working alarm dedup means no longer a false-positive surface.
Hardening applied: simplified tp3_freshness_alarm.ps1 SQL from brittle dual-table GREATEST pattern to single FROM tp3_memories_local query.
#9a
Yahoo IMAP → TP3 ingestion
Done
2026-05-03 morning
App password generated. Yahoo IMAP at imap.mail.yahoo.com:993 reachable. Poller built and live: yahoo_tp3_ingest container on Apex, 15-min poll, verify-then-flag-\Seen. First Yahoo emails landing in tp3_memories_local as source=email_yahoo.
Caveat: throughput capped by Apex-side Ollama instability — verify-defer logic preserves UNSEEN messages on TP3 failure so they retry next pass (no data loss, just slow catch-up).
#13
WhatsApp control for Mark↔Mom — whatsapp-web.js on Apex Docker
Done
2026-05-03 afternoon
First attempted whatsmeow Go bridge — built fine, but WhatsApp servers rejected ALL pairing attempts (likely fingerprint detection of unofficial whatsmeow client). Mark scanned 34+ times, every one returned "couldn't link device, try again later." Whatsmeow path abandoned.
Pivoted to whatsapp-web.js (Node, Puppeteer-driven Chromium against web.whatsapp.com — official client signature). Deployed on Apex Docker (wa-web-mcp:latest, port 9876, persistent volume for LocalAuth). LINKED 2026-05-03 PM after Mark logged out web.whatsapp.com + Desktop to free a slot. /chats returned real chats. /contacts/search?q=mom found "Mom" at +1 (407) 797-6490. Persistent ~14 days; no re-scan until ~2026-05-17.
Owed: wire as MCP server in Claude Code config so I can call send/read/search directly. Operational testing pending — Mark approves before any real message.
#14
Yahoo total control (read + send + organize)
Done
2026-05-03 afternoon
Yahoo MCP migrated to Apex Docker (yahoo-mcp, port 8767, restart=unless-stopped). 8 tools live: search/read/send/move/mark/delete/list folders/status. Yahoo IMAP → TP3 ingest poller running (#9a above).
Open complaint (2026-05-04): Mark's Yahoo is full of junk — needs cleanup/organize/delete pass. ~200 unread sitting there. Tooling is in place; cleanup hasn't happened.
#19
Migrate everything off G16 → Apex (durability for vacations)
Done
2026-05-03 PM
All three MCPs now on Apex Docker: wa-web-mcp (9876), workspace-mcp (8766, Mark@thebarnetts.info Calendar/Gmail/Drive — 6 calendars confirmed), yahoo-mcp (8767, IMAP+SMTP for barnett.markd@yahoo.com — 168 INBOX / 42 unread confirmed). Plus yahoo_tp3_ingest poller.
All containers run with --restart unless-stopped + persistent Docker volumes. Survive Apex reboots. Tailscale-reachable from anywhere. G16 instances killed — no duplication.
#22
Gmail Apps Script ingest "stale" — investigated, mostly false alarm
Done
2026-05-03 evening dashboard finding
Apps Script trigger has been HEALTHY the whole time. Runs every 32 min, every recent execution log says "No new threads with label:TP3." The script ingests only emails Mark labels "TP3" in Gmail — he hadn't labeled anything new since 2026-04-30, that's why no rows landed for 3.3 days.
Real bug found behind the false alarm: Apex Ollama was down → /gmail endpoint silently dropped writes (returned ok:true but row never landed because the embedding-less INSERT violates tp3_embedding NOT NULL schema and the bg-insert wrapper has except: pass). Same antipattern in /phone, /sms, _insert_tp3.
Mark must act: apply the TP3 Gmail label to threads he wants ingested. Within 15 min the next Apps Script run picks them up.
Open follow-ups: fix the silent-fail antipattern in /gmail /phone /sms (return ok:false on embed failure, or insert zero-vector + re-embed later). Update dashboard "stale" banner — current threshold falsely accuses the script when real cause is Ollama.
Updated 2026-05-04 ~00:40 ET. Source: project_tangents_backlog.md in the memory repo.