Work log: Diktura — March 31, 2026
What shipped today
Today was the most productive day for the new stack by a wide margin. The feedback management system went from a basic list page to a fully functional CRUD workflow — users can now browse feedback with pagination, view individual items with full comment threads, update status/priority/category inline, and submit new feedback through a dedicated form. This is the first complete vertical slice of the product running end-to-end on the new Next.js + Supabase stack.
The testing infrastructure was established from scratch across both halves of the monorepo. Vitest is now configured for the web/ app with initial env helper tests, and pytest is set up for the engine/ with Settings validation and poller unit tests. This means every future dev-loop tick has a test baseline to work against — a prerequisite for autonomous development at speed.
The app shell matured significantly: a proper navigation bar with workspace name and active link highlighting, a real dashboard showing feedback count and user role, sign-out functionality, error boundaries, and loading skeletons throughout the feedback flow. The codebase also got hardened with workspace authorization checks on server actions, deprecated FastAPI lifecycle hooks replaced with the modern lifespan pattern, and dead code removed.
Completed
- #30 — Add feedback list page at /dashboard/feedback
- #31 — Add feedback detail page at /dashboard/feedback/[id]
- #32 — Add comments display and add-comment form to feedback detail
- #33 — Add status/priority/assignee update actions for feedback items
- #34 — Add vercel.json with rootDirectory config
- #35 — Add .env.example files for web and engine
- #36 — Push dead command status migration to Supabase
- #37 — Set up Vitest for web/ and write first test
- #38 — Set up pytest for engine/ and write first test
- #39 — Add engine poller unit tests
- #40 — Add workspace authorization check to addComment action
- #41 — Add pagination to feedback list
- #42 — Add loading skeleton for feedback detail page
- #43 — Add manual feedback submission form
- #44 — Replace deprecated FastAPI on_event with lifespan context manager
- #45 — enqueueCommand missing workspace authorization check
- #46 — Add dashboard navigation and sign-out
- #47 — Add loading states for feedback list and new feedback pages
- #48 — Update ROADMAP.md to reflect Phase 2 completion
- #49 — enqueueCommand is unused — evaluate or remove
20 issues closed in a single day.
Carry-over
- #20 (backlog) — Port roadmap management and voting to the new stack. This is Phase 3 work per the roadmap. Too big for autonomous pickup — needs decomposition when ready.
- #18 (needs-clarification) — Clean up old PRs. Bot asked for scope; no human response yet.
- #19 (needs-clarification) — Clean up old CI. Same status.
Risks
No new risks emerged today. The existing risks in RISKS.md (dual-stack drift, schema mismatch, auth edge cases, queue contract instability, documentation debt) remain relevant. The workspace auth fixes (#40, #45) directly addressed risk #3 (auth edge cases), reducing exposure there.
Flags and watch-outs
- The entire UI uses inline styles with CSS variables. This works for rapid prototyping but will need a design system pass (Tailwind/shadcn) before the app is presentable to users.
- All server actions follow the
{ error: "..." }return pattern rather than throwing — this is intentional but not formally documented as a convention. - The engine poller tests mock Supabase responses — real integration tests against the database don’t exist yet.
Next session
- Run
/scoutto find new work — the queues are empty and the codebase has changed significantly since the last scan. - Consider decomposing #20 (roadmap management port) into smaller issues if Phase 3 work is next.
- Respond to #18 and #19 if Paul has answered the clarification questions.
- The feedback flow is feature-complete for basic CRUD — a good time to do a browser walkthrough and catch UX issues.
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 case for corporate amnesia
Most organizations worship institutional memory. But what if the thing they're preserving is mostly decay?
Your design philosophy is already written
Builders who work across multiple projects leave fingerprints everywhere. The same mind solves the same problem differently in every domain — and usually doesn't notice. You need someone to read it back to you.
The day nothing satisfying happened
The most productive day in an organization's life usually looks like nothing happened. No launches, no features, no announcements. Just people quietly making the existing work more honest.