paper-daily-feed

Last Update star fork

The AI era’s paper bloom is exhausting to track. If you are tired of endlessly chasing new publications, use this repository to curate a daily recommendation & summary tailored exactly to your vibe.

The recommendation can be produced via two sources (enable either one or both):

paper-daily-feed

Get started

1. Fork the Repository

2. Create Repository Secrets

Go to your GitHub repository → SettingsSecrets and variablesActionsSecrets. Then create these secrets as needed:

Key Description Example
RECEIVER Required Email address for receiving recommendations. reader@example.com
SENDER Required Email account used to send recommendations via SMTP server. example@qq.com
SENDER_PASSWORD Required Sender account password or SMTP authentication code. app-password-or-token
SMTP_SERVER Required SMTP server of the sender account. Get to know SMTP in English / Chinese. smtp.example.com
SMTP_PORT Required Corresponding SMTP server port. 465
OPENAI_BASE_URL Recommended OpenAI-compatible LLM API used for summarying paper.
If the API is not set, the summary of recommended papers will be the corresponding abstract.
You can get FREE API in SiliconFlow for using open source LLMs (e.g., Qwen/Qwen3-8B).
https://api.siliconflow.cn/v1
OPENAI_API_KEY Recommended Set corresponding API key if you use API for TLDR summaries. sk-...
ZOTERO_ID Recommended Set it when using Zotero Library. Get ZOTERO_ID from Zotero Settings. See steps 1&2 in Zotero API Key Guide. 1234567
ZOTERO_KEY Recommended Corresponding Zotero API key with read access. Get ZOTERO_KEY from Zotero Settings. zotero-api-key
EMBEDDING_BASE_URL Optional Embeddings API for text matching. Generally leave it empty, since the performance of local embedding model is acceptable. https://api.openai.com/v1
EMBEDDING_API_KEY Optional Set corresponding key if you use Embeddings API. sk-...

3. Create Repository Variable APP_CONFIG

In SettingsSecrets and variablesActionsVariables, create a variable named APP_CONFIG.

[!TIP]

Example: Profile-First APP_CONFIG:

{
  "interests": {
    "profile": {
      "enabled": true,
      "summary": "Urban mobility, transport equity, and climate adaptation."
    }
  }
}

Example: Zotero-First APP_CONFIG:

{
  "interests": {
    "zotero": {
      "enabled": true,
      "includeCollections": ["2026/survey/**"],
      "excludeCollections": ["archive/**"]
    }
  }
}

4. Validation

  1. Go to Actions tab in your forked repo
  2. Run the workflow: “Test paper feeds”
  3. Check logs to confirm config loads correctly
  4. If everything goes smoothly, you will :white_check_mark: see the test run successfully and :bell: receive daily paper recommendations starting tomorrow.

The default schedule in .github/workflows/daily.yml is 0 1 * * *, which is 09:00 at UTC+8. To change when the daily workflow runs, edit the workflow cron value directly.

Local Run

npm install
cp .env.example .env.local
cp config/app.example.jsonc config/app.jsonc
npm run test:config
npm run preview-email
npm run test:feeds:live

For local development, keep non-secret app settings in config/app.jsonc and secrets in .env.local.

npm start -- run
npm run preview-email
npm run setup-profile
npm run test:config

Modes:

Feeds

The app supports bundled catalog feeds and direct RSS feeds.

Run npm run test:feeds:live to smoke-test the current bundled publisher feeds against live RSS. Default tests use fixtures and do not require network access.

Reference

Inspired by TideDra/zotero-arxiv-daily.