feat: teeth tracker, feeding analysis, sidebar groups, timeline polish

Features:
- Teeth tracker: Tooth model + migration, API routes (GET/POST upsert/DELETE),
  page at /teeth with 20-tooth grid, progress bar, inline mark/unmark flow
- Dashboard feeding analysis: avg interval + last feed + next expected time widget
- Fix dashboard baby?.name crash (selectedBaby?.name)

UI/UX:
- Sidebar: grouped into Suivi / Santé / Vie du bébé / Outils sections
- Nav: active highlight works on child routes (startsWith)
- Timeline: filter chips sticky on mobile; skeleton cards replace spinner
- Stats: 500-event limit warning banner
- Medications: 3 states — "Dans Xh" (orange), "Disponible" (green), "En retard de Xh" (amber)
- Notes: skip auto-save on empty/whitespace blur

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-15 21:51:32 +02:00
parent 8bb048ff56
commit cd3efa98fc
11 changed files with 596 additions and 25 deletions
@@ -0,0 +1,18 @@
-- CreateTable
CREATE TABLE "Tooth" (
"id" TEXT NOT NULL,
"babyId" TEXT NOT NULL,
"code" TEXT NOT NULL,
"appearedAt" TIMESTAMP(3) NOT NULL,
"notes" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Tooth_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "Tooth_babyId_code_key" ON "Tooth"("babyId", "code");
-- AddForeignKey
ALTER TABLE "Tooth" ADD CONSTRAINT "Tooth_babyId_fkey" FOREIGN KEY ("babyId") REFERENCES "Baby"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+14
View File
@@ -136,6 +136,7 @@ model Baby {
vaccinations Vaccination[]
medicationReminders MedicationReminder[]
milkStocks MilkStock[]
teeth Tooth[]
createdAt DateTime @default(now())
}
@@ -279,3 +280,16 @@ model MedicationReminder {
lastSentAt DateTime?
createdAt DateTime @default(now())
}
model Tooth {
id String @id @default(cuid())
babyId String
baby Baby @relation(fields: [babyId], references: [id], onDelete: Cascade)
code String
appearedAt DateTime
notes String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([babyId, code])
}