feat(announcements): remove threads posting and peerlist reminder
Node.js CI / CI (pull_request) Successful in 46s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m19s

Threads is now handled via manual cross-posting as part of the social
engagement strategy rather than automated announcements. Peerlist is
similarly moving to social engagement and no longer needs a manual
posting reminder after announcements.
This commit is contained in:
2026-04-20 12:48:11 -07:00
committed by Naomi Carrigan
parent 093411b119
commit 3ef0eadb66
2 changed files with 8 additions and 11 deletions
+6 -6
View File
@@ -24,7 +24,7 @@ Platform-specific requirements:
- Include clear calls to action - Include clear calls to action
- The same content will be used for Discord, Reddit, Ko-fi, and Patreon, so make it work well for all these platforms - The same content will be used for Discord, Reddit, Ko-fi, and Patreon, so make it work well for all these platforms
**Threaded (for Threads, Twitter, Bluesky, and Mastodon):** **Threaded (for Twitter, Bluesky, and Mastodon):**
- Break content into a thread of individual posts - Break content into a thread of individual posts
- Each post should be under 280 characters (to work for Twitter's limit, which is the most restrictive) - Each post should be under 280 characters (to work for Twitter's limit, which is the most restrictive)
- Posts should flow naturally from one to the next - Posts should flow naturally from one to the next
@@ -32,14 +32,14 @@ Platform-specific requirements:
- Make the first post compelling to encourage thread reading - Make the first post compelling to encourage thread reading
- Do NOT include post numbers or thread indicators (e.g., "1/5" or "🧵") - Do NOT include post numbers or thread indicators (e.g., "1/5" or "🧵")
- Plain text format (no markdown) - Plain text format (no markdown)
- The same thread will be used for Threads, Twitter, Bluesky, and Mastodon - The same thread will be used for Twitter, Bluesky, and Mastodon
**Plaintext (for LinkedIn, Facebook, and Peerlist):** **Plaintext (for LinkedIn and Facebook):**
- Plain text format (no markdown) - Plain text format (no markdown)
- Professional yet friendly tone, conversational style suitable for a broader audience - Professional yet friendly tone, conversational style suitable for a broader audience
- Include 3-5 relevant hashtags - Include 3-5 relevant hashtags
- Keep it concise but informative - Keep it concise but informative
- The same content will be used for LinkedIn, Facebook, and Peerlist - The same content will be used for LinkedIn and Facebook
**Universal requirements:** **Universal requirements:**
- All announcements must include a call to action to donate (https://donate.nhcarrigan.com) - All announcements must include a call to action to donate (https://donate.nhcarrigan.com)
@@ -71,13 +71,13 @@ const announcementJsonSchema = {
type: "object", type: "object",
}, },
plaintext: { plaintext: {
description: "Plain text announcement for LinkedIn, Facebook, and Peerlist (shared content). Should be professional yet friendly, conversational style suitable for a broader audience. Include 3-5 relevant hashtags and calls to action for donating and joining Discord.", description: "Plain text announcement for LinkedIn and Facebook (shared content). Should be professional yet friendly, conversational style suitable for a broader audience. Include 3-5 relevant hashtags and calls to action for donating and joining Discord.",
maxLength: 1900, maxLength: 1900,
minLength: 100, minLength: 100,
type: "string", type: "string",
}, },
threaded: { threaded: {
description: "Array of individual posts that form a thread. Will be used for Threads, Twitter, Bluesky, and Mastodon. Each post should be under 280 characters (Twitter's limit) and flow naturally from one to the next.", description: "Array of individual posts that form a thread. Will be used for Twitter, Bluesky, and Mastodon. Each post should be under 280 characters (Twitter's limit) and flow naturally from one to the next.",
items: { items: {
description: "A single post in the thread (max 280 characters, no post numbers or thread indicators)", description: "A single post in the thread (max 280 characters, no post numbers or thread indicators)",
maxLength: 280, maxLength: 280,
+2 -5
View File
@@ -12,7 +12,6 @@ import { announceOnDiscourse } from "../modules/announceOnDiscourse.js";
import { announceOnFacebook } from "../modules/announceOnFacebook.js"; import { announceOnFacebook } from "../modules/announceOnFacebook.js";
import { announceOnMastodon } from "../modules/announceOnMastodon.js"; import { announceOnMastodon } from "../modules/announceOnMastodon.js";
import { announceOnReddit } from "../modules/announceOnReddit.js"; import { announceOnReddit } from "../modules/announceOnReddit.js";
import { announceOnThreads } from "../modules/announceOnThreads.js";
import { announceOnTwitter } from "../modules/announceOnTwitter.js"; import { announceOnTwitter } from "../modules/announceOnTwitter.js";
import { generateAnnouncements } from "../modules/generateAnnouncements.js"; import { generateAnnouncements } from "../modules/generateAnnouncements.js";
import { getIpFromRequest } from "../modules/getIpFromRequest.js"; import { getIpFromRequest } from "../modules/getIpFromRequest.js";
@@ -116,7 +115,6 @@ export const announcementRoutes: FastifyPluginAsync = async(server) => {
blueskyResult, blueskyResult,
twitterResult, twitterResult,
facebookResult, facebookResult,
threadsResult,
mastodonResult, mastodonResult,
discourseResult, discourseResult,
] = await Promise.allSettled([ ] = await Promise.allSettled([
@@ -125,15 +123,14 @@ export const announcementRoutes: FastifyPluginAsync = async(server) => {
announceOnBluesky(threaded), announceOnBluesky(threaded),
announceOnTwitter(threaded), announceOnTwitter(threaded),
announceOnFacebook(plaintext), announceOnFacebook(plaintext),
announceOnThreads(threaded),
announceOnMastodon(threaded), announceOnMastodon(threaded),
announceOnDiscourse(markdownTitle, markdownContent, type), announceOnDiscourse(markdownTitle, markdownContent, type),
]); ]);
return await reply.status(201).send({ return await reply.status(201).send({
alert: `Please remember to manually post to: LinkedIn, Peerlist, Ko-fi, and Patreon.`, alert: `Please remember to manually post to: LinkedIn, Ko-fi, and Patreon.`,
cost: announcement.cost, cost: announcement.cost,
message: `Announcement processed. Discord: ${getPlatformResult(discordResult)}, Reddit: ${getPlatformResult(redditResult)}, Bluesky: ${getPlatformResult(blueskyResult)}, Twitter: ${getPlatformResult(twitterResult)}, Facebook: ${getPlatformResult(facebookResult)}, Threads: ${getPlatformResult(threadsResult)}, Mastodon: ${getPlatformResult(mastodonResult)}, Discourse: ${getPlatformResult(discourseResult)}`, message: `Announcement processed. Discord: ${getPlatformResult(discordResult)}, Reddit: ${getPlatformResult(redditResult)}, Bluesky: ${getPlatformResult(blueskyResult)}, Twitter: ${getPlatformResult(twitterResult)}, Facebook: ${getPlatformResult(facebookResult)}, Mastodon: ${getPlatformResult(mastodonResult)}, Discourse: ${getPlatformResult(discourseResult)}`,
rawPost: announcement.response, rawPost: announcement.response,
}); });
}, },