Commit Graph

10 Commits

Author SHA1 Message Date
fireshaper 5dcaf9d04b Cohesion pass: litter lifecycle, show history, edit parents, UI polish
- Litters split into Expecting/Kindled; Record Kindle generates kits (farm
  and breed filled in), and kindle-date/parent edits move existing kits
- Litter detail: Record Kindle/Add Kit, Edit, Delete; due/wean projections
- Rabbit detail: section cards, status select, show results from events
- Edit Rabbit: re-link sire/dam (grandparents come from parents' records)
- Herd search matches ear number and color; quick search shows status
- Settings split into shared Rabbitry and per-user Preferences
- Shared LoadError, Button `to` prop, responsive read-only pedigree
- Genetics hidden from nav for now
- Parent autocomplete popup stacks above the action bar and drops up
  when there's no room below

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:27:01 -04:00
fireshaper 990c703bb2 AI pedigree scanning, reusable ancestors, rabbit merge and delete
Pedigree scanning
- Replace the Tesseract OCR pipeline with server-side Claude vision
  (claude-opus-5-5, structured output) that reads any layout, printed or
  handwritten, into the subject + 14 ancestors with per-field uncertainty
- New POST/GET /api/pedigree-scan; enabled by ANTHROPIC_API_KEY in .env
- Add Rabbit step 1: "Scan a pedigree" card, photo review panel, "Check"
  badges on uncertain ancestors, sire/dam herd matching
- Remove vendored Tesseract assets and OCR libs; bump SW cache to v2
- nginx /api read timeout raised to 180s for slow scans

Ancestors
- Manual ancestors default to 3 lbs and Unknown DOB (legacy 0 lbs read as
  3); weight/DOB shown in the tree and on Review
- On save, ancestors entered as text become linked rabbit records
  (status Other), deduped by ear number or name + farm

Existing rabbits
- Adding a rabbit that already exists tops up the existing record: fills
  empty fields, adds missing ancestors, promotes reference ancestors; never
  overwrites. Review step warns beforehand
- Delete button on rabbit detail; delete snapshots full ancestor JSON to
  offspring, clears litter links and timeline events, and is blocked while
  the rabbit has show entries

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:29:06 -04:00
fireshaper 5d29e2b370 Rework Add Rabbit flow for mobile and clarity
- Pedigree renders as stacked Sire/Dam sections below 1280px instead of a
  sideways-scrolling tree; larger touch targets in the ancestor popup
- Step lives in ?step= so the back gesture moves between steps; sticky
  Back/Next/Save bar and a clickable stepper; beforeunload guard
- Steps stay mounted, fixing pedigree entries lost when going back
- Review shows formatted values, hides empty rows, per-section Edit links
- Failed photo upload after create now lands on the new rabbit with a
  notice instead of allowing a duplicate save
- Details form: primary fields first, secondary fields collapsible on
  Add, name error only after a Next attempt; "Use as color name" button

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:05:35 -04:00
fireshaper afff8388b0 Polish layout for mobile and desktop
- Mobile bottom nav: icons, 56px targets, safe-area padding, and a
  "More" menu so Genetics/Shows/Settings are reachable on phones
- Sticky sidebar, max-width content column, min-w-0 so wide children
  (pedigree tree, tables) scroll in place instead of widening the page
- PageHeader owns no gutter and stacks actions on small screens; pages
  share one flex/gap structure and a consistent loading header
- 16px inputs on mobile to stop iOS focus zoom; disabled button styling
- Remove placeholder "0 litters / 0 kits" on rabbit cards, duplicate
  name on Rabbit Detail; proper Genetics placeholder and 404 pages

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:42:14 -04:00
fireshaper 9d45911934 updated dashboard tiles 2026-07-02 16:56:58 -04:00
fireshaper 2a0e347a19 Add user accounts with first-run onboarding and per-user preferences
Replaces the optional shared-password auth (AUTH_PASSWORD env var,
in-memory sessions) with account-based auth: a users table (scrypt
password hashes via node:crypto — no native dep), SQLite-backed sessions
that survive restarts, a one-time setup screen that creates the first
account, and a Settings → Users card for adding/removing users and
resetting passwords (everyone equal, shared herd — no roles).

Theme and weight-unit become per-user preferences behind the unchanged
/api/settings shape (NULL inherits the global value); rabbitry name, kit
prefix, and default breed stay shared. Failed logins get a flat 350 ms
delay and timing-safe comparison. MYKINDLEBOX_PASSWORD is retired —
upgrading deployments see the setup screen once, data untouched.

Also: configurable host port (MYKINDLEBOX_PORT), compose healthcheck
gating nginx on API readiness, nginx body-size headroom for 10 MB
imports, server .dockerignore hardening, ESLint ignore for vendored
tesseract assets, react-hooks rule fixes, exact tesseract.js pin with SW
cache-upgrade contract and failure-isolated precache, and OCR date
parsing fixes (2-digit-year pivot, impossible-date rejection).

Design doc: memory-bank/FEATURE_User_Accounts.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 16:38:16 -04:00
fireshaper b811b5c1a2 Pedigree OCR and Docker 2026-07-02 14:38:16 -04:00
fireshaper 99a1c65c9f Update PedigreeTree and RabbitDetail components for improved ear number handling and display 2026-06-25 23:34:48 -04:00
fireshaper 4544aa8060 Add ARBA Shows feature (browse, events, entries, judges, placements)
Adds a self-hosted Shows section that scrapes the ARBA show-search
listing and lets the user build show events, enter herd rabbits, and
track judges and placements.

Server:
- lib/arba.ts: Cloudflare-aware scraper + normalizer (cheerio), US-only,
  cavy-excluded; cached in arba_shows_cache (re-scrape when >24h stale or
  on demand). Rows are read from server-rendered Ninja Tables cells.
- routes/shows.ts: cached ARBA listing + force refresh.
- routes/showEvents.ts: event CRUD, ARBA-show snapshots, entries, judges,
  placements (PUT upsert), and the plain-text entries report.
- schema: show_events, show_event_shows, show_event_entries,
  show_event_judges, show_event_placements; breed column on rabbits.
- migrations 0007-0010.

Client:
- /shows browser with filters + 'Add to Event'.
- /shows/events list + detail with Shows / Entries / Results tabs,
  rabbit picker, inline class/notes, placement entry, and report modal.
- breed surfaced in add/edit/detail/review.

Also folds in two previously-uncommitted bodies of work that share
schema.ts / index.ts / api.js with the above and can't be split out
cleanly: the rabbit timeline (rabbit_events, migrations 0004-0006,
routes/events.ts, RabbitTimeline) and the breed-select / default-breed
herd work (BreedSelect, lib/breeds.js, settings default_breed).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 23:13:30 -04:00
fireshaper c961e48953 Initial commit: MyKindlebox rabbitry management app
React + Vite client and Express + SQLite/Drizzle server, plus
memory-bank design docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 23:29:56 -04:00