Skip to main content

Writing

Convex

Convex backend notes for production apps: seeded Identify reducers, session audio purge, typed flow rules, and reactive queries that keep admin UI in sync.

All posts

Late STT must no-op after transcript purge

Sander Korf4 min read

Purge deleted transcript overlays while vendor STT still ran. Completion handlers recreated erased text. Missing overlay row means return, not upsert.

convex

Read more

Convex rate limiter: check both buckets first

Sander Korf4 min read

Convex rate limiter on thread and global buckets can charge the session when global is empty. Check both rate limits before STT spend, then throw to roll back.

convex

Read more

Convex Identify reducer before admin UI

Sander Korf4 min read

Clinicians read Identify as a spreadsheet. Engineers cannot prove it ends. I seed Convex, write a pure reducer, and replay the sheet paths in Vitest first.

convexvitesttypescript

Read more

Pick a winner when Identify Compare stalls

Sander Korf4 min read

When two movements stay yes after Compare, looping the same chips teaches nothing. I pause for a pick, hatch the losers, and end the run as a hypothesis.

convextypescriptvitest

Read more

Lock Identify rules to a typed Convex menu

Sander Korf4 min read

Identify is a clinician movement engine on Convex. Spreadsheet authors invent words weekly; lock metrics and actions to validators so the reducer stays boring.

convextypescript

Read more

Convex session audio purge is terminal-only

Sander Korf3 min read

A research product records session audio apart from chat. Deleting a thread must not wipe the rolls. Admin purge is terminal-only and deletes chunks first.

convexnextjs

Read more