Commit Graph
69 Commits
Author SHA1 Message Date
percoandClaude Sonnet 4.6 3675f0c01a ci: ajout branches staging-perco et staging-fefe dans le workflow deploy
Deploy HouseHub / deploy (push) Successful in 1s
- Push sur staging-perco → deploy /opt/container/househub-perco
- Push sur staging-fefe  → deploy /opt/container/househub-fefe
- Push sur main          → deploy /opt/container/househub (production)
- Utiliser `git deploy <env>` pour envoyer sur le bon environnement

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 11:52:12 +02:00
percoandClaude Sonnet 4.6 6bbee271e3 fix(liste): couleur appliquée sur tout le tab (pas juste un point)
Deploy HouseHub / deploy (push) Successful in 2s
- Tab actif coloré : background + border = couleur choisie, texte blanc
- Tab inactif coloré : border + texte = couleur choisie
- Suppression du .liste-tab-dot inutilisé

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 22:08:42 +02:00
percoandClaude Sonnet 4.6 7b294f300a feat(liste): modal création/édition avec couleur et type de liste
Deploy HouseHub / deploy (push) Successful in 2s
- Remplacement du formulaire inline par un modal complet
- Color picker : 11 couleurs + option "sans couleur"
- Type de liste : Courses, To-do, Voyage, Travail, Maison, Santé, Loisirs, Autre
- Tab affiche un dot coloré + emoji du type
- Bouton "Supprimer" dans le modal d'édition (remplace le × dans le tab)
- DB : columns color + list_type sur pf_lists

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 22:05:59 +02:00
percoandClaude Sonnet 4.6 ab97af0ea3 feat(liste): ajout des catégories d'articles avec détection automatique
Deploy HouseHub / deploy (push) Successful in 1s
- 22 catégories prédéfinies (Fruits & Légumes, Viande, Frais, etc.)
- Détection automatique par dictionnaire ~250 mots-clés français
- Apprentissage des corrections manuelles (pf_item_category_rules)
- Groupement des articles par section dans l'interface
- Badge catégorie cliquable sur chaque article avec popover de sélection
- API: GET categories, POST set_category
- schema_family.sql: category_id + pf_list_categories + pf_item_category_rules

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 19:25:09 +02:00
percoandClaude Sonnet 4.6 969bd5c2bf fix(planka): tri intra-liste par drop sur moitié haute/basse de carte
Deploy HouseHub / deploy (push) Successful in 1s
- Chaque carte est une zone de drop: moitié haute = avant, moitié basse = après
- Indicateur visuel: bordure bleue top ou bottom selon la position du curseur
- Suppression des pk-drop-before (zones 4px invisibles remplacées)
- Colonne comme zone de secours pour listes vides

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 18:15:07 +02:00
percoandClaude Sonnet 4.6 e770ccf22b fix(planka): propagation erreurs Planka + noms étiquettes + position dans saveCard
Deploy HouseHub / deploy (push) Successful in 2s
- update_card: transmet position à Planka + retourne erreur réelle si Planka rejette
- saveCard: n'envoie listId que si changé (position requise par Planka), sinon nom/desc/dueDate seul
- Labels: affiche le nom en texte dans le badge coloré (comme Planka)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:55:35 +02:00
percoandClaude Sonnet 4.6 5828d1796d fix(planka): endpoints v2, tri intra-liste, drag&drop robuste
Deploy HouseHub / deploy (push) Successful in 2s
- create_card: POST /api/lists/{id}/cards + type=story (Planka v2 requis)
- create_list: type=active requis
- Drag & drop: zones pk-drop-before avant chaque carte pour tri intra-liste
- moveCard(): position calculée (avg prev/next) + gestion même liste
- Suppression variable dragCardId globale → dataTransfer propre

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:49:26 +02:00
percoandClaude Sonnet 4.6 0db14560a5 fix(planka): drag&drop via dataTransfer + create_list + synchro position
Deploy HouseHub / deploy (push) Successful in 2s
- Drag & drop: utilise e.dataTransfer (pas de variable globale fragile)
- dropCard prend cardId en paramètre, envoie position requis par Planka
- Nouveau bouton 'Ajouter une liste' en fin de board
- Endpoint create_list dans api.php (POST /api/boards/{id}/lists)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:43:16 +02:00
percoandClaude Sonnet 4.6 7d62aa02be fix(planka): position obligatoire pour déplacer une carte + filtre listes None
Deploy HouseHub / deploy (push) Successful in 2s
- dropCard envoie position (max+65535) car Planka l'exige pour changer listId
- Ajout vérification res.ok + toast d'erreur/succès
- Filtre les listes avec name='None' (placeholders Planka sans nom)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:30:12 +02:00
percoandClaude Sonnet 4.6 285273108c fix(planka): drag & drop toute colonne + filtre listes par boardId
Deploy HouseHub / deploy (push) Successful in 2s
- Drop target = toute la colonne .pk-cards (plus la zone invisible de 4px)
- Filtre les listes et cartes strictement par boardId pour éliminer les listes fantômes
- Indicateur visuel 'Déposer ici' sur colonnes vides
- CSS: colonne highlight en bleu pointillé au survol drag

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:21:31 +02:00
percoandClaude Sonnet 4.6 3516225e56 fix: corrige include paths et get_family_pdo() dans api.php Liste
Deploy HouseHub / deploy (push) Successful in 2s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:13:49 +02:00
percoandClaude Sonnet 4.6 987ce43e52 fix: corrige parse error apostrophes fr.php et includes liste.php
Deploy HouseHub / deploy (push) Successful in 1s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:10:55 +02:00
percoandClaude Sonnet 4.6 8176fc4de0 feat: remplace module Courses par Liste multi-listes nommées
Deploy HouseHub / deploy (push) Successful in 1s
- Nouveau module 'liste' : plusieurs listes nommées par espace famille
- Tabs de navigation entre les listes + création/renommage/suppression inline
- Migration automatique : existing pf_grocery_items → list_id=1 (Ma liste)
- Schema: nouvelle table pf_lists, ajout list_id sur pf_grocery_items
- Historique global partagé entre toutes les listes
- Ancien module 'groceries' conservé pour compatibilité ascendante
- Mise à jour settings.php, header.php, index.php, schema_family.sql

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:07:02 +02:00
perco 0ca3eef7c3 Planka: add to settings page + README section
Deploy HouseHub / deploy (push) Successful in 2s
2026-05-18 12:54:35 +02:00
percoandClaude Sonnet 4.6 7a697213d4 Planka: add native Kanban module with proxy API and SPA board view
Deploy HouseHub / deploy (push) Successful in 1s
Adds modules/planka/api.php (PHP proxy to Planka at 10.200.33.10:1337), planka.css, and planka.php (full SPA with board selector, drag-and-drop cards, card modal with checklist). Registers planka in header nav, all 3 lang files, schema_family.sql and enables it for family 1.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 11:52:35 +02:00
perco 00db9dedfd README: mise à jour complète — tous les modules, PrintVault, Todo Discord, stack technique
Deploy HouseHub / deploy (push) Successful in 2s
2026-05-16 11:29:41 +02:00
percoandClaude Sonnet 4.6 f2b1c05356 PrintVault: remove GCode segment cap + fix PHP upload limits
Deploy HouseHub / deploy (push) Successful in 2s
- PHP upload: 20M → 300M, post_max: 25M → 310M, memory: 256M → 512M
- GCode parser: no segment cap (full file), flat array format for compact JSON
  491k segments = 0.8s parse, 17MB JSON on 80MB GCode file
