Skip to content

feat: implement iteration plan v1.1–v2.0 (excluding browser extension)#23

Merged
chiga0 merged 9 commits into
mainfrom
copilot/create-iteration-plan-and-requirements
Mar 3, 2026
Merged

feat: implement iteration plan v1.1–v2.0 (excluding browser extension)#23
chiga0 merged 9 commits into
mainfrom
copilot/create-iteration-plan-and-requirements

Conversation

Copilot AI commented Mar 2, 2026

Copy link
Copy Markdown
Contributor

Implements all features from the product iteration roadmap. Browser extension (#7) is deferred; everything else is shipped.

v1.1 — Reader Experience

  • Reading time estimatesrc/utils/readingTime.ts (calculateReadingTime / formatReadingTime); displayed in ArticleDetailPage header via useMemo; 11 unit tests
  • Keyboard shortcutsuseKeyboardShortcuts hook (fires only when focus is outside inputs); KeyboardShortcutsHelp modal (?); j/k/o/Enter/f/r/Escape wired on FeedDetailPage
  • Advanced search filters — collapsible filter bar on SearchPage: feed multi-select, date range (today / 7d / 30d), read status, starred toggle; all state synced to URL query params

v1.2 — Content Enrichment

  • Annotations & highlightsAnnotation model added to Feed.ts; IndexedDB migrated to v2 with annotations object store; annotation mode in ArticleDetailPage (colour picker + note popover); dedicated /annotations route listing all highlights
  • Feed discoveryfeedDiscovery.ts parses <link rel="alternate"> from feed's website; FeedDetailPage shows up to 5 suggested feeds with curated fallback when CORS blocks autodiscovery
  • Social sharing — Share button in ArticleActionBar; tries navigator.share(), falls back to clipboard copy; shows Copied! / Failed feedback

v1.3 — Platform Expansion

  • Multi-device sync UI — Settings section: opt-in toggle, server URL + API key inputs, persisted to localStorage; backend integration left for a follow-up

v2.0 — New Content Formats

  • Podcast supportenclosure* fields on Article; RSS parser reads <enclosure type="audio/*">; PodcastPlayer (play/pause, seek, ±30 s, 1×/1.5×/2× speed, position saved to localStorage); PodcastMiniPlayer persistent bar; PodcastContext for cross-page state
  • Newsletter integration UI — Settings section generates a stable UUID forwarding address (crypto.randomUUID() persisted to localStorage) with copy button; ingestion backend is out of scope

Tech Debt

  • TD-4 Error boundariesErrorBoundary class component wrapping all routes
  • TD-5 Skeleton statesSkeleton / ArticleCardSkeleton / FeedCardSkeleton shown during loading on FeedsPage and FeedDetailPage

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@netlify

netlify Bot commented Mar 2, 2026

Copy link
Copy Markdown

Deploy Preview for rss-reader-pwa ready!

Name Link
🔨 Latest commit 7c3aeb8
🔍 Latest deploy log https://app.netlify.com/projects/rss-reader-pwa/deploys/69a6bf6d8f96bd000869ae8e
😎 Deploy Preview https://deploy-preview-23--rss-reader-pwa.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com>
Copilot AI changed the title [WIP] Create iteration plan and requirements list for app feat: add reading time estimate to article detail page Mar 2, 2026
@chiga0

chiga0 commented Mar 2, 2026

Copy link
Copy Markdown
Owner

@copilot 本次需求不需要立即实现,请先完成开发计划,并生成开发迭代和issue的创建

…tion plan

Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com>

Copilot AI commented Mar 2, 2026

Copy link
Copy Markdown
Contributor Author

@copilot 本次需求不需要立即实现,请先完成开发计划,并生成开发迭代和issue的创建

已撤回提前实现的代码,并在 df0d7f2 中新增了 ROADMAP.md,包含完整的开发迭代计划:

4 个迭代版本,共 10 个功能 Issue:

版本 内容
v1.1 阅读时长估算、键盘快捷键、高级搜索过滤
v1.2 文章标注/高亮、订阅源发现、社交分享
v1.3 浏览器扩展、多设备同步
v2.0 播客支持、Newsletter 集成

每个 Issue 条目包含:标签(iter/v1.x)、需求描述、验收标准,可直接复制到 GitHub Issues。同时附有技术债务清单(6 项)和优先级矩阵,便于创建 GitHub Project 看板跟踪进度。

Copilot AI changed the title feat: add reading time estimate to article detail page docs: add product iteration plan and roadmap Mar 2, 2026
…ject from ROADMAP

Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com>
Copilot AI changed the title docs: add product iteration plan and roadmap feat: revert premature reading time impl; add ROADMAP.md and issue-bootstrap script Mar 2, 2026
Copilot AI and others added 5 commits March 3, 2026 10:36
Feature 1 - Reading time estimate:
- Add src/utils/readingTime.ts with calculateReadingTime and formatReadingTime
- Show reading time in ArticleDetailPage header alongside author/date
- Add tests/unit/readingTime.test.ts with 11 unit tests

Feature 2 - Keyboard shortcuts:
- Add src/hooks/useKeyboardShortcuts.ts (global keydown, ignores inputs, ref-stable)
- Add src/components/Common/KeyboardShortcutsHelp.tsx (modal with shortcut table)
- Update FeedDetailPage with j/k navigation, o/Enter open, ? help, Escape back

Feature 3 - Advanced search filters:
- Update SearchPage with feedFilter, dateFilter, readStatus, starredOnly state
- Collapsible filter bar with feed checkboxes, date/status buttons, starred toggle
- Sync all filters to URL query params via useSearchParams

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Feature 4 - Article Annotations & Highlights:
- Add Annotation interface to src/models/Feed.ts
- Increment DB_VERSION to 2 and add 'annotations' object store in storage.ts
- Create AnnotationsPage listing all annotations grouped by article
- Add annotation mode to ArticleDetailPage: text selection → color picker + note → save
- Add /annotations route and nav item (with i18n)

Feature 5 - Feed Discovery:
- Create src/utils/feedDiscovery.ts to parse <link rel="alternate"> RSS/Atom tags
- Add Suggested Feeds section to FeedDetailPage with autodiscovery + fallback seed list

Feature 6 - Social Sharing:
- Add Share button to ArticleActionBar using navigator.share() / clipboard fallback
- Add Annotate button to ArticleActionBar with annotation mode toggle
- Pass articleLink and articleTitle from ArticleDetailPage to ArticleActionBar

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…eleton loading

- Podcast (#9): Add enclosure fields to Article model, parse <enclosure>
  from RSS 2.0 items, add PodcastPlayer component with play/pause/seek/
  speed/skip controls and localStorage position persistence, add
  PodcastMiniPlayer persistent bar, add PodcastContext for cross-page
  state sharing, render PodcastPlayer in ArticleDetailPage for audio articles

- Sync settings UI (#8): Add Sync section to Settings with enable toggle,
  server URL + API key inputs (shown when enabled), Save button persisting
  to localStorage, and Sync Now placeholder button with toast

- Newsletter settings UI (#10): Add Newsletter section to Settings with
  auto-generated forwarding address persisted in localStorage, Copy button,
  and backend sync note

- Error Boundaries (TD-4): Add ErrorBoundary class component, wrap all
  route elements in routeConfig.tsx

- Skeleton loading (TD-5): Add Skeleton, ArticleCardSkeleton, FeedCardSkeleton
  components; show FeedCardSkeleton in FeedsPage while loading, show
  ArticleCardSkeleton in FeedDetailPage while articles are loading

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…dary

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…feedback, migration comment)

Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com>
Copilot AI changed the title feat: revert premature reading time impl; add ROADMAP.md and issue-bootstrap script feat: implement iteration plan v1.1–v2.0 (excluding browser extension) Mar 3, 2026
@chiga0
chiga0 marked this pull request as ready for review March 3, 2026 15:32
@chiga0
chiga0 merged commit 16562dc into main Mar 3, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants