You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ROADMAP.md
+178-2Lines changed: 178 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,8 @@
1
1
# RSS Reader — Product Iteration Plan
2
2
3
3
> **Status**: Draft — v1.0.0 is live. This document defines the roadmap for subsequent releases.
4
-
> **Tracking**: Each feature below corresponds to a GitHub Issue. Labels follow the pattern `iter/v1.x`.
4
+
> **Tracking**: Each feature below corresponds to a GitHub Issue. Labels follow the pattern `iter/v1.x`.
5
+
> **Competitive analysis**: See [Medium Comparison Report](docs/medium-comparison-report.md) for the detailed feature gap analysis that informed this roadmap.
5
6
6
7
---
7
8
@@ -81,6 +82,73 @@
81
82
82
83
---
83
84
85
+
#### #3.1 · Reading progress bar *(new — from Medium comparison)*
86
+
**Label**: `iter/v1.1`, `enhancement`
87
+
**Description**: Display a thin progress bar at the top of the article detail page that fills as the user scrolls through the article, matching Medium's signature reading progress indicator.
88
+
**Acceptance criteria**:
89
+
- Fixed 3px bar at top of `ArticleDetailPage`
90
+
- Smoothly fills from 0% to 100% based on scroll position
91
+
- Colour adapts to current theme (green in light mode, blue in dark mode)
92
+
- Uses `requestAnimationFrame` + passive scroll listener for performance
93
+
- Stays at 100% when article is fully scrolled
94
+
- Unit tested
95
+
96
+
---
97
+
98
+
#### #3.2 · Typography & readability upgrade *(new — from Medium comparison)*
99
+
**Label**: `iter/v1.1`, `enhancement`
100
+
**Description**: Refine article body typography to match Medium-level reading comfort: optimal line width (42rem), improved line-height for CJK content, larger base font size, and better heading hierarchy.
101
+
**Acceptance criteria**:
102
+
- Article body max-width reduced from 48rem to 42rem
103
+
- Base font size: 18px desktop / 16px mobile
104
+
- Line-height: 1.7 for CJK, 1.58 for Latin scripts
105
+
- Heading sizes and spacing visually improved
106
+
- No breaking changes to existing article rendering
107
+
- Visual regression tested
108
+
109
+
---
110
+
111
+
#### #3.3 · Code syntax highlighting *(new — from Medium comparison)*
112
+
**Label**: `iter/v1.1`, `enhancement`
113
+
**Description**: Add syntax highlighting for code blocks inside articles using a lightweight library (e.g. highlight.js). Includes a copy-to-clipboard button on each code block.
114
+
**Acceptance criteria**:
115
+
- Code blocks in article HTML are auto-highlighted
116
+
- Language auto-detected where possible
117
+
- "Copy" button appears on hover/focus for each code block
118
+
- Theme-aware (light/dark highlighting styles)
119
+
- Bundle size increase ≤ 30 KB gzipped
120
+
- Unit tested
121
+
122
+
---
123
+
124
+
#### #3.4 · Image lightbox *(new — from Medium comparison)*
125
+
**Label**: `iter/v1.1`, `enhancement`
126
+
**Description**: Allow users to click on images inside articles to view them in a full-screen lightbox overlay. Supports pinch-to-zoom on mobile.
127
+
**Acceptance criteria**:
128
+
- Clicking any `<img>` in article body opens a full-screen overlay
129
+
- Overlay supports swipe between images in the same article
130
+
- Close via ESC key, backdrop click, or close button
131
+
- Pinch-to-zoom on touch devices
132
+
- Minimal bundle impact (use `medium-zoom` or equivalent, ~4 KB)
133
+
- Unit tested
134
+
135
+
---
136
+
137
+
#### #3.5 · Enhanced article cards *(new — from Medium comparison)*
138
+
**Label**: `iter/v1.1`, `enhancement`
139
+
**Description**: Enrich article list cards with more metadata: thumbnail image, estimated reading time, 2-line summary preview, and visual unread/favourite indicators.
140
+
**Acceptance criteria**:
141
+
- Thumbnail image shown when available (lazy-loaded)
142
+
- Reading time estimate displayed (clock icon + "X min")
143
+
- Summary preview truncated to 2 lines
144
+
- Unread articles: bold title + left blue accent bar
145
+
- Favourited articles: heart badge on card corner
146
+
- Hover: subtle lift + shadow animation
147
+
- Responsive across mobile, tablet, desktop breakpoints
**Goal**: Let users annotate, discover, and share content they find valuable.
@@ -123,6 +191,59 @@
123
191
124
192
---
125
193
194
+
#### #6.1 · Recommended feed sources & onboarding *(new — from Medium comparison)*
195
+
**Label**: `iter/v1.2`, `enhancement`
196
+
**Description**: Provide a curated list of popular RSS feeds organised by category (Tech, Design, Business, Lifestyle, etc.) and show an onboarding flow for first-time users so they can subscribe to feeds without manually finding URLs.
197
+
**Acceptance criteria**:
198
+
- JSON config file with 6–8 categories, each containing 3–5 curated feeds
199
+
- First-time user sees a step-by-step guide: Welcome → Pick categories → One-click subscribe → Enter main app
200
+
- Onboarding can be skipped
201
+
-`onboardingComplete` flag stored in localStorage to prevent re-display
202
+
- Recommended feeds section also accessible from Settings for returning users
203
+
- No external API calls required
204
+
- Unit tested
205
+
206
+
---
207
+
208
+
#### #6.2 · Article table of contents (TOC) *(new — from Medium comparison)*
209
+
**Label**: `iter/v1.2`, `enhancement`
210
+
**Description**: Auto-generate a floating table of contents from article headings (h1–h3). Desktop: fixed right sidebar. Mobile: floating button that opens a drawer. Current heading highlighted based on scroll position.
211
+
**Acceptance criteria**:
212
+
- TOC only appears when article has ≥ 3 headings
213
+
- Click TOC item → smooth scroll to heading
214
+
- Current section highlighted via IntersectionObserver
215
+
- Desktop: right-side sticky panel, does not overlap article body
216
+
- Mobile: floating button → bottom drawer
217
+
- Long headings truncated with ellipsis
218
+
- Unit tested
219
+
220
+
---
221
+
222
+
#### #6.3 · Batch mark-as-read *(new — from Medium comparison)*
223
+
**Label**: `iter/v1.2`, `enhancement`
224
+
**Description**: Allow users to mark all articles as read at the feed or category level, and support multi-select mode for batch operations (mark read, favourite, delete).
225
+
**Acceptance criteria**:
226
+
- "Mark all as read" button on feed detail and category views
227
+
- Long-press (mobile) or checkbox (desktop) enters multi-select mode
228
+
- Batch actions: mark read, favourite, remove
229
+
- Confirmation dialog before destructive batch actions
230
+
- Unit tested
231
+
232
+
---
233
+
234
+
#### #6.4 · Pull-to-refresh on mobile *(new — from Medium comparison)*
235
+
**Label**: `iter/v1.2`, `enhancement`
236
+
**Description**: Implement native-feeling pull-to-refresh gesture on article list pages for mobile users, replacing the need to tap the refresh button.
237
+
**Acceptance criteria**:
238
+
- Pull down ≥ 60px at the top of the feed list triggers refresh
**Goal**: Reach users on more surfaces and make the product stickier across devices.
@@ -153,6 +274,48 @@
153
274
154
275
---
155
276
277
+
#### #8.1 · Immersive reading mode *(new — from Medium comparison)*
278
+
**Label**: `iter/v1.3`, `enhancement`
279
+
**Description**: Provide a distraction-free reading mode that hides navigation, sidebars, and action bars, leaving only the article body and a floating back button. Triggered by a dedicated button or auto-hide on scroll-down.
280
+
**Acceptance criteria**:
281
+
- Hides: top navbar, sidebar, bottom action bar
282
+
- Shows: article body only + floating "exit" button
283
+
- Toggle via dedicated button in article toolbar
284
+
- Auto-hide UI on scroll down, show on scroll up
285
+
- ESC key exits immersive mode
286
+
- Keyboard shortcut (`F11` or `z`) to toggle
287
+
- Unit tested
288
+
289
+
---
290
+
291
+
#### #8.2 · Font & reading preferences *(new — from Medium comparison)*
292
+
**Label**: `iter/v1.3`, `enhancement`
293
+
**Description**: Allow users to customise article typography: font family (serif / sans-serif / system), font size (4 presets), and line spacing (3 presets). Persisted in localStorage and applied globally.
294
+
**Acceptance criteria**:
295
+
- Settings section: "Reading Preferences"
296
+
- Font size: Small (14px) / Medium (16px) / Large (18px) / Extra Large (20px)
297
+
- Font family: System Default / Serif / Sans-Serif
298
+
- Line spacing: Compact / Normal / Relaxed
299
+
- Stored in localStorage, applied to all article views
300
+
- Preview in settings page
301
+
- Unit tested
302
+
303
+
---
304
+
305
+
#### #8.3 · Multiple reading lists *(new — from Medium comparison)*
306
+
**Label**: `iter/v1.3`, `enhancement`
307
+
**Description**: Allow users to create named reading lists (e.g. "Read Later", "Tech Articles", "Weekend Reads") beyond the single favourites collection. Articles can be saved to one or more lists.
308
+
**Acceptance criteria**:
309
+
- Create / rename / delete reading lists
310
+
- Save article to a specific list (or multiple lists)
311
+
- Default list = existing Favourites (backwards compatible)
312
+
- Dedicated page to browse all lists and their articles
313
+
- Drag-to-reorder lists
314
+
- Data stored in IndexedDB
315
+
- Unit tested
316
+
317
+
---
318
+
156
319
## Iteration v2.0 — New Content Formats (Priority: Low)
157
320
158
321
**Goal**: Expand beyond text articles to audio and email content.
@@ -205,11 +368,23 @@ Track these as separate issues with label `tech-debt`:
205
368
|#1 Reading time | Medium | Low |**High**|
206
369
|#2 Keyboard shortcuts | High | Low |**High**|
207
370
|#3 Advanced search | High | Medium |**High**|
371
+
|#3.1 Reading progress bar | High | Very Low |**High**|
372
+
|#3.2 Typography upgrade | High | Low |**High**|
373
+
|#3.3 Code syntax highlighting | Medium | Low |**High**|
374
+
|#3.4 Image lightbox | Medium | Very Low |**High**|
375
+
|#3.5 Enhanced article cards | High | Low |**High**|
208
376
|#4 Annotations | High | High | Medium |
209
377
|#5 Feed discovery | Medium | Medium | Medium |
210
378
|#6 Social sharing | Medium | Low |**High**|
379
+
|#6.1 Recommended feeds & onboarding | Very High | Medium |**High**|
380
+
|#6.2 Article TOC | High | Medium |**High**|
381
+
|#6.3 Batch mark-as-read | High | Low |**High**|
382
+
|#6.4 Pull-to-refresh | Medium | Low | Medium |
211
383
|#7 Browser extension | High | High | Medium |
212
384
|#8 Multi-device sync | Very High | Very High | Low (needs backend) |
385
+
|#8.1 Immersive reading mode | Medium | Low | Medium |
386
+
|#8.2 Font & reading preferences | Medium | Low | Medium |
387
+
|#8.3 Multiple reading lists | Medium | Medium | Medium |
213
388
|#9 Podcast | High | High | Low |
214
389
|#10 Newsletter | Medium | Very High | Low |
215
390
@@ -220,7 +395,8 @@ Track these as separate issues with label `tech-debt`:
220
395
1.**Product manager / repo owner**: Convert each issue section above into a GitHub Issue. Use the issue title, labels, and acceptance criteria verbatim.
221
396
2.**Developers**: Reference the acceptance criteria as the definition of done before opening a PR.
222
397
3.**Project board**: Create a GitHub Project with columns `Backlog → In Progress → Review → Done` and assign each issue to the appropriate iteration milestone.
398
+
4.**Competitive analysis**: See [docs/medium-comparison-report.md](docs/medium-comparison-report.md) for the full feature gap analysis and rationale behind the new items marked *(from Medium comparison)*.
0 commit comments