- Viewer JS updated for flat array stride-7 format

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 11:46:13 +02:00
percoandClaude Sonnet 4.6 237de1e529 PrintVault: raise GCode segment limit to 300k (max 500k)
Deploy HouseHub / deploy (push) Successful in 2s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 11:41:19 +02:00
percoandClaude Sonnet 4.6 811d186b46 PrintVault: GCode 3D path viewer with layer color gradient
Deploy HouseHub / deploy (push) Successful in 2s
- New API endpoint gcode_paths: parses G0/G1 moves, returns segments (max 30k)
- Three.js LineSegments renderer: extrusion moves colored by Z height
  Blue(low) → Cyan → Green → Yellow → Red(high), travel moves dimmed
- Legend overlay showing color scale
- GCode files now show viewer + metadata cards (layout unchanged)
- PHP syntax validated, API endpoint tested before deploy

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 11:34:28 +02:00
percoandClaude Sonnet 4.6 b756517ab5 PrintVault: direct page navigation + GCode metadata cards
Deploy HouseHub / deploy (push) Successful in 2s
- Clicking a model card now navigates to /printvault-viewer.php (no popup)
- viewer page uses HouseHub header/nav (integrated look)
- GCode metadata displayed as cards: ⏱ time, 🧵 filament, 🔥 nozzle, 🟦 bed
- Two-column layout: Three.js viewer left + metadata sidebar right
- viewer.css: new stylesheet for detail page
- Removed now-unused detail/edit modals from printvault.php

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 11:05:58 +02:00
percoandClaude Sonnet 4.6 1ee0ec820c Fix PrintVault upload: unpack format f3 (not fff) + ob_end_clean() + perms
Deploy HouseHub / deploy (push) Successful in 2s
- unpack('fff',...) in PHP returns only 1 float — must use unpack('f3',...)
  to correctly extract 3 floats from binary STL vertices
