Add RSS and JSON feeds of incidents and an open dataset
All checks were successful
Build and Deploy to Production / test (push) Successful in 21s
Build and Deploy to Production / build (push) Successful in 49s
Build and Deploy to Production / deploy (push) Successful in 37s

Let readers and bots follow new incidents without polling the card:
/:locale/feed.xml (RSS 2.0) and /:locale/feed.json (JSON Feed 1.1),
the latest 50 incidents with stable IDs, advertised in the page head
and footer.

/data.json publishes every datacenter with its specs and sourced
incidents under CC BY 4.0, for journalists and OSINT reuse.

Assisted-by: Claude:opus-5
This commit is contained in:
Sergei Poljanski 2026-10-12 05:31:26 +04:00
commit 03355983b4
Signed by: asxpi
GPG key ID: 4F8851660FA4121B
8 changed files with 215 additions and 0 deletions

24
views/feed_rss.erb Normal file
View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<% base = base_url %>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title><%= format(t(:feed_title), site: t(:title)) %></title>
<link><%= base %>/<%= @locale %></link>
<description><%= t(:tagline) %></description>
<language><%= @locale %></language>
<atom:link href="<%= base %>/<%= @locale %>/feed.xml" rel="self" type="application/rss+xml"/>
<% if (top = @incidents.first) %>
<lastBuildDate><%= [*@incidents.map(&:updated_at).compact, feed_time(top)].max.utc.rfc2822 %></lastBuildDate>
<% end %>
<% @incidents.each do |i| %>
<item>
<title><%= incident_headline(i) %></title>
<link><%= base %><%= dc_path(i.datacenter) %></link>
<guid isPermaLink="false"><%= incident_id(i) %></guid>
<pubDate><%= feed_time(i).rfc2822 %></pubDate>
<category><%= kind_label(i.kind) %></category>
<description><%= incident_html(i) %></description>
</item>
<% end %>
</channel>
</rss>