Just read the damn internet.
JFDI Reader is a universal reading inbox - one place where everything you want to read arrives, gets triaged, and gets processed. RSS feeds, newsletters, social media posts, Discord threads - all normalized into a single stream with a fast keyboard-driven triage flow.
The internet's real problem isn't a lack of content. It's the difficulty of finding high-signal sources you can trust. Reading is fragmented across email, apps, and chat. There's no way to build a personal trust network around reading, and no way for good writing to surface to people who'd actually care about it. Volume makes it worse: when stuff is everywhere, even a manageable amount feels like drowning.
Google Reader accidentally solved part of this. Following someone's shared items was a trust signal - you weren't following their takes, you were following their taste. JFDI Reader makes that mechanic intentional. The social layer (coming in Phase 3) is built around curation as reputation: sharing means vouching, and the system knows whether you actually read the thing.
These principles override the spec wherever they conflict:
- Unified inbox is the product thesis - Without multi-source ingestion, this is just another RSS app. Universal feed normalization is core.
- The inbox is for deciding, not reading - Triage and reading are separate modes with distinct UIs.
- Three-action triage - Every item gets one of three decisions: archive, read now, or queue for later. Fast and final.
- AI is a pluggable enhancement, not a requirement - BYO API keys as default. No AI needed for core functionality. Degrades gracefully.
- Profile is a pluggable layer - The relevance engine queries a profile API. Manual doc is the first provider. Any knowledge base can be a future provider.
- Onboarding leverages existing AI context - Generate a structured prompt users drop into their existing AI assistant to bootstrap their profile. Zero manual typing.
- Output actions are equal citizens - Share, send, save, and fuel your work should all be one keystroke away from any article.
- Deployment: Dockerized for self, shareable, hosted maybe later - Build for Alex first. Docker makes it easy to hand to others. Hosted SaaS is a future business decision.
JFDI Reader has two modes. They're designed for different contexts and different devices.
Triage mode is the inbox. Dense, keyboard-driven, high information per screen. You process the firehose here. Every item gets one decision: a to archive it, Enter to read it now, or q to queue it for later. j/k to move between items. z to undo anything. The goal is to work through your inbox fast - without reading everything, but without missing anything worth reading.
Reading mode is the queue. Clean, focused, one article at a time. This is where you actually read. Actions from reading mode (archive, queue, star) automatically advance to the next article so you stay in flow. Designed for phone use - touch-friendly, safe-area padding, bottom action bar.
The triage flow is intentionally opinionated. Three actions, not ten. Keyboard shortcuts that feel like Vim. Round-robin interleaving so no single feed dominates your inbox. Optimistic updates so every action feels instant. Full undo (z) so you never lose anything by acting too fast.
Press ? to see all shortcuts. Press / to search.
Phase 1 remaining work: newsletter email ingestion, PWA offline support, Docker container.
Phase 2 adds universal inputs (Bluesky, YouTube, Reddit, Discord/Slack) and an AI layer for relevance blurbs - opt-in per feed, BYO API key.
Phase 3 is the social layer: ATProto integration, sharing as curation, following people's taste not their takes.
Requires Bun v1.0+.
bun install
cd client && bun install && cd ..
bunx drizzle-kit migrate
bun run server/src/scripts/seed-feeds.ts # optional: 13 curated starter feeds
cd client && bun run build && cd ..
bun run server/src/index.tsOpen http://localhost:3100.
For development with hot reload:
bun run dev:server # API with watch mode
bun run dev:client # Vite with HMRBun + Hono + React 19 + SQLite + Tailwind CSS
See server/src/routes/ for API details.
Phase 1: 31 of 34 milestones complete.
See .claude/plans/2026-03-27-phase1-build.md for detailed progress.
Private. Not yet open source.