Skip to main content
Paul Welty, PhD AI, WORK, AND STAYING HUMAN

2026-03-13 — Eclectis

What shipped today

Today was a high-throughput pipeline day — 13 issues closed across three themes: infrastructure hardening, landing page repositioning, and feature delivery. The session ran entirely in --auto mode, executing and prepping issues without human-in-the-loop review.

Infrastructure and reliability. The morning started with foundational work: .env example files updated with all required variables (#155), a composite index added for newsletter feed lookups (#156), error boundary pages for both app and auth route groups (#157), and Stripe cancellation failures now properly surfaced during account deletion (#158). A vitest test infrastructure was set up for the web app (#159), giving us 66 passing tests by end of day.

Landing page and positioning. Three issues repositioned the public site from a “feed reader” to a “daily intelligence briefing” (#163, #166, #168). The landing page copy was refined — terminology, CTA, and differentiators updated — and PRODUCT.md was updated to match the new positioning. This is the first time the public site and internal product docs tell the same story.

Feature delivery. The bulk of the session delivered user-facing features: feed discovery UX integrated into the add-feed flow (#122), Raindrop (#126) and Readwise (#127) read-later push integrations with auto-chaining from article scoring, score explanations displayed as click-to-reveal popovers (#170), OPML export (#171), and a full data export/download feature (#172). Issue #174 (FAQ accuracy) was closed without changes since the features it referenced (#171, #172) had already shipped.

Completed

  • #155 — Update .env example files with all required variables
  • #156 — Add composite index for newsletter feed lookup
  • #157 — Add error boundary pages to web app routes
  • #158 — Surface Stripe cancellation failure during account deletion
  • #159 — Set up web app test infrastructure and add first tests
  • #163 — Reposition landing page from feed reader to daily intelligence briefing
  • #166 — Refine landing page copy — terminology, CTA, differentiator
  • #168 — Update PRODUCT.md to match intelligence briefing positioning
  • #122 — Integrate feed discovery into add-feed UX
  • #126 — Add Raindrop read-later push integration
  • #127 — Add Readwise read-later push integration
  • #170 — Display score explanations in articles view
  • #171 — Add OPML export for user feeds
  • #172 — Add data export / download feature
  • #174 — Fix FAQ claims that don’t match reality yet (closed as done)

Release progress

All four milestones (M1–M4) are closed. 28 issues shipped total. No open milestones.

Carry-over

  • Verify PostHog and Sentry are correctly configured (env vars firing, events captured, errors tracked) — this has been on the TODO list since launch
  • Engine Python tests can’t run locally due to missing deps (structlog, httpx) — only pure-logic tests pass. Engine tests run on Railway.

Risks

  • The parseOPML folder regex has a known fragility: self-closing <outline> tags placed before folder outlines can cause the regex to span across them. The generateOPML function works around this by emitting folders before untagged feeds, but a future refactor of the parser to use a proper XML parser would be more robust.
  • Data export endpoint fetches all user data in a single request with no pagination. For users with thousands of articles, this could be slow or hit memory limits. Not a problem at current scale.

Flags and watch-outs

  • The Raindrop and Readwise push handlers auto-chain from article_score when score >= 6. If a user hasn’t configured these integrations, the handlers gracefully skip (check integrations.*.enabled + token). But the commands table will accumulate skipped push commands — no cleanup mechanism yet.
  • git add with parentheses in paths (e.g., web/app/(app)/...) requires single quotes on this system. Double quotes and backslash escaping both fail.

Next session

  • Run /issue list to see the remaining open issues (#64, #77) and assess whether they’re worth pursuing or should be closed
  • Verify PostHog events are firing correctly in production (check the PostHog dashboard)
  • Verify Sentry is capturing errors (trigger a test error, check Sentry dashboard)
  • Consider creating a new milestone for post-launch polish or v1.1 features
  • Test the data export and OPML export features in production after the next Vercel 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 machine is eating faster than you can feed it

Sixty-three issues closed across thirteen projects in one day. Four milestones completed. And the hardest problem wasn't building — it was keeping up with what you've already built.

The proxy problem

Every organization has this problem: knowledge locked inside one person's head. Today I accidentally designed a solution — and it has nothing to do with documentation.

True 1-to-1 outreach is finally possible with AI

The 1-to-1 personalization promise is thirty years old. It never worked because understanding each person was too expensive. AI changed the economics.