PWA mobile-first. Suivi bébé partagé entre deux parents : biberons, couches, sommeil, soins, température, notes. Synchro temps réel via Supabase.
Démo : https://bibou-alpha.vercel.app/landing.
Inscriptions désactivées. Pas de création de compte publique sur l'instance de démo. L'idéal : déploie ta propre instance sur Supabase + Vercel (paliers gratuits suffisants pour deux parents) pour garder le contrôle total sur les données de bébé. Données isolées par Row Level Security dans ton propre projet Supabase. Voir installation ci-dessous.
Contributeurs : doc dev (anglais) dans
docs/. Architecture, schéma DB, guide pour ajouter un type d'événement.
- Next.js 15 (App Router), React 19, TypeScript.
- Tailwind v4 + DaisyUI. Modes
bibou-light/bibou-dark, 5 palettes (sable,brume,pêche,forêt,lavande). - Supabase (Postgres + Auth + Realtime) via
@supabase/ssr. - Recharts pour les stats. Export CSV.
- Vitest pour les tests.
- Service worker + manifest. PWA installable.
git clone https://github.com/axelbellec/bibou.git
cd bibou
pnpm install
cp .env.example .env.local- supabase.com → New project. Note l'URL et la
clé
publishable(Settings → API). - Authentication → Providers → Email → décoche Enable email signups.
- Authentication → Users → Add user → crée les 2 comptes (toi et l'autre parent). Note les UUID.
Dans le SQL Editor, exécute les fichiers de
supabase/migrations/ dans l'ordre numérique. Crée
les tables, active RLS et Realtime sur les 6 tables d'événements.
Dans le SQL Editor, colle supabase/seed.sql et
remplace <UUID_PARENT_X> par les UUID de l'étape 2 :
with new_family as (
insert into public.families (name, baby_name, baby_birth_date)
values ('Famille Bibou', 'Bibou', '2026-04-01')
returning id
)
insert into public.family_members (family_id, user_id, display_name)
select id, parent.user_id, parent.display_name
from new_family,
(values
('<UUID_PARENT_1>'::uuid, 'Papa'),
('<UUID_PARENT_2>'::uuid, 'Maman')
) as parent(user_id, display_name);NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...
pnpm devhttp://localhost:3000. Login avec un compte Supabase.
git pushsur GitHub.- vercel.com → Add new project, importe le repo.
- Ajoute les 2 variables dans Settings → Environment Variables.
- Deploy. Vercel détecte Next.js.
- Sur téléphone, ouvre l'URL puis Ajouter à l'écran d'accueil (Safari iOS, Chrome Android) pour installer la PWA.
Une table Postgres par catégorie : bottles, diapers, cares, sleeps,
temperatures, notes. Champs communs : family_id, created_by,
occurred_at, notes (sauf notes qui a content). Champ spécifique par
catégorie (amount_ml, types[], duration_min, celsius, content).
Côté front, tout est aplati dans un AppEvent[] discriminé par category.
Détails : docs/database.md,
docs/architecture.md.
Pas de signup public. Login fait uniquement signInWithPassword. Pour
ajouter un membre (nounou, grand-parent), crée le compte dans Supabase puis
insère la ligne dans family_members.
pnpm dev # serveur de dev
pnpm build # build prod
pnpm lint # eslint
pnpm test # tests vitest
pnpm test:watch # mode TDD
pnpm test:coverage # rapport HTML dans coverage/
pnpm build-icons # régénère les icônes PWATests à côté de leur source (*.test.ts / *.test.tsx). Couvrent la
logique pure : estimation sommeil, file hors-ligne, export CSV, mapping
row ↔ event, filtres historique, config d'affichage. Composants UI hors
scope : le mock Supabase + Realtime coûterait plus qu'il ne rapporterait.
Carte détaillée dans docs/architecture.md.
Résumé :
app/: routes Next.js (App Router), layout, landing publique.components/: UI. Shell, vues, modales par catégorie.lib/: logique pure (events, mutations, stats, sleep estimate, time…) et clients Supabase.supabase/: migrations + seed.docs/: doc dev (anglais).
MIT. Voir LICENSE.
