148 lines
7.1 KiB
Markdown
148 lines
7.1 KiB
Markdown
# RSSPipe Backlog Specification (`003_backlog.md`)
|
|
|
|
This document records planned features, UX enhancements, and architectural extensions identified during initial testing and validation.
|
|
|
|
---
|
|
|
|
## 1. Search Box Auto-Complete & Real-Time Suggestions
|
|
|
|
- **Status**: **Partially Implemented (Search History Table & Dropdown Active)**
|
|
- **Implemented**:
|
|
- SQLite table `search_history (keyword TEXT PRIMARY KEY, last_searched_at DATETIME, search_count INTEGER)`.
|
|
- Backend endpoints `GET /api/search/history`, `POST /api/search/history`, `DELETE /api/search/history`.
|
|
- Frontend auto-complete dropdown with keyboard navigation (`ArrowDown`, `ArrowUp`, `Enter`), single-item removal, and clear history.
|
|
- **Future Extensions**:
|
|
- Live fuzzy matching across live article titles, feeds, authors, and category labels alongside search history.
|
|
|
|
---
|
|
|
|
## 2. Password Management in User Settings
|
|
|
|
- **Goal**: Allow the single-user administrator to update their login credentials directly from `Settings > Account & System`.
|
|
- **Scope**:
|
|
- Backend API: `PUT /api/auth/password` verifying `old_password` and updating bcrypt hash for `new_password`.
|
|
- Frontend Modal/Card with confirmation field and clear validation indicators.
|
|
|
|
---
|
|
|
|
## 3. Comprehensive Keyboard Shortcuts Test Suite
|
|
|
|
- **Goal**: Automated end-to-end and unit testing for all single-key power-user navigation bindings.
|
|
- **Scope**:
|
|
- `j` / `k`: Next / previous article navigation.
|
|
- `s`: Toggle star.
|
|
- `m`: Toggle read status.
|
|
- `e`: Archive / mark read and advance.
|
|
- `v`: Open original URL in new browser tab.
|
|
- `[`: Toggle sidebar collapse/expand.
|
|
- `r`: Trigger feed refresh.
|
|
- `a`: Open Add Feed modal.
|
|
- `1`, `2`, `3`: Switch views (3-Split, Waterfall, Settings).
|
|
- `?`: Open keyboard shortcuts cheatsheet modal.
|
|
- `Shift + A`: Mark all as read with confirmation.
|
|
- Ensure shortcuts are strictly inhibited when focus is inside text inputs, textareas, or modal forms.
|
|
|
|
---
|
|
|
|
## 4. Header Brand & Sidebar Toggle Alignment Consistency
|
|
|
|
- **Goal**: Standardize the top header layout across all view modes (3-Split, Waterfall, and Settings).
|
|
- **Scope**:
|
|
- In 3-Split view, ensure the RSSPipe logo and brand name occupy the consistent leftmost position matching Waterfall and Settings views.
|
|
- Ensure the sidebar toggle icon `[` integrates cleanly into the left group or toolbar without disrupting brand alignment.
|
|
|
|
---
|
|
|
|
## 5. Refresh Button Spinning Micro-Animation
|
|
|
|
- **Goal**: Provide instant visual feedback when a background refresh or manual pull is in progress.
|
|
- **Scope**:
|
|
- Add smooth CSS keyframe spin animation (`@keyframes spin { 100% { transform: rotate(360deg); } }`) to the refresh icon when `isRefreshing` is active.
|
|
|
|
---
|
|
|
|
## 6. Feed Favicon & Website Icon Integration (Completed)
|
|
|
|
- **Goal**: Enhance visual recognition by displaying colorful website brand icons next to each feed.
|
|
- **Scope**:
|
|
- **Auto-Resolution**: Automatically generates and stores high-resolution website favicons (`https://www.google.com/s2/favicons?domain=...&sz=64`) from the feed's website root during subscription and crawler discovery.
|
|
- **Fallback**: Gracefully falls back to the clean RSS icon if image loading fails or host is unreachable.
|
|
- **Manual Customization**: Added full manual customization in `Settings > Feeds > Edit Feed` with live preview and "Auto-Detect" one-click button.
|
|
- **DB Migration & Backfill**: Automatically added `icon_url` column and backfilled all existing feeds.
|
|
|
|
---
|
|
|
|
## 7. Active Post Reading Persistence on Subscription Switch
|
|
|
|
- **Goal**: Prevent reader disruption when exploring other subscriptions.
|
|
- **Scope**:
|
|
- When actively reading an article in the right canvas of 3-Split view, clicking a different subscription or category in the left sidebar should update the middle article list *without* abruptly closing or reloading the active article in the right canvas until a new article is explicitly selected.
|
|
|
|
---
|
|
|
|
## 8. Unified Feed & Category Tree Hierarchy ("Feeds" Root)
|
|
|
|
- **Goal**: Simplify feed organization into a single clean hierarchy.
|
|
- **Scope**:
|
|
- Eliminate the artificial separation between "Categorized Feeds" and "Uncategorized Feeds".
|
|
- Present a single unified **"Feeds"** section where uncategorized feeds reside at the root level alongside collapsible category folders.
|
|
- Drag-and-drop or simple dropdown assignment to move feeds between root and folders.
|
|
|
|
---
|
|
|
|
## 9. Enhanced Xiaohongshu Masonry Waterfall Experience
|
|
|
|
- **Goal**: Further elevate the card aesthetics and mobile interaction to closely match Xiaohongshu.
|
|
- **Scope**:
|
|
- Staggered dynamic aspect ratios with prominent media cards.
|
|
- Smooth infinite scroll pagination.
|
|
- Interactive gesture swipe to dismiss the full-screen reader.
|
|
|
|
---
|
|
|
|
## 10. Beautiful 404 Error Page
|
|
|
|
- **Goal**: Provide a polished, modern, brand-consistent 404 Not Found experience.
|
|
- **Scope**:
|
|
- Frontend 404 route component with sleek modern aesthetics (glassmorphism/minimal illustration, clear error description, and a "Return to Gateway" action button).
|
|
- Server-side fallback handler returning a clean, branded HTML response for unmatched routes.
|
|
|
|
---
|
|
|
|
## 11. Multi-Variant Pipeline Enrichments (AI Summary, TTS, Keywords, Audio)
|
|
|
|
- **Goal**: Expand the event-driven rules engine and variant storage system with automated enrichment plugins.
|
|
- **Scope**:
|
|
- **AI Summary Hook**: Integrate LLM actions (e.g. OpenAI / Anthropic / Gemini / Ollama) to automatically generate and store concise summaries in `entry_variants(key='ai_summary')`.
|
|
- **Keyword & Tag Extraction**: Automated extractor storing structured YAML/JSON keyword lists in `entry_variants(key='keywords')` and `entry_variants(key='tags')` to enable rule-based chaining.
|
|
- **Text-to-Speech (TTS)**: Synthesize article text to voice audio blobs (`.mp3` stored under `./data/blobs/{entry_id}/tts.mp3`) with HTTP 206 partial streaming.
|
|
- **Podcast TTS & Summary TTS**: Convert articles into dual-host conversational podcasts or audio-narrated summaries streamed directly within the reader.
|
|
|
|
---
|
|
|
|
## 12. Aggregated Shared Posts Dashboard (`/shares`)
|
|
|
|
- **Goal**: Provide a dedicated gallery view aggregating all publicly shared articles.
|
|
- **Scope**:
|
|
- Centralized dashboard listing all articles with an active `share_uuid`.
|
|
- Copy public link, preview shared HTML canvas, revoke share link, and view access stats.
|
|
|
|
---
|
|
|
|
## 13. Data Retention & Cleanup Policies (Auto-Deletion)
|
|
|
|
- **Goal**: Provide configurable retention rules to prune older or noisy articles and keep SQLite storage compact.
|
|
- **Scope**:
|
|
- Retention triggers (e.g. delete unstarred articles older than 90 days, or limit feeds to latest 500 posts).
|
|
- Background garbage collection cleaning associated `entry_variants` and on-disk audio blobs (`./data/blobs/{entry_id}/`).
|
|
|
|
---
|
|
|
|
## 14. Outbound Webhook Dispatcher (P4)
|
|
|
|
- **Goal**: Allow rule-triggered notifications and payload delivery to external platforms.
|
|
- **Scope**:
|
|
- Outbound webhook action in rule engine supporting Telegram, Discord, Slack, and generic JSON HTTP POST.
|
|
- Template engine with interpolation of article variables (`title`, `feed_title`, `url`, `published_at`, `ai_summary`, `tags`).
|
|
- Retry mechanism with exponential backoff on delivery failure.
|