a86c14b0b9ceefd7f0588a6e8ca497fa36b72cd4
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>
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
- Spécification fonctionnelle — features détaillées, schéma DB, interfaces
- Plan de développement — phases et tâches
- Design system — composants et règles visuelles
- API REST :
http://localhost:8000/docs(Swagger auto-généré par FastAPI)
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)
Description
Languages
JavaScript
41.8%
TypeScript
27%
Python
14.6%
HTML
12.1%
CSS
4.4%