Commit Graph

352 Commits

Author SHA1 Message Date
Joel Hooks 84a5dc755f sync: vault content (1 files)
adrs (1):
  new: 0121-imsg-rpc-socket-daemon.md
2026-02-23 19:37:47 -08:00
Joel Hooks d47d907d57 sync: vault content (1 files)
adrs (1):
  updated: 0038-embedded-pi-gateway-daemon.md
2026-02-23 19:34:49 -08:00
Joel Hooks 1e125d5b6b sync: vault content (1 files)
adrs (1):
  deleted: 0122-multi-node-channel-identity.md
2026-02-23 18:41:04 -08:00
Joel Hooks d942d79f2d feat: add Discord and iMessage gateway channels (ADR-0120, ADR-0121, ADR-0122) 2026-02-23 18:24:31 -08:00
Joel Hooks ed6db5c3e4 sync: vault content (1 files)
adrs (1):
  new: 0119-x-twitter-cli-integration.md
2026-02-23 17:57:22 -08:00
Joel Hooks b684f3e3fc sync: vault content (1 files)
discoveries (1):
  new: Why Running Agents on a Single Branch Can Be Faster Than Worktrees.md
2026-02-23 16:51:48 -08:00
Joel Hooks 13d9a23eff adr: link Sean Grove's talk in ADR-0118 2026-02-23 15:14:42 -08:00
Joel Hooks 9a95b4fd14 adr: ADR-0118 Koko shadow executor mode (credit: Sean Grove)
Run same workloads as TypeScript in parallel, compare results.
Shadow never writes authoritative state — results logged for comparison.
Candidates: heartbeat, friction, digest, proposal triage, content-sync.
Comparison metrics: latency, error rate, output quality, recovery time.
Shadow comparison becomes the graduation exam for ADR-0114.
2026-02-23 14:00:47 -08:00
Joel Hooks c0bf99829b adr: Koko granular ADRs — charter (0115), bridge protocol (0116), first workloads (0117)
ADR-0115: What Koko is/isn't, graduation criteria, tech stack, naming
ADR-0116: Redis bridge — passive observer → dedicated channel → bidirectional
ADR-0117: Three workloads — health pulse, event digest, file watcher
All three demonstrate distinct BEAM advantages (supervision, isolation, hot reload)
2026-02-23 13:25:55 -08:00
Joel Hooks 1a2b00fd76 adr: ADR-0114 update — Jido alternatives analysis (Oban, LangChain, SwarmEx, raw OTP)
Oban + OTP + Phoenix is the recommended stack if migrating.
Jido adds agent abstractions but young/dependency risk.
Oban is the mature Inngest equivalent (6+ yrs, funded, dashboards).
2026-02-23 13:15:42 -08:00
Joel Hooks c3b1c92590 adr: ADR-0114 researching — Elixir/BEAM/Jido migration evaluation
Full architecture analysis: what BEAM replaces natively, what doesn't map,
three migration strategies (full rewrite, hybrid, strangler), Jido framework
assessment, cost/benefit matrix, open questions. Status: researching.
2026-02-23 10:57:36 -08:00
Joel Hooks aae37b3eb8 sync: vault content (1 files)
adrs (1):
  updated: 0089-transcript-indexing-typesense.md
2026-02-23 10:34:12 -08:00
Joel Hooks a8db2959c1 sync: vault content (1 files)
adrs (1):
  updated: 0113-standardize-status-indicator.md
2026-02-23 10:05:41 -08:00
Joel Hooks aebeda7c05 sync: vault content (1 files)
adrs (1):
  updated: 0113-standardize-status-indicator.md
2026-02-23 09:53:21 -08:00
Joel Hooks 176e12456e sync: vault content (1 files)
adrs (1):
  new: 0113-standardize-status-indicator.md
2026-02-23 09:52:29 -08:00
Joel Hooks abff3d8a03 fix: StatusLed invisible — add @source for @repo/ui in Tailwind v4
Tailwind v4 auto-detection doesn't scan symlinked workspace packages.
Added explicit @source directive for packages/ui/src/**/*.tsx.
Reverted ring-based glow to shadow-[...] arbitrary values (more reliable).
2026-02-23 09:44:54 -08:00
Joel Hooks dc46b16463 feat: email thread/attachment caching + ADR-0112 unified caching layer
- Email read now caches threads to ~/.cache/joelclaw/email/threads/
- Attachment download + local file caching
- --refresh flag to bypass cache, --cache-ttl-minutes for TTL control
- Stale fallback when Front API is unreachable
- ADR-0112 proposes system-wide caching: hot (Redis), warm (file), cold (NAS)
- Covers Front, Todoist, Granola, Typesense, PDS with per-service TTLs
- Webhook-driven invalidation + CLI --refresh on all cached commands
2026-02-23 09:23:41 -08:00
Joel Hooks 49dac8d0db sync: vault content (1 files)
discoveries (1):
  new: AI Hero as a New Frame for Developer Education.md
