Skip to content

Commit ca34d83

Browse files
Copilotchiga0
andauthored
v1.1 Reader Experience: speckit planning, feature implementation, and comprehensive test coverage (#26)
* Initial plan * Add Medium vs RSS Reader comparison report and update ROADMAP with new feature items Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com> * Add speckit planning documents for v1.1 Reader Experience (spec, plan, tasks) Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com> * Implement v1.1 Reader Experience: progress bar, CJK reading time, typography, code copy, image lightbox, enhanced cards Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com> * Add comprehensive tests for v1.1 Reader Experience features (unit, integration, e2e) Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com> * Fix CI failures: restore annotationColorClass after merge, fix perf test for ReadingTimeResult, fix E2E test selector Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com> * fix: remove unused ANNOTATION_COLOR_CLASS and rafCallback to fix ESLint errors Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com> Co-authored-by: ChiGao <arno.ga0@outlook.com>
1 parent 628b39d commit ca34d83

27 files changed

Lines changed: 3669 additions & 71 deletions

ROADMAP.md

Lines changed: 178 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# RSS Reader — Product Iteration Plan
22

33
> **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.
56
67
---
78

@@ -81,6 +82,73 @@
8182

8283
---
8384

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
148+
- Unit tested
149+
150+
---
151+
84152
## Iteration v1.2 — Content Enrichment (Priority: Medium)
85153

86154
**Goal**: Let users annotate, discover, and share content they find valuable.
@@ -123,6 +191,59 @@
123191

124192
---
125193

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
239+
- Animated spinner during refresh
240+
- Only active when scrolled to top
241+
- Works on iOS Safari and Android Chrome
242+
- Does not interfere with normal scrolling
243+
- Unit tested
244+
245+
---
246+
126247
## Iteration v1.3 — Platform Expansion (Priority: Medium)
127248

128249
**Goal**: Reach users on more surfaces and make the product stickier across devices.
@@ -153,6 +274,48 @@
153274

154275
---
155276

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+
156319
## Iteration v2.0 — New Content Formats (Priority: Low)
157320

158321
**Goal**: Expand beyond text articles to audio and email content.
@@ -205,11 +368,23 @@ Track these as separate issues with label `tech-debt`:
205368
| #1 Reading time | Medium | Low | **High** |
206369
| #2 Keyboard shortcuts | High | Low | **High** |
207370
| #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** |
208376
| #4 Annotations | High | High | Medium |
209377
| #5 Feed discovery | Medium | Medium | Medium |
210378
| #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 |
211383
| #7 Browser extension | High | High | Medium |
212384
| #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 |
213388
| #9 Podcast | High | High | Low |
214389
| #10 Newsletter | Medium | Very High | Low |
215390

@@ -220,7 +395,8 @@ Track these as separate issues with label `tech-debt`:
220395
1. **Product manager / repo owner**: Convert each issue section above into a GitHub Issue. Use the issue title, labels, and acceptance criteria verbatim.
221396
2. **Developers**: Reference the acceptance criteria as the definition of done before opening a PR.
222397
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)*.
223399

224400
---
225401

226-
*Last updated: 2026-03-02 · Maintainer: @chiga0*
402+
*Last updated: 2026-03-04 · Maintainer: @chiga0*

0 commit comments

Comments
 (0)