An AI reporter covering civic-tech communities, including g0v, Code for Korea, and Code for Japan. Every hour it reads public collaboration spaces (Slack, GitHub, Mastodon, RSS/Atom/JSON Feed, public Notion), picks what matters, writes a short story in four languages, and publishes it to a website, RSS, Telegram and optional Threads.
- Site: https://rep0rter.observe.tw (English by default; 繁體中文 · 日本語 · 한국어 on request)
- Telegram: https://t.me/g0v_rep0rter
- Threads: https://www.threads.com/@rep0rter.tw
- License: CC0 1.0
flowchart LR
subgraph Sources
S[Slack public archive]
G[GitHub repos]
M[Mastodon accounts]
R[RSS / Atom / JSON feeds]
N[Public Notion pages]
end
S & G & M & R & N --> C[Collectors]
C --> DB[(SQLite event store)]
DB --> E[Editorial rules<br/>score · dedupe · exclusions]
E --> W[LLM writer<br/>zh-TW · ko · ja · en]
W --> P[Publishers]
P --> Web[Static site + RSS]
P --> TG[Telegram channel]
Every story links back to its source and ships with a source card (author, origin, excerpt). Bots, CI noise and anyone who opts out are excluded before writing. New Slack scoring rules run in shadow mode first and are promoted only after review.
The homepage, story pages, source pages and default RSS feed open in English.
Use the language links for Chinese, Japanese or Korean; old browser language
preferences do not redirect the homepage. Chinese uses index.zh-TW.html and
feed.zh-TW.xml. Existing index.en.html and feed.en.xml links remain available.
English pages show English report images. Follow each story's external source
link to read the original text. Missing translations display an explicit English pending
notice; they never substitute untranslated copy into the default edition.
python3 -m venv .venv && . .venv/bin/activate
pip install -r requirements-dev.txt && playwright install chromium
cp .env.example .env # Telegram + LLM settings; works without them
python -m rep0rter run --dry-run # collect, select, preview; publishes nothing
python -m rep0rter run # publish to Telegram and rebuild the site
python -m pytest -q testsOther commands: collect, report, build-site, translate, outbox, status,
loop --interval 3600, export.
REP0RTER_FEEDS accepts RSS 2.0, RSS 1.0, Atom 1.0, JSON Feed 1/1.1, public Notion
URLs, the Code for Japan public Slack archive, and the supported Code for Japan / Open Data Forum index URLs. Add https://slack-archive-2fl.pages.dev/ to REP0RTER_FEEDS to collect CfJ's public static Slack pages without Slack OAuth. Notion uses anonymous web JSON requests without an API token;
these unofficial endpoints may change. Verified sources across Japan, Korea, Taiwan and global civic-tech organizations
are recorded in the source catalog. Active monitoring
sources are included in .env.example; historical archives remain available separately.
Archive publication dates describe archive entries, not necessarily project launches.
See collector limits.
The Compose stack runs a worker (hourly cycle),
maintenance (backups, health checks), accounts (Google login and owner project
news), and web (Caddy, static files on 127.0.0.1:18090).
Production uses native Cloudflare Workers: GitHub Actions runs the hourly Python and Chromium reporting job. Python Workers
handle account features, a JavaScript Worker serves the generated site, and Durable
Objects persist data and every reporting transaction. No Containers or Steam host
are needed. See Cloudflare deployment for migration,
CI-gated deployment of main, configuration, and recovery.
The former Singa deployment is retained for recovery with its services and timer stopped. Its controller instructions apply only to that host; do not restart its publisher after Cloudflare starts writing.
- Full documentation (繁體中文)
- Google login and automatic project news
- Collectors · Editorial policy · Stories & dedupe · Operations · Telegram delivery · FtO sources
Wanted: collaborators from Japan and Korea to curate sources and proofread the
ja/ko editions, frontend and design help, and feedback on the editorial rules.
Say hi in g0v Slack #rep0rter. To opt out of being reported, ask there too.
