Skip to content

feat(db): migrate calculator and gallery to mineral_families API#6

Merged
Bissbert merged 1 commit intomainfrom
feature/tools-use-family-api
Feb 2, 2026
Merged

feat(db): migrate calculator and gallery to mineral_families API#6
Bissbert merged 1 commit intomainfrom
feature/tools-use-family-api

Conversation

@Bissbert
Copy link
Contributor

@Bissbert Bissbert commented Feb 2, 2026

Summary

  • Migrate all database query functions to use the normalized mineral_families table
  • Deduplicates results from 108 minerals (with expression variants) to 68 unique families
  • Update Gallery component to display mineral families with expression counts
  • Add new Family/Expression types and query functions for the normalized schema

Changes

Database Layer (src/lib/db.ts, src/lib/db-server.ts)

  • getAllMinerals() and getAllMineralsPaginated() now query mineral_families
  • findMineralsByRI/SG use mineral_families for unique gem identification
  • getMineralsWithSG/Dispersion/Hardness return deduplicated results
  • getMineralsForRefractometer queries families for cleaner tool UX
  • getMineralsWithPleochroism returns unique family entries
  • Add MineralFamily, MineralExpression, MineralFamilyWithExpressions types
  • Add family-specific query functions: getAllFamilies(), getFamilyById(), getFamilyWithExpressions(), etc.

Gallery Components

  • Update Gallery.tsx to use useFamilies hook instead of useCrystalDB
  • Add FamilyCard.tsx for displaying mineral families with expression counts
  • Add FamilyModal.tsx for viewing family details and expressions
  • Update GalleryGrid.tsx to render family cards

Hooks

  • Add useFamilies.ts hook for fetching and filtering mineral families

Test plan

  • Verify calculator tools (SG, RI lookup, hardness table) show 68 unique minerals instead of 108
  • Verify Gallery displays mineral families with correct expression counts
  • Verify family modal shows all expressions for a mineral family
  • Verify search and filter functionality works with families

Update all database query functions to use the normalized mineral_families
table instead of the denormalized minerals table. This deduplicates results
from 108 minerals (with expression variants like beryl-prism, beryl-tabular)
to 68 unique mineral families.

Changes:
- getAllMinerals() and getAllMineralsPaginated() now query mineral_families
- findMineralsByRI/SG use mineral_families for unique gem identification
- getMineralsWithSG/Dispersion/Hardness return deduplicated results
- getMineralsForRefractometer queries families for cleaner tool UX
- getMineralsWithPleochroism returns unique family entries
- Add new Family/Expression types and query functions
- Update Gallery component to use useFamilies hook
- Add FamilyCard and FamilyModal components for family-based browsing
@Bissbert Bissbert force-pushed the feature/tools-use-family-api branch from d62af18 to e4bc36b Compare February 2, 2026 07:53
@cloudflare-workers-and-pages
Copy link

Deploying gemmology-dev with  Cloudflare Pages  Cloudflare Pages

Latest commit: e4bc36b
Status:⚡️  Build in progress...

View logs

@Bissbert Bissbert merged commit a176bbd into main Feb 2, 2026
1 check was pending
@Bissbert Bissbert deleted the feature/tools-use-family-api branch February 2, 2026 07: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