2026-02-23 09:17:08 -08:00
Joel Hooks 1df7c2ab04 feat: LED status indicators on /network — replace pills with hardware-rack dots
- New StatusLed component: colored dot only, no text/pill background
- Sizes sm/md/lg (6/8/10px) with pulse animation for healthy
- Subtle glow effect matching status color
- Left-aligned: [LED] name across nodes, pods, daemons
- StatusBadge kept for backward compat
2026-02-23 09:00:27 -08:00
Joel Hooks bb65b2bd83 web: render /adrs list in server HTML 2026-02-22 19:04:24 -08:00
Joel Hooks 815c434b77 sync: vault content (1 files)
adrs (1):
  updated: 0111-email-channel-routing-engine.md
2026-02-22 17:33:52 -08:00
Joel Hooks 12c06c11e8 sync: vault content (1 files)
adrs (1):
  updated: 0111-email-channel-routing-engine.md
2026-02-22 17:21:57 -08:00
Joel Hooks 91c844fc20 sync: vault content (1 files)
adrs (1):
  new: 0111-email-channel-routing-engine.md
2026-02-22 17:19:15 -08:00
Joel Hooks 9f5ce35b33 mdx: switch shiki theme to catppuccin-mocha 2026-02-22 15:50:35 -08:00
Joel Hooks 6079824945 web: restore shiki highlighting and harden public search 2026-02-22 15:46:38 -08:00
Joel Hooks 155fbc5bee sync: vault content (1 files)
adrs (1):
  new: 0110-agent-secrets-lease-dedup-otel.md
2026-02-22 15:20:39 -08:00
Joel Hooks 8fff257747 web: keep mdx static with cache-component-safe renderers 2026-02-22 15:10:55 -08:00
Joel Hooks e7f36114c5 web: stabilize cache components build and route dynamic islands 2026-02-22 13:59:37 -08:00
Joel Hooks 038fecd7ee fix(web): resolve Vercel build failures
- Fix formatDateStatic import → toDateString (function was removed by prior commit)
- Remove proxy.ts (conflicts with middleware.ts in Next.js 16)
- Clean up untracked (owner) route group and leftover files from gateway agent
2026-02-22 12:59:30 -08:00
Joel Hooks 44e6b048f5 fix(web): add missing review gate components for Vercel build
LazyReviewGate and ConvexReviewGate were untracked but imported by
[slug]/page.tsx and adrs/[slug]/page.tsx. Lazy-loads Convex client
via useEffect to avoid Date.now() during static prerender.
2026-02-22 12:56:52 -08:00
Joel Hooks 6b2bb5a5f0 fix(web): Next.js 16 prerender Date.now() errors
- Add connection() before MDX rendering in /[slug] and /adrs/[slug]
- Wrap AdrListWithFilters in Suspense on /adrs index
- next-mdx-remote uses Date.now() internally, requires dynamic opt-in
2026-02-22 12:56:13 -08:00
Joel Hooks d3e253beb8 feat(web): enable review comments on blog posts
Wrap PostContent in LazyReviewGate with contentId=post:{slug}.
Same pipeline as ADRs — paragraph-level comments, Convex storage,
Inngest agent rewrite, gateway notification. ADR-0106.
2026-02-22 12:53:42 -08:00
Joel Hooks 97431d0077 sync: vault content (2 files)
adrs (2):
  updated: 0105-joelclaw-pdf-brain-typesense.md
  updated: 0109-system-wide-taxonomy-concept-contract.md
2026-02-22 12:51:11 -08:00
Joel Hooks 60903781f6 content: cache components patterns skill for Next.js 16+
Static shell + slots architecture, 'use cache' boundaries, provider islands,
prefetch rules, cache invalidation, migration from unstable_cache.
Bi-modal with AgentNote blocks pointing to nextjs-static-shells skill.
2026-02-22 12:48:26 -08:00
Joel Hooks 39518c6c34 feat: Next.js best practices audit fixes (ADR-0108)
Error boundaries:
- app/error.tsx: route-level error recovery with reset button
- app/global-error.tsx: root layout failure handler with html/body

Loading skeletons:
- vault, memory, syslog, system, system/events, dashboard, voice
- Pulse shimmer matching each page's actual layout structure
- font-pixel labels for consistent dashboard aesthetic

