Mark's Reports

Tangents

Mark's cool ideas backlog — captured before they slip.

23 entries. The point is the inverse of "you're not very good at keeping track of my sidetracks." Reviewed weekly. Updated whenever Mark mentions something and pivots away.

Quick jump: #1 Domain transfer #2 Voice trigger ✓ #3 /brief endpoint #4 Dashboard ✓ #4b Reports page ✓ #4c G16 heartbeat ✓ #5 Phone Bidet #6 Master calendar #7 Drive Mode #8 OMI quality #9 Watchdog ✓ #9a Yahoo IMAP ✓ #10 Grind #11 Workspace admin #12 Mom in /brief #13 WhatsApp ✓ #14 Yahoo total ✓ #15 Fun Call #16 SMS as Claude #17 64GB RAM #18 eGPU #19 G16→Apex ✓ #20 /ingest tolerance #21 Drop "V3" label #22 Apps Script ✓ #23 YouTube/Spotify
Active — open ideas waiting for a moment
#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/metricsg16.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.