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

2026-03-20 — Prakta

What shipped today

Massive session — 27 issues shipped, a complete product vision pivot, and the foundation for the serve-don’t-show model laid end to end.

UX pivot: “serve, don’t show.” The biggest outcome wasn’t code — it was the brainstorm that fundamentally reshaped what Prakta is. Through an extended conversation, we landed on: the user never sees a task list. Prakta serves one chunk at a time. Check out / check in, like Subversion. Energy as a number (not just 4 states). One cycle length per user. Decomposition at ingestion. No priorities — energy + mode + grain chain only. The PRODUCT.md rewrite captures the full model with all edge cases resolved: partial check-ins, empty queues, multi-day tasks, the escape hatch problem, “not now” spirals (not a supervisor), and more.

Foundation layer shipped. Every schema change, config update, and core function the serve model requires is now in place: single cycle length (#133), cycle-sized decomposition at parse time (#134), energy_cost on tasks (#157), numeric energy budget at day-start (#158), mode preference to start the grain chain (#140), started_at timestamps (#153), checkin_notes for feedback (#163), source task completion rollup (#137), and the serve API itself (#151) — a deterministic scoring function that picks the best chunk without calling Claude.

UX changes landed. Task list hidden by default with /queue escape hatch (#136). Narrative queue via Maya “What’s ahead?” button (#142). Daily cap enforcement — “you’re done” when cap is hit (#146). Weekly reflection report (#143). Homepage copy rewritten for the serve model (#148). Deadline_weight removed from sequencing — pure no-priority model (#149). Onboarding redirects to /today (#147).

Earlier in the session: production 500 fixed (#111), app nav bar (#112), sign-out button (#117), screenshot ingestion via Claude Vision (#124), task edit/delete + dashboard list (#125/#128), input length limits (#113), JSON error handling (#115), sequencing validation (#116), daily plan persistence (#114), learning insights after wrap-up (#126), task history page (#127).

Completed

  • #111 — Fix production 500 on www.prakta.io
  • #112 — App navigation bar
  • #113 — Input length limits on AI API routes
  • #114 — Persist daily plan in database
  • #115 — request.json() error handling
  • #116 — Validate sequencing AI response
  • #117 — Sign-out button
  • #124 — Screenshot task ingestion (Claude Vision)
  • #125 — Task edit and delete
  • #126 — Learning model insights after wrap-up
  • #127 — Task history page
  • #128 — Show task list on dashboard (included in #125)
  • #133 — Single cycle length (collapse 4 mode-specific)
  • #134 — Decompose at ingestion to cycle size
  • #136 — Hide task list by default
  • #137 — Source task completion rollup
  • #140 — Day-start mode preference
  • #142 — Narrative queue view via Maya
  • #143 — Weekly reflection report
  • #146 — Daily cap enforcement
  • #147 — Onboarding redirect to /today
  • #148 — Homepage copy update
  • #149 — Remove deadline_weight (no-priority model)
  • #151 — Serve API (deterministic pick-one-chunk)
  • #153 — started_at timestamp tracking
  • #157 — energy_cost field on tasks
  • #158 — Numeric energy budget at day-start
  • #163 — checkin_notes field for feedback

Decomposed: #135 (serve experience → #151, #152, #153), #139 (energy budget → #157, #158, #159), #141 (check-in feedback → #163, #164, #165)

Release progress

March 2026: 0 open / 0 closed (milestone exists, no issues assigned)

Carry-over

  • #152 — Serve UI: The last critical piece — wire the serve API into the /today page. Replaces multi-cycle plan view with one-chunk-at-a-time. Needs prep.
  • #159 — Energy tracking: Track energy_spent when tasks complete, stop serving when budget exhausted.
  • #164 — Feedback UI: Add text input to done/not-done flow (checkin_notes schema ready).
  • #165 — Re-ingestion pipeline: Not-done feedback re-ingested through parse.
  • #101 — Email templates: Still waiting for Paul to paste into Supabase dashboard.
  • Google OAuth + Stripe: Manual setup still pending.

Risks

  • No tests. 50+ PRs merged with zero test coverage. The first real user will be the integration test.
  • Serve UI (#152) not built yet. The serve API exists but the /today page still shows the old multi-cycle plan view. The serve model is backend-complete but UI-incomplete.
  • Production not redeployed since morning’s #111 fix. All of today’s work is on main but not deployed.

Flags and watch-outs

  • Deploy from monorepo root, not web/. Project: synaxis/prakta.
  • 6 new Supabase migrations today (plan_json, learning_insight, started_at, energy_cost, energy_budget+spent, checkin_notes). All applied to remote.
  • buttonVariants server/client split — shadcn overwrite clobbers it.
  • Port 3006 always.
  • Serve API is deterministic — no Claude call. Decision logged in DECISIONS.md.

Next session

  1. /issue prep 152 --auto then /issue exec 152 --auto — build the serve UI (the last critical piece)
  2. Deploy to production: vercel --prod --yes from monorepo root
  3. Test the full production flow: signup → onboarding → tasks → serve → wrap-up
  4. Prep and exec #159 (energy tracking)
  5. Prep and exec #164 (feedback UI) and #165 (re-ingestion)
  6. Google OAuth + Stripe manual setup
  7. Consider assigning issues to the March 2026 milestone

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 product changed its mind

A product pivoted its entire philosophy mid-session — from 'here's your list' to 'here's your next thing.' The code shipped in the same conversation as the idea. That's not iteration. That's something else.

Your project management tool was made for a non-human (AI) factory, not for you

Every project or task management tool on the market descends from Frederick Taylor's factory floor. The assumptions were wrong then. They're catastrophic in the Age of AI.

The last mile is all the miles

Building the product is the fun part. Deploying it, configuring auth, pasting email templates into dashboards, rotating leaked API keys — that's where the work actually lives.