|
| 1 | +# Release v0.5.x - Multi-Platform Comparison & UI Redesign |
| 2 | + |
| 3 | +Released: 2026-01-25 |
| 4 | + |
| 5 | +## Overview |
| 6 | + |
| 7 | +This release adds multi-platform data comparison capabilities, allowing you to compare person data across FamilySearch, Ancestry, WikiTree, and Wikipedia. It also includes a major UI redesign for the person detail page with a more compact, user-friendly layout. |
| 8 | + |
| 9 | +## New Features |
| 10 | + |
| 11 | +### Multi-Platform Data Comparison (v0.5.0) |
| 12 | +- Compare person data across multiple genealogy providers side-by-side |
| 13 | +- Field-by-field comparison with visual indicators: ✓ match, ⚠ different, — missing |
| 14 | +- Unified provider cache structure at `data/provider-cache/{provider}/{externalId}.json` |
| 15 | +- Download/refresh data from providers directly from the UI |
| 16 | +- Collapsible field comparison panel showing divergences |
| 17 | + |
| 18 | +### Compact PersonDetail Layout (v0.5.0) |
| 19 | +- Redesigned person detail page with more efficient use of screen space |
| 20 | +- Side-by-side Vital Events (birth/death/burial) and Family cards at top |
| 21 | +- Inline tags for Also Known As and Occupations |
| 22 | +- Unified Platforms & Data section combining provider links and comparison |
| 23 | +- Compact bio section |
| 24 | + |
| 25 | +### Link Platform Dialog (v0.5.0) |
| 26 | +- New modal dialog for linking Wikipedia, Ancestry, and WikiTree profiles |
| 27 | +- Platform-specific styling and placeholder text |
| 28 | +- Keyboard support (Escape to close, Enter to submit) |
| 29 | +- Auto-focus on URL input when opened |
| 30 | + |
| 31 | +### Ancestry Scraper Updates (v0.5.0) |
| 32 | +- Updated selectors for 2024/2025 Ancestry DOM structure |
| 33 | +- Extracts name from `.userCardTitle` |
| 34 | +- Extracts birth/death from `.userCardEventDetail` spans |
| 35 | +- Extracts parents from Relationships section |
| 36 | +- Extracts profile photo URL |
| 37 | +- Proper handling of "Unknown" and "Living" status values |
| 38 | + |
| 39 | +## New Files |
| 40 | + |
| 41 | +### Client Components |
| 42 | +- `client/src/components/person/ProviderDataTable.tsx` - Unified provider data table with photos, status, and actions |
| 43 | +- `client/src/components/person/UnifiedPlatformSection.tsx` - Combined provider links and comparison table (replaced by ProviderDataTable) |
| 44 | +- `client/src/components/person/LinkPlatformDialog.tsx` - Modal dialog for linking platforms |
| 45 | +- `client/src/components/person/VitalEventCard.tsx` - Compact vital event display with editing |
| 46 | +- `client/src/components/ui/EditableDate.tsx` - Inline date editor with genealogy format validation |
| 47 | +- `client/src/components/ui/EditableField.tsx` - Inline text field editor |
| 48 | +- `client/src/components/ui/EditableList.tsx` - Inline list editor |
| 49 | + |
| 50 | +### Server Services |
| 51 | +- `server/src/services/multi-platform-comparison.service.ts` - Provider data comparison logic |
| 52 | +- `server/src/services/familysearch-refresh.service.ts` - FamilySearch data refresh |
| 53 | +- `server/src/services/familysearch-upload.service.ts` - Upload changes to FamilySearch |
| 54 | +- `server/src/services/local-override.service.ts` - Local override management |
| 55 | + |
| 56 | +### Scripts |
| 57 | +- `scripts/migrate-provider-cache.ts` - Migration script for unified cache structure |
| 58 | + |
| 59 | +## API Endpoints |
| 60 | + |
| 61 | +### New Endpoints |
| 62 | +- `GET /api/sync/:dbId/:personId/multi-platform-compare` - Get full multi-platform comparison |
| 63 | +- `POST /api/sync/:dbId/:personId/refresh-provider/:provider` - Refresh data from specific provider |
| 64 | + |
| 65 | +## Technical Details |
| 66 | + |
| 67 | +### Provider Cache Structure |
| 68 | +Provider data is now cached in a unified structure: |
| 69 | +``` |
| 70 | +data/provider-cache/ |
| 71 | + familysearch/{fsId}.json |
| 72 | + ancestry/{externalId}.json |
| 73 | + wikitree/{externalId}.json |
| 74 | +``` |
| 75 | + |
| 76 | +### Comparison Algorithm |
| 77 | +- FamilySearch serves as the baseline (primary source) |
| 78 | +- Field comparison uses fuzzy matching for places (contains check) |
| 79 | +- Alternate names are sorted alphabetically before comparison to avoid false differences |
| 80 | +- Missing values are distinguished from empty values |
| 81 | + |
| 82 | +### Provider Data Table (v0.5.2) |
| 83 | +- New unified `ProviderDataTable` component replacing `UnifiedPlatformSection` |
| 84 | +- SparseTree shown as primary row with all provider data below |
| 85 | +- Columns: Source, Photo, Name, Birth, Death, Father, Mother, Children, AKA, Occupations, Status, Actions |
| 86 | +- Photo thumbnails with hover "Use Photo" overlay |
| 87 | +- Download buttons now include photo fetching automatically |
| 88 | +- Upload to FamilySearch dialog with photo upload option via Playwright automation |
| 89 | + |
| 90 | +### Compact Header & Vitals (v0.5.2) |
| 91 | +- Redesigned header: smaller photo (24x24), inline edit button next to name |
| 92 | +- IDs shown inline without expand/collapse toggle |
| 93 | +- Vital events condensed to single row (Birth • Death • Burial) |
| 94 | +- Parents and children shown in compact row below vitals |
| 95 | +- Also Known As names now alphabetically sorted |
| 96 | + |
| 97 | +### Parent Provider ID Discovery (v0.5.3) |
| 98 | +- Automatically discover and link provider-specific IDs for a person's parents |
| 99 | +- Scraper `extractParentIds` method added to FamilySearch, Ancestry, and WikiTree scrapers |
| 100 | +- Parent discovery service with name matching (accent normalization, partial match) |
| 101 | +- Single-person discovery and BFS ancestor traversal modes |
| 102 | +- API endpoints: `POST /api/sync/:dbId/:personId/discover-parents/:provider` and `discover-ancestors/:provider` |
| 103 | +- Discover buttons in ProviderDataTable with per-row and "Discover All" BFS options |
| 104 | +- `parentsNeedDiscovery` field on provider links for smart UI hints |
| 105 | + |
| 106 | +### Ancestry Photo Upload (v0.5.3) |
| 107 | +- Upload local photos to Ancestry via Playwright browser automation |
| 108 | +- `ancestry-upload.service.ts`: compare, upload, auto-login with stored credentials |
| 109 | +- `UploadToAncestryDialog.tsx`: emerald-themed upload dialog with photo preview |
| 110 | +- API endpoints: `compare-for-ancestry-upload` and `upload-to-ancestry` |
| 111 | +- Upload button on Ancestry row in ProviderDataTable |
| 112 | + |
| 113 | +### Login Polling Fix (v0.5.3) |
| 114 | +- Replaced fixed 5-second `waitForTimeout` after login submit with 500ms polling loop |
| 115 | +- Google OAuth and fast logins now detected within ~500ms instead of waiting full 5 seconds |
| 116 | +- Polls `checkLoginStatus` and error indicators every 500ms, up to 15s max timeout |
| 117 | +- Applies to all providers using `performLoginWithSelectors` (FamilySearch, Ancestry, WikiTree, 23andMe) |
| 118 | + |
| 119 | +### Dead Code Removal (v0.5.3) |
| 120 | +- Deleted `UnifiedPlatformSection.tsx` (superseded by ProviderDataTable) |
| 121 | + |
| 122 | +### Data Integrity Page + Bulk Discovery (v0.5.4) |
| 123 | +- Database maintenance dashboard at `/db/:dbId/integrity` with summary cards and tabbed interface |
| 124 | +- Integrity service: provider coverage gaps, parent linkage gaps, orphaned edges, stale cache detection |
| 125 | +- Bulk discovery service: database-wide automated parent ID discovery with SSE progress and cancellation |
| 126 | +- Parents tab: provider selector, "Discover All" button with real-time progress bar |
| 127 | +- Coverage tab: persons with incomplete provider links shown with linked/missing badges |
| 128 | +- Orphans tab: broken parent edges with missing person indicators |
| 129 | +- Stale tab: configurable age threshold with color-coded staleness |
| 130 | +- API endpoints at `/api/integrity/:dbId` for all checks and bulk operations |
| 131 | +- Sidebar nav item with ShieldCheck icon under each database |
| 132 | + |
| 133 | +## Full Changelog |
| 134 | + |
| 135 | +**Full Diff**: https://github.com/atomantic/SparseTree/compare/v0.4.16...v0.5.0 |
0 commit comments