Replace emoji with icons; scope schedule builder by branch and sport
Icons
- No emoji anywhere in the UI. Extracted the sidebar's inline SVG map into
a single <x-ui.icon name="..."> component and added the icons the pricing
work needed, so there is one source instead of a per-view copy. Discount
recipes now carry icon NAMES, not glyphs.
Schedule builder
- Facilities are scoped to the selected branch. The screen listed every
branch's facilities, which is how someone books the wrong building. A
?facility_id= carried over from another branch (bookmark, back button) is
now dropped instead of silently overriding the branch scope.
- Groups are scoped to the facility's branch AND to the sports that facility
hosts, so a football court no longer offers swimming groups. That link did
not exist, so this adds a facility_activities pivot. A facility that
declares no activities still hosts anything, so nothing breaks for academies
that have not filled it in.
Facility grid
- Removed the arbitrary ceilings (rows/columns capped at 10, lanes at 20).
Physical space is not limited to a number we picked.
- New facilities never got a layout, which is why the grid silently failed to
appear on them. FacilityService::create now seeds one, the migration
backfills every existing facility that has none, and the default is a 1x1
grid — "one whole space, not subdivided yet" — rather than inventing a
subdivision nobody asked for.
- Grid size is editable straight from facility settings, with a live preview
of the cells being described. Shrinking onto a segment that holds a
confirmed future reservation is refused rather than silently dropping
someone's booking.
- Sports and starting grid are both settable at creation time too.
Co-Authored-By:
Claude Opus 5 (1M context) <noreply@anthropic.com>
Showing
Please register or sign in to comment