Owned archive
`assets/newsletter-issues.json` is the site-owned source for every public issue.
The newsletter workflow combines local static pages, Firestore source queues, OpenAI-generated drafts, and review-before-publish tooling.
`assets/newsletter-issues.json` is the site-owned source for every public issue.
The draft generator reads queued `newsletter_sources` documents from Firestore and stores reviewable drafts.
Only approved drafts are written into the public archive.
`generate:newsletter` creates drafts and `publish:newsletter` writes approved issues to the owned archive.
`generateScheduledNewsletterDraft` uses scheduled execution, OpenAI, and Firestore collections for source and draft state.
The website serves every issue and image from its own repository and domain.
Publish each newsletter issue on the owned domain.
Keep historical issue images in the repository instead of on an external host.
Generate reviewable drafts from queued Firestore source documents.
Write approved drafts into the local archive with a gated script.