From 380db9d484fcc6588e47a9f9cdd83c88523a0e06 Mon Sep 17 00:00:00 2001 From: Hikari Date: Mon, 20 Apr 2026 12:56:55 -0700 Subject: [PATCH] feat(announcements): remove threads posting and peerlist reminder (#23) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Removes automated announcement posting to Threads (moving to manual cross-posting as part of social engagement strategy) - Removes Peerlist from the manual posting reminder (moving to social engagement rather than product announcements) - Updates system prompt and JSON schema descriptions to reflect the current set of platforms ## Test Plan - [ ] Trigger an announcement and confirm Threads is no longer called - [ ] Confirm the alert in the response no longer mentions Peerlist - [ ] Confirm lint and build pass (verified locally) ✨ This issue was created with help from Hikari~ 🌸 Reviewed-on: https://git.nhcarrigan.com/nhcarrigan/hikari/pulls/23 Co-authored-by: Hikari Co-committed-by: Hikari --- server/src/config/announcements.ts | 12 ++++++------ server/src/routes/announcement.ts | 7 ++----- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/server/src/config/announcements.ts b/server/src/config/announcements.ts index f7f2a96..226cf72 100644 --- a/server/src/config/announcements.ts +++ b/server/src/config/announcements.ts @@ -24,7 +24,7 @@ Platform-specific requirements: - 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 -**Threaded (for Threads, Twitter, Bluesky, and Mastodon):** +**Threaded (for Twitter, Bluesky, and Mastodon):** - 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) - 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 - Do NOT include post numbers or thread indicators (e.g., "1/5" or "🧵") - 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) - Professional yet friendly tone, conversational style suitable for a broader audience - Include 3-5 relevant hashtags - 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:** - All announcements must include a call to action to donate (https://donate.nhcarrigan.com) @@ -71,13 +71,13 @@ const announcementJsonSchema = { type: "object", }, 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, minLength: 100, type: "string", }, 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: { description: "A single post in the thread (max 280 characters, no post numbers or thread indicators)", maxLength: 280, diff --git a/server/src/routes/announcement.ts b/server/src/routes/announcement.ts index 6a99744..2687834 100644 --- a/server/src/routes/announcement.ts +++ b/server/src/routes/announcement.ts @@ -12,7 +12,6 @@ import { announceOnDiscourse } from "../modules/announceOnDiscourse.js"; import { announceOnFacebook } from "../modules/announceOnFacebook.js"; import { announceOnMastodon } from "../modules/announceOnMastodon.js"; import { announceOnReddit } from "../modules/announceOnReddit.js"; -import { announceOnThreads } from "../modules/announceOnThreads.js"; import { announceOnTwitter } from "../modules/announceOnTwitter.js"; import { generateAnnouncements } from "../modules/generateAnnouncements.js"; import { getIpFromRequest } from "../modules/getIpFromRequest.js"; @@ -116,7 +115,6 @@ export const announcementRoutes: FastifyPluginAsync = async(server) => { blueskyResult, twitterResult, facebookResult, - threadsResult, mastodonResult, discourseResult, ] = await Promise.allSettled([ @@ -125,15 +123,14 @@ export const announcementRoutes: FastifyPluginAsync = async(server) => { announceOnBluesky(threaded), announceOnTwitter(threaded), announceOnFacebook(plaintext), - announceOnThreads(threaded), announceOnMastodon(threaded), announceOnDiscourse(markdownTitle, markdownContent, type), ]); 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, - 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, }); },