Maps and calendars
Two more shapes a page of rows can take, each the same page drawn another way, with the same search, filters and footer. A model earns one by the columns it keeps, and declares nothing.
Maps
A model keeping a google_place_id, or a latitude and a longitude, gets Display as
map in its footer, and /stores.map draws the page’s rows on a Google map. A point is a pin; a place ID
is an area where the model is a State, County, City or ZIP, and a pin otherwise.
# config/credentials.yml.enc
google_maps:
api_key: AIza…
map_id: 4f2a…
The map’s style needs the matching Feature layers turned on in the Cloud console, and a Content Security
Policy allows maps.googleapis.com and Google’s tile hosts.
Calendars
A model keeping a starts_at and an ends_at, both datetimes, gets Display as calendar, and
/events.cal draws a week from Sunday, a column a day, each row placed by its hours in the reader’s zone,
overlapping rows in lanes of their own. ?week=2026-09-13 moves to that week, and arrows under the grid
move a week or four either way. The search and the filters travel with it.