01-projects/hq-raydata-co

hq proposal v1

2026-04-22·project·status: draft-for-founder-review

hq.raydata.co — Initial Proposal (v1)

Why this exists

Founder iMessage 2026-04-22 (after raydata.co domain successfully migrated to Cloudflare):

"What if we made an hq.raydata.co subdomain website? This one should be private. This one should just be for us. No scraping. No bots. No other visitors... A personal dashboard. What are my focuses for the day? A feed of recent activity... A way to navigate the knowledge base... A way to glimpse each of our projects and their current status... it'll need to be mobile friendly too."

This proposal scopes a v1 that solves three real founder problems at once:

  1. The "novel-length iMessage" problem. Currently substantive Ray output goes through iMessage. His wife teases him about the back-and-forth length. Ray needs a place to publish detail and just link to it from iMessage. ([[../../../.claude/projects/-Users-ray/memory/feedback_brief_imessage_link_to_hq.md]])
  2. The "Ray is doing things without me" visibility problem. Cron loops, sub-agent dispatches, vault filings happen between channel touchpoints. Founder wants a passive feed.
  3. The advisor-mode decision-surface problem. "DECISION NEEDED" items get scattered across iMessage, Discord #ops, the Notion board, and various skill reports. Founder needs a single pane: what only you can do.

Scope — what's in v1

A. Founder-requested panes

  1. Today's focus — top 1-3 priorities for today, derived from morning-prep output + Notion board top-priority Ray-or-Both tasks
  2. Activity feed — chronological log of vault filings, skill runs, sub-agent dispatches, cron fires (last 7 days, paginated)
  3. Vault navigator — searchable + browsable view of ~/rdco-vault/. Supports tag filter, folder browse, full-text search via QMD
  4. Project status — one card per 01-projects/<name>/, showing current status, last-touched date, open decisions, link into the project folder

B. Ray-proposed adds (high-value)

  1. Decision queue (consolidated) — every "DECISION NEEDED" surfaced by any skill in the last 14 days, in one ranked list. Marked-as-resolved (✅), deferred (⏸), or open (🔴). This is the load-bearing pane for the advisor-mode operating model. Founder can clear his queue from one place instead of scrolling iMessage/Discord history.
  2. Founder-owned task pane — Notion tasks where Owner=Founder OR Owner=Both with founder-side blocker. "What only you can do." Direct link to each Notion page.
  3. "New since last visit" markers — vault docs and decisions tagged "Ben hasn't seen this" so he can skim what Ray filed without re-reading old material. Cleared on view.
  4. Energy-input tap — single number tap (1-10) for the morning Brené Brown protocol. Writes to ~/.claude/state/founder-energy.txt. Drives queue depth across check-board, curiosity, and morning-prep skills.
  5. Quick-capture inbox — text/voice/photo input from mobile that lands in ~/rdco-vault/00-inbox/ for Ray's /process-inbox to triage. Replaces "I need to remember to drop this in Obsidian later." (Voice → Whisper → text via a Cloudflare Worker.)
  6. Cron / system health — visual status of all cron loops (last fire, next fire, success/fail), rdco-doctor pass count, vault-health score, audit-newsletter pass rate. "Is Ray actually doing things and is the system healthy?"
  7. Cost strip — running daily/monthly Anthropic + tooling spend. Honest visibility, no surprises.

B+. Founder-added panes (2026-04-22 follow-up)

  1. Relationships pane — two tiers, both load-bearing:

    • Family tier: spouse, children, parents, siblings, in-laws. Important dates (birthdays, anniversaries). Gift history (so we don't repeat). Reminders T-30/T-14/T-7/T-1 days out for each upcoming date. Ray-proposed gift directions for founder approval, sourcing logistics if approved. Postcards via PostGrid for "thinking of you" prompts when appropriate.
    • CRM tier: contacts from 03-contacts/ + Notion Contact Candidates DB. Last-touched age + "should-touch" suggestions. Birthday/work-anniversary detection from public profiles (when discoverable). PostGrid postcard automation for personalized birthday/milestone notes (draft → founder approves → send).
    • Mother's Day pattern (immediate test case): Mother's Day 2026 is Sunday May 10 — 18 days from today. This is the founder-visible decision-needed for the next ~14 days. Use it to validate the relationships-pane workflow end-to-end before generalizing.
  2. Claude Agent SDK integration — interactive Ray inside HQ — two layered patterns:

    • A. Global chat sidekick: persistent chat box on every HQ page, Ray answers any question with full vault + state + Notion + email context. Powered by the Claude Agent SDK running on a Cloudflare Worker. Tools available: vault read, QMD search, Notion read/write, PostGrid send-postcard, calendar lookup, send-iMessage-back. Behind Cloudflare Access so only the founder can chat.
    • B. Pane-specific actions: each pane has Ray actions where they're useful — "draft a follow-up to this person" (relationships), "stress-test this decision" (decision queue), "summarize this project for the team" (project status), "what should I focus on next?" (today's focus). Reuses the same Worker; pane-specific system prompts.
    • C. Cross-channel symmetry: the HQ chat is the SAME Ray as the iMessage Ray — same memory, same skills, same vault state. HQ becomes the third surface (alongside iMessage and Discord) for two-way comms. Per the advisor-mode memory, HQ chat replaces "novel-length iMessage" with "tap-into-Ray when you have time + bandwidth." Mobile-friendly with voice input.
    • Implementation: Claude Agent SDK on a Cloudflare Worker. Anthropic API token in Cloudflare Workers Secrets (1Password-managed). Session memory in Cloudflare D1 or Durable Object so chats persist across visits. Tool definitions reuse the Mac Mini API endpoints from the read-only data layer (already designed) plus a small set of write tools (Notion update, PostGrid send, vault append).

