# 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. --- ## 15. Infinite Scrolling Pagination for Desktop 3-Pane Middle List - **Goal**: Seamlessly load more articles as the user scrolls down the middle pane in Desktop 3-Split view. - **Scope**: - Integrate windowed offset pagination (`limit: 50`, `offset: entries.length`) with bottom scroll threshold detection on `.desktop-articles-scroll`. - Display non-intrusive loading spinner at the bottom of the article list while fetching subsequent pages. - Maintain active selection index and scroll position during page append.