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