bumicerts-clean-rewrite · observations-measurements-inline
The Observations surface no longer splits field data into Observations / Measurements / Audio / Drone tabs — it now shows just Photos and Field sounds, and every sighting's measurements (e.g. tree DBH & height) render inline on the gallery card, the detail drawer, and the full observation page. Smoke-tested live against Bees & Trees Uganda and the 1,099-occurrence Koko Dao dataset on the production indexer.
Works end-to-end. Tree measurements now appear as ruler-icon chips on every gallery card that has them (DBH 1.29 cm · Height 15 m), as a dedicated “Measurements” block in the detail drawer, and as a “Measurements” section on the full observation page. The Measurements and Drone tabs are gone; only Photos and Field sounds remain. Card data is fetched in one batched indexer round-trip and a chip renders only where a sighting actually carries measurements. tsc --noEmit is clean and the i18n sync check passes across all five locales.
Cards fetch measurements for the visible sightings in one batched query (mirroring the existing media-count fetch) and render up to two facts as ruler chips, with a +N overflow. Verified on Bees & Trees Uganda (shot 01) and at scale on Koko Dao’s 1,099-occurrence feed (shot 02). A chip appears only when the sighting has measurements — photo/audio sightings without field data stay clean.
The drawer gained a “Measurements” panel (shot 03) and the full /observations/<did>/<rkey> page a “Measurements” section (shots 04–05). Values match the indexer out-of-band: occurrence mtea3a9c… ↔ measurement 3miipbnasx223 → dbh: "1.29", totalHeight: "15", rendered as DBH 1.29 cm / Height 15 m (verify-koko-measurement.json).
The Observations sub-nav now offers only Observations (+ Audio for managers); the Measurements and Drone pills are gone, and the tree-data management layer (upload/edit) stays reachable but unlisted via “Add data” / the legacy /trees redirect, so nothing was orphaned. New marketplace.measurements strings were added to en, es, id, pt, sw; check:i18n passes and tsc --noEmit is clean.
The requested COBEC dataset (“1000s of trees”) could not be verified: the certified profile community-based-en.certified.one (did:plc:tkj5pqpkfy5srko45wptuubp) returns 0 occurrences and 0 measurements from the indexer, so its Observations feed is empty (shot 06). The data is likely under a different importer DID or not yet indexed. Used Koko Dao (1,099 occurrences / 189 measurements) for the scale test instead. Not a regression in this change.
The Observations sub-nav only renders for the account owner / org manager (showPrivate), and these test runs were logged-out, so the before/after pill row isn’t captured in a screenshot. The removal is verified through the component diff (ObservationsSubNav.tsx now builds only observations + audio tabs) plus a clean typecheck. A logged-in manager pass would close this gap.
Several Bees & Trees sightings show raw CSV values as their name (“1”, “0”, “()”) and carry no photo. That stems from the original tree-CSV import, not this feature — the measurement chips render correctly on them regardless. Koko Dao’s records have proper species names and show the feature at its best.
/observations/koko-dao.gainforest.id/mtea3a9c1798560ca6b0d3
Out-of-bandcurl api.hi.gainforest.app/graphql — appGainforestDwcMeasurement(where:{occurrenceRef:{eq:…}})
Checksnpx tsc --noEmit · node scripts/check-i18n-untranslated.mjs — both pass
Videowalkthrough.webm
Screenshotsassets/03…07*.png