judu/ex-egopublic Fork
⑂ main
Commits
⬇ Clone ▾
git clone https://git.rickub.com/judu/ex-ego.git
git clone ssh://git@rickub.com/judu/ex-ego.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP
docs: captures et textes de l'étape 2 pour les deux capsules heures / minutes bb57e7bUnverified · on main · Julien Durillon · Sep 13, 2026
README.md · 260 lines · 11.8 KBmarkdown
Blame HistoryOpen raw

Ex Ego

Ex Ego — à l'oreille ex aequo (l'objectif : à égalité), à l’écrit
ex-ego (le moyen : on dépose l'ego et on mesure de bonne foi).

Application web de comptage de temps par catégorie et de tâches partagées, en
équipe. Mobile-first (PWA), UI en quatre langues (français, anglais, allemand,
portugais du Brésil), rendu 100 % côté serveur, amélioration progressive en
JavaScript.

Stack : Rust (axum, askama, sqlx), PostgreSQL, biscuit-auth. Aucun framework
front, une seule feuille de CSS.

Inspiration

L'inspiration vient de Maydée,
l'application de l'association fondée par Julie Hebting pour rendre visible la
répartition du travail domestique (18h39,
Magic Maman).
Maydée ne semble malheureusement plus utilisable aujourd'hui (son domaine ne
pointe même plus vers l'association).

Ex Ego a pour but de remplacer Maydée pour m’apporter une continuité.
On garde les mêmes fonctionnalités:

  • Compter le temps d’une tâche
  • Catégoriser le temps compté
  • Visualiser la répartition du temps et des tâches.

On laisse tomber les infos personnelle : CSP, notion de "Couple", nombre d’enfants…
J’imagine que Maydée voulait pouvoir faire des stats là-dessus, moi je m’en fiche.

But de l’application

Avoir de la donnée sur le temps passé aux tâches domestiques change la
nature de la conversation : on ne débat plus de ressentis ni de souvenirs
(« j'ai l'impression de tout faire ») mais d'un relevé que chacun a constitué
de bonne foi. La répartition des tâches devient un sujet moins passionné et
plus apaisé (on regarde les chiffres ensemble, puis on décide ensemble).

Ex Ego n'a pas vocation à devenir un SaaS pour l'instant : la création de
comptes est manuelle (en ligne de commande), pas d'e-mail, pas d'inscription,
rien. Si tu veux essayer, je peux partager un compte sur une instance de
démo à la demande (ouvre une issue).

Exemples

En utilisant Maydée puis Ex Ego, nous avons remarqué différentes choses chez nous:

  • Une personne pensait que l’autre ne faisait pas grand chose, car l’autre n’informait pas
    forcément des tâches effectuées
  • Ça apporte un petit côté gamification où on veut essayer de rattraper l’autre
  • On s’est rendu compte qu’un partage des tâches "statique" pouvait être trompeur : faire
    à manger = 1 heure, faire la vaisselle du même repas < 15 minutes.
  • Si A fait une tâche mais pas jusqu’au bout, B est moins agacé·e car au pire iel finit la
    tâche en mesurant. Et vice-versa.
  • Parfois, si A a beaucoup d’heures d’avance, iel se sent plus légitime à faire une
    pause.

English

Team time tracker and shared todo list.

The core idea is comparing time spent on household tasks
(the fairest measure of domestic work, as long as everyone acts in good
faith). Log time per category, run a timer, take dated tasks and
reschedule them at their observed rhythm, and read stacked-bar statistics
per member.

Having data about time spent on housework changes the nature
of the conversation. Instead of debating feelings and recollections, you
look at numbers gathered in good faith (a calmer, less heated way to talk
about who does what).

Not a SaaS for now: accounts are created manually
from the command line (no e-mail, no sign-up); a demo account can be
shared on request. Mobile-first PWA, fully server-rendered (JavaScript is progressive enhancement only),
available in four languages (FR/EN/DE/PT-BR, language is a per-user setting), with an optional
high-contrast black-and-white theme (per-user too, charts included).

Deustch

Zeiterfassung und geteilte Aufgabenliste fürs Team.

Kern der Idee ist der Vergleich der aufgewendeten Zeit für Hausarbeit (das fairste Maß für
häusliche Arbeit, solange alle guten Willens sind). Zeiten pro Kategorie
erfassen, Timer laufen lassen, datierte Aufgaben übernehmen und im
beobachteten Rhythmus neu planen, Statistiken pro Mitglied lesen.

Daten über die für Hausarbeit aufgewendete Zeit verändern das Gespräch.
Statt über Gefühle und Erinnerungen zu streiten, schaut man gemeinsam auf in
gutem Glauben erfasste Zahlen (eine ruhigere, sachlichere Art, über die
Aufgabenverteilung zu sprechen).

Vorerst kein SaaS: Konten werden manuell über die Kommandozeile angelegt
(keine E-Mail, keine Registrierung); ein Demo-Konto gibt es auf Anfrage.
Mobile-first-PWA, vollständig serverseitig gerendert (JavaScript nur als
Progressive Enhancement), in vier Sprachen (FR/EN/DE/PT-BR, die Sprache ist eine
Einstellung pro Benutzer), mit optionalem kontrastreichem
Schwarz-Weiß-Thema (ebenfalls pro Benutzer, inklusive Diagramme).

Português (Brasil)

Contador de tempo em equipe e lista de tarefas compartilhada.

A ideia central é comparar o tempo gasto nas tarefas domésticas (a medida
mais justa do trabalho de casa, desde que todo mundo aja de boa-fé). Dá para
registrar tempo por categoria, deixar um cronômetro rodando, pegar tarefas
datadas e reprogramá-las no ritmo observado, e ler estatísticas em barras
empilhadas por membro.

Ter dados sobre o tempo gasto com a casa muda a natureza da conversa.
Em vez de discutir impressões e lembranças, vocês olham
juntos para números registrados de boa-fé (um jeito mais calmo e menos
inflamado de falar sobre quem faz o quê).

Por enquanto não é um SaaS: as contas
são criadas manualmente pela linha de comando (sem e-mail, sem cadastro); uma
conta de demonstração pode ser compartilhada mediante pedido.
PWA mobile-first, renderizado 100 % no servidor (o JavaScript é só melhoria
progressiva), em quatro idiomas (FR/EN/DE/PT-BR, o idioma é uma configuração
por usuário), com um tema opcional em preto e branco de alto contraste (também
por usuário, gráficos incluídos).

Fonctionnalités

  • Saisie de temps: choisir une catégorie, puis durée
    (heures + minutes au stepper ou au clavier, presets) et date. Un écran "paramètres" permet de modifier/supprimer.
  • Minuteur : démarrer/arrêter une mesure, enregistrée dans la catégorie
    choisie.
  • Statistiques : 6 graphiques (semaine en équipe, puis comparatif par tâche pour : jour, semaine ISO, mois, année, tout
    l'historique), une colonne par membre, détail par segment en pop up.
  • Todo list d'équipe : tâches datées rattachées à une catégorie ;
    n'importe quel membre peut prendre une tâche (une action permet de se verrouiller une
    tâche), la marquer faite en enregistrant un
    temps ou non, puis la reprogrammer à la date proposée. Assignations purement informatives avec filtre
    « Mes tâches ». Bloc « À venir » pour les tâches futures.
  • Équipes : multi-équipes par utilisateur, équipe active par appareil
    (cookie), invitations par username, couleur d'équipe dérivée de son id.
  • Comptes : session par biscuit en cookie (~6 mois),
    révocation au logout, CSRF stateless, argon2id.
  • Accessibilité : WCAG 2.1/2.2 AA (zéro violation axe sur les 12
    écrans : contrastes, cibles 24 px, landmarks, focus des sheets, Échap).
  • Contraste élevé : un thème noir et blanc, réglage par utilisateur
    (Réglages → Affichage), pour les écrans très sombres ou les filtres de
    lumière chaude.
  • Quadrilingue : français, anglais, allemand, portugais du Brésil. La
    langue est un réglage par utilisateur (page Réglages). Langue par défaut à la création
    modifiable par la variable d'environnement DEFAULT_LANG.

Si la vidéo ne s’affiche pas :
la télécharger.

Captures d'écran

Connexion Choisir la catégorie
Connexion Ajouter : choisir la catégorie
Durée et date Statistiques
Ajouter : durée et date Statistiques d'équipe
Tâches Tâche effectuée
Todo list (verrou, assignations) Complétion en bottom sheet
Changer d'équipe Réglages
Sélecteur d'équipe Réglages et invitations

Ligne de commande

Les comptes ne se créent que par CLI.
Le binaire sert aussi d'outil d'administration.
Toutes les commandes appliquent les migrations au démarrage et
lisent la base via POSTGRESQL_ADDON_URI (prioritaire) ou DATABASE_URL.

exego serve                                  # lance le serveur (défaut)
exego keygen                                 # génère BISCUIT_PRIVATE_KEY
exego team add <nom>                         # crée une équipe
exego user add <username> --team <équipe>    # crée un compte (mdp demandé
                                             #   ou --password <mdp>)
exego user join <username> --team <équipe>   # ajoute un compte existant
                                             #   à une équipe

Variables d'environnement du serveur :

Variable Rôle
POSTGRESQL_ADDON_URI ou DATABASE_URL connexion PostgreSQL (TLS imposé côté client quoi que dise l'URL)
BISCUIT_PRIVATE_KEY clé privée racine (à générer une fois avec exego keygen)
PORT port d'écoute (défaut 8080)
DEFAULT_LANG langue des nouveaux comptes et des pages anonymes : fr (défaut), en, de ou pt-br

Développement local

cargo build && cargo test
DATABASE_URL='postgresql://…' \
BISCUIT_PRIVATE_KEY=$(cargo run -- keygen | grep -o '[0-9a-f]\{64\}') \
PORT=8090 cargo run -- serve

Audit d'accessibilité : voir a11y/audit.mjs (axe-core + Chrome
headless sur les 12 écrans, exit 1 à la moindre violation sérieuse).

Déployer sur Clever Cloud

Prérequis : clever-tools
(npm i -g clever-tools) et clever login.

# 1. Créer l'application Rust (dans le clone du dépôt)
clever create --type rust exego

# 2. Créer l'add-on PostgreSQL et le lier à l'application
clever addon create postgresql-addon exego-db --plan dev
clever service link-addon exego-db
#    → l'app reçoit POSTGRESQL_ADDON_URI automatiquement

# 3. Générer et poser la clé biscuit (à garder précieusement :
#    la changer invalide toutes les sessions)
clever env set BISCUIT_PRIVATE_KEY "$(cargo run -- keygen | grep -o '[0-9a-f]\{64\}')"

# 4. Déployer (pousse le HEAD git ; les migrations s'appliquent au boot)
clever deploy
clever logs                        # suivre le démarrage

# 5. Créer la première équipe et le premier compte, depuis ta machine,
#    en visant la base de l'add-on
export POSTGRESQL_ADDON_URI="$(clever env | grep '^POSTGRESQL_ADDON_URI=' | cut -d'"' -f2)"
cargo run -- team add "Maison"
cargo run -- user add alice --team "Maison"

Notes :

  • Le fichier .clever.json créé par clever create/clever link contient
    les identifiants de l'app. Il est ignoré par git dans ce repo public, mais rien
    n’empêche de le committer.
  • Dimensionnement éprouvé : build flavor L, run flavor nano
    (clever scale --build-flavor L --flavor nano).
  • Le plan PostgreSQL DEV est limité à 5 connexions : le pool de l'app est
    calibré à 2 pour survivre à la cohabitation bleu-vert d'un déploiement.
  • Écrire les migrations pour qu'elles passent sur les données déjà en
    production : l'ancien et le nouveau binaire cohabitent quelques secondes.

Licence

The Unlicense (domaine public).

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
# Ex Ego

**Ex Ego** — à l'oreille *ex aequo* (l'objectif : à égalité), à l’écrit
*ex-ego* (le moyen : on dépose l'ego et on mesure de bonne foi).

Application web de comptage de temps par catégorie et de tâches partagées, en
équipe. Mobile-first (PWA), UI en quatre langues (français, anglais, allemand,
portugais du Brésil), rendu 100 % côté serveur, amélioration progressive en
JavaScript.

Stack : Rust (axum, askama, sqlx), PostgreSQL, biscuit-auth. Aucun framework
front, une seule feuille de CSS.

### Inspiration

L'inspiration vient de [Maydée](https://blog.mbadmb.com/lapplication-maydee/),
l'application de l'association fondée par Julie Hebting pour rendre visible la
répartition du travail domestique ([18h39](https://www.18h39.fr/changer-de-vie/solidarite-logement/mesurez-comment-les-taches-sont-reparties-dans-votre-couple-grace-a-cette-appli.html),
[Magic Maman](https://www.magicmaman.com/maydee-l-appli-qui-peut-revolutionner-la-repartition-des-travaux-menagers,3598841.asp)).
Maydée ne semble malheureusement plus utilisable aujourd'hui (son domaine ne
pointe même plus vers l'association).

Ex Ego a pour but de remplacer Maydée pour m’apporter une continuité.
On garde les mêmes fonctionnalités:
- Compter le temps d’une tâche
- Catégoriser le temps compté
- Visualiser la répartition du temps et des tâches.

On laisse tomber les infos personnelle : CSP, notion de "Couple", nombre d’enfants…
J’imagine que Maydée voulait pouvoir faire des stats là-dessus, moi je m’en fiche.

### But de l’application

Avoir de la *donnée* sur le temps passé aux tâches domestiques change la
nature de la conversation : on ne débat plus de ressentis ni de souvenirs
(« j'ai l'impression de tout faire ») mais d'un relevé que chacun a constitué
de bonne foi. La répartition des tâches devient un sujet moins passionné et
plus apaisé (on regarde les chiffres ensemble, puis on décide ensemble).

Ex Ego n'a pas vocation à devenir un SaaS pour l'instant : la création de
comptes est manuelle (en ligne de commande), pas d'e-mail, pas d'inscription,
rien. Si tu veux essayer, je peux partager un compte sur une instance de
démo à la demande (ouvre une issue).

#### Exemples

En utilisant Maydée puis Ex Ego, nous avons remarqué différentes choses chez nous:

- Une personne pensait que l’autre ne faisait pas grand chose, car l’autre n’informait pas
  forcément des tâches effectuées
- Ça apporte un petit côté _gamification_ où on veut essayer de rattraper l’autre
- On s’est rendu compte qu’un partage des tâches "statique" pouvait être trompeur : faire
  à manger = 1 heure, faire la vaisselle du même repas < 15 minutes.
- Si A fait une tâche mais pas jusqu’au bout, B est moins agacé·e car au pire iel finit la
  tâche en mesurant. Et vice-versa.
- Parfois, si A a beaucoup d’heures d’avance, iel se sent plus légitime à faire une
  pause.

### English

Team time tracker and shared todo list.

The core idea is comparing *time spent* on household tasks
(the fairest measure of domestic work, as long as everyone acts in good
faith). Log time per category, run a timer, take dated tasks and
reschedule them at their observed rhythm, and read stacked-bar statistics
per member.

Having *data* about time spent on housework changes the nature
of the conversation. Instead of debating feelings and recollections, you
look at numbers gathered in good faith (a calmer, less heated way to talk
about who does what).

Not a SaaS for now: accounts are created manually
from the command line (no e-mail, no sign-up); a demo account can be
shared on request. Mobile-first PWA, fully server-rendered (JavaScript is progressive enhancement only),
available in four languages (FR/EN/DE/PT-BR, language is a per-user setting), with an optional
high-contrast black-and-white theme (per-user too, charts included).

### Deustch

Zeiterfassung und geteilte Aufgabenliste fürs Team.

Kern der Idee ist der Vergleich der *aufgewendeten Zeit* für Hausarbeit (das fairste Maß für
häusliche Arbeit, solange alle guten Willens sind). Zeiten pro Kategorie
erfassen, Timer laufen lassen, datierte Aufgaben übernehmen und im
beobachteten Rhythmus neu planen, Statistiken pro Mitglied lesen.

*Daten* über die für Hausarbeit aufgewendete Zeit verändern das Gespräch.
Statt über Gefühle und Erinnerungen zu streiten, schaut man gemeinsam auf in
gutem Glauben erfasste Zahlen (eine ruhigere, sachlichere Art, über die
Aufgabenverteilung zu sprechen).

Vorerst kein SaaS: Konten werden manuell über die Kommandozeile angelegt
(keine E-Mail, keine Registrierung); ein Demo-Konto gibt es auf Anfrage.
Mobile-first-PWA, vollständig serverseitig gerendert (JavaScript nur als
Progressive Enhancement), in vier Sprachen (FR/EN/DE/PT-BR, die Sprache ist eine
Einstellung pro Benutzer), mit optionalem kontrastreichem
Schwarz-Weiß-Thema (ebenfalls pro Benutzer, inklusive Diagramme).

### Português (Brasil)

Contador de tempo em equipe e lista de tarefas compartilhada.

A ideia central é comparar o *tempo gasto* nas tarefas domésticas (a medida
mais justa do trabalho de casa, desde que todo mundo aja de boa-fé). Dá para
registrar tempo por categoria, deixar um cronômetro rodando, pegar tarefas
datadas e reprogramá-las no ritmo observado, e ler estatísticas em barras
empilhadas por membro.

Ter *dados* sobre o tempo gasto com a casa muda a natureza da conversa.
Em vez de discutir impressões e lembranças, vocês olham
juntos para números registrados de boa-fé (um jeito mais calmo e menos
inflamado de falar sobre quem faz o quê).

Por enquanto não é um SaaS: as contas
são criadas manualmente pela linha de comando (sem e-mail, sem cadastro); uma
conta de demonstração pode ser compartilhada mediante pedido.
PWA mobile-first, renderizado 100 % no servidor (o JavaScript é só melhoria
progressiva), em quatro idiomas (FR/EN/DE/PT-BR, o idioma é uma configuração
por usuário), com um tema opcional em preto e branco de alto contraste (também
por usuário, gráficos incluídos).

## Fonctionnalités

<table>
<tr>
<td>

- **Saisie de temps**: choisir une catégorie, puis durée
  (heures + minutes au stepper ou au clavier, presets) et date. Un écran "paramètres" permet de modifier/supprimer.
- **Minuteur** : démarrer/arrêter une mesure, enregistrée dans la catégorie
  choisie.
- **Statistiques** : 6 graphiques (semaine en équipe, puis comparatif par tâche pour : jour, semaine ISO, mois, année, tout
  l'historique), une colonne par membre, détail par segment en pop up.
- **Todo list d'équipe** : tâches datées rattachées à une catégorie ;
  n'importe quel membre peut prendre une tâche (une action permet de se verrouiller une
  tâche), la marquer faite en enregistrant un
  temps ou non, puis la reprogrammer à la date proposée. Assignations purement informatives avec filtre
  « Mes tâches ». Bloc « À venir » pour les tâches futures.
- **Équipes** : multi-équipes par utilisateur, équipe active par appareil
  (cookie), invitations par username, couleur d'équipe dérivée de son id.
- **Comptes** : session par biscuit en cookie (~6 mois),
  révocation au logout, CSRF stateless, argon2id.
- **Accessibilité** : WCAG 2.1/2.2 AA (zéro violation axe sur les 12
  écrans : contrastes, cibles 24 px, landmarks, focus des sheets, Échap).
- **Contraste élevé** : un thème noir et blanc, réglage **par utilisateur**
  (Réglages → Affichage), pour les écrans très sombres ou les filtres de
  lumière chaude.
- **Quadrilingue** : français, anglais, allemand, portugais du Brésil. La
  langue est un réglage **par utilisateur** (page Réglages). Langue par défaut à la création
  modifiable par la variable d'environnement `DEFAULT_LANG`.

</td>
<td width="300">

![Démonstration d’Ex Ego en vidéo](https://files.judu.bzh/ex-ego-readme-demo.mp4)

<sub>Si la vidéo ne s’affiche pas :
[la télécharger](https://files.judu.bzh/ex-ego-readme-demo.mp4).</sub>

</td>
</tr>
</table>

## Captures d'écran

| | |
|:---:|:---:|
| ![Connexion](docs/screens/connexion.png) | ![Choisir la catégorie](docs/screens/ajouter.png) |
| *Connexion* | *Ajouter : choisir la catégorie* |
| ![Durée et date](docs/screens/duree.png) | ![Statistiques](docs/screens/stats.png) |
| *Ajouter : durée et date* | *Statistiques d'équipe* |
| ![Tâches](docs/screens/taches.png) | ![Tâche effectuée](docs/screens/tache-effectuee.png) |
| *Todo list (verrou, assignations)* | *Complétion en bottom sheet* |
| ![Changer d'équipe](docs/screens/equipes.png) | ![Réglages](docs/screens/reglages.png) |
| *Sélecteur d'équipe* | *Réglages et invitations* |

## Ligne de commande

Les comptes ne se créent que par CLI.
Le binaire sert aussi d'outil d'administration.
Toutes les commandes appliquent les migrations au démarrage et
lisent la base via `POSTGRESQL_ADDON_URI` (prioritaire) ou `DATABASE_URL`.

```bash
exego serve                                  # lance le serveur (défaut)
exego keygen                                 # génère BISCUIT_PRIVATE_KEY
exego team add <nom>                         # crée une équipe
exego user add <username> --team <équipe>    # crée un compte (mdp demandé
                                             #   ou --password <mdp>)
exego user join <username> --team <équipe>   # ajoute un compte existant
                                             #   à une équipe
```

Variables d'environnement du serveur :

| Variable | Rôle |
|---|---|
| `POSTGRESQL_ADDON_URI` ou `DATABASE_URL` | connexion PostgreSQL (TLS imposé côté client quoi que dise l'URL) |
| `BISCUIT_PRIVATE_KEY` | clé privée racine (à générer une fois avec `exego keygen`) |
| `PORT` | port d'écoute (défaut 8080) |
| `DEFAULT_LANG` | langue des nouveaux comptes et des pages anonymes : `fr` (défaut), `en`, `de` ou `pt-br` |

### Développement local

```bash
cargo build && cargo test
DATABASE_URL='postgresql://…' \
BISCUIT_PRIVATE_KEY=$(cargo run -- keygen | grep -o '[0-9a-f]\{64\}') \
PORT=8090 cargo run -- serve
```

Audit d'accessibilité : voir `a11y/audit.mjs` (axe-core + Chrome
headless sur les 12 écrans, exit 1 à la moindre violation sérieuse).

## Déployer sur Clever Cloud

Prérequis : [clever-tools](https://www.clever-cloud.com/doc/clever-tools/)
(`npm i -g clever-tools`) et `clever login`.

```bash
# 1. Créer l'application Rust (dans le clone du dépôt)
clever create --type rust exego

# 2. Créer l'add-on PostgreSQL et le lier à l'application
clever addon create postgresql-addon exego-db --plan dev
clever service link-addon exego-db
#    → l'app reçoit POSTGRESQL_ADDON_URI automatiquement

# 3. Générer et poser la clé biscuit (à garder précieusement :
#    la changer invalide toutes les sessions)
clever env set BISCUIT_PRIVATE_KEY "$(cargo run -- keygen | grep -o '[0-9a-f]\{64\}')"

# 4. Déployer (pousse le HEAD git ; les migrations s'appliquent au boot)
clever deploy
clever logs                        # suivre le démarrage

# 5. Créer la première équipe et le premier compte, depuis ta machine,
#    en visant la base de l'add-on
export POSTGRESQL_ADDON_URI="$(clever env | grep '^POSTGRESQL_ADDON_URI=' | cut -d'"' -f2)"
cargo run -- team add "Maison"
cargo run -- user add alice --team "Maison"
```

Notes :

- Le fichier `.clever.json` créé par `clever create`/`clever link` contient
  les identifiants de l'app. Il est **ignoré par git** dans ce repo public, mais rien
  n’empêche de le committer.
- Dimensionnement éprouvé : build flavor `L`, run flavor `nano`
  (`clever scale --build-flavor L --flavor nano`).
- Le plan PostgreSQL DEV est limité à 5 connexions : le pool de l'app est
  calibré à 2 pour survivre à la cohabitation bleu-vert d'un déploiement.
- Écrire les migrations pour qu'elles passent sur les données déjà en
  production : l'ancien et le nouveau binaire cohabitent quelques secondes.

## Licence

[The Unlicense](LICENSE) (domaine public).