# BREEDR Development Roadmap ## ✅ Phase 1: Foundation (COMPLETE) ### Infrastructure - [x] Docker multi-stage build configuration - [x] SQLite database with automatic initialization - [x] Express.js API server - [x] React 18 frontend with Vite - [x] Git repository structure ### Database Schema - [x] Dogs table with core fields (NO sire/dam columns) - [x] Parents relationship table for sire/dam tracking - [x] Litters breeding records - [x] Health records tracking - [x] Heat cycles management - [x] Traits genetic mapping - [x] Indexes and triggers - [x] **litter_id column** for linking puppies to litters - [x] **Clean schema design** - NO migrations, fresh init only - [x] **Safe ALTER TABLE migration guards** - new columns added automatically on upgrade ### API Endpoints - [x] `/api/dogs` - Full CRUD operations (incl. `is_champion`) - [x] `/api/pedigree` - Tree generation and COI calculator - [x] `/api/litters` - Breeding records - [x] `/api/health` - Health tracking - [x] `/api/breeding` - Heat cycles and whelping calculator - [x] `/api/settings` - Kennel configuration (GET/PUT) - [x] Photo upload with Multer - [x] **Parent relationship handling** via parents table - [x] `/static/*` - Branding and static asset serving --- ## ✅ Phase 2: Core Functionality (COMPLETE) ### Dog Management - [x] Add new dogs with full form - [x] Edit existing dogs - [x] View dog details - [x] List all dogs with search/filter - [x] Upload multiple photos per dog - [x] Delete photos - [x] Parent selection (sire/dam) via parents table - [x] **Proper error handling** for API failures ### User Interface - [x] Dashboard with statistics - [x] Dog list with grid view - [x] Dog detail pages - [x] Modal forms for add/edit - [x] Photo management UI - [x] Search and sex filtering - [x] Responsive navigation - [x] **Compact info cards** (80x80 avatars) - [x] **Modern dark theme** with glass morphism - [x] **Custom brand logo** (br-logo.png) in navbar - [x] **Gold-to-rusty-red gradient** on BREEDR brand title - [x] **Static asset serving** via Express `/static` route - [x] **Vite dev proxy** for `/static` routes - [x] **Route fix** - static/uploads don't fall through to React router - [x] **Logo aspect ratio** fixed to 1:1 square ### Features Implemented - [x] Photo upload and storage - [x] Parent-child relationships (via parents table) - [x] Basic information tracking - [x] Registration numbers - [x] Microchip tracking (optional) - [x] **Litter linking** with litter_id - [x] **Clean database schema** with no migrations --- ## ✅ Phase 3: Breeding Tools (COMPLETE) ### Pedigree & Genetics - [x] **Interactive pedigree tree visualization** - [x] Integrate React-D3-Tree - [x] Show 3-5 generations - [x] Click to navigate - [x] Zoom and pan controls - [x] Beautiful color-coded nodes - [x] Male/Female distinction - [x] **Litter Management** ✅ - [x] Create litter records - [x] Link puppies to litter - [x] Track whelping details - [x] Auto-link parent relationships - [x] Database migration for litter_id - [x] Enhanced API endpoints - [x] Dual parent selection mode (litter/manual) - [x] UI fix for proper layout and error handling - [x] **Trial Pairing Simulator** ✅ *(March 9, 2026)* - [x] Sire and dam selection dropdowns - [x] COI calculation display with color coding - [x] Common ancestors table (sire-gen / dam-gen columns) - [x] Risk badge: Low (<5%) / Moderate (5-10%) / High (>10%) - [x] `/pairing` route + navbar link - [x] `POST /api/pedigree/trial-pairing` backend - [x] **Heat Cycle Calendar** ✅ *(March 9, 2026)* - [x] Full month grid calendar (Sun–Sat) with prev/next navigation - [x] Color-coded day cells by cycle phase - [x] Start Heat Cycle modal (female dropdown + date picker) - [x] Cycle Detail modal with phase breakdown - [x] Breeding date logging inline - [x] Whelping estimate (earliest/expected/latest) - [x] Active cycles list with phase badge + day counter - [x] `GET /api/breeding/heat-cycles` endpoint - [x] `GET /api/breeding/heat-cycles/:id/suggestions` endpoint - [x] **Projected Whelping Calendar Identifier** ✅ *(March 9, 2026 − v0.5.1)* - [x] Gestation constants: earliest=58, expected=63, latest=65 days - [x] `getWwhelpDates(cycle)` client-side helper (no extra API call) - [x] Indigo whelp window cells (days 58–63) on calendar grid - [x] Indigo dot marker on expected whelp day (day 63) - [x] `Baby` icon + "[Name] due" label inside whelp day cells - [x] "Whelp est. [date]" row with range on active cycle cards - [x] Jump-to-whelp-month button on active cycle cards - [x] Live whelp preview in Cycle Detail modal (client-side, instant) - [x] Full-width whelping banner when projected whelps exist - [x] "Projected Whelp" legend entry with Baby icon - [x] Updated page subtitle to include whelping dates --- ## ✅ Phase 4a: Champion & Settings (COMPLETE − v0.6.0) ### Champion Bloodline Tracking - [x] `is_champion INTEGER DEFAULT 0` column on `dogs` table - [x] Safe `ALTER TABLE dogs ADD COLUMN is_champion` migration guard - [x] `is_champion` included in all `GET /api/dogs` + `GET /api/dogs/:id` responses - [x] `is_champion` persisted in `POST` and `PUT /api/dogs` - [x] `is_champion` included on sire/dam JOIN queries and offspring query - [x] Champion toggle checkbox in `DogForm` with amber-gold highlight + `Award` icon - [x] `✪` suffix on champion names in sire/dam parent dropdowns - [x] Champion Bloodline badge on offspring cards and dog detail pages ### Kennel Settings - [x] `settings` table: `kennel_name`, `kennel_tagline`, `kennel_address`, `kennel_phone`, `kennel_email`, `kennel_website`, `kennel_akc_id`, `kennel_breed`, `owner_name` - [x] Safe `ALTER TABLE settings ADD COLUMN` migration loop for all kennel fields - [x] Auto-seed default row (`kennel_name = 'BREEDR'`) if table is empty - [x] `GET /api/settings` − returns single-row as flat JSON object - [x] `PUT /api/settings` − partial update via `ALLOWED_KEYS` whitelist - [x] `SettingsProvider` / `useSettings` React context hook - [x] Kennel name displayed in navbar from settings - [x] `SettingsPage` component for editing kennel info ### Build & Runtime Fixes (v0.6.0) - [x] `useSettings.js` → `useSettings.jsx` − Vite build failed because JSX in `.js` file - [x] `server/index.js` − `initDatabase()` called with no args (was passing `DB_PATH`, now path is internal) - [x] `server/index.js` − removed duplicate `app.get('/api/health')` inline route - [x] `server/index.js` − `DATA_DIR` env var replaces `path.dirname(DB_PATH)` for directory creation - [x] `server/routes/settings.js` − rewrote from double-encoded base64 + old key/value schema to correct single-row column schema --- ## 📋 Phase 4b: Health & Genetics (NEXT UP − v0.7.0) > **Context:** Golden Retriever health clearances follow GRCA Code of Ethics and OFA/CHIC standards. > This phase builds a structured, breed-aware health tracking system aligned with those requirements. ### Tier 1 — OFA Health Clearances *(Priority 1)* 🩺 The four GRCA-required clearances that must be on record in the public OFA database before breeding. **Database (schema additions to `health_records` table):** - [ ] Add `test_type` ENUM-style field: `hip_ofa`, `hip_pennhip`, `elbow_ofa`, `heart_ofa`, `heart_echo`, `eye_caer`, `thyroid_ofa`, `dna_panel` - [ ] Add `result` field: `pass`, `fail`, `carrier`, `clear`, `excellent`, `good`, `fair`, `borderline` - [ ] Add `ofa_number` VARCHAR — official OFA certification number - [ ] Add `chic_number` VARCHAR — CHIC certification number (dog-level field on `dogs` table) - [ ] Add `performed_by` VARCHAR — vet or specialist name - [ ] Add `expires_at` DATE — for annually-renewed tests (eyes, heart) - [ ] Add `document_url` VARCHAR — path to uploaded PDF/image - [ ] Safe ALTER TABLE migration guards for all new columns **API:** - [ ] `GET /api/health/:dogId` — list all health records for a dog - [ ] `POST /api/health` — create health record - [ ] `PUT /api/health/:id` — update health record - [ ] `DELETE /api/health/:id` — delete health record - [ ] `GET /api/health/:dogId/clearance-summary` — returns pass/fail/missing for all 4 OFA tiers - [ ] `GET /api/health/:dogId/chic-eligible` — returns boolean + missing tests **UI Components:** - [ ] `HealthRecordForm` modal — test type dropdown, result, OFA#, date, performed-by, expiry, document upload - [ ] `HealthTimeline` component — chronological list of all health events per dog on DogDetail page - [ ] `ClearanceSummaryCard` — shows OFA Hip / Elbow / Heart / Eyes status in a 2x2 grid with color badges (green=pass, yellow=expiring, red=missing/fail) - [ ] `ChicStatusBadge` — amber badge on dog cards and DogDetail if CHIC number is on file - [ ] Expiry alert: yellow badge on dog card if any annual test expires within 90 days; red if expired - [ ] Document upload support (PDF/image) tied to individual health records **Clearance Tiers Tracked:** | Test | OFA Minimum Age | Renewal | Notes | |---|---|---|---| | Hip Dysplasia | 24 months | Once (final) | OFA eval or PennHIP | | Elbow Dysplasia | 24 months | Once (final) | OFA eval | | Cardiac (Heart) | 12 months | Annual recommended | Echo preferred over auscultation | | Eyes (CAER) | 12 months | **Annual** | Board-certified ACVO ophthalmologist | | Thyroid (OFA) | 12 months | Annual recommended | Bonus/Tier 2 | **Complexity:** Medium | **Impact:** High | **User Value:** Excellent **Estimated Time:** 8–10 hours --- ### Tier 2 — DNA Genetic Panel *(Priority 2)* 🧬 Embark or equivalent panel results per dog. Allows carrier × clear pairing without producing affected offspring. **Database:** - [ ] `genetic_tests` table: `id`, `dog_id`, `test_provider` (embark/optigen/etc), `test_name`, `result` (clear/carrier/affected), `test_date`, `document_url`, `created_at` - [ ] Safe `CREATE TABLE IF NOT EXISTS` guard **Golden Retriever Panel — Key Markers:** - [ ] PRA1 (Progressive Retinal Atrophy type 1) - [ ] PRA2 (Progressive Retinal Atrophy type 2) - [ ] prcd-PRA (Progressive Rod-Cone Degeneration) - [ ] ICH1 / ICH2 (Ichthyosis — very common in Goldens) - [ ] NCL (Neuronal Ceroid Lipofuscinosis — fatal neurological) - [ ] DM (Degenerative Myelopathy) - [ ] MD (Muscular Dystrophy) - [ ] GR-PRA1, GR-PRA2 (Golden-specific PRA variants) **API:** - [ ] `GET /api/genetics/:dogId` — list all genetic test results - [ ] `POST /api/genetics` — add genetic result - [ ] `PUT /api/genetics/:id` — update - [ ] `DELETE /api/genetics/:id` — delete - [ ] `GET /api/genetics/pairing-risk?sireId=&damId=` — returns at-risk combinations for a trial pairing **UI Components:** - [ ] `GeneticTestForm` modal — provider, marker, result (clear/carrier/affected), date, upload - [ ] `GeneticPanelCard` on DogDetail — color-coded grid of all markers (green=clear, yellow=carrier, red=affected, gray=not tested) - [ ] Pairing risk overlay on Trial Pairing Simulator — flag if sire+dam are both carriers for same marker - [ ] "Not Tested" indicator on dog cards when no DNA panel on file **Complexity:** Medium | **Impact:** High | **User Value:** Excellent **Estimated Time:** 6–8 hours --- ### Tier 3 — Cancer Lineage & Longevity Tracking *(Priority 3)* 📊 Golden Retrievers have ~60% cancer mortality rate. Lineage-based cancer history is a major differentiator for responsible breeders. **Database:** - [ ] `cancer_history` table: `id`, `dog_id`, `cancer_type`, `age_at_diagnosis`, `age_at_death`, `cause_of_death`, `notes`, `created_at` - [ ] Add `age_at_death` and `cause_of_death` optional fields to `dogs` table **API:** - [ ] `GET /api/health/:dogId/cancer-history` - [ ] `POST /api/health/cancer-history` - [ ] `GET /api/pedigree/:dogId/cancer-lineage` — walks ancestors and returns cancer incidence summary **UI:** - [ ] Longevity section on DogDetail — age at death, cause of death - [ ] Cancer lineage indicator on Trial Pairing Simulator — "X of 8 ancestors had cancer history" - [ ] Optional cancer history entry on DogForm **Complexity:** Low-Medium | **Impact:** Medium | **User Value:** High (differentiator) **Estimated Time:** 4–5 hours --- ### Tier 4 — Breeding Eligibility Checker *(Priority 4)* ✅ Automatic litter eligibility gate based on health clearance status of sire and dam. **Logic:** - [ ] Dog is "GRCA eligible" if: Hip OFA ✅ + Elbow OFA ✅ + Heart ✅ + Eyes (non-expired) ✅ + age ≥ 24 months - [ ] Dog is "CHIC eligible" if all four tests are in OFA public database (CHIC number on file) - [ ] Warning flags in Trial Pairing Simulator if sire or dam is missing required clearances - [ ] Block litter creation (with override) if either parent fails eligibility check **UI:** - [ ] Eligibility badge on dog cards: `GRCA Eligible` (green) / `Incomplete` (yellow) / `Not Eligible` (red) - [ ] Eligibility breakdown tooltip on hover — shows which tests are missing - [ ] Pre-litter warning modal when creating a litter with non-eligible parents - [ ] CHIC number field + verification note on DogDetail **Complexity:** Low | **Impact:** High | **User Value:** Excellent **Estimated Time:** 3–4 hours --- ## 📋 Phase 5: Advanced Features (PLANNED) ### Pedigree Tools - [ ] Reverse pedigree (descendants view) - [ ] PDF pedigree generation - [ ] Export to standard formats - [ ] Print-friendly layouts - [ ] Multi-generation COI analysis ### Breeding Planning - [ ] Heat cycle predictions (based on cycle history) - [ ] Expected whelping alerts / push notifications - [ ] Breeding history reports - [ ] iCal export for cycle events ### Search & Analytics - [ ] Advanced search filters - [ ] By breed, color, age - [ ] By health clearances - [ ] By registration status - [ ] Statistics dashboard - [ ] Breeding success rates - [ ] Average litter sizes - [ ] Popular pairings --- ## 📋 Phase 6: Polish & Optimization (PLANNED) ### User Experience - [ ] Loading states for all operations - [ ] Better error messages - [ ] Confirmation dialogs - [ ] Undo functionality - [ ] Keyboard shortcuts ### Performance - [ ] Image optimization - [ ] Lazy loading - [ ] API caching - [ ] Database query optimization ### Mobile - [ ] Touch-friendly interface - [ ] Mobile photo capture - [ ] Responsive tables - [ ] Offline mode ### Documentation - [x] DATABASE.md - Complete schema documentation - [x] User-facing documentation - [ ] API documentation - [ ] Video tutorials - [ ] FAQ section --- ## Future / Extended Features (BACKLOG) ### Progesterone Tracking *(Moved from Phase 3)* - [ ] Log progesterone level readings per heat cycle - [ ] Chart progesterone curve over cycle days - [ ] LH surge detection - [ ] Optimal breeding day prediction from levels ### Multi-User Support - [ ] User authentication - [ ] Role-based permissions - [ ] Activity logs - [ ] Shared access ### Integration - [ ] Import from other systems - [ ] Export to Excel/CSV - [ ] Integration with kennel clubs - [ ] Backup to cloud storage - [ ] OFA database lookup by registration number ### Advanced Genetics - [ ] DNA test result tracking (full Embark import) - [ ] Genetic diversity analysis - [ ] Breed-specific calculators - [ ] Health risk predictions ### Kennel Management - [ ] Breeding contracts - [ ] Buyer tracking - [ ] Financial records - [ ] Stud service management --- ## 🏃 Current Sprint: v0.7.0 (Phase 4b) ### ✅ Completed This Sprint (v0.6.0) - [x] `is_champion` flag − DB column, API, DogForm toggle, offspring badge, parent dropdown `✪` - [x] Kennel Settings − `settings` table with all kennel fields, `GET/PUT /api/settings`, `SettingsProvider`, navbar kennel name - [x] `useSettings.jsx` rename (Vite build fix) - [x] `server/index.js` fix − `initDatabase()` no-arg, duplicate health route removed - [x] `server/routes/settings.js` rewrite: double-encoded base64 + wrong schema fixed ### ✅ Previously Completed (v0.5.1) - [x] Projected Whelping Calendar Identifier − indigo whelp window cells, due label, active card range, jump-to-month button - [x] Live whelp preview in Cycle Detail modal (client-side, no save required) - [x] Full-width whelping banner for months with projected whelps - [x] "Projected Whelp" legend entry + updated page subtitle ### 🔜 Next Up — Phase 4b Build Order #### Step 1: DB Schema Extensions - [ ] Extend `health_records` table with OFA-specific columns (test_type, result, ofa_number, chic_number, expires_at, document_url) - [ ] Create `genetic_tests` table (PRA, ICH, NCL, DM, MD, GR-PRA variants) - [ ] Create `cancer_history` table - [ ] Add `chic_number`, `age_at_death`, `cause_of_death` to `dogs` table - [ ] All changes via safe ALTER TABLE / CREATE TABLE IF NOT EXISTS guards #### Step 2: API Layer - [ ] `GET|POST|PUT|DELETE /api/health/:dogId` (OFA records) - [ ] `GET /api/health/:dogId/clearance-summary` - [ ] `GET /api/health/:dogId/chic-eligible` - [ ] `GET|POST|PUT|DELETE /api/genetics/:dogId` - [ ] `GET /api/genetics/pairing-risk` (sire + dam carrier check) - [ ] Cancer history endpoints #### Step 3: Core UI — Health Records - [ ] `HealthRecordForm` modal (test type, result, OFA#, expiry, doc upload) - [ ] `HealthTimeline` on DogDetail page - [ ] `ClearanceSummaryCard` 2×2 grid (Hip / Elbow / Heart / Eyes) - [ ] `ChicStatusBadge` on dog cards - [ ] Expiry alert badges (90-day warning, expired) #### Step 4: Core UI — Genetics Panel - [ ] `GeneticTestForm` modal - [ ] `GeneticPanelCard` on DogDetail (color-coded markers) - [ ] Pairing risk overlay on Trial Pairing Simulator #### Step 5: Eligibility Checker - [ ] Eligibility logic (`grca_eligible`, `chic_eligible` computed fields) - [ ] Eligibility badge on dog cards - [ ] Pre-litter eligibility warning modal #### Step 6: Cancer / Longevity (Stretch) - [ ] Cancer history form + lineage summary on Trial Pairing page - [ ] Age at death / cause of death on DogDetail ### Testing Needed - [x] Add/edit dog forms with litter selection - [x] Database schema initialization - [x] Pedigree tree rendering - [x] Zoom/pan controls - [x] UI layout fixes - [x] Error handling for API failures - [x] Parent relationship creation via parents table - [x] Brand logo display and sizing - [x] Gradient title rendering - [x] Static asset serving in prod and dev - [ ] Champion toggle − DogForm save/load round-trip - [ ] Champion badge − offspring card display - [ ] Kennel settings − save + navbar name update - [ ] Trial pairing simulator (end-to-end) - [ ] Heat cycle calendar (start cycle, detail modal, whelping) - [ ] Projected whelping calendar identifier (whelp cells, due label, banner) - [ ] Health records — OFA clearance CRUD - [ ] Genetic panel — DNA marker entry and display - [ ] Eligibility checker — badge and litter gate ### Known Issues - None currently --- ## How to Contribute 1. Pick a feature from "Next Up" above 2. Create a feature branch off `master`: `feat/feature-name` 3. Implement with tests 4. Update this roadmap and README.md 5. Submit PR for review ## Version History - **v0.7.0** (In Progress) - Phase 4b: Health & Genetics - OFA clearance tracking (Hip, Elbow, Heart, Eyes + CHIC number) - DNA genetic panel (PRA, ICH, NCL, DM, MD variants) - Cancer lineage & longevity tracking - Breeding eligibility checker (GRCA + CHIC gates) - **v0.6.0** (March 9, 2026) - Champion Bloodline, Settings, Build Fixes - `is_champion` flag on dogs table with ALTER TABLE migration guard - Champion toggle in DogForm; `✪` suffix in parent dropdowns; offspring badge - Kennel settings table + `GET/PUT /api/settings` + `SettingsProvider` - `useSettings.jsx` rename (Vite build fix) - `server/index.js` fix: `initDatabase()` no-arg, duplicate health route removed - `server/routes/settings.js` rewrite: double-encoded base64 + wrong schema fixed - **v0.5.1** (March 9, 2026) - Projected Whelping Calendar Identifier - Indigo whelp window cells (days 58–65) on month grid - Indigo dot marker on exact expected whelp day (day 63) - `Baby` icon + "[Name] due" label in whelp day cells - "Whelp est." range row on active cycle cards - Jump-to-whelp-month button on cycle cards - Live whelp preview in Cycle Detail modal (client-side, instant) - Full-width whelping banner when projected whelps exist - "Projected Whelp" legend entry + updated page subtitle - **v0.5.0** (March 9, 2026) - Breeding Tools Complete - Trial Pairing Simulator: COI calculator, risk badge, common ancestors - Heat Cycle Calendar: month grid, phase color coding, start-cycle modal - Cycle Detail: breeding windows, inline breeding date, whelping estimate - New API: `GET /heat-cycles`, `GET /heat-cycles/:id/suggestions` - Progesterone tracking moved to extended backlog - **v0.4.1** (March 9, 2026) - Branding & Header Improvements - Custom br-logo.png in navbar - Gold-to-rusty-red gradient title - Static asset serving via Express - Vite dev proxy for /static - Route fix for static/uploads paths - Logo 1:1 aspect ratio fix - **v0.4.0** (March 9, 2026) - Clean Database Schema - Complete database overhaul with clean normalized design - Removed migrations, fresh init only - Parents table for relationships - Comprehensive documentation - **v0.3.1** - UI Fixes & Error Handling - Fixed blank screen issue on Add Dog modal - Improved parent selection layout - Added comprehensive error handling - Enhanced visual design with proper spacing - **v0.3.0** - Litter Management & Interactive Pedigree - Added litter_id to dogs table - Implemented LitterForm component - Created PedigreeView with React-D3-Tree - Enhanced DogForm with dual parent selection - Fixed "no such column: sire" error - Added comprehensive documentation - **v0.2.0** - Dog CRUD operations complete - **v0.1.0** - Initial foundation with API and database