diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-19 17:55:46 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-19 17:55:46 +0200 |
| commit | 68368d6cff798a9df8e931e8ee1f44ae0dc02a14 (patch) | |
| tree | 6bd82eca8258a14a820ac1d5b025155056793df7 /doc | |
| parent | e0c2d7a066793683a911bee7f7210d80eb6b2055 (diff) | |
Add some history for future maintainers/editors
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/DESIGN_HISTORY.md | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/doc/DESIGN_HISTORY.md b/doc/DESIGN_HISTORY.md new file mode 100644 index 0000000..0bf780a --- /dev/null +++ b/doc/DESIGN_HISTORY.md | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | ## Events and the calendar | ||
| 2 | |||
| 3 | ### Problem | ||
| 4 | |||
| 5 | Calendar entries required an internal Node — every event | ||
| 6 | needed a page somewhere in the tree. Editors avoided this: either the | ||
| 7 | updates stream absorbed non-news content, or a page got created with | ||
| 8 | no natural place in the navigation. The calendar widget went dormant | ||
| 9 | rather than get used under those terms. | ||
| 10 | |||
| 11 | ### Rebuild. | ||
| 12 | |||
| 13 | The Event model was rewritten around the RRULE humanizer | ||
| 14 | (`app/models/concerns/rrule_humanizer.rb`) and a picker UI bound to it | ||
| 15 | by a deliberate scope rule: the picker only generates or reads back | ||
| 16 | RRULE shapes the humanizer can also render as prose. A picker that | ||
| 17 | could express more than the humanizer can describe would let an | ||
| 18 | editor create a schedule that renders as blank text on the public | ||
| 19 | page — worse than a raw string the editor had to type by hand. | ||
| 20 | `Event#node_id` became optional, so an event can point outward (an | ||
| 21 | external URL) instead of requiring a page. This is what made reviving | ||
| 22 | the calendar possible at all. | ||
| 23 | |||
| 24 | ### The problem that surfaced next | ||
| 25 | |||
| 26 | Once events no longer needed a node, turning the calendar on directly | ||
| 27 | would have meant every chapter's regular open evening becoming an | ||
| 28 | entry — a handful of one-off items buried under dozens of recurring, | ||
| 29 | low-signal rows. | ||
| 30 | |||
| 31 | ### Resolution: | ||
| 32 | |||
| 33 | Two widgets, not one: | ||
| 34 | |||
| 35 | - `open_erfas_today` took the recurring, date-filtered case — which | ||
| 36 | chapters are open today. Its label went through rejected drafts | ||
| 37 | before landing on phrasing that admits it's a curated sample, not a | ||
| 38 | complete listing. | ||
| 39 | - `div#frontpage_calendar` was reserved for the one-off case — | ||
| 40 | conferences, memorial gatherings. Its CSS carries an unconditional | ||
| 41 | `display: none` with no override anywhere in the stylesheet — not a | ||
| 42 | bug, a widget staged for a UI that hasn't been built yet. | ||
