TrendPublish: a WeChat article pipeline with dry-run and review built in
TrendPublish: 全自动 AI 内容生成与发布系统 | 微信公众号自动化 | 多源数据抓取 (Twitter/X、网站) | DeepseekAI、千问、讯飞模型 | 智能内容分析排序 | 定时发布 | 多模板支持 | Node.js | TypeScript | AI 技术趋势跟踪工具
At a glance
- What is it?
- TrendPublish is a TypeScript and Deno system that turns web, RSS and social sources into WeChat Official Account drafts through a staged AI workflow. Its value is the observability around that pipeline, not the model call itself.
- Who is it for?
- Adopt TrendPublish if you run one or more WeChat Official Accounts and want a repeatable, inspectable article pipeline rather than a one-shot summariser. Skip it if you need a general multi-platform publisher today; the README states the project currently focuses on the WeChat article path, with other outlets listed only as future expansion.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 45 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 18, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The WeChat publishing problem TrendPublish targets
Daily publishing to a WeChat Official Account is not mainly a writing problem. The README frames the hard parts as finding good material instead of repeated news, deciding what deserves a full article versus a short note, keeping an evidence trail so the text is not fluent but unsupported, and getting images, layout and WeChat-compatible HTML to survive upload. TrendPublish is built for that operational layer. It is aimed at operators running one account or a matrix of accounts who already have model API access and want the publishing step to be repeatable. The README is explicit that this is not an RSS summary script: every run leaves steps, errors, quality review, HTML, images and a configuration snapshot so you can reconstruct why an article was chosen.
How the pipeline moves from sources to a WeChat draft
The README's workflow diagram defines a fixed sequence. Sources (URL, RSS, search, social) go through fetch and cleaning, then deduplication and history memory, then topic clustering and ranking. From there the pipeline does evidence completion, builds an article plan, generates body, title and images, runs quality review with at most one targeted revision, and renders WeChat-compatible HTML. A dry-run branch saves HTML, JSON and image artifacts; the non-dry-run branch uploads assets and creates a WeChat draft. Both branches feed the Dashboard for review. The configuration model is split into three layers: providers holds external credentials and default capability parameters, features.article decides which functions are on and which provider they use, and storage.runtimeConfig holds business configuration editable from the Dashboard. Secrets stay in the deployment environment and are not written into the database. That separation is the design decision worth noting: it keeps credentials out of the runtime config store, which uses SQLite locally and in Docker, and D1 on Cloudflare.
Installing TrendPublish and running a first dry-run
The README requires Deno v2.0.0 or higher. On macOS or Linux the install is a single script, and Windows uses the PowerShell equivalent shown in the README. After cloning the repository, copy the example config and run the doctor task, which checks configuration and required fields.
curl -fsSL https://deno.land/install.sh | sh
git clone https://github.com/liyown/ai-trend-publish
cd ai-trend-publish
cp trendpublish.config.example.ts trendpublish.config.ts
deno task doctorThe README states the minimal configuration needs a server key and one model setup. The example below uses DeepSeek as the provider and Hacker News as the only source, with dryRun enabled so nothing is uploaded. Sources are plain URLs inside features.article.sources.
import { defineConfig } from "@src/utils/config/define-config.ts";
export default defineConfig({
server: {
apiKey: "your-api-key",
},
providers: {
ai: {
baseUrl: "https://api.deepseek.com/v1",
apiKey: "your-ai-api-key",
model: "deepseek-chat",
},
},
features: {
article: {
dryRun: true,
renderer: {
template: "minimal",
promptProfile: "technology",
},
sources: [
"https://news.ycombinator.com/",
],
},
},
});With that config in place, the README gives these verification commands. The article task with --dry-run renders HTML into src/temp/ for inspection before anything reaches WeChat. The matrix variant creates a separate dry-run per account and produces a parent batch summary plus account comparison artifacts.
deno task preview
deno task article --dry-run
deno task article --matrix --account main,lab
deno task devRunning deno task dev starts the backend on http://localhost:8000 and the Vite Dashboard on http://localhost:5173/dashboard/, with the frontend proxying /api to the local backend.
Docker deployment and the config mount it expects
The repository ships a docker-compose.yml that pulls ghcr.io/liyown/ai-trend-publish:latest, exposes port 8000, and mounts a local config file read-only into the container. The TRENDPUBLISH_CONFIG environment variable points at /app/config/trendpublish.config.ts, and a second volume maps ./data/temp to /app/src/temp so dry-run artifacts land on the host. The Dockerfile is built on denoland/deno:2.7.14, sets TRENDPUBLISH_RUNTIME to docker, builds the Dashboard with Vite, caches the entry points, and runs as the deno user. One consequence of the read-only config mount is that changing configuration means editing the host file and restarting the container, whereas the Dashboard runtimeConfig path is intended for changes that take effect on the next run.
Where TrendPublish is the wrong tool
The README states the project currently concentrates on one main path: automated WeChat article publishing. Other outlets such as Xiaohongshu, email newsletters, Feishu documents and static sites are listed as later expansion, not as shipped targets. If your publishing target is not a WeChat Official Account, this is not the tool for you today. A second boundary is the model dependency: article planning, evidence completion, writing and review all run through configured AI providers, so the output quality tracks the model and prompt profile you choose, and the README's own quality-review step exists precisely because generation is not trusted unconditionally. Third, real publishing from Cloudflare is described as going through a fixed-IP relay, which is infrastructure you have to operate separately; the README notes the relay only proxies credentials rather than holding account logic.
How it differs from RSS-to-WeChat summarisers
The obvious alternative is a script that pulls an RSS feed, asks a model for a summary, and pushes the result to a WeChat draft. That approach is smaller and cheaper to run, and for a single low-volume account it may be enough. The difference in approach is the intermediate stages. TrendPublish inserts deduplication and history memory before ranking, then evidence completion and an article plan before writing, then a quality review with at most one revision before rendering. The README also describes a topic workbench where you can mark candidates as lock, adopt or skip, and those decisions feed account-level learning for the next run. A summariser has no equivalent place to record why a topic was chosen or rejected, so tuning it means editing prompts rather than reviewing decisions.
Maintenance, upgrades and licence
The repository is not archived, and the last push was on 2026-08-04. Releases listed in the repository are v2.0.5, v2.0.6 and v2.0.7, all dated 2026-06-04, so the version line has been quiet since then even though the repository has newer commits. Upgrading means tracking the Deno runtime requirement (v2.0.0 or higher) and, for Docker users, the pinned denoland/deno:2.7.14 base image and the ghcr.io image tag; the compose file uses latest, which will move under you unless you pin it. Configuration is a TypeScript file, so a config that imports from @src/utils/config/define-config.ts can break if that internal path changes between versions. The project is MIT licensed, which permits commercial use and modification; the usual obligation is preserving the copyright and licence notice, and this is a description of the licence text rather than legal advice. Check the CHANGELOG.md in the repository before upgrading across minor versions.
Editorial conclusion
Adopt TrendPublish if you run one or more WeChat Official Accounts and want a repeatable, inspectable article pipeline rather than a one-shot summariser. Skip it if you need a general multi-platform publisher today; the README states the project currently focuses on the WeChat article path, with other outlets listed only as future expansion. Before committing, run deno task doctor against your own config and run deno task article --dry-run to confirm your sources and model credentials produce usable HTML in src/temp/.
Frequently asked questions
What is TrendPublish and who is it for?
TrendPublish is an automated topic-selection and publishing system for WeChat Official Accounts. It fetches from configured sources, uses AI for topic selection, evidence completion, ranking, titles, body text, review, layout and images, then either saves dry-run artifacts or creates a WeChat draft. It suits operators who publish to WeChat regularly and want the process to be observable and repeatable.
How do I install and run TrendPublish for the first time?
Install Deno v2.0.0 or higher, clone the repository, copy trendpublish.config.example.ts to trendpublish.config.ts and run deno task doctor. Then run deno task article --dry-run, which the README says outputs rendered HTML into src/temp/ so you can check the article before publishing.
Does TrendPublish publish to WeChat automatically or only create drafts?
Both paths exist. With features.article.dryRun set to true the run saves HTML, JSON and image artifacts instead of uploading; with dryRun set to false the pipeline uploads assets and creates a WeChat draft. The README recommends the weixin publisher for a local fixed IP and weixin-relay on Cloudflare.
Community notes