Institutional redesign, attribution groundwork, and the fixes found by the
API sweep.
Site
- Home, about, donate, explore and account rebuilt to the institutional
maquette, on a shared design system (Cormorant Garamond headings, Noto
Sans body) with an institutional header and footer.
- Explore CTA now opens /explore instead of scrolling to an anchor; the
home search icon renders again.
Attribution
- Each upstream source exposes its licence in the API (sources[].licence).
- Terms acceptance at signup, with a binding attribution clause.
- /citation page and CITATION.cff.
API
- /api/v1/corrections answered 500 on every filter[] and order[] key; the
API sweep found 27 such paths in one run. Fixed.
- filter_not[image_url]=null returned nothing on the search endpoints.
- N+1 on the plants endpoints removed.
- species completion_ratio and complete_data are public.
Back-office
- Unnamespaced route helpers made the families page unreachable.
- Data runs are journalled in the database they change.
Dependencies
- sidekiq 7.3 to 8.0, redis 5 to 6, and rack 2.2 to 3.2 as a required
transitive bump. rubyzip 3.6.0 (CVE-2026-85396).
Deploy note: the explore browse indexes build concurrently, so the
migration does not lock the species table.