deploy: equitask — 2026-04-28 19:51:14
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
# EquiTask
|
||||
|
||||
**Progressive Web App de mesure de la répartition des tâches domestiques dans un foyer.**
|
||||
|
||||
Mesurez et visualisez objectivement qui fait quoi à la maison via un système de scoring combinant temps passé et pénibilité.
|
||||
|
||||
---
|
||||
|
||||
## Fonctionnalités
|
||||
|
||||
- 📱 **PWA installable** — fonctionne sur mobile et desktop
|
||||
- 📵 **Mode offline** — saisie sans connexion, synchronisation automatique au retour
|
||||
- 👥 **Multi-membres** — jusqu'à 7 personnes (2 adultes + 5 enfants)
|
||||
- 📊 **Dashboard complet** — scores, répartition par catégorie, évolution temporelle, indicateur d'équilibre
|
||||
- 📋 **Catalogue de tâches** — 30 tâches récurrentes prédéfinies + tâches ponctuelles
|
||||
- 🔧 **Administration** — CRUD complet membres, catégories, tâches
|
||||
- ↓ **Export** — CSV (Excel/Sheets) ou JSON
|
||||
|
||||
---
|
||||
|
||||
## Stack technique
|
||||
|
||||
| Couche | Technologie |
|
||||
|--------|-------------|
|
||||
| Frontend | React 18 + Vite 5 + TypeScript + Tailwind CSS |
|
||||
| Graphiques | Recharts |
|
||||
| PWA | vite-plugin-pwa + Workbox |
|
||||
| Offline | IndexedDB (idb) |
|
||||
| Backend | Node.js + Express + TypeScript |
|
||||
| Base de données | SQLite + Drizzle ORM |
|
||||
| Déploiement | Docker (single container) |
|
||||
|
||||
---
|
||||
|
||||
## Installation et développement
|
||||
|
||||
### Prérequis
|
||||
- Node.js 20+
|
||||
- npm 9+
|
||||
|
||||
### Démarrage en développement
|
||||
|
||||
```bash
|
||||
# 1. Installer les dépendances backend
|
||||
cd backend
|
||||
npm install
|
||||
|
||||
# 2. Démarrer le backend (port 3001)
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Dans un second terminal :
|
||||
|
||||
```bash
|
||||
# 3. Installer les dépendances frontend
|
||||
cd frontend
|
||||
npm install
|
||||
|
||||
# 4. Démarrer le frontend (port 5173, proxy vers 3001)
|
||||
npm run dev
|
||||
```
|
||||
|
||||
L'application est accessible sur **http://localhost:5173**
|
||||
|
||||
### Build de production
|
||||
|
||||
```bash
|
||||
# Builder le frontend
|
||||
cd frontend && npm run build
|
||||
|
||||
# Le build est dans frontend/dist/
|
||||
# Copier dans backend/public/ pour le servir via Express
|
||||
cp -r frontend/dist/* backend/public/
|
||||
|
||||
# Builder et démarrer le backend
|
||||
cd backend
|
||||
npm run build
|
||||
npm start
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Déploiement avec Docker
|
||||
|
||||
### Build et démarrage local
|
||||
|
||||
```bash
|
||||
docker-compose up --build
|
||||
```
|
||||
|
||||
Application accessible sur **http://localhost:3001**
|
||||
|
||||
### Déploiement sur Coolify (VPS)
|
||||
|
||||
L'application est configurée pour être déployée automatiquement via Coolify :
|
||||
|
||||
1. Pousser le code sur Gitea : `git.domench.fr`
|
||||
2. Coolify détecte le `Dockerfile` et build l'image
|
||||
3. Le container est déployé sur `equitask.domench.fr` avec HTTPS via Traefik
|
||||
4. La base SQLite est persistée dans un volume Docker
|
||||
|
||||
**Variables d'environnement Coolify :**
|
||||
```
|
||||
NODE_ENV=production
|
||||
PORT=3001
|
||||
DATABASE_PATH=/data/equitask.db
|
||||
```
|
||||
|
||||
**Volume à créer dans Coolify :**
|
||||
- Container path : `/data`
|
||||
- Host path : (géré par Coolify)
|
||||
|
||||
---
|
||||
|
||||
## Modèle de données
|
||||
|
||||
```
|
||||
foyer → 1 seul enregistrement
|
||||
membres → jusqu'à 7 (2 adultes + 5 enfants)
|
||||
categories → 7 par défaut, éditables
|
||||
taches_rec. → catalogue de tâches récurrentes
|
||||
saisies → historique de toutes les tâches effectuées
|
||||
```
|
||||
|
||||
**Formule de score :** `score = durée (min) × coefficient pénibilité (1-5)`
|
||||
|
||||
---
|
||||
|
||||
## Catégories et tâches par défaut
|
||||
|
||||
| Catégorie | Tâches incluses |
|
||||
|-----------|----------------|
|
||||
| 🍳 Cuisine | Préparation repas, Vaisselle, Batch cooking… |
|
||||
| 🧹 Ménage | Aspiration, Salle de bain, Lessive, Repassage… |
|
||||
| 🛒 Courses | Courses alimentaires, Gestion liste… |
|
||||
| 👶 Enfants | Bain, Devoirs, Activités, Cartable… |
|
||||
| 📋 Administratif | RDV médicaux, Papiers, Impôts… |
|
||||
| 🔧 Entretien maison | Bricolage, Jardinage, Vitres… |
|
||||
| 🧠 Charge mentale | Planification, Scolarité, Santé famille… |
|
||||
|
||||
---
|
||||
|
||||
## Structure du projet
|
||||
|
||||
```
|
||||
equitask/
|
||||
├── backend/
|
||||
│ ├── src/
|
||||
│ │ ├── db/ # Schéma, seed, connexion SQLite
|
||||
│ │ ├── routes/ # API REST (foyer, membres, categories, taches, saisies)
|
||||
│ │ └── index.ts # Serveur Express
|
||||
│ └── package.json
|
||||
├── frontend/
|
||||
│ ├── src/
|
||||
│ │ ├── pages/ # SelectionProfil, Saisie, Dashboard, Parametres
|
||||
│ │ ├── components/ # UI, saisie, dashboard, settings
|
||||
│ │ ├── api/ # Clients REST
|
||||
│ │ ├── offline/ # Queue IndexedDB
|
||||
│ │ ├── context/ # AppContext (membre actif, online status)
|
||||
│ │ └── hooks/ # useOfflineSync, useToast
|
||||
│ └── package.json
|
||||
├── Dockerfile
|
||||
├── docker-compose.yml
|
||||
└── README.md
|
||||
```
|
||||
Reference in New Issue
Block a user