DoveMark carries the dove path from the original home page as its
own component. The hero draws it at the rings' centre, upright while
they turn, with a soft glow and a gentle bob that stops under reduced
motion. The rings' opacity moves from the SVG to their own group so
the dove isn't dimmed with them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GET /api/people/:id returns a published person's profile, public
roles (current and past), published events they were billed at or
hosted, and public awards, each under the same visibility rules its
own page applies. public_phone is never sent.
PersonDetail renders it at /people/:id, the route personHref already
pointed at. PeopleTiles links a tile with a people id to that page;
an expandable tile keeps its details panel and the panel carries a
"View full profile" link instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Series checkbox under When opens a panel for the schedule:
weekly on chosen weekdays, monthly by date, or monthly by weekday
position, every N weeks or months, with meeting times and an
optional meeting count. starts_on anchors the schedule and ends_on
bounds it, so effective_status needs no change.
Occurrences are derived, not stored. src/lib/eventSeries.ts builds
the schedule label shown on cards and the event page, and the
upcoming dates listed on the event page.
Migration 016 adds the columns; the CRUD engine gains a time type.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Declare the --ig-fill custom property on React's CSSProperties once,
instead of casting the style prop in Footer, Home and EventList-Cards.
- Type Footer's Get_In_Touch links as internal or external, so the
external branch type-checks.
- Pass undefined rather than null for an absent gradient (Home) and
Instagram URL (EventList-Cards).
tsc --noEmit is now clean, with and without --noImplicitAny.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds .d.ts declarations beside the untyped JS modules imported from
TS (api.js, navConfig.js, adminSchema.js, adminNav.js, src/data/*),
with shapes taken from the server routes and migrations. get/post/
patch/del now return unknown unless the caller names the response.
Fixes found along the way:
- website/email/instagram are bare strings from splitLinks, not Link
objects; OrganizationDetail's website and email pills rendered with
no href or label and now link correctly.
- The chapter map falls back to FALLBACK_COLOR for a region with no
colour instead of painting its tiles black.
Adds defineSection() so each page manifest entry's props are checked
against its own Component.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>