gilles a86c14b0b9 feat(shopping): proposition d'ajout au catalogue pour les articles libres
Quand un article tapé n'existe pas dans le catalogue et qu'aucun produit
n'est sélectionné, une case "Ajouter au catalogue" apparaît (cochée par
défaut). Si cochée, le produit est créé via POST /api/shopping/products
avant l'ajout à la liste, avec l'unité pré-remplie si saisie.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 06:55:33 +02:00

HomeHub

Application d'organisation personnelle auto-hébergée — PWA mobile-first déployée sur Proxmox 9.

Fonctionnalités

  • Todos — tâches classées par domaine (informatique, DIY, jardinage, cuisine…)
  • Liste de courses — générée depuis les habitudes d'achat, mode magasin avec Wake Lock, suivi des prix, OCR étiquettes et tickets
  • Notes — saisie rapide avec photo, audio, GPS et métadonnées libres
  • MCP Server — expose les données à des agents IA (Hermes, Claude, etc.)

Stack technique

Composant Technologie
Frontend React 18 + Vite + TypeScript + Tailwind CSS
Backend Python 3.12 + FastAPI (async)
Base de données PostgreSQL 16 (schémas multiples)
Migrations Alembic
OCR Tesseract 5 (service Docker dédié, partagé entre modules)
Scan code-barres zxing-js (frontend, iOS + Android)
Catalogue produits OpenFoodFacts API (~3M produits alimentaires)
Recherche image SearXNG (auto-hébergé, fallback image produits)
Déploiement Docker Compose · Nginx Proxy Manager
Design system Gruvbox seventies (design_system/)

Démarrage rapide

cd ~/Documents/projet/home_hub

# Lancer l'app (première fois ou après un arrêt)
docker compose up -d

# Frontend  → http://localhost:3001  (ou http://<IP-locale>:3001 sur le réseau)
# API Swagger → http://localhost:8000/docs

Après modification du code :

# Rebuild + relancer un service
docker compose build backend && docker compose up -d backend
docker compose build frontend && docker compose up -d frontend

# Rebuild tout
docker compose build && docker compose up -d

Maintenance :

docker compose down          # Arrêter (données conservées)
docker compose logs -f       # Logs en direct
docker compose ps            # État des conteneurs

Structure du projet

home_hub/
├── ocr/
│   ├── app.py            # Service FastAPI OCR (Tesseract + Pillow)
│   └── Dockerfile
├── product-search/
│   ├── app.py            # Client OpenFoodFacts + proxy SearXNG images
│   └── Dockerfile
├── backend/
│   ├── app/
│   │   ├── api/          # Endpoints par domaine (todos, shopping, notes, media, mcp)
│   │   ├── core/         # Config, base de données, middleware
│   │   ├── models/       # Modèles SQLAlchemy
│   │   ├── schemas/      # Schémas Pydantic
│   │   └── services/
│   │       ├── media.py  # Upload, compression, génération miniatures (Pillow)
│   │       ├── ocr.py    # Client vers service ocr:8001
│   │       └── ...       # Suggestions shopping, sync calendrier (futur)
│   ├── alembic/          # Migrations de base de données
│   ├── Dockerfile
│   └── requirements.txt
├── frontend/
│   ├── src/
│   │   ├── components/   # Composants React
│   │   ├── pages/        # Pages par module
│   │   ├── hooks/        # Hooks personnalisés (camera, geolocation, wake-lock…)
│   │   └── api/          # Client API typé
│   ├── public/
│   │   └── manifest.json
│   ├── Dockerfile
│   └── vite.config.ts
├── design_system/        # Design system Gruvbox seventies (tokens + composants)
├── docs/
│   ├── spec.md           # Spécification fonctionnelle complète
│   └── plan.md           # Plan de développement par phases
├── docker-compose.yml
├── docker-compose.dev.yml
└── .env.example

Documentation

Déploiement (Proxmox)

# Production
docker compose up -d

# Nginx Proxy Manager pointe vers :
#   homehub.local → frontend:3000
#   homehub.local/api → backend:8000
#   homehub.local/mcp → backend:8000/mcp (pour les agents IA)

Évolutions prévues

  • Authentification multi-utilisateurs (JWT)
  • Sync Google Calendar + CalDAV iOS
  • Intégration Home Assistant
  • Webhooks Gitea → Kanban
  • Analyse frigo par Vision LLM (Hermes/Ollama)
S
Description
No description provided
Readme 721 KiB
Languages
JavaScript 41.8%
TypeScript 27%
Python 14.6%
HTML 12.1%
CSS 4.4%