Carnet

Carnet · Architecture

Voir ce qui va sortir du compte sans connexion à la banque.

Une application web installable qui parle directement à Supabase. La sécurité vit dans la base. Tout est refusé par défaut. Le second facteur est obligatoire. Le commun et le privé sont séparés. Aucune connexion bancaire.

Le schéma

  1. 01 — Client

    Application web installable

    Elle tourne sur téléphone ou sur ordinateur. Les calculs d'argent se font dans le navigateur avec des montants en centimes. Le service worker ne garde que l'enveloppe de l'application et aucune donnée financière.

    Dialogue avec le backend (04) grâce à un jeton à 2 facteurs.

  2. 02 — Code

    GitHub

    Un dépôt privé. Chaque envoi lance les tests et les vérifications de sécurité.

    Prépare la mise en ligne sur Netlify (03). Les changements de base sont appliqués à la main sur Supabase (04).

  3. 03 — Hébergement

    Netlify

    Il publie l'application seulement sur demande pour ménager le plan gratuit. Les en-têtes de sécurité limitent les connexions au seul projet Supabase. Aucun script tiers.

    Sert les pages à l'application (01).

  4. 04 — Backend · Supabase

    Comptes, base et rappels

    Auth gère les comptes sur invitation avec un second facteur obligatoire. La base Postgres refuse tout par défaut. Le commun est lu par le foyer et modifié par l'administrateur. Le privé reste à son auteur. Un planificateur déclenche chaque jour les rappels.

    La fonction d'envoi choisit qui prévenir selon les droits de chacun.

    Envoie les alertes aux services push (05) et alimente la sauvegarde (06).

  5. 05 — Notifications

    Services push

    Les notifications arrivent sur Android grâce au Web Push signé avec des clés VAPID.

    Remet la notification au téléphone (01).

  6. 06 — Sauvegarde

    Copie hors ligne

    Une copie de la base est exportée chaque semaine à la main. Elle est chiffrée puis rangée hors de Supabase. Sa restauration est à essayer chaque trimestre.

    Reçoit l'export de la base (04).

Version actuelle de Carnet en production.

01

La sécurité vit dans la base

Chaque table refuse tout par défaut. Des règles par ligne décident qui lit quoi. Un membre ne peut ni lire ni modifier le privé d'un autre. Ces règles sont testées automatiquement à chaque envoi.

02

Des calculs d'argent exacts

Les montants sont des entiers en centimes. Les dates n'ont pas de fuseau horaire. La logique de calcul est écrite une seule fois et testée à part. La fonction d'envoi en reçoit une copie que la CI vérifie.

03

Aucun secret côté navigateur

L'application ne connaît que l'adresse de Supabase et une clé publique. La clé privée des notifications et la clé de service restent côté serveur. Il n'y a ni script tiers ni outil de mesure.

04

Une mise en ligne maîtrisée

Chaque envoi sur GitHub lance les tests. La publication se déclenche à la demande. Les changements de base sont appliqués à la main après validation. Une sauvegarde chiffrée est prévue chaque semaine.