Use Firebase Functions to check at 9am Chicago time if there have been new changes since the last email was sent. If so produce an email. Use create-changelog_v2.py to write a JSON of daily updates to a Firebase Realtime Database (in addition to the markdown file) that is used to compile the email update.
Started in C:\Projects\garage\ops\build\daily-emails
Created jmugaire@gmail.com to send emails Google reviewing new email for abuse Using jr.auto.generated.emails@gmail.com now
Firebase Realtime Database created: https://console.firebase.google.com/u/2/project/garage-cc88b/database/garage-cc88b-default-rtdb/data/~2F. Reference URL: https://garage-cc88b-default-rtdb.firebaseio.com/
Local package management is almost always better (vs global)
Built a simple workflow to 1)publish a timekey to the garage realtime database to work through the configuration and 2)read the database and send an email
Updated the changelog python file to push a JSON file into the realtime database
Set up configuration to run a check of the firebase database at a set time and send an email using Firebase Functions. Manual option as well
Cleaned up the format of the email. Mimicked the format of the changelog on the site (but simpler style). Including links to each file on the site
Moved to production folder
Added Marissa’s email
Learned to break down into manageable sub-projects on this one
2026-01-23 Reconfigured email logic to only send updates since last email
- Python computes the delta between “lastSent” and “latest” to add “pending” files in the Firebase Realtime Database log
- Email references “pending” to prepare summary. Clears “pending” and logs “lastSent” after email is sent
- If the “pending” is empty, don’t send an email
2026-02-08: Email never sent this morning following changes made to Create a Garage changelog. Scheduled function was crashing because the database has old and new data formats mixed. Backward-compatibility code was fixed. Added the number of changed files in the email subject
2026-02-14: Update Firebase Function to look into the pending branch’s nested days to find the most recent timestamp to use for the email body
2026-02-22: I added normalization so both legacy and new changelog shapes resolve to stable string IDs, which prevents undefined entries from being written into lastSent.sentByDate. This directly addresses the Firebase validation error by filtering out missing path/name values and handling stored arrays of strings correctly, so pending and lastSent merge cleanly in both scheduled and manual email flows. Key updates: Added getChangePath() and getRenameId() helpers to normalize legacy vs new change/rename data and guard against missing fields in index.js:24-57. Updated both scheduled and HTTP handlers to use these helpers when comparing and persisting sentByDate, ensuring changes/renames arrays only contain valid strings index.js:140-257, index.js:294-418.
↑ done and decided
↓ todo and considering
Upgrade Node.js and handle breaking changes
Sort them by order of most to least changes, so new would always be on top
Don’t really need “latest” in Realtime Database?
Remove HTTP endpoint Firebase Function
Update to have case case sensitivity. A garage is like a digital garden but more technical notes has a capital L
Don’t use the output changelog, develop a separate reference to the git repository that runs on its own inbox
Add log in feature and first thing that shows is changes from last time inbox