Import aliases:
- Converted all relative imports (../../lib/, ../../../lib/) to @/*
- 40+ files across app/, components/site-header, components/mobile-nav
- tsconfig @/* alias was already configured, now actually used
2026-02-22 12:13:22 -08:00
Joel Hooks e01d9b6d52 sync: vault content (1 files)
adrs (1):
  new: 0108-nextjs-best-practices-audit.md
2026-02-22 12:09:29 -08:00
Joel Hooks 7354f1f35e fix: isOwner query throws when logged out, CLS on wrapper mount
auth.isOwner: wrap getAuthUser in try/catch — returns false instead
of throwing when no session token exists.

ReviewGate: treat undefined (loading) same as false — render children
without wrapper to prevent layout shift.

ReviewWrapper: remove -mx-2/px-2/py-0.5 from paragraph hover styles
that caused vertical CLS when wrapper mounted after auth resolved.
2026-02-22 11:55:12 -08:00
Joel Hooks 85beeb2594 feat: functional animations across joelclaw.com
Nav: sliding active indicator bar (CSS transition, no framer-motion).
Measures active link position, slides on route change. 200ms
cubic-bezier(0.22, 1, 0.36, 1).

Mobile nav: exit animation mirrors entrance. Links slide out right
with reverse stagger (30ms), overlay fades out 150ms.

Fix transition-all violations (emilkowal props-transform-opacity):
- signin button: explicit property list
- review FAB: explicit + scale(0.97) per spec
- review submit: explicit + motion-reduce

All animations respect prefers-reduced-motion.
2026-02-22 11:48:46 -08:00
Joel Hooks 8643845c6f feat(review): auto-expanding textarea with smooth animation
useAutoResize hook: measures scrollHeight, transitions height at
150ms with cubic-bezier(0.22, 1, 0.36, 1). Expands as you type,
collapses when content is deleted. Applied to both compose and
edit textareas. Max height 240px then scrolls.
2026-02-22 11:42:15 -08:00
Joel Hooks 003597ebd6 feat(review): cmd/ctrl/shift multi-select paragraphs
- Plain click: single select (toggle)
- Cmd/Ctrl+click: add/remove from selection
- Shift+click: range select (DOM order)
- Cmd+Shift: range added to existing selection
- Multi-select shows '3 paragraphs' badge in comment header
- Comment prefixed with selection context for agent
- Hint bar shows keyboard shortcuts
2026-02-22 11:30:23 -08:00
Joel Hooks 0e6e1a6c85 refactor(review): generalize from ADR-only to universal content review
- Drop adrComments table, use contentResources + contentResourceResource
- New reviewComments.ts Convex functions (getByContent, addComment, etc)
- Rename Adr* components → Review* (review-gate, review-wrapper, etc)
- Move /api/adrs/submit-review → /api/review/submit
- Event: content/review.submitted (was adr/review.submitted)
- Props: contentId + contentType + contentSlug (was adrSlug)
- Add content-review.ts Inngest function in system-bus
- Registry renamed: adr-review → content-review
- listLinkedReviewComments query added to contentResources

ADR-0106. Zero data existed so schema migration was free.
2026-02-22 11:00:06 -08:00
Joel Hooks 04c4c3c28e fix(adr-review): esc cancels pending comment, clears draft
Document-level keydown listener so esc works even without textarea focus.
2026-02-22 10:50:00 -08:00
Joel Hooks 162cbcb147 fix(adr-review): inline comment under paragraph, not bottom drawer
Replaces Vaul drawer with portal-based inline editor that renders
directly below the clicked paragraph. Paragraph gets ring highlight
and scrolls into view. Click same paragraph to toggle closed. Esc to dismiss.
2026-02-22 10:42:16 -08:00
Joel Hooks 6bff2cc455 feat(adr-review): ADR-0106 — inline paragraph comment system
- Convex adrComments table + 7 mutations/queries
- rehype-paragraph-ids plugin (content-hash anchoring)
- Review UI: comment drawer, review sheet, FAB, auth gate
- shadcn init (Tailwind v4) + registry.json
- Submit review API route (fires Inngest event)
- @/* path alias for imports
2026-02-22 10:38:59 -08:00
Joel Hooks 915b8dad65 sync: vault content (2 files)
adrs (2):
  new: 0106-adr-review-pipeline.md
  new: 0107-adr-convex-migration.md
2026-02-22 10:22:28 -08:00
Joel Hooks 2004d74600 sync: vault content (1 files)
adrs (1):
  updated: 0105-joelclaw-pdf-brain-typesense.md
2026-02-22 10:19:17 -08:00
Joel Hooks 0797c0cb28 sync: vault content (1 files)
adrs (1):
  updated: 0105-joelclaw-pdf-brain-typesense.md
2026-02-22 10:04:51 -08:00
Joel Hooks 8da34f7486 sync: vault content (1 files)
adrs (1):
  new: 0105-joelclaw-pdf-brain-typesense.md
2026-02-22 09:59:34 -08:00
Joel Hooks d5c4acc5c5 chore(adrs): rename status 'implemented' → 'shipped' across all ADRs
42 ADRs updated in both Vault and web content. Canonical status set
is now: proposed | accepted | shipped | superseded | deprecated | rejected
2026-02-22 09:28:15 -08:00
Joel Hooks 3e5c9bb824 fix: add descriptions to all gateway subcommands for --help
Agents always call --help first. Bare command list with no descriptions
is useless. Added Command.withDescription() to all 9 gateway subcommands.
2026-02-22 08:48:07 -08:00