- ob_end_clean() in pvOk/pvErr discards PHP warnings from output buffer
  (display_errors=On was causing warnings to corrupt JSON response)
- Upload dirs chowned to www-data so Apache can write files
- QA verified: categories(8), STL parse, DB insert, file write all pass

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 10:58:53 +02:00
percoandClaude Sonnet 4.6 99e135ec74 PrintVault: full native rewrite — local storage, MariaDB, Three.js viewer
Deploy HouseHub / deploy (push) Successful in 1s
- All files stored in HouseHub (/uploads/printvault/), zero dependency on external service
- PHP parsers: binary/ascii STL (dimensions + volume), 3MF (XML bounding box), GCode metadata
- Three.js viewer (STL + 3MF) in printvault-viewer.php with importmap CDN
  · OrbitControls, metallic material, environment lighting, grid floor
  · Screenshot button saves thumbnail back to HouseHub
- printvault.php: model grid + upload drag&drop + detail modal + edit modal
- API: models CRUD, categories, file serve (inline for viewer), thumb save
- pf_pv_models + pf_pv_categories tables added to schema

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 10:25:21 +02:00
percoandClaude Sonnet 4.6 7272772c9f Add PrintVault module: 3D print file manager integrated in HouseHub
Deploy HouseHub / deploy (push) Successful in 1s
- printvault.php: SPA with model grid, sidebar (categories + type filters), search
- modules/printvault/api.php: PHP proxy to PrintVault API (auth + CORS)
- modules/printvault/assets/printvault.js: model grid, upload modal, detail modal
- modules/printvault/assets/printvault.css: full light/dark theme
- Upload: drag&drop + form (name, category, tags)
- Detail modal: metadata, dimensions, GCode info, download, delete, "Voir en 3D" → PrintVault
- Integrated in header nav, home page, settings; translations fr/en/ca

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 10:14:03 +02:00
percoandClaude Sonnet 4.6 f68c2b7259 Todo cron: rich Discord embed with notes, priority, list + fix double execute()
Deploy HouseHub / deploy (push) Successful in 1s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 16:48:48 +02:00
percoandClaude Sonnet 4.6 cfc115665b Todo cron: fix timezone (Europe/Paris) — container runs UTC, tasks stored in local time
Deploy HouseHub / deploy (push) Successful in 2s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 16:39:20 +02:00
percoandClaude Sonnet 4.6 401e98e9ee Todo cron: exact HH:MM match (like original app) + fix log path
Deploy HouseHub / deploy (push) Successful in 2s
- Match reminder_time = HH:MM exactly, runs once per minute naturally
- Log was failing silently: /var/log not writable by perco user
- Fixed crontab to log to /home/perco/househub_todo_cron.log

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 16:06:05 +02:00
percoandClaude Sonnet 4.6 c3229cbf11 Fix todo API: PHP warning on missing due_date key corrupted JSON output
Deploy HouseHub / deploy (push) Successful in 1s
Use ?? null before ?: null for optional fields; add ob_start() as safety net.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 15:42:52 +02:00
percoandClaude Sonnet 4.6 9ec78ba77e Todo: fix JSON.parse error + remove quick-add bar
Deploy HouseHub / deploy (push) Successful in 1s
- api() now sends credentials + Accept/X-Requested-With headers so session
  expiry returns proper JSON 401 instead of HTML redirect
