Work log — 2026-04-04
What shipped today
The major theme was observability. PostHog was broken — the API key in production was wrong (zeros where there should have been capital O’s), and the project showed zero events. Fixed the key across all Vercel environments, deployed to production, and then instrumented the entire product. Five PostHog tickets shipped in sequence: impressions dual-write (#673), error boundary events (#675), onboarding funnel with 7 milestone events (#671), session replay (#674), and feature adoption events across feeds, search terms, settings, briefings, and exports (#672). Created a new trackProductEvent helper for PostHog-only analytics that doesn’t pollute the Supabase engagement_events table.
The scout run earlier in the session found 5 issues but 2 were false positives (the timeout article-drop bug and MCP test decorators). The real findings — pipeline query parallelization (#667) and composite index on processed_posts (#670) — both shipped. The Sentry investigation (#669) found both unresolved errors were browser noise (ad blocker fetch failures and Chrome extension RPC errors), not our code.
Infrastructure: fixed the SENTRY_PROJECT env var on Vercel (had a trailing newline breaking sourcemap uploads), switched to manual deploys to control Vercel costs, and documented the new deploy workflow in both CLAUDE.md files.
Completed
- #666 — Silent article drop on Claude timeout (closed: not a bug, default handles it)
- #667 — Parallelize sequential DB queries in daily_pipeline
- #668 — MCP server tests not running (closed: not a bug, asyncio_mode=auto handles it)
- #669 — Sentry ECLECTIS-C + ECLECTIS-B (closed: browser noise, resolved in Sentry)
- #670 — Composite index on processed_posts(user_id, url)
- #671 — PostHog: instrument onboarding funnel events
- #672 — PostHog: instrument feature adoption events
- #673 — PostHog: dual-write impressions to PostHog
- #674 — PostHog: add session replay
- #675 — PostHog: instrument error boundary events
- Also closed: #593 and #546 (stale Sentry issues, both resolved upstream)
Carry-over
- needs-clarification (2): #664 (URL import architecture), #659 (white-label product direction)
- ready-for-prep (1): #676 (curated briefings: user selects articles and writes intro)
- backlog (6): #484, #482, #481, #480, #471, #64
Risks
None new. The PostHog free tier has limits (1M events/mo, 5K session recordings/mo) but Eclectis’s current traffic is well under that.
Flags and watch-outs
- PostHog key was wrong since initial setup — all historical events were lost (sent to wrong project or rejected). Analytics starts fresh from today’s production deploy.
- Vercel deploys are now manual (
vercel deploy --prod). The last deploy was today — next deploy needed when new features should go live. - The scout run’s false positive rate was 40% (2/5). The agents don’t actually run the code they’re analyzing — they read it and guess. Worth noting for future scout calibration.
Next session
- Check #676 — new issue for curated briefings (ready-for-prep), may have been filed by another session
- Check #664 and #659 — still waiting on product direction
- Deploy to production when the PostHog instrumentation batch is ready for live data collection (already deployed once today, but more commits since)
- Verify PostHog events — check the PostHog dashboard to confirm events are flowing after today’s deploy
Why customer tools are organized wrong
This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.
Infrastructure shapes thought
The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.
Server-side dashboard architecture: Why moving data fetching off the browser changes everything
How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.
The work of being available now
A book on AI, judgment, and staying human at work.
The practice of work in progress
Practical essays on how work actually gets done.
The bottleneck moved and nobody noticed
When execution becomes nearly free, the bottleneck shifts from doing the work to deciding what work to do. Most organizations are optimized for the wrong constraint.
The inbox nobody reads is the one that matters
Every organization has a monitoring system that works perfectly and reports to nobody. The gap between having information and acting on it is where most failures actually live.
The best customers are the first ones you turn against
Every subscription makes a bet that most customers won't use what they're paying for. The customer who closes that gap becomes a problem to be managed.