Skip to contact form
← WorkWeb · 2026in progress

Cadence

Shift scheduling for small clinics — replacing the shared spreadsheet that quietly runs most of them.

Role

Design & development

Timeline

9 weeks

Platform

Web · installable PWA

Stack

Next.js · Postgres · TypeScript

The problem

Smallpracticesschedulestaffinasharedspreadsheet,anditworksuntiltwopeopleopenitatonce.ThefailuremodeisnotdramaticitisanursewhoshowsupforashiftthatwasoverwrittenonTuesday.Existingschedulingsoftwareispricedandscopedforhospitalsystems,soclinicsundertwentystaffkeepthespreadsheetandabsorbthecost.

Decisions

01

Optimistic UI with server reconciliation

Schedulers drag shifts around fast, and a round-trip per drag felt broken. Every change applies locally and immediately, then reconciles. When the server disagrees the shift animates back with a reason attached, which turned out to teach the scheduling rules better than any tooltip we wrote.

02

Conflicts surfaced, never auto-resolved

Our first build silently picked a winner on collision. Testing made it obvious this was worse than the spreadsheet — at least a spreadsheet is visibly wrong. Now both versions are shown side by side and a human chooses. Slower, and the only defensible option when someone’s shift is on the line.

03

Server Components for the read paths

The schedule grid is read far more than it is written. Rendering it on the server cut the client bundle by roughly two thirds and made the first paint feel instant on the ageing desktops these clinics actually run. Interactivity is confined to the small islands that need it.

Screens

Weekly schedule grid

add src to lib/case-studies.ts

Conflict resolution view

add src to lib/case-studies.ts

Mobile shift confirmation

add src to lib/case-studies.ts

Next project

Massing