ArXiv Pulse is a local-first research inbox for arXiv papers. It fetches daily papers, ranks and enriches them, and serves an interactive FastAPI + frontend workspace for triage, review, and synthesis.
- Daily arXiv fetch + local library storage (SQLite)
- Search modes: local keyword, semantic/vector, and global arXiv search
- Triage states (
new,liked,dismissed, bookmarks) with inbox automation - AI-assisted workflows (structure extraction, synthesis, digests, ranking support)
- Reading plan, follow-ups, alerts, and unified inbox views
- Export/share utilities and version-update tracking
- Backend: Python, FastAPI, Uvicorn
- Storage: SQLite
- Frontend: Vanilla JS/CSS/HTML
- ML/AI utilities: scikit-learn + local/remote AI service integrations in
arxivc/ai_service.py
- Create and activate a virtual environment:
python3 -m venv .venv
source .venv/bin/activate- Install dependencies:
pip install -r requirements.txt- Start the app:
./run_server.shAlternative:
.venv/bin/uvicorn arxivc.server:app --reload --host 0.0.0.0 --port 8001- Open:
http://localhost:8001
Use this pattern to keep personal paths/tokens out of Git:
config.jsonis the public/shared base config.config.local.jsonis your private override (git-ignored).- The app loads
config.json, then overrides withconfig.local.json. - UI Settings saves to
config.local.jsonby default.
Create your local file:
cp config.example.json config.local.jsonThen edit config.local.json with your local values (e.g. Obsidian vault path, Notion token/db id).
Optional: set ARXIVC_LOCAL_CONFIG_FILE if you want the private override file in a custom path.
- Smoke checks:
make smoke- Full validation (Python compile + JS syntax + smoke):
make validate- Hot-path profiling:
make profilearxivc/ # Backend services, API routes, storage, ranking, exports
frontend/ # Web UI (app.js, style.css, index.html)
scripts/ # Smoke tests and profiling scripts
run_server.sh # Local dev server launcher
Makefile # Smoke/profile/validate helpers
GitHub Actions is configured in .github/workflows/ci.yml to run on push and pull requests to main:
- dependency install
- Python compile checks
- frontend JS syntax check
- API smoke suite
MIT. See LICENSE.