- Safer JSON parsing with readable error in console
- Remove quick-add bar (use modal only)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 15:34:41 +02:00
percoandClaude Sonnet 4.6 606dcbf3d7 Todo: daily reminders at fixed time, no date, simplified sidebar
Deploy HouseHub / deploy (push) Successful in 2s
- Remove date field; due_time is now required
- Cron repeats daily via notified_date (resets at midnight)
- Remove Today/Upcoming/Overdue smart views from sidebar
- Task card shows bell icon + time instead of date labels
- Creation no longer sends immediate Discord notification (cron only)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 15:09:46 +02:00
percoandClaude Sonnet 4.6 5d5ccf406d Fix cron: notify tasks with due_time but no due_date (treat as today)
Deploy HouseHub / deploy (push) Successful in 1s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 15:06:28 +02:00
percoandClaude Sonnet 4.6 c758337ff3 Fix budget: widen month columns VARCHAR(7→10) to match Y-m-01 query format
Deploy HouseHub / deploy (push) Successful in 2s
pf_expenses.gestion_month, pf_alloc_values.month_date, pf_savings.month_date
were VARCHAR(7) but budget views query with Y-m-01 (10 chars) — converted
all imported data in househub_f2 accordingly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 15:02:41 +02:00
percoandClaude Sonnet 4.6 2016407a43 Home: meaningful CTAs per module (Réviser, Griffonner, Cocher, Déballer)
Deploy HouseHub / deploy (push) Successful in 2s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 14:57:22 +02:00
percoandClaude Sonnet 4.6 d913f3c0eb Todo: scheduled Discord notifications via cron
Deploy HouseHub / deploy (push) Successful in 2s
- cron/todo_notify.php: checks every minute for tasks due now and sends
  Discord reminder () only when due_date+due_time is reached
