Changeset 1794fac in Klonkt for src/views/pages/admin-stats.ejs


Ignore:
Timestamp:
06/19/2026 04:07:24 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
6be57b4
Parents:
37edecd
Message:

Pro stats (premium feature #5): referrers + period selector + all-time

Extension of the cookie-free StatsService.

  • DB: stat_referrer (site_id, host, count).
  • StatsService: recordPageview now also counts the external referrer host (Referer header; empty/own-site/invalid skipped, www- normalised). getStats(days) clamps to 7/14/30/90 + returns top-10 referrers (instance-wide) + all-time (pageviews, visitor days).
  • admin-stats route: ?days=7|14|30|90.
  • admin-stats view: period buttons, dynamic labels, Sources section, all-time row.

node --check passed.

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/pages/admin-stats.ejs

    r37edecd r1794fac  
    99
    1010  <div class="stats-cards">
    11     <div class="stat-card"><div class="stat-num"><%= s.totals.visitors %></div><div class="stat-label">Bezoekers (14d)</div></div>
    12     <div class="stat-card"><div class="stat-num"><%= s.totals.pageviews %></div><div class="stat-label">Weergaven (14d)</div></div>
     11    <div class="stat-card"><div class="stat-num"><%= s.totals.visitors %></div><div class="stat-label">Bezoekers (<%= s.days %>d)</div></div>
     12    <div class="stat-card"><div class="stat-num"><%= s.totals.pageviews %></div><div class="stat-label">Weergaven (<%= s.days %>d)</div></div>
    1313    <div class="stat-card"><div class="stat-num"><%= s.totals.plays %></div><div class="stat-label">Plays (totaal)</div></div>
    1414    <div class="stat-card"><div class="stat-num"><%= s.totals.postViews %></div><div class="stat-label">Post-weergaven (totaal)</div></div>
    1515  </div>
    1616
     17  <% if (typeof s.allTime !== 'undefined') { %>
     18    <p class="stats-note">All-time: <strong><%= s.allTime.pageviews %></strong> weergaven · <strong><%= s.allTime.visitorDays %></strong> bezoeker-dagen.</p>
     19  <% } %>
     20
     21  <div class="stats-period">
     22    Periode:
     23    <% [7,14,30,90].forEach(function(n){ %>
     24      <a href="/admin/stats?days=<%= n %>" class="<%= s.days === n ? 'is-on' : '' %>"><%= n %>d</a>
     25    <% }); %>
     26  </div>
     27
    1728  <section class="stats-chart-wrap">
    1829    <div class="stats-chart-head">
    19       <h2>Laatste 14 dagen</h2>
     30      <h2>Laatste <%= s.days %> dagen</h2>
    2031      <div class="stats-legend">
    2132        <span class="lg lg-vis">Bezoekers</span>
     
    6677  </div>
    6778
     79  <% if (typeof s.referrers !== 'undefined' && s.referrers.length) { %>
     80    <section class="stats-top" style="margin-top:1.2rem">
     81      <h2>🌐 Bronnen (waar bezoekers vandaan komen)</h2>
     82      <ol>
     83        <% s.referrers.forEach(function(r){ %>
     84          <li><span><%= r.host %></span><span class="stats-count"><%= r.n %></span></li>
     85        <% }); %>
     86      </ol>
     87    </section>
     88  <% } %>
     89
    6890  <% if (typeof linkClicks !== 'undefined' && linkClicks.length) { %>
    6991    <section class="stats-top" style="margin-top:1.2rem">
     
    112134.stats-count { color: var(--accent); font-weight: 700; font-variant-numeric: tabular-nums; }
    113135.stats-empty { color: var(--ink-muted); font-size: .88rem; margin: 0; }
     136.stats-period { margin: .2rem 0 1.2rem; font-size: .9rem; color: var(--ink-muted); }
     137.stats-period a { display: inline-block; margin-left: .4rem; padding: .2rem .6rem; border: 1px solid var(--rule); border-radius: 999px; text-decoration: none; color: var(--ink); }
     138.stats-period a.is-on { background: var(--accent); color: #fff; border-color: var(--accent); }
    114139</style>
Note: See TracChangeset for help on using the changeset viewer.