feat: native status badges, species modal, description field, presence records, i18n#13
Merged
Conversation
…e records, i18n - Native status: replace Local/National text labels with a single Native/Non-Native/Invasive colour pill on species cards (SpeciesManager), individual cards (IndividualManager grid + list), IndividualDetail species panels, and SpeciesModal. "Introduced" is relabelled "Non-Native" for clarity. - Edit form: new Native Status section in SpeciesManager edit form with four pill-toggle buttons (Unknown / Native / Non-Native / Invasive) so staff can override the AI value. - AI prompt: backend /api/ai/species-data now explicitly asks Gemini to determine whether the species is Native, Introduced, or Invasive at the organisation's specific location (nativeStatusLocal) and at national level (nativeStatusCountry). - Species detail modal (SpeciesModal): new reusable component that renders species hero image, conservation badge, description, stats grid, native status pill, and Wikipedia / IUCN links as an overlay. Opened from the Info icon and Species Detail button on IndividualDetail. - Description field: added to Species type, SpeciesManager edit form, species cards, AI prompt, DB migration, and sync mapping. - Presence-only records: 3-way radio on IndividualManager physical mapping section (No location / Generally present / Pin location); teal Presence badge on grid cards. - Unknown species: each unidentified individual now creates its own unique species record with a working name and identifying features form; static SVG placeholders replace base64 upload pipeline. - IndividualDetail i18n: all hardcoded English labels replaced with t() calls; 36 new translation keys seeded into DB across all 7 supported languages. - tsconfig: added exclude array to prevent stale src/ directory from breaking tsc. - react-router bumped 7.13 to 7.16 to resolve 5 high-severity CVEs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Introducedis relabelledNon-Nativefor clarity across SpeciesManager cards, IndividualManager grid + list, IndividualDetail species panels, and SpeciesModal./api/ai/species-datanow explicitly asks Gemini to determine whether a species is Native, Introduced, or Invasive at the organisation's specific location (nativeStatusLocal) and at national level (nativeStatusCountry).SpeciesModalcomponent renders species hero image, conservation badge, description, stats grid, native status pill, and external links (Wikipedia/IUCN) as an overlay, opened from the ? icon and "Species Detail" button on IndividualDetail.Speciestype, SpeciesManager edit form, species cards, AI prompt, DB migration, and sync mapping.isPresenceOnlyflag onIndividual.public/unknown-fauna.svg/public/unknown-flora.svg) replace the broken base64 pipeline.t()calls; 36 new translation keys seeded into DB for all 7 supported languages.tsconfig.jsonexclude array prevents stalesrc/directory from breaking TypeScript checks;react-routerbumped 7.13?7.16 to resolve 5 high-severity CVEs.Test plan
?? Generated with Claude Code