- No immediate notification when due_time is set (cron handles it)
- Immediate notification still fires for tasks without a due_time
- notified column tracks whether reminder was already sent
- Resets notified=0 when a task is edited (new time picked)
- Cron runs via: docker exec househub php /var/www/html/cron/todo_notify.php

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 14:55:27 +02:00
percoandClaude Sonnet 4.6 6ef3b26153 Add due_time field to Todo tasks
Deploy HouseHub / deploy (push) Successful in 1s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 14:52:04 +02:00
percoandClaude Sonnet 4.6 7790375c01 Fix Todo module: ID mismatches, overdue filter, Discord webhook settings
Deploy HouseHub / deploy (push) Successful in 2s
- Rewrite todo.php with correct element IDs matching todo.js
- Fix sidebar: fully dynamic rendering (no more static nav items)
- Fix quick-add: list selector added, Enter key works correctly
- Fix modals: todo-form-*, list-form-name, list-icon-opts IDs
- Fix overdue filter missing from API (list_id=overdue)
- Add settings modal (⚙️) with Discord webhook URL field
- Add settings action in API (GET/PUT via pf_notes table)
- Discord webhook: notify on task create and task done

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 14:46:32 +02:00
percoandClaude Sonnet 4.6 b97cba6e75 Add Todo module: SPA task manager with lists, priorities and due dates
Deploy HouseHub / deploy (push) Successful in 1s
- New todo.php SPA page with sidebar (smart views + user lists)
- modules/todo/api.php: REST API for lists and todos (CRUD, filters, stats)
- modules/todo/assets/todo.js: frontend (quick add, toggle done, modals)
- modules/todo/assets/todo.css: full light/dark theme styles
- pf_todo_lists + pf_todos tables added to schema_family.sql
- Integrated in header nav, home page cards, settings module list
- Translations added in fr/en/ca

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 13:36:25 +02:00
percoandClaude Sonnet 4.6 5a81c1e9f0 Module Memo : intégration PercoMemo dans HouseHub
Deploy HouseHub / deploy (push) Successful in 1s
- SPA PHP/MySQL avec rendu Markdown client-side (marked.js)
- Notes par famille : titre, contenu Markdown, tags, pièces jointes
- Attachements : images, fichiers, URLs avec galerie lightbox
- Recherche full-text (LIKE) + filtrage par tag dans la sidebar
- Preview live Markdown en split-view lors de l'édition
- Drag & drop images + paste depuis presse-papier
- Tables pf_memo_notes + pf_memo_attachments dans schema_family.sql
- Migration des 2 notes existantes depuis PercoMemo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 13:21:57 +02:00
percoandClaude Sonnet 4.6 1e43f4bdc1 Uniformisation body : data-page au lieu de classes par page
Deploy HouseHub / deploy (push) Successful in 2s
- <body data-page="pageName"> uniforme sur toutes les pages
- <main> reçoit la classe module via $mainClass (pas le body)
- home.css : body.pf-home → body[data-page="home"]
- family-calendar.css : .pf-family-calendar .pf-main → .pf-family-calendar.pf-main
- dark-mode.css : mise à jour références body.pf-home

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 10:36:17 +02:00
percoandClaude Sonnet 4.6 63d71ab7e4 Settings : upload image fond page d'accueil
Deploy HouseHub / deploy (push) Successful in 1s
- Section "Image d'accueil" dans settings.php (par famille)
- Stockage dans /uploads/home_bg_{family_id}.{ext}
- Aperçu de l'image actuelle + bouton reset vers le défaut
- /home-bg.php : endpoint sécurisé pour servir l'image
- index.php : override inline CSS si image personnalisée

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 09:40:19 +02:00
percoandClaude Sonnet 4.6 aff2d24a34 CI/CD : Gitea Actions deploy + source code volume mount
Deploy HouseHub / deploy (push) Successful in 5s
- .gitea/workflows/deploy.yml : git pull via SSH au push sur main
  → plus besoin de rebuilder le container pour les modifs PHP/CSS/JS
- docker-compose.yml : monte /opt/container/househub:/var/www/html
  → les fichiers sont servis directement depuis le repo local

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 09:07:36 +02:00
percoandClaude Sonnet 4.6 20989d608a Dark mode : fix !important + header accueil
Deploy to Pacha Family / deploy (push) Failing after 3s
- Ajout !important sur tous les overrides qui en ont besoin (battaient
  les règles hardcodées des modules avec !important)
