---
title: Clean Slate
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, tracking, calorie-tracker, food, health, nutrition]
confidence: medium
contested: false
sources: [https://selfh.st/apps/, https://cleanslate.sh/, https://github.com/successible/cleanslate]
---

# Clean Slate 🧘

> Tracker de calories libre et bienveillant, conçu pour les personnes en lutte avec les régimes et la relation à la nourriture.

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://cleanslate.sh/ |
| **GitHub** | https://github.com/successible/cleanslate |
| **License** | Apache-2.0 |
| **Langage principal** | TypeScript (Next.js) |
| **Étoiles GitHub** | ~234 (dépôt mirror très actif) |
| **Dernière MAJ** | 2026-05 (v4.22.0) |
| **Catégorie** | [[cat-tracking]] |

## Description
Clean Slate est une application web de **suivi alimentaire et calorique** qui se distingue volontairement des trackers classiques par son approche non-jugeante. Le projet, développé originellement pour aider ses créateurs à rompre avec les cycles de restriction et de frénésie, abandonne la rhétorique punitive habituelle (« tu as échoué », calories restantes, etc.) au profit d'une interface neutre. L'objectif est de faciliter un journal alimentaire régulier sans générer de culpabilité.

L'application permet de chercher et journaliser des aliments (base Open Food Facts pour les codes-barres), créer des recettes personnalisées, suivre les protéines et l'exercice, et fonctionne sur tout appareil disposant d'un navigateur. Une instance publique gratuite est maintenue par l'auteur sur cleanslate.sh avec authentification Apple, GitHub et Google ; l'auto-hébergement reste néanmoins pleinement supporté via Docker Compose.

Techniquement, Clean Slate s'appuie sur une stack moderne : **Next.js + TypeScript** côté front, **Hasura (GraphQL)** comme couche API, **PostgreSQL** pour la persistance, et **Caddy** comme reverse-proxy HTTPS automatique. Le projet est en production depuis plusieurs années avec un rythme de releases soutenu (≈150 releases).

## Installation
### Via Docker (recommandé)
```yaml
services:
  cleanslate:
    image: ghcr.io/successible/cleanslate:latest
    container_name: cleanslate
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - HASURA_GRAPHQL_ADMIN_SECRET=change-me-strong-secret
      - NEXT_PUBLIC_HASURA_URL=http://cleanslate:8080/v1/graphql
      - DOMAIN_NAME=https://cleanslate.example.com
    volumes:
      - ./data:/app/.user
    depends_on:
      - postgres

  postgres:
    image: postgres:16-alpine
    container_name: cleanslate-db
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: change-me
      POSTGRES_DB: cleanslate
    volumes:
      - ./postgres:/var/lib/postgresql/data
```
> Note : la procédure officielle clone le dépôt et exécute `bash configuration.sh` + `bash deploy.sh`, qui génère Caddyfile + .env automatiquement. L'image GHCR est un placeholder honnête : référez-vous au README pour le docker-compose de production exact.

### Installation manuelle
1. Cloner le dépôt : `git clone https://github.com/successible/cleanslate && cd cleanslate`
2. Installer `uuid-runtime` (Debian/Ubuntu : `apt install uuid-runtime`)
3. Lancer `bash configuration.sh` pour générer `.env` et `Caddyfile`
4. Builder et démarrer : `bash deploy.sh`
5. Créer un utilisateur depuis la console Hasura `https://cleanslate.example.com/console`

## Configuration
- **HASURA_GRAPHQL_ADMIN_SECRET** : secret administrateur de l'API GraphQL (obligatoire, choisir une valeur forte).
- **DOMAIN_NAME** : FQDN public utilisé pour le reverse-proxy Caddy et les origines CSRF.
- **Authentification** : deux modes — locale (par défaut, simple) ou Firebase (plus complexe, nécessaire pour Login with Apple/Google).
- **Création du premier utilisateur** : se connecter à la console Hasura, insérer une ligne dans la table `public.profiles`, puis utiliser la valeur `apiToken` comme mot de passe sur l'interface web.
- **Mises à jour** : `git pull && bash deploy.sh` (les images Docker sont reconstruites avec un délai d'environ 20 minutes après chaque release GitHub).

## Alternatives
### Open source
- [[app-beaverhabits]] — Tracker d'habitudes (pas de nutrition)
- Tandoor Recipes — Gestion de recettes avec planification de repas
- Open Food Facts — Base de données alimentaire utilisée par Clean Slate (projet parent, à auto-héberger en option)

### Propriétaires
- MyFitnessPal — Tracker dominant, freemium agressif et base d'aliments私有
- Lose It! — Approche similaire mais avec objectifs stricts et paywall lourd
- Yazio — Interface moderne, fonctionnalités limitées en gratuit

## Sécurité
- **Reverse-proxy HTTPS** : Caddy gère automatiquement Let's Encrypt ; port 443 à ouvrir en permanence.
- **Secret Hasura** : le `HASURA_GRAPHQL_ADMIN_SECRET` donne accès à toute la base — choisir une valeur aléatoire longue (32+ caractères) et la traiter comme un mot de passe root.
- **Authentification** : par défaut, authentification locale avec `apiToken` (long, opaque). Pour une utilisation multi-utilisateur, préférer Firebase Auth ou OIDC.
- **Caddyfile** : généré par `configuration.sh`, expose correctement les en-têtes HSTS et le CSP.
- **Mises à jour** : suivre les releases GitHub, releases régulières incluant patches de sécurité.

## Ressources
- Site officiel : https://cleanslate.sh/
- Code source : https://github.com/successible/cleanslate
- Démo hébergée : https://cleanslate.sh/ (gratuite)
- Reddit r/selfhosted : https://www.reddit.com/r/selfhosted/comments/88pxhd/self_hosted_calorie_counter/
- selfh.st apps : https://selfh.st/apps/

## Pages Liées
- [[cat-tracking]]
- [[recettes-docker-compose]]
