Paul Welty, PhD AI, WORK, AND STAYING HUMAN

Work log: Authexis — March 4, 2026

What shipped today

Three themes: Apple app polish, v1 launch hardening, and issue triage.

Apple app selection styling. The three-column NavigationSplitView on iPad/Mac highlights selected rows in orange, which made colored badges (ScoreBadge, StatusBadge, type badges) illegible. IdeaRowView already handled this with an isSelected parameter that switches to white-on-translucent styling. Today the same pattern was applied to ArticleRowView, FeedRowView, and ContentListRowView — the three remaining row views used in selection-bound list views. Each row view now accepts isSelected: Bool = false, and the parent list computes selection state from the binding. All three files were updated, the macOS build passes cleanly. The 12 Apple redesign issues (#755–#766) from prior sessions were closed out.

V1 launch hardening. A full codebase scout (web + engine, running in parallel) identified gaps before the marketing push. Five issues were created, implemented by four parallel agents, and shipped in a single batch commit. The engine now validates required environment variables at startup instead of failing silently at runtime. Twenty silent except blocks in critical paths (poller, scheduler, discord, tracking, feed discovery) now log with structlog. All 28 web pages missing metadata got proper titles for browser tabs and SEO. The social-slots and blog-slots pages got skeleton loading states, and the app layout got an error boundary with Sentry reporting. Serper (Google search) and ScrapingBee (article fetching) now handle 429 rate limits with one retry and exponential backoff, matching the pattern already used by social platform publishers.

Issue triage and milestone cleanup. Reopened the v2 milestone (targeting April 1 launch) and v1.5 milestone. Moved #701 (marketing email) and #742 (alternative layouts) to v2, #743 (dashboard redesign) to v1.5. Closed 12 completed Apple redesign issues. Created #767 (scheduling cadence presets) in v2. The issue queue is clean: 4 open issues across 2 milestones, 0 unmilestoned.

Social slots adjustment. Updated Paul’s social posting schedule in the database — replaced the old 11 slots across LinkedIn/Bluesky/Mastodon with 9 new slots matching his preferred cadence. Fixed a workspace mismatch (two workspaces exist, had to update the correct one).

Completed

  • #755–#766 — Apple app redesign issues (closed, all completed in prior sessions)
  • #768 — Engine startup validation for required environment variables
  • #769 — Error logging in silent except blocks in engine critical paths
  • #770 — Page metadata on all web app routes
  • #771 — Loading states and error boundary for slots pages and app layout
  • #772 — Rate limit retry logic for Serper and ScrapingBee in engine
  • Social slots updated to new schedule (LinkedIn Tue/Wed/Fri, Bluesky Mon/Wed/Sat, Mastodon Mon/Thu/Sat)

Release progress

  • v1.5: 3/4 closed — 1 remaining (#743 dashboard redesign)
  • v2: 17/20 closed, due April 1 — 3 remaining (#701 marketing email, #742 alternative layouts, #767 scheduling cadence presets)

Carry-over

  • settings-client.tsx still has a stale trailing newline diff from prior sessions — harmless
  • Paul has two workspaces (a06f40ed is his active one, 0dbb31a7 is secondary) — remember to use the right one for DB operations

Risks

  • The feeds/new and feeds/import pages were refactored from client components to server+client split for metadata support. These need visual verification to ensure the forms still work correctly.
  • Engine changes (env validation, error logging, rate limit retry) deployed via Railway auto-deploy — monitor for any startup issues from the new validate() call

Flags and watch-outs

  • v2 milestone has only 3 issues left — on track for April 1 if those are prioritized
  • The admin/prompts/[contentTypeId]/page.tsx got a generateMetadata that fetches the content type name from Supabase — adds a DB query per page load for that admin route
  • Social queue was empty when slot schedule was changed — no reschedule was needed

Next session

  • Verify feeds/new and feeds/import pages work correctly after the server component refactor
  • Consider prepping #701 (marketing email system) — evaluate whether it’s still needed or can be closed
  • #743 (dashboard redesign) is the only v1.5 item — prep or scope it
  • #742 (alternative layouts) and #767 (scheduling cadence presets) need prep before they’re grindable
  • Monitor Sentry/Railway for any issues from the engine hardening changes

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 loop nobody bothers to close

Most systems observe. Almost none learn. The difference is a feedback loop — and the boring cleanup work that makes it possible.

Your process was built for a different speed

When work changes velocity, governance systems don't just fall behind. They become theater. And theater is worse than nothing—it gives you the feeling of control without any of the substance.

The difference between shipping and finishing

Shipping is mechanical. Finishing is a judgment call. And most organizations have quietly made it impossible to tell the difference.