shaduler

Scope

shaduler is a resource × time grid with a bring-your-own philosophy.

shaduler is a resource × time grid — columns are resources (people, rooms, machines), rows are hours of a day or week. That's the whole job.

What you get

  • Single file copy-paste, no NPM package to fight (pnpm dlx shadcn add ...).
  • Inherits your shadcn theme automatically — no CSS overrides.
  • Generic types preserve user-extended task data through render-prop closures.
  • Headless interaction hooks (drag, resize, drag-to-create) are opt-in — display-only is the default.
  • Built for React 19 + TS 5; modern function-component pattern.

Bring your own

shaduler stays small on purpose. A few things you'll handle at the data layer or with your own UI:

  • Month / agenda / year views. shaduler renders one day or week at a time — anything zoomed-out is outside its scope.
  • Recurring events. Expand the rule into concrete instances upstream and pass them in.
  • Timezones & DST. Normalize timestamps before they reach the grid.
  • Persistence, undo, conflict resolution. The grid emits events; what you do with them is yours.

Still to come

  • Keyboard arrow navigation between cells (Tab through tasks already works).

On this page