尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Application personnelle de suivi de budget, installable sur l'écran d'accueil de l'iPhone. HTML / CSS / JavaScript purs (modules ES), sans étape de build ni dépendance payante. Synchronisation multi-appareils via Firebase Realtime Database (offre gratuite).檢視完整 README ↗
Application personnelle de suivi de quelques budgets choisis, des charges fixes et de l'évolution du salaire, installable sur l'écran d'accueil de l'iPhone. HTML / CSS / JavaScript purs (modules ES), sans étape de build ni dépendance payante. Synchronisation multi-appareils via Firebase Realtime Database (offre gratuite), avec le même compte que Mon Garage, Ma Maison, Carnet et Allure.
Trois pages, peu de chiffres : on ne note pas tout, on suit ce qui compte.
rec-<id>-<AAAA-MM> que la génération automatique : pas de doublon) ; total par mois et par an ; évolution sur 12 mois (comparaison avec un an avant) ou par année (moyenne mensuelle, mois en cours incomplet non compté).users/<uid>/budget/plans/<id>, et dans l'export JSON.users/<uid>/budget/hidden pour ne plus la compter. Publiées par ces apps, avec le même compte, sous users/<uid>/budget/linked/garage et …/linked/maison ; Mon budget les lit dans son propre nœud et ne les réécrit jamais. Ne pas les ressaisir à la main.budget_theme_auto_v1) ; « clair » est conservé.index.html Squelette HTML
manifest.webmanifest Manifeste PWA (icônes icon-*.png, apple-touch-icon.png)
database.rules.json Règles fermées à publier sur l'ANCIENNE base publique (voir « Sécurité »)
css/ tokens, theme, base, composants, mise en page, views/budget.css, ardoise (couleurs gris bleu et cobalt, chargé en dernier)
js/
main.js Point d'entrée
config/firebase-config.js Configuration Firebase (projet commun test-e27e9) + adresse de l'ancienne base
core/ store (synchro fine), schema, money (centimes), selectors, validation, dates
services/ firebase (compte + synchro), storage
features/ auth (connexion, Réglages › Compte), pin (verrou facultatif), recurring (génération automatique)
ui/ icônes, modales, toasts, thème, graphiques, motion (ressorts, compteur à rouleaux)
views/ note (Noter), plan (Prévoir), track (Suivre), quickadd (édition d'une opération), settings
Les montants sont stockés en centimes entiers (aucune erreur d'arrondi).
sw.js pré-met en cache l'app-shell à l'installation : l'app s'ouvre même sans réseau, y compris dès le tout premier lancement hors ligne. Il vérifie aussi à chaque ouverture si les fichiers ont changé sur le serveur, pour afficher la dernière version publiée. La synchronisation Firebase reste en ligne (les écritures hors ligne sont conservées et renvoyées au retour du réseau, voir « Robustesse de la synchronisation »).
test-e27e9, même firebase-config.js). Les données sont sous users/<uid>/budget : theme, categories/<id>, transactions/<id>, recurring/<id>, goals/<id>, plans/<id>. Le même nœud reçoit linked/garage (écrit par Mon Garage), linked/maison (Ma Maison) et migrated (marque du transfert) : Mon budget les lit et ne les réécrit jamais.benjbepoix-stack.github.io) ; dans un même navigateur, être connecté dans Mon Garage suffit. Sur iPhone, chaque app installée sur l'écran d'accueil a son propre stockage : une connexion par app, une seule fois.budget_last_uid) : les données locales sont vidées avant la synchro (le thème est conservé). À la première connexion après la mise à jour, rien n'est vidé.budget_unsynced) : à la connexion, elles sont ajoutées au compte élément par élément (rien d'autre n'est écrasé ; les données non modifiées de l'appareil sont remplacées par celles du compte). Connexion à un autre compte que le dernier connecté : elles sont vidées avec le reste.Configuration : js/config/firebase-config.js (valeurs identiques à celles de Mon Garage). Si FIREBASE_CONFIG vaut null, l'app fonctionne uniquement sur l'appareil. La connexion e-mail / mot de passe doit être activée dans le projet (Authentication → Sign-in method), ce qui est déjà le cas pour Mon Garage.
Au premier instantané de users/<uid>/budget après connexion, si migrated est absent, Mon budget lit l'ancienne base publique en REST (mon-budget-ade0b…/budget.json, 8 s max) :
theme, categories, transactions, recurring, goals et linked sont écrits dans le nouveau nœud (sans écraser une collection ou un linked/<app> déjà présent, publié entre-temps par Mon Garage ou Ma Maison), avec migrated: { from: '<hôte>', at, by: 'budget' }, puis affichés ; un thème « sombre » transféré devient « Auto » ;migrated: { from: 'local', … }, en une seule écriture élément par élément (deux appareils qui démarrent en même temps fusionnent leurs opérations) ;migrated et ses données priment, rien n'est réécrit.Un nœud sans aucune collection (seulement linked, migrated et / ou theme) est considéré comme vide : les données de l'appareil n'en sont jamais effacées (un thème déjà enregistré dans le compte est gardé). Les opérations récurrentes du mois sont générées après ce premier chargement.
apiKey et le reste de firebase-config.js ne sont pas des secrets : Firebase les destine au navigateur. Les données sont protégées par le compte : les règles du projet test-e27e9 (gérées dans le dépôt Mon Garage) n'autorisent users/<uid> qu'au compte connecté. Aucune règle à publier pour les nouveaux chemins.mon-budget-ade0b (lisible et modifiable par n'importe qui jusque-là) une fois les données transférées : ouvrez Mon budget connecté sur un appareil à jour, vérifiez que vos opérations s'affichent (et, dans la console Firebase du projet test-e27e9, que users/<uid>/budget/migrated existe), puis console Firebase du projet mon-budget-ade0b → Realtime Database → Règles → coller le contenu de database.rules.json (".read": false, ".write": false) → Publier. Après cela, l'ancienne base n'est plus lisible ni modifiable : un appareil resté sur l'ancienne version passe en « Local » (ses saisies restent sur l'appareil, puis partent dans le compte après sa mise à jour et sa connexion).users/<uid>/budget/transactions/<id>) : deux appareils qui ajoutent chacun une dépense hors ligne ne s'écrasent pas.budget_unsynced) et renvoyées au lancement suivant ou à la connexion.python3 -m http.server 8080 # puis http://localhost:8080
GitHub Pages : Settings → Pages → Deploy from a branch → main / root.
Style minimaliste commun aux apps (cartes pleines), couleurs Ardoise (gris bleu et cobalt, police IBM Plex Sans).
Mouvement (js/ui/motion.js) : animations à ressort (courbes CSS linear() calculées par une petite simulation), interruptibles. Le bouton « Ajouter » s'agrandit en cercle jusqu'à devenir le fil et s'y referme ; les questions glissent comme des cartes ; le montant défile en rouleaux et une jauge « il restera » avance pendant la frappe (ambre et petit tremblement au-delà du plafond) ; « C'est noté » s'ouvre depuis « Valider », la coche se dessine et le montant part en pièce dans la jauge du budget ; les nouvelles saisies se glissent en tête de liste. Sur Suivre, les courbes se tracent à l'ouverture (plafond allumé si la projection le dépasse, point du jour qui respire), les barres montent, le mois glisse dans le sens du geste (flèches ou balayage du nom du mois) et les montants roulent vers leur nouvelle valeur. Avec « Réduire les animations » (iPhone), il ne reste que des fondus courts.
Logo : ligne continue, une courbe qui monte d'un seul trait jusqu'à un point d'arrivée, en dégradé indigo → rose sur fond blanc (icon.svg, décliné en icon-192.png, icon-512.png, apple-touch-icon.png). Même famille que les logos de Mon Garage et Ma Maison.