Skip to content
rep0rterPublic

About

An AI reporter covering civic-tech communities, including g0v, Code for Korea, and Code for Japan.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Repository files navigation

rep0rter

rep0rter

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.

How it works

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]
Loading

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.

Run it

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 tests

Other 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.

Docs

Contributing

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.

About

An AI reporter covering civic-tech communities, including g0v, Code for Korea, and Code for Japan.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages