Index: src/views/pages/changelog.ejs
===================================================================
--- src/views/pages/changelog.ejs	(revision 90259da618fae54c487ea9a4998162d68c8cb3a0)
+++ src/views/pages/changelog.ejs	(revision 90259da618fae54c487ea9a4998162d68c8cb3a0)
@@ -0,0 +1,40 @@
+<div class="container changelog-page">
+  <p><a href="<%= (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '' %>/" class="btn">&larr; Terug</a></p>
+  <h1>Wijzigingen</h1>
+  <p class="cl-meta">
+    App-versie <strong>v<%= appVersion %></strong>
+    <span class="cl-sep">·</span>
+    Federatie-proto <strong><%= proto %></strong>
+    <% if (typeof user !== 'undefined' && user && user.role === 'god') { %>
+      <span class="cl-sep">·</span> <a href="/admin/updates">Updates beheren</a>
+    <% } %>
+  </p>
+  <div class="changelog-body"><%- changelogHtml %></div>
+</div>
+
+<style>
+.changelog-page { max-width: 760px; margin: 3rem auto; padding: 0 1rem; }
+.changelog-page h1 { font-family: var(--font-display, serif); font-size: 2rem; margin: 0 0 0.4rem; }
+.cl-meta { color: var(--ink-muted); font-size: 0.9rem; margin: 0 0 1.75rem; }
+.cl-meta a { color: var(--accent); }
+.cl-sep { opacity: 0.5; margin: 0 0.2rem; }
+.changelog-body { color: var(--ink); line-height: 1.65; }
+.changelog-body h2 {
+  font-family: var(--font-display, serif); font-size: 1.3rem;
+  margin: 2rem 0 0.5rem; padding-top: 1.25rem; border-top: 1px solid var(--rule);
+}
+.changelog-body h2:first-of-type { border-top: none; padding-top: 0; margin-top: 1rem; }
+.changelog-body h3 { font-size: 1rem; margin: 1.1rem 0 0.4rem; color: var(--ink-soft, var(--ink-muted)); }
+.changelog-body ul { margin: 0.3rem 0 0.9rem; padding-left: 1.3rem; }
+.changelog-body li { margin: 0.25rem 0; }
+.changelog-body blockquote {
+  margin: 1rem 0; padding: 0.6rem 0.9rem;
+  border-left: 3px solid var(--accent); background: var(--paper-2);
+  border-radius: 0 8px 8px 0; font-size: 0.9rem; color: var(--ink-muted);
+}
+.changelog-body code {
+  background: var(--paper-2); padding: 0.05rem 0.35rem;
+  border-radius: 4px; font-size: 0.88em;
+}
+.changelog-body a { color: var(--accent); }
+</style>
Index: src/views/partials/footer.ejs
===================================================================
--- src/views/partials/footer.ejs	(revision 323abb039d2022685763cdf42da6aff00685cda6)
+++ src/views/partials/footer.ejs	(revision 90259da618fae54c487ea9a4998162d68c8cb3a0)
@@ -20,5 +20,5 @@
     </button>
     <div class="footer-meta">
-      <span>Klonkt Beta<%= (typeof appVersion !== 'undefined' && appVersion) ? ' v' + appVersion : '' %></span>
+      <a class="footer-version" href="<%= (typeof siteUrlBase !== 'undefined' && siteUrlBase) ? siteUrlBase : '' %>/changelog" title="Bekijk wat er per release veranderd is">Klonkt Beta<%= (typeof appVersion !== 'undefined' && appVersion) ? ' v' + appVersion : '' %></a>
       <%# Mobile-only theme toggle. On desktop the topnav has its own toggle
           so we hide this one to avoid two visible toggles at once. The same
@@ -101,4 +101,6 @@
   display: inline-flex; align-items: center; gap: 0.75rem;
 }
+.footer-version { color: inherit; text-decoration: none; }
+.footer-version:hover { color: var(--accent); text-decoration: underline; }
 .pcms-main { min-height: 50vh; }
 