- Header page d'accueil : override explicite de body.pf-home .pf-header
- Calendar : planningTable, sticky cols, fc-view-controls
- Budget : th.sticky-col, tab-item.active, sum-selected
- Holidays/gifts : tous les éléments clés

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 08:29:38 +02:00
percoandClaude Sonnet 4.6 89299613cb Dark mode : coverage complète tous modules (budget, calendrier, voyages, cadeaux, accueil)
Deploy to Pacha Family / deploy (push) Failing after 3s
Nouveau dark-mode.css chargé globalement après tous les CSS :
- Accueil : cartes modules avec fond sombre semi-transparent
- Budget : tabs, owner-tabs, table, sticky-col, nens-tables
- Calendrier : cells, nav, vue, balance cards, chips
- Vacances : idea-cards, filtres, formulaires
- Cadeaux : gift-cards, child-header, filter-bar, summary-pills

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 22:26:23 +02:00
percoandClaude Sonnet 4.6 8584bf8c1f Home : ordre modules = menu, ajout Garage, respect enabled_modules
Deploy to Pacha Family / deploy (push) Failing after 4s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 22:19:05 +02:00
percoandClaude Sonnet 4.6 b9403ef86b Dark mode : pill toggle switch ☀️/🌙 + fix JS
Deploy to Pacha Family / deploy (push) Failing after 3s
Remplace le bouton emoji par un vrai switch pill CSS (track + thumb
glissant, soleil/lune qui s'estompent). État visuel entièrement piloté
par [data-theme="dark"] via CSS, JS se contente de toggler l'attribut.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:47:07 +02:00
percoandClaude Sonnet 4.6 19031548e1 Dark mode : toggle 🌙/☀️ dans le header, thème persisté en localStorage
Deploy to Pacha Family / deploy (push) Failing after 3s
- [data-theme="dark"] sur <html> avec surcharge des variables CSS
- Couverture complète : header, nav, cartes, modals, formulaires,
  tables, toasts — global + module garage
- Script early-apply dans <head> pour éviter le flash au rechargement
- Bouton toggle dans le header (desktop + mobile via le burger)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:42:27 +02:00
percoandClaude Sonnet 4.6 87035ed3b6 Garage : liste radio scrollable pour pièces connues
Deploy to Pacha Family / deploy (push) Failing after 3s
Remplace les chips par une liste scrollable (max 160px) avec
nom, référence, marque et prix — identique au GarageManager original.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:38:26 +02:00
percoandClaude Sonnet 4.6 b338d7550a Garage : fix select avec valeurs hors-liste (type, fuel_type, category)
Deploy to Pacha Family / deploy (push) Failing after 3s
setSelectVal() ajoute dynamiquement l'option si elle n'existe pas dans
le select, évitant que .value reste vide et soit envoyé null à l'API.
Validation PHP côté serveur : type et date requis sur PUT maintenance.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:36:12 +02:00
percoandClaude Sonnet 4.6 5ac4e51efb Garage API : gestion d'erreurs robuste (JSON garanti)
Deploy to Pacha Family / deploy (push) Failing after 3s
- set_exception_handler global : toute exception PDO retourne du JSON
  au lieu d'une page HTML qui casse le JSON.parse côté client
- gOk() : JSON_INVALID_UTF8_SUBSTITUTE pour données UTF-8 corrompues,
  vérification du retour de json_encode
- db.php die() : retourne JSON au lieu de texte brut

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:31:29 +02:00
percoandClaude Sonnet 4.6 7cacf4bdf5 Garage : redesign CSS thème clair HouseHub
Deploy to Pacha Family / deploy (push) Failing after 3s
Remplace le thème sombre GarageManager par le thème clair de HouseHub
(variables --bg-panel, --border-light, --text-main, --primary, etc.)
Cohérent avec global.css et les autres modules.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:25:31 +02:00
percoandClaude Sonnet 4.6 eb34657473 Garage module : toutes les features GarageManager
Deploy to Pacha Family / deploy (push) Failing after 3s
- Navigation vers détail entretien (page-maintenance) au clic sur une ligne
- Boutons édition sur entretiens et pièces (openEditMaintenance, openEditPart)
- Formulaire inline ajout pièce sur page entretien avec TVA +20%
- Chips "pièces connues" pour réutiliser rapidement une pièce existante
- Calcul prix TTC dans modal pièce (updatePartPriceTTC) et formulaire inline (updateIPriceTTC)
- API : GET par ID pour maintenances et pièces
- Correction champ garage : name="garage_name" cohérent POST/PUT

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:57:57 +02:00
percoandClaude Sonnet 4.6 a443ec389b fix: garage — photos (limite 20MB), entretiens globaux, pièces groupées par véhicule
Deploy to Pacha Family / deploy (push) Failing after 3s
- Dockerfile + docker/php.ini : upload_max_filesize 2M → 20M
- garage.php : onglet Entretiens dans sous-nav + page #page-maintenances-all
- garage.js : loadAllMaintenances() (entretiens groupés par véhicule)
- garage.js : loadParts() redesigné — pièces groupées par véhicule
- garage.js : navigate() gère 'maintenances-all'
- DB : vehicle_id des pièces mis à jour via maintenance

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:33:49 +02:00
percoandClaude Sonnet 4.6 52c8e82221 fix: garage — photos upload + JSON error champs numériques vides
Deploy to Pacha Family / deploy (push) Failing after 3s
- docker-compose.yml : suppression volume uploads sur MariaDB (mauvais container)
- modules/garage/api.php : conversion chaînes vides → null pour INT/DECIMAL (year, km, cost, price, quantity)
  empêche le SQLSTATE[22007] lors de l'édition de véhicule/entretien/pièce
- Photos : vérification que /uploads/garage/ est accessible en écriture

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:20:40 +02:00
percoandClaude Sonnet 4.6 997d3872ef fix: garage — sous-nav interne + correction modal (.open → .show)
Deploy to Pacha Family / deploy (push) Failing after 2s
- Ajout sous-nav Dashboard/Véhicules/Pièces (nav-link attendus par garage.js)
- CSS modal-backdrop.open → .show (alignement avec garage.js openModal())
- Styles garage-subnav intégrés dans garage.css

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:12:18 +02:00
percoandClaude Sonnet 4.6 62eabfb5ee feat: module Garage — véhicules, entretiens, pièces (intégration GarageManager)
Deploy to Pacha Family / deploy (push) Failing after 3s
- modules/garage/api.php : API REST MySQL (vehicles, maintenances, parts, stats, photos)
- modules/garage/assets/garage.css + garage.js : UI adaptée (chemins API mis à jour)
- garage.php : page principale avec header/footer HouseHub + i18n
- docker/schema_family.sql : tables pf_vehicles, pf_maintenances, pf_parts
- docker-compose.yml : volume househub_uploads pour photos
- includes/lang/fr|ca|en.php : ~50 clés de traduction garage
- header.php : lien Garage dans nav desktop + mobile
- settings.php : module garage dans les toggles
- README.md : tableau des modules + mise à jour description

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:57:24 +02:00
percoandClaude Sonnet 4.6 f6de4918bd fix: refus d'enregistrer si aucun module sélectionné (message d'erreur)
Deploy to Pacha Family / deploy (push) Failing after 3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:46:08 +02:00
percoandClaude Sonnet 4.6 3077db5b98 feat: gestion des modules actifs par famille dans settings.php
Deploy to Pacha Family / deploy (push) Failing after 3s
- families.enabled_modules (JSON) en BDD + init schema
- login.php charge les modules actifs en session
- header.php affiche uniquement les modules actifs (nav desktop + mobile)
- settings.php : section Modules avec toggles visuels (partagé par famille)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:40:50 +02:00
percoandClaude Sonnet 4.6 4b2ab275bc fix: ajout clé bud_cat_income manquante dans fr/ca/en
Deploy to Pacha Family / deploy (push) Failing after 3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:31:10 +02:00
percoandClaude Sonnet 4.6 a0f5f04274 fix: remplacement apostrophes typographiques par apostrophes échappées dans fr.php et ca.php
Deploy to Pacha Family / deploy (push) Failing after 3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:16:00 +02:00
percoandClaude Sonnet 4.6 b80a949701 fix: drapeaux FR et EN en SVG inline (compatibilité Windows/Chrome)
Deploy to Pacha Family / deploy (push) Failing after 3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:10:18 +02:00
percoandClaude Sonnet 4.6 d25fa4b8dc fix: autoriser les caractères accentués dans les noms d'utilisateur (é, è, à...)
Deploy to Pacha Family / deploy (push) Failing after 3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:05:27 +02:00
percoandClaude Sonnet 4.6 d856cd8189 fix: Senyera catalane en SVG inline (4 barres rouges sur or)
Deploy to Pacha Family / deploy (push) Failing after 3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:04:18 +02:00
percoandClaude Sonnet 4.6 472d6ac7fd fix: vrai drapeau catalan 🏴󠁥󠁳󠁣󠁴󠁿 dans le sélecteur de langue
Deploy to Pacha Family / deploy (push) Failing after 3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:00:25 +02:00
percoandClaude Sonnet 4.6 6acda4ab25 feat: sélecteur de langue dans settings.php — persisté par compte en BDD
Deploy to Pacha Family / deploy (push) Failing after 3s
- Sélecteur FR/EN/CA déplacé du header vers settings.php
- Colonne lang ajoutée à users (meta DB) — langue sauvegardée par compte
- Login charge automatiquement la langue préférée de l'utilisateur
- Header nettoyé du sélecteur de langue

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:51:35 +02:00
percoandClaude Sonnet 4.6 94d85dc8da feat: ajout traduction anglaise (EN) — 548 clés traduites
Deploy to Pacha Family / deploy (push) Failing after 4s
- includes/lang/en.php : traduction complète EN (tests, nav, auth, home, calendrier, voyages, budget, cadeaux)
- includes/i18n.php : ajout 'en' dans les langues acceptées
- header.php : ajout du sélecteur EN dans la barre de langues
- README.md : documentation mise à jour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:44:23 +02:00
percoandClaude Sonnet 4.6 5bfc8efae4 fix: ajout liens settings + admin dans la navigation (header desktop + mobile)
Deploy to Pacha Family / deploy (push) Failing after 3s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:39:05 +02:00
percoandClaude Sonnet 4.6 0494554c30 feat: admin panel + page paramètres + README mis à jour
Deploy to Pacha Family / deploy (push) Failing after 3s
- admin/index.php : gestion familles et utilisateurs (activer/désactiver, rôles, supprimer, regénérer code invite)
- includes/admin_auth.php : protection des routes admin (403 si non-admin)
- settings.php : page de config par compte (profil, mot de passe, code invitation, membres, lien admin)
- login.php : vérification is_active user + famille, is_admin en session
- docker/init/00-setup.sql : ajout colonnes is_admin, is_active sur users + is_active sur families
- invite.php supprimé (remplacé par settings.php)
- README.md : documentation complète multi-tenant, URLs, rôle admin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:30:44 +02:00
percoandClaude Sonnet 4.6 84db4b6619 feat: système multi-tenant (familles + inscription + invitations)
Deploy to Pacha Family / deploy (push) Failing after 3s
- docker/init/00-setup.sql : meta DB househub_meta (families + users) + grants
- docker/schema_family.sql : template DB par famille (toutes les pf_* tables)
- docker-compose.yml : MYSQL_DATABASE=househub_meta, init dir monté
- includes/meta_db.php : PDO vers househub_meta
- includes/db.php : connexion dynamique vers la DB famille (session)
- login.php : auth via meta DB + family_db en session + lien inscription
- register.php : inscription + création famille OU rejoindre via code
- invite.php : voir son code d'invitation + membres de l'espace

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:23:53 +02:00
percoandClaude Sonnet 4.6 634e4647da feat: setup Docker + MariaDB pour déploiement self-hosted
Deploy to Pacha Family / deploy (push) Failing after 3s
- Dockerfile (PHP 8.2 Apache + pdo_mysql)
- docker-compose.yml (househub + mariadb + Traefik househub.nas.percolouco.com)
- schema.sql (22 tables + données initiales)
- includes/db.php adapté pour variables d'environnement
- .env.example, .gitignore, README mis à jour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 12:07:04 +02:00
percoandClaude Sonnet 4.6 3f7ed9c2f1 refactor: renommage PachaFamily → HouseHub
Deploy to Pacha Family / deploy (push) Failing after 3s
- Remplacement de toutes les occurrences PachaFamily/pachafamily/PACHAFAMILY
- Renommage pachafamily_source.md → househub_source.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 11:58:53 +02:00