A decentralized RSS reader built on AT Protocol (Bluesky).
skyreader/
├── frontend/ SvelteKit PWA
├── backend/ Cloudflare Workers API
├── admin/ SvelteKit admin dashboard (Cloudflare Pages)
├── feed-proxy/ Feed caching proxy (Fly.io)
├── e2e/ Playwright end-to-end tests
└── scripts/ Development scripts
git clone https://github.com/disnet/skyreader.git
cd skyreader- Node.js
- Bun (for the feed proxy)
- Install dependencies:
cd backend && npm install cd frontend && npm install cd feed-proxy && bun install
- Create
backend/.dev.vars:FRONTEND_URL=http://127.0.0.1:5173 FEED_PROXY_URL=http://127.0.0.1:3000
# Start feed proxy + backend + frontend together
./scripts/dev-local.shThis runs D1 migrations, starts the feed proxy (port 3000), backend (port 8787), and frontend (port 5173).
To start services individually:
cd feed-proxy && bun run dev # port 3000
cd backend && npm run dev # port 8787
cd frontend && npm run dev # port 5173
cd admin && npm install && npm run dev # port 5174To reset the local database: rm -rf backend/.wrangler/state/v3/d1/
Use http://127.0.0.1:5173 not localhost for local development (OAuth requirement).
npm install
npx playwright install chromium
npm run test:e2eSee CLAUDE.md for architecture details and development guidance. Each package also has its own CLAUDE.md.