Home / Ops / More in this area
Updated Jul 02, 2026 · Affirmology_EmailSystem_SourceOfTruth_v1.md
Purpose: one template family, one sender, zero divergence. This is the authoritative doc for every customer-facing email. Read it before building or changing any email.
.html file
in the project root (below). If the copy or look needs to change, Cowork edits that file.api/demo_render.py and sends it via api/emailer.py -> send_email()..html file
verbatim. When Cowork changes a file, it names the file to Code, and Code re-syncs that
one constant. Nothing else changes.| File (project root) | Subject | Audience | Engine constant to sync | |
|---|---|---|---|---|
| Welcome / Origin delivery | Affirmology_WelcomeEmail_Template_v1.html |
Welcome to Affirmology | every demo-taker on song completion | _WELCOME_HTML / _send_welcome_email() |
| The Mirror (new audio) | Affirmology_MirrorEmail_v1.html |
We read your chart. Meet The Mirror. | demo-takers who have a results page | NEW: add _MIRROR_HTML / send_mirror_email() sibling |
| Form-stopper re-engage | Affirmology_FormStopperEmail_v1.html |
Let's get you through to your Origin Soul Song | NDA signers who never finished the form | one-off batch |
| Render-fix Oops+Welcome | Affirmology_RenderFix_OopsWelcome_v1.html |
Your Origin Soul Song is ready (sorry for the wait) | signers whose render failed | one-off batch |
Affirmology <hello@affirmology.ai>jeff@affirmology.ai (so Jeff sees a copy of every customer send)api/emailer.py send_email() (Resend). Must send with a browser User-Agent header
or Resend 403s with Cloudflare error 1010.{{FIRST_NAME}}, {{RESULT_URL}}https://demo.affirmology.ai/result?j=<job_id>
(the results page reads ?j= first, then #<job>, so both resolve; standardize on ?j=).
Force the full experience instead with https://demo.affirmology.ai/primer.html#<job_id>.https://media.affirmology.ai/brand/email-logo.png (the orb mark, ~70-74px)✦ AFFIRMOLOGY ✦ (star both sides), gold #d9b15a, letter-spaced#0d2c1c, page #061b10, border rgba(217,177,90,0.30), body #cdbfa3,
bright #ecd9a8, gold button #c89b3c on #06150c textAffirmology_MirrorEmail_v1.html as-is. Add _MIRROR_HTML + send_mirror_email() in
the SAME api/demo_render.py, reusing the identical header/palette/footer, routed through
emailer.send_email() with BCC jeff@affirmology.ai. Subject: "We read your chart. Meet The Mirror."
(The in-email greeting stays "A new audio gift awaits, {{FIRST_NAME}}." - subject and greeting differ on purpose.)mirror_url field).
2. Cowork adds a "New Audio - The Mirror" player section high on result.html, under the
Origin Soul Song, that shows when mirror_url is present.https://media.affirmology.ai/brand/jeff-sol-welcome-poster.jpg).Code sends Jeff a test using the SAME engine constant + a REAL job id, so the test the Jeff sees is byte-identical to what customers will get. Jeff signs off, then the batch runs.
.html file and pings Code with the filename.api/demo_render.py.