Commit Graph

30 Commits

Author SHA1 Message Date
gilles fdeb747f38 feat: Phase 4 — module Notes complet
Backend :
- schemas/notes.py : NoteCreate/Update/Response + AttachmentResponse
- api/notes.py : CRUD + FTS français (plainto_tsquery) + filtres rapides
  (has_photo/audio/gps/tag/category) + pièces jointes (image/audio)
- main.py : enregistrement /api/notes

Frontend :
- api/notes.ts : fetchNotes/create/update/delete + add/deleteAttachment
- NoteForm.tsx : titre, contenu, catégorie, tags CSV, GPS
- NotesPage.tsx : liste mobile (chronologique) + grille laptop, FAB +,
  enregistrement audio inline (MediaRecorder), upload photo, filtres rapides

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 06:49:46 +02:00
gilles 7b1b6521e5 feat(shopping): photo par article dans le catalogue
- Upload photo (context=product → thumbnail 150×150) dans CatalogueModal
- Miniature affichée dans la liste et dans le formulaire
- Schémas ProductCreate/Update/Response exposent image_path + thumbnail_path
- Backend sert /media/* via StaticFiles (FastAPI)
- Proxy /media → backend dans vite.config et nginx.conf

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 06:37:33 +02:00
gilles 5dc335ad17 refactor(todos): FAB unique + pour créer une tâche (mobile et laptop)
Supprime le bouton "Nouvelle tâche" laptop, remplace par le même FAB
circulaire que mobile — position adaptée (bottom: 72px mobile, 24px laptop).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 06:31:04 +02:00
gilles 37e7f006d3 feat(shopping): sélecteur catalogue lors de l'ajout d'article
Liste scrollable alphabétique filtrée en temps réel, sélection en un tap
(pré-remplit l'unité), ou saisie libre si article hors catalogue.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 06:29:18 +02:00
gilles 4eb89165af fix(shopping): supprimer comparaison editing?.id dans la vue liste (narrowing TS)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 16:28:49 +02:00
gilles 85093f1b99 feat(shopping): refonte UX + CRUD catalogue/boutiques + champs enrichis
- UX : vue par défaut = liste en cours, landing si pas de liste (+ vert +
  baguette magique), suppression des vues "listes" et "mode magasin" séparés
- Articles cochés barrés et déplacés en bas, tri alphabétique par section
- Nom de liste auto avec numéro de semaine ISO (S21 2026)
- Wake lock activé dès qu'une liste est ouverte
- CRUD boutiques : POST/PATCH/DELETE /stores + modal Boutiques
- CRUD articles : POST/PATCH/DELETE /products + modal Catalogue
- Champs enrichis produits : description, prix, quantité/unité, boutique défaut
- Champs enrichis boutiques : url, store_type (alimentaire, bricolage…)
- Migration 003 : nouveaux champs en base

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 16:21:45 +02:00
gilles 925e077afe feat(todos): refonte formulaire + chips domaines + non-zoomable
- TodoForm : domaines en chips multi-select colorés, priorité en 3 boutons
  colorés (haute/moyenne/basse), date initialisée à aujourd'hui, description
  et URL toujours visibles, boutons photo et GPS
- TodosPage : suppression filtres domaine/priorité, tags colorés par domaine
  dans les lignes, userSelect:none, groupage multi-domaines
- todos.ts : ajout domains[], photo_path, gps_lat/lng dans les interfaces TS
- index.html : viewport maximum-scale=1.0, user-scalable=no

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 16:10:47 +02:00
gilles e21349511d feat(shopping): bouton liste magique + modal édition liste avec suppression
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 15:52:44 +02:00
gilles 43736709a9 refactor(todos): formulaires création et édition migrés vers Modal 2026-05-24 15:47:48 +02:00
gilles 490d0d774f feat(shopping): page complète — listes, détail, mode magasin Wake Lock
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 15:46:27 +02:00
gilles 8211284c4a feat(shopping): composant ItemRow avec swipe-to-delete et mode magasin 2026-05-24 15:43:04 +02:00
gilles 9f2ca15303 feat(shopping): hook useWakeLock avec fallback gracieux 2026-05-24 15:41:34 +02:00
gilles ffe28cc4e3 feat(ui): composant Modal réutilisable (overlay + Escape) 2026-05-24 15:40:57 +02:00
gilles 1ca2d986ce feat(shopping): client API TypeScript typé 2026-05-24 15:39:32 +02:00
gilles 134678a6f1 feat(todos): favicon maison + mode édition double-tap/double-clic
- Favicon SVG maison Gruvbox orange sur fond sombre
- TodoForm accepte initialValues et submitLabel pour l'édition
- SwipeableRow détecte le double-tap (< 300ms, sans déplacement)
- TodosPage : double-tap mobile / double-clic laptop ouvre l'édition

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 14:54:47 +02:00
gilles 6ef64dfe1c fix(home): tuiles d'accueil navigables via Link React Router
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 14:48:12 +02:00
gilles 2b34abf4b0 fix: nginx proxy /api/ vers backend + routes shopping et notes manquantes
- Ajoute location /api/ dans nginx.conf pour proxifier les requêtes API
- Crée ShoppingPage et NotesPage (placeholders phase suivante)
- Enregistre les routes /shopping et /notes dans App.tsx

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 14:09:36 +02:00
gilles 04012f5817 fix(todos): typage union explicite pour l'état priority dans TodoForm 2026-05-24 13:20:32 +02:00
gilles 9d852c3bf1 fix(todos): handleResponse gère 204 No Content (suppression sans SyntaxError) 2026-05-24 12:37:03 +02:00
gilles 2e1f3a77fb fix(todos): types union TodoCreate, gestion erreurs handlers, transition SwipeableRow réactive
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 12:18:20 +02:00
gilles 8aeb45387d feat(todos): page TodosPage — vue mobile swipeable + vue laptop tableau filtrable
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 12:13:56 +02:00
gilles 580aab822a feat(todos): composant TodoForm (rapide mobile / étendu laptop) 2026-05-24 12:10:31 +02:00
gilles 9e6e0902ab feat(todos): composant SwipeableRow (swipe touch, seuil 80px) 2026-05-24 12:07:38 +02:00
gilles eea004f53b fix(todos): deleteTodo utilise handleResponse pour cohérence 2026-05-24 12:06:34 +02:00
gilles e89d2ff4f1 feat(todos): client API TypeScript — Todo interface + 5 fonctions fetch 2026-05-24 12:05:44 +02:00
gilles 0903115687 feat: dockerfile frontend nginx + cache statique 2026-05-24 05:23:16 +02:00
gilles 25a31f1f24 feat: layout responsive mobile (bottom nav) / laptop (sidebar) + page d'accueil 2026-05-24 05:22:45 +02:00
gilles e8aa9d6f3b feat: PWA configurée — service worker, manifest, icônes 2026-05-24 05:21:29 +02:00
gilles 137213241b feat: tailwind CSS + design system Gruvbox seventies intégré
- Ajoute postcss.config.js et tailwind.config.ts avec tokens CSS mappés
- Copie tokens.css dans frontend/src/design-system/
- Met à jour index.css avec import tokens + directives Tailwind
- Adapte ui-kit.jsx en ui-kit.tsx (UMD → ESM, exports nommés)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 05:19:33 +02:00
gilles 1877963f15 feat: scaffold frontend React 18 + Vite 5 + TypeScript
Mise en place de la structure de base du frontend HomeHub : React 18,
Vite 5, TypeScript strict, React Router v6, Tailwind CSS et vite-plugin-pwa
installés. Composants placeholder Layout et HomePage pour que le build
compile sans erreur. Build de production vérifié (dist/ généré, 0 erreur TS).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 05:15:21 +02:00