maintenance/backend
jtricerolph ee23cb1b16 Add template groups: bulk multi-location creation + duplicate action
For recurring jobs that repeat identically across many locations (e.g.
clean AC filter in every room), one task_templates row per location is
still required — schedule/completion tracking is per-location, which
matters especially for floating mode — but creating and organising
that many rows by hand didn't scale.

- New template_groups table (id, unique name) + task_templates.group_id.
  POST /api/template-groups upserts by name so picking an existing
  group from the UI never creates a duplicate folder.
- Recurring template form: optional group name (datalist-autocompleted
  from existing groups) plus a "create for multiple locations" toggle
  that reveals a checkbox list of locations; saving loops one
  createTemplate() call per selected location, all sharing the
  resolved group_id.
- Duplicate button on each template row pre-fills the New Template
  form from that row (location/asset/next-due cleared for repicking),
  landing in the same group automatically — the lightweight path for
  adding one more room later without the bulk picker.
- Recurring.tsx list now groups rows under a collapsible folder header
  per group_name; ungrouped templates render as flat rows as before.
2026-08-26 10:33:19 +00:00
..
src Add template groups: bulk multi-location creation + duplicate action 2026-08-26 10:33:19 +00:00
Dockerfile Maintenance log book app — initial scaffold 2026-07-03 21:28:57 +00:00
package.json Compress and resize photos on upload via sharp 2026-07-22 10:48:24 +00:00