The complete tech stack β how all the pieces fit together
/entries) and returns the HTML pagefetch('/api/entries')ENC:iv:ciphertextdecryptEntries() using the key stored in sessionStoragesessionStorage and is wiped when the tab closesENC:abc123:xyz789...
Ciphertext only. Useless without the key.
"Left knee pain after morning walk, level 4."
Plaintext after decryption.
sessionStorage only..j4h file is the full entry set re-encrypted as a single blob.j4h.org registered and managed through Cloudflarej4h.org and www.j4h.orggit push heroku main triggers a build and zero-downtime deployhttps://j4h.org β it is the same app as the websiteandroid/ foldergenerate_icons_simple.pycom.j4h.healthdiarymain (e.g. git checkout -b vitals)python app.py β Flask runs at localhost:5000pytest test_app.py -v (25 tests against a temp SQLite DB)pytest test_smoke.py -v (15 tests against the live j4h.org URLs)git push heroku branch:mainmainmain to GitHub: git push origin mainThese explainers cover each layer in detail: