Work log: Scholexis — March 11, 2026
What shipped today
The Next.js port foundation is now complete. Four issues shipped in a single session, taking Scholexis from an empty monorepo structure to a fully scaffolded three-tier application with a complete database schema.
Application scaffolding. Built the Next.js 16 web app (#66) with App Router, Tailwind v4, shadcn/ui v4, and Drizzle ORM. The Scholexis brand color system is wired into the CSS custom properties — primary blue, dark navy secondary, amber accent, full dark mode palette. Alongside that, the Python FastAPI engine (#67) is set up with health check endpoint, Pydantic settings, and the dependency stack (anthropic, asyncpg, apscheduler). Both services run via Procfile.dev.
Database schema. Ported the entire Rails schema to Drizzle across two issues. Core tables (#70) covered users, academic_years, terms, weeks, instructors, courses, meetings, and meeting_patterns — the structural backbone. Feature tables (#71) added assignments, tasks, events, energy_check_ins, ai_task_breakdowns, access_grants, app_preferences, and attachments. The tricky bit was the circular FK between assignments and ai_task_breakdowns — handled by defining one direction in Drizzle’s references() and the other as raw SQL in the migration. All 16 tables are live in local PostgreSQL with correct constraints and indexes.
Pipeline housekeeping. Decomposed the parent issues (#49, #50, #51, #60) into grindable children, prepped specs, triaged the queue. Unblocked #61 (database seeding) now that schema work is complete.
Completed
- #66 — Scaffold Next.js web app with Drizzle and shadcn/ui
- #67 — Scaffold Python FastAPI engine
- #70 — Define Drizzle schema for core tables (users, academic structure)
- #71 — Define Drizzle schema for feature tables (assignments, tasks, events, energy)
- #50 — Scaffold Next.js app from next-saas-starter template (decomposed → #66, #67)
- #51 — Set up Supabase project and port database schema (decomposed → #70, #71)
- #49 — Port from Rails to Next.js (decomposed → #50-#59)
- #60 — Port access grants, admin panel, and deploy (decomposed → #62-#65)
Release progress
- Next.js port: 8/21 closed (13 open). Foundation layer complete — scaffold, engine, full schema. Moving into feature implementation.
Carry-over
- #61 (database seeding) just unblocked — needs prep and exec
- #52 (auth system) is the critical path blocker for all feature work — needs decompose
- #53-#59 all need decompose before any can be prepped/executed
- #62-#65 (admin panel children) remain blocked on auth + schema seeding
Risks
- No
.envfile was tracked —DATABASE_URLwas appended toapps/web/.envlocally but it’s gitignored. New clones will need to set this up manually. - Port 3000 conflict between Rails dev server and Next.js — Next.js auto-selects 3001 but this will need cleanup when Rails is decommissioned.
Flags and watch-outs
- shadcn/ui v4 deprecated the
toastcomponent — usesonnerinstead - Python 3.14’s setuptools uses
"setuptools.build_meta"as the build backend string (not the_legacyvariant) - Drizzle’s
decimaltype maps to PostgreSQLnumeric— pass precision/scale explicitly
Next session
- Decompose #52 (auth system) — this is the critical path. Everything downstream (features, admin, deployment) depends on auth.
- Prep and exec #61 (database seeding) — now unblocked, quick win to get dev data flowing.
- Decompose #53 (design system port) — parallel track to auth, can unblock UI work.
- Decompose #54 (dashboard/navigation) — sets up the app shell for all feature pages.
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.