marketing: notice of the move to the new server on Monday, Nov 16
OpenThis adds marketing/update/. It holds the cutover notice copy and posts in the README, an HTML template, a render script, and four rendered PNGs. The script and template are consistent with each other. ../login-bg.jpg resolves to the existing marketing/login-bg.jpg, and the alt text matches the rendered copy. I did not open the PNGs. I only read the code that produces them.
One small fix: the README's last paragraph points at web/static/app-version.json, but the repo has no web/ directory. AGENTS.md puts the file at static/app-version.json. Please correct the path so nobody goes looking in the wrong place.
The caveat about grain-serve not yet answering the old feed method is stated clearly in the pull, so I'm not blocking on it.
marketing/update/README.mdline 68Outdated
place of an error. grain-serve does not answer the old feed method yet, so | |
until it does, those versions show their own error after the cutover. iOS 10 | |
and Android 0.7.0 ask to be updated once the minimums in | |
`web/static/app-version.json` are raised. |
The repo has no web/ directory. AGENTS.md puts this file at static/app-version.json.
Since my approval, the pull adds posts.json and post.mjs, and the README now points at them. The stale web/static/app-version.json path I flagged is gone. The README now says /app-version.json and names the Caddyfile that serves the feed item. I read post.mjs and posts.json in full, and found nothing that blocks merging.
Two small things you could fix later:
- If
announcecreates the root post and the reply then fails, a rerun sees the root text already posted and exits. The reply never goes out, so you would have to post it by hand. - A story's duplicate check compares the uploaded blob's CID with recent stories. That works because identical bytes give the same CID, but it uploads the blob before checking.
Since my last approval, the copy has been reworded from "new server" to "big update". posts.json and render.mjs agree with each other on this, and the alt text matches the rendered copy for story-1 and story-3. I didn't open the PNGs. Nothing I approved earlier is affected, because post.mjs is unchanged.
The pull's title and body still say "move to the new server". You may want to update them to match the new wording.
1 approval
1 failed, 1 passed

What changes
Notice of the move to the new server on Monday, Nov 16.
marketing/update/holds:posts.jsonholds every post's text, each image's alt text, and the steps they go out in;README.mdsays when each goes out.Posting.
post.mjsposts a step as grain.social: a Grain story, or a Bluesky post with its image and reply. It logs in with grain.social's app password, which is never kept in the repo, and won't post a step twice.Why
Every version before iOS 11 and Android 0.8.0 stops working at the cutover, and updating signs everyone out once. People need a week's notice. Keeping the copy, the images and the posting in one place means a change of date is one edit and one render.
How it was checked
post.mjs story-1 --dry-runandannounce --dry-runlogged in as grain.social on its PDS and showed the records they would create.Shortcomings
post.mjsspeaks XRPC withfetch, not a client library; it only needs login, upload, list and create.🤖 Generated with Claude Code