feat: implement iteration plan v1.1–v2.0 (excluding browser extension)#23
Merged
Merged
Conversation
✅ Deploy Preview for rss-reader-pwa ready!
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
Owner
|
@copilot 本次需求不需要立即实现,请先完成开发计划,并生成开发迭代和issue的创建 |
…tion plan Co-authored-by: chiga0 <24784430+chiga0@users.noreply.github.com>
Contributor
Author
已撤回提前实现的代码,并在 4 个迭代版本,共 10 个功能 Issue:
每个 Issue 条目包含:标签( |
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
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
marked this pull request as ready for review
March 3, 2026 15:32
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements all features from the product iteration roadmap. Browser extension (#7) is deferred; everything else is shipped.
v1.1 — Reader Experience
src/utils/readingTime.ts(calculateReadingTime/formatReadingTime); displayed inArticleDetailPageheader viauseMemo; 11 unit testsuseKeyboardShortcutshook (fires only when focus is outside inputs);KeyboardShortcutsHelpmodal (?); j/k/o/Enter/f/r/Escape wired onFeedDetailPageSearchPage: feed multi-select, date range (today / 7d / 30d), read status, starred toggle; all state synced to URL query paramsv1.2 — Content Enrichment
Annotationmodel added toFeed.ts; IndexedDB migrated to v2 withannotationsobject store; annotation mode inArticleDetailPage(colour picker + note popover); dedicated/annotationsroute listing all highlightsfeedDiscovery.tsparses<link rel="alternate">from feed's website;FeedDetailPageshows up to 5 suggested feeds with curated fallback when CORS blocks autodiscoveryArticleActionBar; triesnavigator.share(), falls back to clipboard copy; showsCopied!/Failedfeedbackv1.3 — Platform Expansion
localStorage; backend integration left for a follow-upv2.0 — New Content Formats
enclosure*fields onArticle; RSS parser reads<enclosure type="audio/*">;PodcastPlayer(play/pause, seek, ±30 s, 1×/1.5×/2× speed, position saved tolocalStorage);PodcastMiniPlayerpersistent bar;PodcastContextfor cross-page statecrypto.randomUUID()persisted tolocalStorage) with copy button; ingestion backend is out of scopeTech Debt
ErrorBoundaryclass component wrapping all routesSkeleton/ArticleCardSkeleton/FeedCardSkeletonshown during loading onFeedsPageandFeedDetailPage💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.