How athou/commafeed works
CommaFeed is a self-hosted RSS reader with a React client and Quarkus server. Users authenticate, subscribe to feeds or import OPML, browse entries by feed/category/tag, and mark or star them; settings and administration are separate workflows. The server fetches and parses subscribed feeds, stores entries and per-user status, then refreshes clients and sends configured notifications. The graph preserves documented API compatibility, cleanup, and customization capabilities; unsampled endpoint and page wiring is represented at subsystem level where the tree supports it.
Main entry points: EntryREST.java REST resources · store.ts Client state · App.tsx Reader UI · FeedEntryService.java Entry processing
Components 28
Reader client
- Reader UI
commafeed-client/src/App.tsx - Client state
commafeed-client/src/app/store.ts - HTTP client
commafeed-client/src/app/client.ts - Reading pages
commafeed-client/src/pages/app/FeedEntriesPage.tsx - Feed navigation
commafeed-client/src/components/sidebar/Tree.tsx - Settings UI
commafeed-client/src/pages/app/SettingsPage.tsx
Server interfaces
- REST resources
commafeed-server/src/main/java/com/commafeed/frontend/resource/EntryREST.java - Reader APIs
commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java - Live updates
commafeed-server/src/main/java/com/commafeed/frontend/ws/WebSocketEndpoint.java - Custom CSS JS
commafeed-server/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java
Feed processing
- Feed subscriptions
commafeed-server/src/main/java/com/commafeed/backend/service/FeedService.java - Refresh engine
commafeed-server/src/main/java/com/commafeed/backend/feed/FeedRefreshEngine.java - Fetch and parse
commafeed-server/src/main/java/com/commafeed/backend/feed/FeedFetcher.java - Entry processing
commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryService.java - Content cleaning
commafeed-server/src/main/java/com/commafeed/backend/service/FeedEntryContentCleaningService.java - OPML import export
commafeed-server/src/main/java/com/commafeed/backend/opml/OPMLImporter.java
Accounts and persistence
- User service
commafeed-server/src/main/java/com/commafeed/backend/service/UserService.java - Authentication
commafeed-server/src/main/java/com/commafeed/security/AuthenticationContext.java - Data access
commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java - Application database
commafeed-server/src/main/java/com/commafeed/backend/dao/UnitOfWork.java
Background and integrations
- Scheduled cleanup
commafeed-server/src/main/java/com/commafeed/backend/task/TaskScheduler.java - Database cleanup
commafeed-server/src/main/java/com/commafeed/backend/service/db/DatabaseCleaningService.java - Push notifications
commafeed-server/src/main/java/com/commafeed/backend/service/PushNotificationService.java - Email service
commafeed-server/src/main/java/com/commafeed/backend/service/MailService.java
Other components
- Reader user
- Feed publishers
- Push providers
- Mail provider
Connections 35
- Reader user → Reader UI: uses
- Reader UI → Client state: dispatches
- Reader UI → Reading pages: routes to
- Reader UI → Feed navigation: renders
- Reading pages → Client state: dispatches
- Feed navigation → Client state: reads
- Settings UI → Client state: dispatches
- Client state → HTTP client: requests
- HTTP client → REST resources: HTTP calls
- REST resources → Authentication: authenticates
- REST resources → Feed subscriptions: invokes
- REST resources → Entry processing: invokes
- REST resources → User service: invokes
- Reader APIs → Authentication: authenticates
- Reader APIs → Entry processing: invokes
- Feed subscriptions → Refresh engine: queues refresh
- Refresh engine → Fetch and parse: refreshes feeds
- Fetch and parse → Feed publishers: fetches feeds
- Fetch and parse → Entry processing: parsed entries
- Entry processing → Content cleaning: cleans content
- Feed subscriptions → Data access: reads writes
- Entry processing → Data access: reads writes
- User service → Data access: reads writes
- Data access → Application database: queries
- OPML import export → Feed subscriptions: imports subscriptions
- REST resources → OPML import export: imports exports
- Refresh engine → Live updates: notifies
- Live updates → Client state: pushes updates
- Refresh engine → Push notifications: sends notifications
- Push notifications → Push providers: posts notification
- User service → Email service: sends account mail
- Email service → Mail provider: sends mail
- Scheduled cleanup → Database cleanup: runs cleanup
- Database cleanup → Data access: deletes records
- Custom CSS JS → Reader UI: serves customization