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. |
||
|---|---|---|
| .. | ||
| Assets.tsx | ||
| Contractors.tsx | ||
| History.tsx | ||
| Locations.tsx | ||
| Recurring.tsx | ||
| Settings.tsx | ||
| Summary.tsx | ||