← Back to brief

reference quick capture

memory · reference_quick_capture.md

What it does

Tap the + button in the PWA bottom-right → pop-up appears with textarea + mic.

Solves the "I thought of it at 80mph on I-70" problem. No app switching, no typing in HubSpot on your phone, no forgetting.

Architecture


PWA (iPhone) → /api/capture → Cloudflare KV captures/YYYY-MM-DD/{seq}
                                       ↓
                            live-ea (every 20 min during business hours)
                                       ↓
                        Classifier routes each capture:
                        ├── Action item → meeting_action_items.jsonl (YELLOW)
                        ├── HS note proposal → pending_hs_updates.jsonl (YELLOW, approval required)
                        ├── Memory update proposal → pending_memory_updates.jsonl (INFO)
                        ├── Draft a reply → Gmail create_draft (if addressee known)
                        └── Unclear → pending_drafts.jsonl (needs_review)
                                       ↓
                        Mark KV record status=processed
                        ntfy push: "💭 N captures processed"

Classification rules (live-ea Step 6c)

Signal in textRoute
"remind me", "todo", "action item", starts with verb ("call X", "send Y")Action item
Known prospect/owner name + fact about themHS note proposal
"Rachel prefers", "team does X", working-norm statementsMemory update proposal
"email Andy and say X" with addressee Claude can identifyGmail draft
Doesn't match any → YELLOW for manual sortpending_drafts.jsonl

Safety rules

Files

WhatWhere
Capture POST endpoint~/Library/Application Support/SkyRun/pwa/functions/api/capture.js
Capture GET (for live-ea)~/Library/Application Support/SkyRun/pwa/functions/api/captures.js
KV namespaceskyrun_approvals — keys under captures/YYYY-MM-DD/{seq} with 7d TTL
PWA UIFloating + button — build_pwa.py .capture-fab + .capture-panel
Classification logic~/.claude/scheduled-tasks/live-ea/SKILL.md Step 6c

iOS voice input note

Uses the browser's webkitSpeechRecognition API. Works on:

If API unavailable, mic button is hidden; textarea still works.

Voice permission is requested once; iOS remembers per-site. If denied, you'll see "Mic unavailable" in the status line.

Typical use cases

What happens if you capture something ambiguous

It lands in the approval queue as needs_review YELLOW. You see it in the PWA next time you check, with the original text + a one-line "I wasn't sure what this was — want me to...?" prompt. You pick the action or dismiss.

Related