Skip to content
duyetPublic

About

Automated AI News ranking and summary by Jev/LLM powered by AnyRouter.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

AI;DR

AI;DR

What's new in AI today? Ranked AI news with a short daily digest, in English and Vietnamese.

Website Chrome Telegram VI Telegram EN RSS Sponsor

Watch the AI;DR introduction video

▶ Watch the introduction video (30 seconds)

Get AI;DR

Channel Link
Website aidr.today
Chrome new tab Chrome Web Store
Telegram (Vietnamese) @aihomnay
Telegram (English) @aidr_today
Email digest aidr.today/subscribe
RSS feed.xml

Stack

Cloudflare Worker (aidr), TanStack Start frontend, D1 as the primary store.

Layout

Path Role
apps/web Site, API, ingest workflow (@aidr/web)
apps/extension Chrome MV3 new-tab (@aidr/extension)
packages/* Shared libs / UI
videos Video sources, built with HyperFrames (videos/README.md)
.agents/skills Agent skills for this repo

Pipeline

The scheduler starts a NewsIngestWorkflow every 30 minutes, with a 25-minute coalesce (INGEST_MIN_INTERVAL_MS). The contract is apps/web/ALGORITHM.md.

  1. Consume — enabled sources (worker/sources/) are fetched, deduped, and enriched into items.
  2. Rank — score, translate, then a pure rank_score (worker/ranking.ts). The top of the last 24h becomes today's TL;DR snapshot: bullets_en and bullets_vi (worker/tldr.ts).
  3. Publish — one edition per language (worker/digest/edition.ts). Email uses the subscriber's timezone from 07:00 and their digest size. Telegram VI, Telegram EN, and the English Facebook Page (facebook-en) each post once from 08:00 Asia/Ho_Chi_Minh, on the same trending bar. A missing language column is skipped and retried; it is not filled from the other language.

Local development

pnpm install
cp .env.example .env.local   # fill values (gitignored)
pnpm --filter @aidr/web dev  # http://localhost:3014

Extension (unpacked):

  1. chrome://extensions → Developer mode
  2. Load unpacked → apps/extension

Deploy

pnpm run deploy              # build + wrangler deploy (see CLAUDE.md: cf cannot carry Workflows yet)
pnpm run cf:deploy:prod      # production env + smoke

CI: .github/workflows/deploy-web.yml on push to main/master when apps/web, apps/extension, packages, or lockfile change.

GitHub secrets: CLOUDFLARE_API_TOKEN, VITE_CLERK_PUBLISHABLE_KEY. Account ID comes from apps/web/wrangler.toml (and the workflow env). D1 queries and secret sync use cf, not Wrangler.

Smoke: curl https://aidr.today/api/public

Secrets

One command syncs local env → GitHub Actions + Cloudflare Worker:

cp .env.example .env.local   # fill values
pnpm sync-env                # both targets
pnpm sync-env --dry-run
pnpm sync-env --workers      # Worker only
pnpm sync-env --github       # GitHub only (repo + production env)

Alias: pnpm config. Non-secret config stays in wrangler.toml [vars]. Key list: .env.example.

Extension release

Zip: https://aidr.today/aidr.zip (built into the Worker).

  1. Unzip → load unpacked → select the aidr/ folder inside

Versioning: release-please opens separate release PRs from separate manifests (.github/.release-please-web.json and .github/.release-please-extension.json). Leave those PRs for a human to merge.

  • Website (apps/web) → chore(web): release X.Y.Z, tags web-v*
  • Chrome extension (apps/extension) → chore(extension): release X.Y.Z, tags aidr-v*

Commits that touch each package path (and scopes like feat(web): / feat(extension):) feed that package’s changelog. Merge the PR to cut the GitHub Release.

Ingest

Primary: Durable Object alarm (NewsIngestScheduler).

Watchdog: .github/workflows/ingest.yml POSTs /api/admin/ingest with NEWS_ADMIN_TOKEN. Manual: Actions workflow_dispatch, or admin POST with ?force=1.

No Worker [triggers] crons (Free plan limit) and no Workflow schedules (paid).

Scripts

pnpm run lint
pnpm run test
pnpm run check-types
pnpm --filter @aidr/web smoke

About

Automated AI News ranking and summary by Jev/LLM powered by AnyRouter.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages