Skip to content

v2.5.0

@lambda2 lambda2 tagged this 09 Sep 06:58
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.
Assets 2
Loading