diff --git a/app/views/admin/dashboard/_chronicles.html.erb b/app/views/admin/dashboard/_chronicles.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..b8b048e4b2d5c6ccbc6a5b2b3ec78fcb3ced5ef1
--- /dev/null
+++ b/app/views/admin/dashboard/_chronicles.html.erb
@@ -0,0 +1,45 @@
+<%= osuny_panel t('admin.chronicles.title') do %>
+  <div id="chronicles-feed" class="row g-4 mb-3" style="max-height:60vh; overflow-y: scroll"></div>
+<% end %>
+
+<script nonce="<%= request.content_security_policy_nonce %>">
+const RSS_URL = "https://chroniques.osuny.org/faits/index.xml";
+const element = document.getElementById("chronicles-feed");
+fetch(RSS_URL)
+  .then(response => response.text())
+  .then(str => new window.DOMParser().parseFromString(str, "text/xml"))
+  .then(data => {
+    const items = data.querySelectorAll("item");
+    let html = "";
+    let index = 0;
+    items.forEach(item => {
+      let title = item.querySelector("title");
+      let link = item.querySelector("link");
+      if (title == '' || link == '' || index >= 12) {
+        return;
+      }
+      let pubDate = item.querySelector("pubDate");
+      let date = new Date(pubDate.textContent);
+      let description = item.querySelector("description");
+      html += `
+        <div class="col-lg-6 col-xl-4 col-xxl-3">
+          <div class="card h-100">
+            <div class="card-body">
+              <h3 class="card-title">${title.textContent}</h3>
+              <p class="small">${description.textContent}</p>
+            </div>
+            <p class="card-footer mb-1 small text-end">
+              ${date.getMonth()}/${date.getFullYear()}
+              — 
+              <a href="${link.textContent}" target="_blank" rel="noopener">
+                <%= t('admin.chronicles.read_more') %>
+              </a>
+            </p>
+          </div>
+        </div>
+        `;
+      index += 1;
+    });
+    element.insertAdjacentHTML("beforeend", html);
+  });
+</script>
\ No newline at end of file
diff --git a/app/views/admin/dashboard/index.html.erb b/app/views/admin/dashboard/index.html.erb
index 3a371396e8f95acb955af619960148450431dfde..fbb2bd394797bc6f4c53294a2c6e8774b5684738 100644
--- a/app/views/admin/dashboard/index.html.erb
+++ b/app/views/admin/dashboard/index.html.erb
@@ -9,6 +9,7 @@
 <% end %>
 
 <%= render 'admin/application/favorites/show' %>
+<%= render 'admin/dashboard/chronicles' %>
 
 <% if current_university.is_really_a_university? %>
   <%= render 'admin/dashboard/really_a_university' %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index d05c5fa099cd2884dac0b31f5bd14b74e85e637e..d6629056e9358514325bb73544cce76c40882171 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -120,6 +120,9 @@ en:
   admin:
     advanced_settings: Advanced settings
     attachment_not_available: Attachment not available
+    chronicles:
+      title: Chronicles
+      read_more: Learn more
     dashboard: Dashboard
     directory: Directory
     duplicate: Duplicate
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 1352438d1476f67786e10a6e07cda22021b8dfc0..f51b55803c2b94c3b0dd57693c775e58ecdc3022 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -120,6 +120,9 @@ fr:
   admin:
     advanced_settings: Réglages avancés
     attachment_not_available: Impossible d'accéder à l'élément
+    chronicles:
+      title: Chroniques
+      read_more: En savoir plus
     dashboard: Tableau de bord
     directory: Annuaire
     duplicate: Dupliquer