C. Out of scope for v1 (deferred to later versions)

Stack

Frontend

Auth (the load-bearing piece)

Data sources

The vault, Notion, and Ray's state files all live on the Mac Mini. Two architectural options:

Option 1 (preferred): Cloudflare Tunnel + small read-only API on Mac Mini.

Option 2: Daily sync to Cloudflare R2 + read from R2.

Recommendation: Option 1. The Mac Mini is already always-on for the agent loop. Adding a small read-only API alongside is one process, simple deploy, and gives real-time fidelity that matches how Ray operates.

Quick-capture inbox flow (the only write path in v1)

Tech stack summary

Security model

Layer Mechanism Threat addressed
Edge Cloudflare Access (Google SSO @raydata.co only) Scrapers, bots, random visitors
API Tunnel-only access (no public IP) Direct API attacks
Sensitive endpoints TOTP step-up Lost/stolen phone
Data at rest Vault stays on Mac Mini disk Cloud breach exposure
Secrets 1Password, never on disk in repo Per existing RDCO discipline
Repo Private GitHub Code visibility

Bot/scraper guarantee: Cloudflare Access blocks unauthenticated requests at the edge before they reach static HTML or API. There is no path for a non-authenticated request to retrieve any HQ content. Even SEO crawlers see only the Access challenge page.

v1 build plan (1-2 weeks, sub-agent-built)

Day Task Output
Day 1 DNS setup (hq.raydata.co subdomain in Cloudflare), Access policy (Google SSO, ben@raydata.co only), empty Pages project deployed Empty page reachable only by Ben
Day 2 Mac Mini API skeleton (Hono) + Tunnel setup (api.hq.raydata.co), /api/today, /api/health endpoints Live data flowing
Day 3 Astro frontend skeleton + first three panes: Today's Focus, Decision Queue, Activity Feed First useful screen
Day 4 Vault navigator + project status + founder-owned-tasks panes Browse + status
Day 5 Energy input + cost/cron health strip + "new since last visit" markers Polished v1 read-only
Day 6-7 Quick-capture inbox flow (mobile-friendly, voice → Whisper → vault) + PWA install support First write path
Day 8-10 Mobile UX pass, performance, error handling, end-to-end test from phone Ship v1

Sub-agent dispatch pattern

What founder needs to do (small list)

  1. Confirm v1 scope. The 11 panes in section A+B above. Cut anything you don't want; add what's missing.
  2. Confirm stack choice. Astro + Cloudflare Pages + Tunnel. Or override with another path (e.g. Vercel + Next.js) — though Cloudflare is the natural fit since the domain is already there.
  3. Authorize Cloudflare Access setup. Ray will ask for a ben@raydata.co Google SSO test once the policy is live.
  4. Authorize sub-agent dispatch on the build. This is multi-day, multi-sub-agent work. Default: I dispatch and check in at end of each phase. Override if you'd rather pair on it.

Open questions for founder

  1. Voice capture privacy: OK to send voice clips to Whisper API (OpenAI), or local Whisper model on Mac Mini only? Local is feasible but slower; cloud is faster but data leaves the perimeter.
  2. Edge-render or server-render? Default is mostly server-rendered (SSR via Pages Functions). Alternatives: more client-side reactivity (htmx, Svelte). Lean server-side for now; HQ doesn't need real-time interactivity beyond polling every few seconds.
  3. PWA only, or native iOS app eventually? PWA covers 95% of mobile UX needs and ships in a week. Native iOS is a 2-3 month project and only worth it if push notifications or deeper iOS integration becomes load-bearing. Default: PWA only.

Inputs needed from founder (to unblock build)

These don't need answers up-front for the v1 architecture, but will block the relationships pane the moment it's built:

  1. Family roster — names + relationship + birthdays + addresses for the Family tier (spouse, kids, parents, siblings, in-laws, anyone else who should get reminders). Format doesn't matter — text dump, screenshot, or shared Apple Contacts vCard.
  2. Mom's profile (Mother's Day immediate) — name, address, gift history (so Ray doesn't propose a duplicate), 2-3 things she likes / 1-2 she'd hate. May 10 deadline = T-18 days.
  3. PostGrid sender setup confirmed — confirm the API key + sender address are still valid in 1Password (it's been on the postgrid skill for a while; do a test send before relying on it for Mother's Day).
  4. Cloudflare Access SSO test — once Access is configured, founder logs in once via Google to confirm the policy works end-to-end.

Mother's Day immediate plan (validates the relationships pane workflow)

Even before HQ ships, treat Mother's Day as a single-shot dry run of the relationships workflow. End-to-end:

  1. Founder shares mom's name + address + gift-history + likes/dislikes (one iMessage burst is fine).
  2. Ray drafts 3 gift directions (price ranges varied) + a postcard message draft, files to 01-projects/hq-raydata-co/relationships/2026-mothers-day-mom.md.
  3. Founder picks one gift direction (or overrides with his own pick) + approves/edits the postcard message.
  4. Ray executes: source the gift (Amazon, Etsy, or appropriate venue), confirm shipping deadline, queue PostGrid send for the postcard.
  5. Document the workflow in 02-sops/relationship-touchpoint-sop.md so the relationships pane can codify the same pattern.

This is real work that needs to happen regardless of HQ shipping. Doing it now also pressure-tests the workflow before we generalize it across all relationships.

Related

Changelog