agentsclimarketplace

Community content bot

Skill Celina-create/X-Studio/skills/community-content-bot

A solo studio for growth operators — skills, playbooks, templates.

Install
npx -y skills add Celina-create/X-Studio --skill community-content-bot

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Bilingual daily content push bot for developer communities — generates themed cards (tech news, ecosystem picks, AI products, weekly digest, weekend pick) via LLM and pushes to Feishu (Chinese) + Discord (English) webhooks on a schedule.

SKILL.md

7.8 KB, as published. Nobody here has run it

Community Content Bot

A self-hosted, bilingual (中文 / English) daily content push bot for developer communities — runs on GitHub Actions only, no server, no backend, no DB. Sub-$5/month operating cost (LLM API only).

What it does

Every weekday + weekend, it:

  1. Picks a content theme based on the cron schedule
  2. Pulls fresh signals from HackerNews top stories
  3. Asks an LLM to generate a bilingual JSON payload (zh + en)
  4. Renders a Feishu interactive card (Chinese) and a Discord embed (English)
  5. Broadcasts both to multiple webhooks in parallel (multi-group support)
ThemeCron (UTC)Beijing TimeWhat it pushes
🔥 Tech News0 1 * * 1-5Weekday 9:003-5 deep tech news with editorial commentary
🧩 Tech Ecosystem0 4 * * 1-5Weekday 12:00One deep recommendation: skill / plugin / OSS tool
🏆 AI Products0 12 * * 1-5Weekday 20:005-7 AI products from GitHub Trending / PH / HN
📰 Weekly Digest0 10 * * 5Friday 18:00Week's top 5-7 stories + "Week's reflection"
🎲 Weekend Pick0 2 * * 0,6Weekend 10:00A side project / dev meme / lighthearted story

Why use it

For maintainers of an open-source project with a community:

  • Zero-server: just GitHub Actions + 2 webhooks
  • Multi-group: comma-separate webhook URLs in secrets, parallel broadcast
  • Bilingual by design: same source, separate Chinese/English LLM output
  • Editor-first prompts: NOT a news scraper, every item has commentary
  • Reusable: swap out brand strings, theme prompts, button URLs

When NOT to use it

Don't ship this until you have answers to:

  • Who actually reads daily content in a community? Most lurkers won't, and active members already follow the same sources.
  • What's the conversion goal? If "more group activity" — there are higher-ROI tactics (issue threads, weekly office hours).
  • Can you sustain editorial quality? LLM-only content quickly feels generic. The "X writes weekly digest" pattern outperforms automated daily.

See case-studies/01-content-bot-postmortem.md for the full retrospective on why this skill was built, deployed, then paused.

Architecture

┌──────────────────────┐
│  GitHub Actions      │  schedule: 5 cron lines + workflow_dispatch
│  community-content-  │
│  push.yml            │
└──────────┬───────────┘
           │ env: theme, webhooks, llm key
           ▼
┌──────────────────────┐    ┌─────────────────┐
│  daily-content-      │───▶│  HackerNews API │
│  bot.mjs             │    │  (top 15)       │
│                      │    └─────────────────┘
│  1. fetch HN         │    ┌─────────────────┐
│  2. build prompt     │───▶│  LLM Provider   │
│  3. call LLM         │    │  (LiteLLM /     │
│  4. parse bilingual  │    │   OpenRouter)   │
│  5. render cards     │    └─────────────────┘
│  6. broadcast        │
└──────────┬───────────┘
           │
     ┌─────┴──────┐
     ▼            ▼
┌─────────┐  ┌──────────┐
│ Feishu  │  │ Discord  │  Both support comma-separated multi-URL
│ webhook │  │ webhook  │  (e.g. push to 3 groups simultaneously)
└─────────┘  └──────────┘

Files

  • scripts/daily-content-bot.mjs — main bot script (487 lines, ESM, no deps)
  • scripts/community-content-push.yml — GitHub Actions workflow

Setup (5 min)

1. Drop the files in

mkdir -p scripts/notify .github/workflows
cp daily-content-bot.mjs scripts/notify/
cp community-content-push.yml .github/workflows/

2. Customize 4 things

In daily-content-bot.mjs:

  • Brand strings in buildBilingualPrompt() — replace "the open-source community" with your project name
  • Button URLs in buildFeishuCard() and buildDiscordEmbed() — point to your contributor guide / issues / rewards page
  • Theme prompts in THEME_PROMPTS — adjust tone for your audience

In community-content-push.yml:

  • Cron schedules if you want different timing

3. Add 4 secrets to your repo

Settings → Secrets and variables → Actions → New repository secret:

SecretValueNotes
COMMUNITY_CONTENT_FEISHU_WEBHOOKhttps://open.feishu.cn/...Comma-separate for multi-group: url1,url2,url3
COMMUNITY_CONTENT_DISCORD_WEBHOOKhttps://discord.com/api/webhooks/...Same multi-URL support
LITELLM_ENDPOINThttps://your-llm-proxy/v1Or use LLM_API_BASE
LITELLM_API_KEYsk-...Or use LLM_API_KEY

4. Test before scheduling

GitHub → Actions → "Community Content Push" → Run workflow → choose theme:

  • Start with tech-news to validate end-to-end
  • Check the run log for Sent: [tech-news] ZH: ... | EN: ...
  • Verify the cards land in Feishu + Discord

5. Pause / resume

To pause without deleting: comment out the schedule: block in the YAML. Manual workflow_dispatch still works for one-off pushes.

Multi-group webhook trick

The bot supports comma-separated webhook URLs in a single secret:

COMMUNITY_CONTENT_FEISHU_WEBHOOK = "https://...hook/aaa,https://...hook/bbb,https://...hook/ccc"

parseWebhookUrls() splits on comma, broadcastWebhook() fires Promise.allSettled to all URLs in parallel. Partial failures are logged but don't crash the run — only fails the workflow if ALL webhooks fail.

This means one secret can fan out to 3+ Feishu groups with no code change.

Cost

  • HackerNews: free
  • LLM (Claude Sonnet 4 via proxy): ~$0.05 per push × 5/day × 22 weekdays
    • 8 weekend = ~$5-7/month
  • GitHub Actions: free for public repos, included in private quota
  • Webhooks: free

Total: < $10/month for a 3-group bilingual rollout.

Troubleshooting

Cloudflare 403 from LLM endpoint

The default LiteLLM proxy can hit Cloudflare protection from GitHub Actions runners. Fix: switch to OpenRouter (https://openrouter.ai/api/v1) by swapping LITELLM_ENDPOINT and LITELLM_API_KEY. The bot accepts any OpenAI-compatible endpoint.

Webhook failed (404)

Webhook URL revoked or wrong. Regenerate in Feishu/Discord, update secret, re-run workflow.

LLM did not return both zh and en content

The model occasionally returns malformed JSON. The bot logs first 300 chars of the response. If it persists, lower temperature from 0.7 to 0.3 or switch models.

Related

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.