diff --git a/AGENTS.md b/AGENTS.md index c1cc0b0..b8f9f45 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -870,6 +870,23 @@ session with **no other memory of this project**. So: hook do this and fail loudly if every relay rejects. `useSpotChat` is the reference pattern. (Before the fix, an admin whose own NIP-65 lacked `goskatespots` would publish issues nobody could find.) + - **Weekly newsletter automation (2026-10-28).** `scripts/newsletter-weekly.ts` + generates the next issue (published max + 1), builds all fields, makes a + fresh 1200×630 cover from the Drop #006 foundation, uploads it to Blossom, + and publishes **only a draft** as NIP-78 `kind 30078`, + `d=skatespots:newsletter:draft`, `t=skatespotsnewsdraft`. The admin + `/newsletter` page shows a **Weekly draft ready** banner; the composer loads + it (`useNewsletterDraft`) and has a safe Markdown **Preview**. Set + `NEWSLETTER_AUTOPUBLISH=1` in the service to also publish the NIP-23 issue + + kind-1 teaser. The timer (`scripts/systemd/skatespots-newsletter.timer`, + Monday 08:00, install with `scripts/install-newsletter-timer.sh`) defaults to + `NEWSLETTER_AUTOPUBLISH=0` — review the voice/cover before enabling. The + editorial bank lives in `src/lib/newsletterContent.ts` (rotating South Park + jokes; 4 shipped highlights; current tech wires); issue 7 uses the curated + highlights, later issues parse the top of `release-notes.txt`. The static + archive now hides an issue number that is also live, so backfilled issues + don't duplicate. The draft event is public (it contains no private data); + never put `SIGN_WITH` in it or in tracked files. - **Nav parity (fixed 2026-09-27):** the desktop header is `max-w-[1700px]` (wider than the page `container`'s 1400px) and nav items are `px-3` + `whitespace-nowrap`; the nav keeps `min-w-0 overflow-x-auto scrollbar-hide`, so diff --git a/package.json b/package.json index ad5e6ba..f28f5ef 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "android:open": "npx cap open android", "android:version": "node scripts/sync-android-version.mjs", "android:build": "npm run android:build:apk && npx cap sync android && node scripts/sync-android-version.mjs && node scripts/inject-amber-queries.mjs && node scripts/inject-main-activity.mjs && node scripts/inject-network-security.mjs && node scripts/inject-signing-config.mjs && cd android && ./gradlew assembleRelease", - "android:build:apk": "CAPACITOR_BUILD=1 vite build && sed -i 's|||g' dist/index.html && sed -i 's|