Commit 438d9f6
authored
fix(web): harden feed reader fallback and rss rendering (#944)
## Summary
- harden feed responder and RSS rendering behavior for reader
compatibility and fallback safety
- add/adjust RSS XSL and shared public UI assets used by feed
presentation
- add regression coverage for responder and RSS XSL behavior
- refresh docs where behavior/auth boundaries changed
This pull request introduces several improvements to the feed rendering
experience, both visually and functionally, along with some internal
refactoring and documentation updates. The most significant changes are
a major redesign of the RSS feed XSL template to enhance the UI, the
addition of a script to improve feed reader link handling, and a
refactor in the feed responder logic. There are also updates to
documentation for clarity and accuracy.
**Feed UI and UX improvements:**
* Major redesign of the `public/rss.xsl` template to provide a more
modern, accessible, and informative feed presentation. This includes a
new hero section with icons, improved layout, additional metadata (such
as updated/published stamps), and visual signals for item quality
(summary, image, tags, byline). The CSS has been extensively updated to
support these changes.
[[1]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928L2-R2)
[[2]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928R13)
[[3]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928L30-R82)
[[4]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928L135-R224)
[[5]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928R238-R247)
[[6]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928L171-R275)
[[7]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928R290-R326)
[[8]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928R412-R415)
[[9]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928L285-R425)
[[10]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928R434-R459)
* Improved item summary rendering and tag/author/image detection in the
feed template, with new logic for stripping tags and decoding HTML
entities for better display of content.
[[1]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928L345-R549)
[[2]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928R412-R415)
**Feed reader integration:**
* Added `public/feed-reader-link.js`, which dynamically sets the "Open
in feed reader" link to use the `feed:` protocol for the current page if
not already set, improving compatibility with feed readers. The script
is now included in the XSL template.
[[1]](diffhunk://#diff-d6ebecc8aac3ec170ae683f1b42e69352a5a202d9561c057ef597054d5efcd08R1-R10)
[[2]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928R13)
[[3]](diffhunk://#diff-498feb1537333a67915485f92ad9c4b9b7748289e9ac06394a0207cca746e928R290-R326)
**Backend code refactoring:**
* Refactored the feed responder logic in `app/web/feeds/responder.rb` by
extracting request resolution into a new `resolve_request` method and
improving result emission with `emit_response_result`, making the code
more modular and readable.
[[1]](diffhunk://#diff-7fd0a6c7dcb1e744c836bdcd3739eb3f86fd54b92ce2674c7730064c217fccc2L15-R17)
[[2]](diffhunk://#diff-7fd0a6c7dcb1e744c836bdcd3739eb3f86fd54b92ce2674c7730064c217fccc2R26-R58)
**Documentation and developer experience:**
* Updated `docs/README.md` to clarify make targets, add new OpenAPI
verification/linting commands, and switch frontend instructions from npm
to pnpm for consistency.
* Improved `docs/architecture.md` to clarify feed routing,
authentication, and source resolution logic, with more precise
descriptions of static and token-backed feeds.
**Dependency cleanup:**
* Removed the unused `ssrf_filter` gem from the `Gemfile`.1 parent 6dfa1a9 commit 438d9f6
12 files changed
Lines changed: 628 additions & 110 deletions
File tree
- app/web/feeds
- docs
- public
- spec
- html2rss/web
- feeds
- public
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
39 | 38 | | |
40 | 39 | | |
41 | 40 | | |
| |||
54 | 53 | | |
55 | 54 | | |
56 | 55 | | |
| 56 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
20 | 19 | | |
21 | 20 | | |
22 | 21 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
339 | 339 | | |
340 | 340 | | |
341 | 341 | | |
342 | | - | |
343 | 342 | | |
344 | 343 | | |
345 | 344 | | |
| |||
394 | 393 | | |
395 | 394 | | |
396 | 395 | | |
397 | | - | |
398 | 396 | | |
399 | 397 | | |
400 | 398 | | |
| |||
526 | 524 | | |
527 | 525 | | |
528 | 526 | | |
529 | | - | |
530 | 527 | | |
531 | 528 | | |
532 | 529 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
| 15 | + | |
19 | 16 | | |
20 | | - | |
21 | | - | |
| 17 | + | |
22 | 18 | | |
23 | 19 | | |
24 | 20 | | |
| |||
27 | 23 | | |
28 | 24 | | |
29 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
30 | 59 | | |
31 | 60 | | |
32 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
| 44 | + | |
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| 49 | + | |
| 50 | + | |
49 | 51 | | |
50 | | - | |
| 52 | + | |
51 | 53 | | |
52 | 54 | | |
53 | 55 | | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
58 | 61 | | |
59 | 62 | | |
60 | 63 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
25 | | - | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
26 | 32 | | |
27 | 33 | | |
28 | 34 | | |
29 | | - | |
| 35 | + | |
30 | 36 | | |
31 | | - | |
32 | | - | |
| 37 | + | |
| 38 | + | |
33 | 39 | | |
34 | 40 | | |
35 | 41 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
0 commit comments