Feat/ux streamline experience#891
Conversation
There was a problem hiding this comment.
Pull request overview
This PR streamlines the “trial” and feed-creation UX by (1) switching the app’s default request strategy to Faraday, (2) adding embedded-config fallback + “featured feeds” surfaced via API metadata, and (3) refreshing both the web UI and RSS XSL feed preview styling.
Changes:
- Replace the legacy
ssrf_filterrequest strategy withfaradayacross backend + frontend, and update related specs. - Add embedded feed-config fallback (
html2rss-configs) and expose a curatedfeatured_feedslist via/api/v1metadata for trial runs. - Improve UX/UI: shared public CSS, richer result preview cards, auto-submit for prefilled URLs, and a redesigned RSS XSL “human view”.
Reviewed changes
Copilot reviewed 40 out of 41 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| spec/smoke/docker_spec.rb | Update smoke payload strategy to faraday. |
| spec/html2rss/web/local_config_spec.rb | Add test for embedded-config fallback. |
| spec/html2rss/web/feeds/source_resolver_spec.rb | Update strategy expectations; add not-found/override tests. |
| spec/html2rss/web/feeds/service_spec.rb | Update strategy to faraday in contracts. |
| spec/html2rss/web/feeds/rss_renderer_spec.rb | Update expected renderer strategy string. |
| spec/html2rss/web/feeds/responder_spec.rb | Update observability strategy expectations. |
| spec/html2rss/web/feeds/json_renderer_spec.rb | Update expected renderer strategy string. |
| spec/html2rss/web/feeds/cache_spec.rb | Update cached payload strategy string. |
| spec/html2rss/web/boot/setup_spec.rb | Adjust setup spec require + assertions after boot changes. |
| spec/html2rss/web/app_spec.rb | Expect 404 + improved error feed content for missing static feeds. |
| spec/html2rss/web/app_integration_spec.rb | Update token strategy to faraday in integration tests. |
| spec/html2rss/web/api/v1/feed_metadata_spec.rb | Update expected strategy in metadata fixtures. |
| spec/html2rss/web/api/v1_spec.rb | Update strategy usage; add featured feeds assertion. |
| README.md | Add “Trial run” instructions; update security wording. |
| public/shared-ui.css | New shared UI tokens/layout styles in /public. |
| public/rss.xsl | Major RSS human-view redesign; uses shared CSS + sanitizing templates. |
| Gemfile.lock | Update dependencies; remove ssrf_filter; bundler version change. |
| Gemfile | Remove ssrf_filter gem dependency. |
| frontend/vite.config.ts | Serve backend /public assets in Vite dev/build. |
| frontend/src/styles/main.css | Refactor to rely on shared UI tokens and new layout patterns. |
| frontend/src/components/ResultDisplay.tsx | Richer result page + preview cards (dates/excerpts/links). |
| frontend/src/components/DominantField.tsx | Add className passthrough + rename input size class. |
| frontend/src/components/AppPanels.tsx | Update strategy labels; show “included feeds” when disabled. |
| frontend/src/components/App.tsx | Prefer browserless default; auto-submit prefilled URL; plumb featured feeds. |
| frontend/src/api/contracts.ts | Extend metadata contract with featured_feeds. |
| frontend/src/tests/useFeedConversion.test.ts | Update tests for faraday strategy. |
| frontend/src/tests/useFeedConversion.contract.test.ts | Update contract expectations for faraday. |
| frontend/src/tests/ResultDisplay.test.tsx | Update for richer preview rendering and labels. |
| frontend/src/tests/mocks/server.ts | Update mock strategies + metadata shape. |
| frontend/src/tests/App.test.tsx | Add default-strategy + auto-submit + featured-feeds tests. |
| frontend/src/tests/App.contract.test.tsx | Update contract to browserless default + richer preview. |
| frontend/index.html | Include /shared-ui.css. |
| docs/README.md | Update architecture wording (URL validation vs SSRF strategy). |
| docker-compose.yml | Default to bundled config; add env_file: .env; make bind mount optional. |
| app/web/security/ssrf_filter_strategy.rb | Remove custom SsrfFilterStrategy. |
| app/web/feeds/source_resolver.rb | Return 404 for missing static feeds; default static strategy to :faraday. |
| app/web/domain/auto_source.rb | Default stable-feed strategy to faraday. |
| app/web/config/local_config.rb | Fallback to embedded configs; normalize names to support path feeds. |
| app/web/boot/setup.rb | Remove request-service wiring; keep env validation only. |
| app/web/api/v1/strategies.rb | Update displayed strategy names. |
| app/web/api/v1/root_metadata.rb | Add featured_feeds to instance metadata. |
| # gem 'html2rss', '~> 0.14' | ||
| gem 'html2rss', github: 'html2rss/html2rss', branch: :master | ||
| gem 'html2rss-configs', github: 'html2rss/html2rss-configs' | ||
|
|
||
| # Use these instead of the two above (uncomment them) when developing locally: | ||
| # gem 'html2rss', path: '../html2rss' | ||
| # gem 'html2rss-configs', path: '../html2rss-configs' | ||
|
|
||
| gem 'parallel' | ||
| gem 'rack-cache' | ||
| gem 'rack-timeout' | ||
| gem 'roda' | ||
| gem 'ssrf_filter' | ||
| gem 'zeitwerk' | ||
|
|
There was a problem hiding this comment.
Removing the ssrf_filter dependency and the custom SsrfFilterStrategy means this repo no longer enforces a network-level SSRF protection layer for outbound fetches; with config/feeds.yml allowing allowed_urls: ['*'] for the admin account, authenticated users can now cause the server to fetch arbitrary URLs using the default Faraday strategy. Please reintroduce an SSRF-safe request strategy (or ensure Html2rss::RequestService is configured to reject private/metadata IP ranges and other sensitive targets) before relying on * allowlists in production configs.
- Move Design System Manifest to docs/design-system.md - Refactor README.md to be a high-level entry point - Establish docs/README.md as the canonical contributor guide - Trim AGENTS.md to focus on agent-specific constraints - Convert .github/copilot-instructions.md into a redirect to consolidated docs - Update cross-references and shared-ui.css header
No description provided.