Skip to content

axelbellec/bibou

Repository files navigation

Bibou · le carnet de bébé

CI

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.

Aperçu

Bibou, aperçu desktop

Stack

  • 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.

Installation

1. Cloner

git clone https://github.com/axelbellec/bibou.git
cd bibou
pnpm install
cp .env.example .env.local

2. Projet Supabase

  1. supabase.comNew project. Note l'URL et la clé publishable (Settings → API).
  2. Authentication → Providers → Email → décoche Enable email signups.
  3. Authentication → Users → Add user → crée les 2 comptes (toi et l'autre parent). Note les UUID.

3. Migrations

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.

4. Famille + parents

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);

5. .env.local

NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...

6. Lancer

pnpm dev

http://localhost:3000. Login avec un compte Supabase.

Déploiement Vercel

  1. git push sur GitHub.
  2. vercel.comAdd new project, importe le repo.
  3. Ajoute les 2 variables dans Settings → Environment Variables.
  4. Deploy. Vercel détecte Next.js.
  5. Sur téléphone, ouvre l'URL puis Ajouter à l'écran d'accueil (Safari iOS, Chrome Android) pour installer la PWA.

Modèle de données

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.

Auth

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.

Commandes

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 PWA

Tests

Tests à 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.

Structure

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).

Licence

MIT. Voir LICENSE.

About

Carnet de bébé partagé entre deux parents → biberons, couches, sommeil, soins, température, notes. PWA avec synchro temps réel via Supabase.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors