Skip to content

feat(minerals): interactive 3D crystal view + fix runaway image loop + gem-page polish - #62

Merged
Bissbert merged 1 commit into
mainfrom
fix/gem-pages-overhaul
Jul 20, 2026
Merged

feat(minerals): interactive 3D crystal view + fix runaway image loop + gem-page polish#62
Bissbert merged 1 commit into
mainfrom
fix/gem-pages-overhaul

Conversation

@Bissbert

Copy link
Copy Markdown
Contributor

Summary

  • P0: killed a runaway 404 image-retry loop caused by a missing /crystals/placeholder.svg plus unguarded onerror handlers in 3 components (26k-57k failed requests / hung pages); guarded onerror, added a real placeholder, backfilled 8 model-less expression SVGs, and taught check-svgs to validate expression ids.
  • Wired the interactive Crystal3DViewer into the mineral hero as SVG-default with an SVG↔3D toggle (new MineralCrystalViewer island: WebGL-gated, reduced-motion aware, lazy glTF parse, SVG fallback for the 8 model-less stones) — and fixed the underlying data bug where getMineralWithModels read model_gltf from the empty base minerals table instead of the populated mineral_expressions, so 3D data now actually reaches the page.
  • Gem-page polish: sidebar counterpart/related names wrap to 2 lines instead of mid-word truncation; consolidated the 5 tag-list cards into one Characteristics card; CDL notation wraps instead of overflowing; de-duplicated PropertyTable onto the shared ui/Table component with semantic dl/dt/dd markup (also fixes a latent bug that silently dropped legitimately-zero birefringence/dispersion rows); labelled the chemistry formula; hardened the nested-parens family-name regex; added aria-pressed to the shared ViewerToggle; removed the dead prerender npm script.

Test plan

  • 507 tests passing
  • Browser-verified in both themes (3D toggle renders, P0 loop gone)
  • CI green on this PR

…+ gem-page polish

P0 — killed a runaway 404 image-retry loop (missing /crystals/placeholder.svg + unguarded onerror in 3 components caused 26k-57k failed requests / hung pages; guarded onerror, added a real placeholder, backfilled 8 model-less expression SVGs, taught check-svgs to validate expression ids); wired the interactive Crystal3DViewer into the mineral hero as SVG-default + SVG↔3D toggle (new MineralCrystalViewer island, WebGL-gated, reduced-motion aware, lazy glTF parse, SVG fallback for the 8 model-less stones) — and fixed the underlying data bug where getMineralWithModels read model_gltf from the empty base `minerals` table instead of the populated mineral_expressions, so the 3D data now actually reaches the page; sidebar counterpart/related names wrap to 2 lines instead of mid-word truncation; consolidated the 5 tag-list cards into one Characteristics card; CDL notation wraps instead of overflowing; de-duplicated PropertyTable onto the shared ui/Table component with semantic dl/dt/dd markup (which also fixed a latent bug that silently dropped legitimately-zero birefringence/dispersion rows); labelled the chemistry formula; hardened the nested-parens family-name regex; added aria-pressed to the shared ViewerToggle; removed the dead prerender npm script. 507 tests, browser-verified in both themes (3D toggle renders, P0 loop gone).
@github-actions

Copy link
Copy Markdown

🚀 Preview deployed to: https://a5ee6d21.gemmology-dev.pages.dev

@Bissbert
Bissbert merged commit 6c5b753 into main Jul 20, 2026
5 of 6 checks passed
@Bissbert
Bissbert deleted the fix/gem-pages-overhaul branch July 20, 2026 11:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant