Paul Welty, PhD AI, WORK, AND STAYING HUMAN

Work log: Authexis — March 2, 2026

What shipped today

The universal Apple app crossed a major threshold today: it now builds, runs, authenticates, and loads real data on macOS. The session was dominated by two categories of work — a macOS compatibility pass across 30+ views, and a gnarly auth debugging session that turned out to be a simple redirect issue.

The macOS compatibility work replaced every UIKit-only API with cross-platform equivalents via a new PlatformCompat.swift layer. This covers haptic feedback (UINotificationFeedbackGenerator), clipboard (UIPasteboard), system colors (Color(uiColor:)), navigation bar styles, keyboard type modifiers, and toolbar placements. Every view that touched these APIs was updated. The isEligibleForPrediction calls in HandoffManager were guarded with #if !os(macOS). The app sandbox got its network entitlement, OAuth got redirect URL registration in Info.plist, and the login/sign-out flows were wired end to end.

The auth fix was the day’s detective story. After getting the app to build and authenticate successfully, every API call returned 401 “Authentication required.” The JWT token looked suspicious (ES256 algorithm instead of the expected HS256), which sent us down a rabbit hole about Supabase token algorithms. The actual cause was far simpler: authexis.app returns a 307 redirect to www.authexis.app, and Apple’s URLSession strips the Authorization header when following cross-host redirects (standard HTTP security behavior). Changing the base URL to www.authexis.app fixed everything instantly. Additional fixes today: FeedType decoding made resilient to unknown feed types, dashboard wired to AnalyticsDashboardView, and stub views now show proper “Coming soon” placeholders.

Completed

  • GH-723 — Use Haiku for article summarization and enrichment
  • GH-725 — Add magic link login to sign-in page
  • GH-726 — Add password setup to profile settings
  • GH-727 — Add Google OAuth sign-in and account linking
  • GH-702 — Add search to ideas list page

Release progress

  • v1-apple: 53/54 closed (1 remaining: #730 App icon and branding assets)
  • v1.5: 0/2 closed
  • v1: 296/296 closed (complete)

Carry-over

  • GH-729 (iOS login screen): Auth works, data loads, but the content list/detail navigation on macOS is still broken. The HStack approach (list left, detail right) renders but is “differently broken” per Paul. Needs debugging — possibly the HStack needs ScrollView wrapping, or ContentDetailView has rendering issues inside the split layout.
  • GH-730 (App icon and branding): Created today, needs design input. Last item in v1-apple.
  • Content detail navigation on macOS needs a proper master-detail pattern that works inside SidebarNavigationView’s NavigationStack without nesting NavigationSplitView.

Risks

  • The www.authexis.app redirect fix is a workaround. If Vercel/DNS configuration changes, this could break again. Consider adding the non-www domain to Vercel as the primary, or configuring the redirect to preserve headers.

Flags and watch-outs

  • Many sidebar items are stubs (Ideas, Briefings, Scans, Calendar, Integrations, Social/Blog slots, Publish log, Preferences). These show “Coming soon” now instead of blank text, but they’re not implemented.
  • The onChange(of:) { _ in } pattern in ContentListView uses the deprecated iOS 16 API. Works fine but will generate warnings on newer SDKs.

Next session

  1. Fix content detail on macOS — Debug why the HStack layout in ContentListView is broken. Try wrapping ContentDetailView in a ScrollView, check if the .id(contentId) reload works, consider if the detail view needs environment objects re-injected.
  2. GH-730 — App icon and branding assets. Get design direction from Paul, then implement.
  3. Test on iOS — The macOS compat work should be backward-compatible, but the app hasn’t been tested on iPhone/iPad since these changes. Run on simulator to verify.

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.

Nothing is finished until you say it is

Continuous delivery removed the endings from work. That felt like progress. But without formal completion, you lose the ability to say what you actually accomplished — and more importantly, what you're done thinking about.

Your biggest problems are the ones running fine

The most dangerous failures in any system — technical or organizational — aren't the ones throwing errors. They're the ones that appear to work perfectly. And they'll keep appearing to work perfectly right up until they don't.

The work that remains

When AI handles implementation, the human job shifts from doing the work to understanding the work. Speed without understanding is just technical debt with better commit messages.