Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
PWA de gestion des dettes entre amis. Chaque pote est un « compte » : un seul chiffre net par personne, et une timeline complete des mouvements (cf. Hasbni_CDC.pdf). Le mode demonstration (jeu de donnees local, persistance IndexedDB, aucune requete reseau) demande NEXT_PUBLIC_DEMO=1. En production, un build sans variables Supabase et sans ce drapeau echoue volontairement : une app deployee avec des potes fictifs ressemble a une app qui marche.Read the full README ↗
PWA de gestion des dettes entre amis. Chaque pote est un « compte » : un seul chiffre net par
personne, et une timeline complete des mouvements (cf. Hasbni_CDC.pdf).
npm install
npm run dev # http://localhost:3000 — mode demonstration
Le mode demonstration (jeu de donnees local, persistance IndexedDB, aucune requete
reseau) demande NEXT_PUBLIC_DEMO=1. En production, un build sans variables Supabase et
sans ce drapeau echoue volontairement : une app deployee avec des potes fictifs ressemble
a une app qui marche.
supabase/schema.sql dans l'editeur SQL et l'executer. Ce fichier suffit :
il contient l'etat consolide (tables, contraintes, triggers, RPC, RLS, vue des soldes,
realtime). Les anciens patches sont archives dans supabase/patches/ et ne doivent
pas etre rejoues.cp .env.example .env.local puis renseigner NEXT_PUBLIC_SUPABASE_URL et
NEXT_PUBLIC_SUPABASE_ANON_KEY (Project Settings > API).npm run dev — les variables ne sont lues qu'au demarrage.Base deja en service ? Executer, dans l'ordre :
supabase/patch-06-durcissement.sql, supabase/patch-07-admin.sql,
supabase/patch-08-droits-et-groupes.sql, supabase/patch-09-pseudos-et-recherche.sql,
supabase/patch-10-pseudo-a-inscription.sql. Tous idempotents.
Pour verifier ce qui est reellement applique : coller supabase/diagnostic.sql
dans l'editeur SQL — lecture seule. Si une fonction existe en base mais que
l'app repond « Could not find the function public.… », c'est le cache de schema
de PostgREST : executer notify pgrst, 'reload schema';.
L'authentification est email + mot de passe (provider Email, actif par defaut). Pour tester a plusieurs sans boite mail, desactiver Authentication > Sign In / Providers > Email > Confirm email : les comptes sont alors utilisables immediatement.
Au premier login, le trigger on_auth_user_created cree automatiquement le profil avec le prenom
saisi a l'inscription.
| Ecran | Route | CDC |
|---|---|---|
| Accueil — liste des potes, totaux globaux, recherche/tri | / | 2.2 |
| Relation — timeline anti-chronologique + solde net sticky | /relation/[id] | 2.3 |
| Ajout de depense — repartition egale / personnalisee / par items | modale | 2.4 |
| Remboursement — saisie + confirmation bilaterale | modale | 2.5 |
| Groupes — membres, soldes, bouton « Simplifier » | /groupes | 2.6 / 2.7 |
| Activite — tous les mouvements, file de confirmation | /activite | — |
| Profil — compte, pseudo, potes, recherche, etat de synchro | /profil | — |
| Connexion / inscription — email + mot de passe | /login | 4 (flow 1) |
Une depense appartient a celui qui a paye. Lui seul peut l'annuler ou la corriger : si Youba paie pour moi, je ne peux pas effacer ma dette. La correction etait sinon une porte derobee — il suffisait de ramener le montant a 1 DA. Un groupe, lui, est supprimable par son createur ; ses depenses sont detachees, jamais supprimees, et aucun solde ne bouge.
Regles de gestion (CDC 3) : solde net sur mouvements confirmes, signe positif = l'autre me doit, statut « en attente » jusqu'a confirmation, annulation par ecriture inverse (jamais de suppression physique), DA arrondi a l'unite, reste d'arrondi au payeur.
src/lib/types.ts — modele calque sur le CDC 5.2.src/lib/ledger.ts — moteur de grand livre : eclatement bilateral, soldes, timeline,
simplification de dettes.src/lib/ops.ts — toute mutation est une operation serialisable (Op) appliquee par un
reducteur pur. C'est ce qui rend la saisie hors ligne possible : meme fonction pour l'etat
optimiste local et pour le rejeu.src/context/AuthContext.tsx — session Supabase (email + mot de passe), resolution du profil.src/context/AppContext.tsx — etat, file de synchronisation, temps reel.This is the beginning of the README. Read the rest at the original. Read the full README ↗