A local-first, cross-platform RSS reader with AI-assisted summarization and translation. Built as a course project for the Open-Source Software class.
Team: see docs/team.md.
- Frontend: React 19 + Vite + TypeScript (
packages/ui) - Backend: Python 3.11+ + FastAPI + SQLite (
backend/) - Desktop shell: Tauri (
apps/desktop/) - Type contract: Pydantic → OpenAPI →
openapi-typescript→packages/shared-types - Tooling: pnpm workspaces,
uvfor Python deps
See docs/architecture.md for the full picture.
- Node.js 20+
- pnpm 10+ (
corepack enable && corepack prepare pnpm@10.11.0 --activate) - Python 3.11+
- uv —
curl -LsSf https://astral.sh/uv/install.sh | sh
# 1. Install JS deps (root)
pnpm install
# 2. Install Python deps
cd backend && uv sync && cd ..Run backend and frontend in two terminals:
# Terminal 1 — backend on :8000
pnpm dev:backend
# Terminal 2 — UI dev server on :5173
pnpm dev:uiOpen http://127.0.0.1:5173. The UI talks to the backend at http://127.0.0.1:8000.
Backend health check: http://127.0.0.1:8000/healthz
OpenAPI docs: http://127.0.0.1:8000/docs
pnpm gen:typesRun this whenever a Pydantic model in backend/app/schemas/ or a route signature changes. Commit the regenerated packages/shared-types/src/generated.ts in the same PR.
# JS / TS
pnpm typecheck
pnpm test
# Python
cd backend
uv run pytest
uv run ruff check.
├── apps/
│ └── desktop/ Tauri shell (member 8)
├── backend/ Python FastAPI sidecar
│ ├── app/ composition root + Pydantic schemas (tech lead)
│ ├── feed_engine/ RSS/Atom/OPML
│ ├── db/ SQLite + repositories
│ ├── content_cleaner/ HTML cleaning + Markdown
│ ├── agent_summary/ summary agent
│ ├── agent_translation/ translation agent
│ └── llm_providers/ provider abstractions
├── packages/
│ ├── ui/ React frontend
│ ├── shared-types/ generated TS contract
│ └── ipc-client/ typed fetch wrapper
├── docs/ architecture, workflow, contract, team
└── .github/ CI, PR template, CODEOWNERS
Each module has its own AGENT.md describing scope, contract, and acceptance criteria.
docs/architecture.md— process model, layering, data flowdocs/team-workflow.md— branches, PRs, reviewsdocs/ipc-contract.md— endpoint table and breaking-change policydocs/coding-agent-trace.md— how to log Coding Agent sessionsdocs/team.md— members and modules