Add Mailchimp newsletter workflow to the meetup skill - #49
Open
MasonEgger wants to merge 5 commits into
Open
Conversation
The monthly update now covers the newsletter alongside the website. The meetup-update skill gains a newsletter step and a references/newsletter.md playbook: check whether the month's campaign exists, create it by replicating the last sent issue, and set the title, subject, and preview text via the Marketing API. Content editing stays manual by design: the v3 API cannot edit new-builder (multichannel) campaigns, and a PUT to /content silently reverts the draft to a legacy template shell, so the skill drafts the meetup copy for pasting into the builder instead. The API key ships encrypted in secrets/meetup.sops.env (sops + age) and is read at call time with sops exec-env so it never lands anywhere in plaintext. Also seeds .ai-sessions/ with the session summary and lessons captured while finding these limits.
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
Filling the run of show's local-meetups table needs each network group's upcoming events, and plain fetches of meetup.com always show "0 upcoming events" because the listings render client-side. The real data ships in each page's __NEXT_DATA__ Apollo cache, so scripts/scrape_local_meetups.py fetches every network group with a browser user agent, reads events (date, title, venue, URL) from that JSON, and flags cross-posts of our own meetup. references/local-meetups.md documents usage and warns future sessions off WebFetch for this; verified live against all seven groups.
Member
Author
|
Added a second piece: |
Monthly announcements to the marketing and organizers channels were ad hoc curl commands that died with each session; the messages themselves drifted (stale form links, expired image URLs, leftover manual sections). scripts/send_discord_announcement.py makes the send deterministic: channel name picks the webhook env var (run under sops exec-env), the payload is validated JSON, and the card image is attached to the message because Canva's signed export URLs expire within hours while a Discord attachment persists. references/announcements.md carries the message templates for both channels and the link gotchas (published responder form links only, canonical meetup.com event vs cross-posts, verify delivery via the wait=true response). Verified against a local mock webhook; the same flow delivered the real August announcements.
The announcement text was still composed by hand each month, which is how stale links and drifting wording crept in. build_announcements.py makes it deterministic: a month-data TOML is the only thing a session writes, and the script renders both channel payloads from templates embedded in the script, enforcing Discord's 2000-char limit. Long URLs render as markdown masked links, verified in-channel that webhook messages support them. The reference doc now points at the script instead of carrying copy-paste template blocks that could drift from it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The monthly update now covers the Mailchimp newsletter alongside the website.
references/newsletter.mdplaybook in the meetup-update skill: exists-check for the month's campaign, create by replicating the last sent issue, set title/subject/preview via the Marketing API.A
PUT /contentsilently reverts new-builder drafts to a legacy template shell (verified 2026-07-31), so the skill drafts meetup copy for pasting into the builder instead.MAILCHIMP_API_KEYadded tosecrets/meetup.sops.env(sops + age encrypted, safe to commit); API calls run throughsops exec-env./update-meetupgain the newsletter step; CLAUDE.md documents the workflow and the secrets pattern..ai-sessions/with this session's summary and lessons.Testing
sops -dround-trip verified after adding the key.sops exec-envand found the August draft.