# # ChangeLog for src/middleware in Klonkt # # Generated by Trac 1.6 # 09/09/2026 08:16:25 PM Fri, 26 Jun 2026 09:20:12 GMT Robin Genis [8ef8c3e] * scripts/migrate-circles.mjs (added) * src/middleware/render.js (modified) * src/routes/admin-circle.js (deleted) * src/routes/changelog.js (modified) * src/routes/circle.js (modified) * src/routes/federation.js (deleted) * src/server.js (modified) * src/services/CircleFederation.js (deleted) * src/services/CircleService.js (deleted) * src/services/SettingsService.js (modified) * src/views/pages/admin-circle.ejs (deleted) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/admin.ejs (modified) * src/views/pages/changelog.ejs (modified) * src/views/pages/circle-post.ejs (deleted) feat(cirkel): remove the old Cirkels pull-protocol; Cirkels is now ... Fri, 26 Jun 2026 08:53:42 GMT Robin Genis [2c22bb5] * src/middleware/render.js (modified) * src/routes/circle.js (modified) * src/services/ActivityPubService.js (modified) * src/views/partials/view-switcher.ejs (modified) feat(cirkel): rebuild the Cirkel feed on ActivityPub (featured/auto- ... Fri, 26 Jun 2026 07:26:26 GMT Robin Genis [283f618] * src/middleware/render.js (modified) * src/routes/activitypub.js (modified) * src/routes/admin-settings.js (modified) * src/services/SettingsService.js (modified) * src/services/i18n.js (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/admin.ejs (modified) * src/views/pages/post.ejs (modified) * src/views/partials/profile-header.ejs (modified) feat(fediverse): add an ActivityPub on/off toggle (off = no ... Thu, 25 Jun 2026 20:45:02 GMT Robin Genis [75ab393] * src/middleware/rate-limit.js (modified) * src/routes/activitypub.js (modified) feat(ratelimit): cap fediverse endpoints per IP; key IPv6 limiters by ... Thu, 25 Jun 2026 05:22:51 GMT Robin Genis [e951b7c] * src/middleware/render.js (modified) * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) * src/views/partials/topnav.ejs (modified) feat(fediverse): real bell badge for unseen notifications Track a ... Wed, 24 Jun 2026 17:07:53 GMT Robin Genis [c9c70cc] * src/assets/css/style.css (modified) * src/middleware/site.js (modified) * src/services/ThemeService.js (modified) * src/views/shell.ejs (modified) Palettes overhaul: neutral 'Klonkt' default + 7 real-colour themes ... Wed, 24 Jun 2026 16:58:14 GMT Robin Genis [19fbe03] * src/assets/css/style.css (modified) * src/middleware/site.js (modified) * src/services/ThemeService.js (modified) * src/views/shell.ejs (modified) Palettes: drop Stone+Terracotta, add Ocean+Candy, rework warm to ... Wed, 24 Jun 2026 16:31:27 GMT Robin Genis [434c2e9] * src/middleware/site.js (modified) * src/services/ThemeService.js (modified) Trim palettes to 8 (drop Sage/Rose/Midnight near-duplicates) Sage ... Wed, 24 Jun 2026 16:08:34 GMT Robin Genis [f5c3870] * src/config/database.js (modified) * src/middleware/render.js (modified) * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) * src/services/i18n.js (modified) * src/views/pages/admin.ejs (modified) * src/views/pages/blocks.ejs (added) * src/views/pages/timeline.ejs (modified) * src/views/partials/topnav.ejs (modified) feat(fediverse-client): block/defederate accounts & domains Block ... Wed, 24 Jun 2026 12:31:43 GMT Robin Genis [82079ad] * src/middleware/render.js (modified) * src/routes/account.js (modified) * src/routes/posts.js (modified) * src/views/pages/account.ejs (modified) feat: one identity — user avatar falls back to the site photo ... Wed, 24 Jun 2026 05:26:24 GMT Robin Genis [69815b2] * package-lock.json (modified) * package.json (modified) * src/assets/fonts/fraunces-og.ttf (added) * src/middleware/render.js (modified) * src/routes/og.js (added) * src/server.js (modified) * src/services/OgImageService.js (added) * src/views/shell.ejs (modified) feat: auto-generated per-site OG image from palette + accent New ... Tue, 23 Jun 2026 18:14:27 GMT Robin Genis [834bcc3] * scripts/backfill-durations.mjs (modified) * scripts/reset-admin.mjs (modified) * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/assets/js/smooth-scroll.js (modified) * src/config/database.js (modified) * src/config/features.js (modified) * src/config/google.js (modified) * src/config/mailer.js (modified) * src/middleware/auth.js (modified) * src/middleware/rate-limit.js (modified) * src/middleware/render.js (modified) * src/middleware/site.js (modified) * src/routes/account.js (modified) * src/routes/admin-audio.js (modified) * src/routes/admin-circle.js (modified) * src/routes/admin-comments.js (modified) * src/routes/admin-epk.js (modified) * src/routes/admin-newsletter.js (modified) * src/routes/admin-patreon.js (modified) * src/routes/admin-seo.js (modified) * src/routes/admin-settings.js (modified) * src/routes/admin-shows.js (modified) * src/routes/admin-sites.js (modified) * src/routes/admin-stats.js (modified) * src/routes/admin-updates.js (modified) * src/routes/admin-users.js (modified) * src/routes/admin.js (modified) * src/routes/artists.js (modified) * src/routes/audio.js (modified) * src/routes/auth.js (modified) * src/routes/changelog.js (modified) * src/routes/circle.js (modified) * src/routes/comments.js (modified) * src/routes/download.js (modified) * src/routes/embed.js (modified) * src/routes/epk.js (modified) * src/routes/federation.js (modified) * src/routes/hub.js (modified) * src/routes/lang.js (modified) * src/routes/linkbio.js (modified) * src/routes/newsletter.js (modified) * src/routes/notifications.js (modified) * src/routes/posts.js (modified) * src/routes/search.js (modified) * src/routes/shows.js (modified) * src/server.js (modified) * src/services/AudioEmbedService.js (modified) * src/services/AudioTranscoder.js (modified) * src/services/CircleFederation.js (modified) * src/services/CircleService.js (modified) * src/services/ImageWebpService.js (modified) * src/services/NotificationService.js (modified) * src/services/PatreonService.js (modified) * src/services/PermissionsService.js (modified) * src/services/PlaylistService.js (modified) * src/services/Scheduler.js (modified) * src/services/SettingsService.js (modified) * src/services/StatsService.js (modified) * src/services/SubscriberService.js (modified) * src/services/ThemeService.js (modified) * src/services/ensurePrimarySite.js (modified) * src/views/pages/account.ejs (modified) * src/views/pages/admin-circle.ejs (modified) * src/views/pages/admin-google.ejs (modified) * src/views/pages/admin-seo.ejs (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/admin-shows.ejs (modified) * src/views/pages/admin-site-edit.ejs (modified) * src/views/pages/admin-users.ejs (modified) * src/views/pages/auth-login.ejs (modified) * src/views/pages/circle-feed.ejs (modified) * src/views/pages/fan-gate.ejs (modified) * src/views/pages/hub-home.ejs (modified) * src/views/pages/post-edit.ejs (modified) * src/views/pages/post.ejs (modified) * src/views/partials/bottom-tab.ejs (modified) * src/views/partials/footer.ejs (modified) * src/views/partials/like-button.ejs (modified) * src/views/partials/post-nav.ejs (modified) * src/views/partials/shared-styles.ejs (modified) * src/views/partials/topnav.ejs (modified) * src/views/partials/track-editor.ejs (modified) i18n: translate Dutch code comments to English across src/ Comments ... Tue, 23 Jun 2026 16:16:58 GMT Robin Genis [d5e78f7] * src/middleware/render.js (modified) fix: Vary: HX-Request + no-store on partials — no unstyled page on ... Tue, 23 Jun 2026 15:45:10 GMT Robin Genis [9b851e7] * src/middleware/render.js (modified) * src/server.js (modified) * src/services/ensurePrimarySite.js (modified) * src/views/shell.ejs (modified) fix: fresh install uses klonkt defaults (navy + #e8b04b), not old ... Tue, 23 Jun 2026 14:54:36 GMT Robin Genis [cb01666] * .env.example (modified) * src/config/features.js (added) * src/middleware/render.js (modified) * src/middleware/site.js (modified) * src/routes/posts.js (modified) * src/server.js (modified) * src/views/pages/admin-site-edit.ejs (modified) * src/views/pages/admin.ejs (modified) * src/views/partials/profile-header.ejs (modified) feat: lite mode (KLONKT_AUDIO=off) — audio disabled, single codebase ... Mon, 22 Jun 2026 14:05:30 GMT roboburr [3bb8719] * package.json (modified) * src/middleware/render.js (modified) chore(version): bump 1.0.0-beta.3 + show commit hash in version ... Mon, 22 Jun 2026 03:04:17 GMT roboburr [b20460e] * src/assets/css/style.css (modified) * src/middleware/site.js (modified) * src/services/ThemeService.js (modified) * src/views/shell.ejs (modified) style(theme): palettes Ocean + Gold removed (redundant after klonkt ... Mon, 22 Jun 2026 02:52:43 GMT roboburr [dd7e2a2] * src/assets/css/style.css (modified) * src/middleware/render.js (modified) * src/middleware/site.js (modified) * src/routes/admin-sites.js (modified) * src/routes/auth.js (modified) * src/server.js (modified) * src/services/ThemeService.js (modified) * src/views/shell.ejs (modified) feat(theme): default = Klonkt brand (dark navy + yellow, matches ... Sun, 21 Jun 2026 18:38:24 GMT roboburr [c9c6a2d] * src/config/database.js (modified) * src/middleware/render.js (modified) * src/routes/comments.js (modified) * src/routes/notifications.js (added) * src/routes/posts.js (modified) * src/server.js (modified) * src/services/NotificationService.js (added) * src/services/i18n.js (modified) * src/views/pages/notifications.ejs (added) * src/views/partials/bottom-tab.ejs (modified) * src/views/partials/profile-sheet.ejs (modified) * src/views/partials/topnav.ejs (modified) feat(meldingen): notifications — reply on comment, comment on post, ... Sun, 21 Jun 2026 16:48:27 GMT roboburr [421c2d4] * src/middleware/render.js (modified) * src/routes/admin-settings.js (modified) * src/services/i18n.js (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/post-edit.ejs (modified) feat(instellingen): site timezone — all dates + scheduling in chosen ... Sun, 21 Jun 2026 15:16:51 GMT roboburr [5e61b17] * src/config/database.js (modified) * src/middleware/render.js (modified) * src/routes/account.js (modified) * src/routes/admin-settings.js (modified) * src/routes/lang.js (modified) * src/services/i18n.js (modified) * src/views/pages/account.ejs (modified) * src/views/pages/admin-settings.ejs (modified) feat(i18n): admin-configurable language — personal + default for ... Sat, 20 Jun 2026 13:39:41 GMT roboburr [03fa548] * src/middleware/render.js (modified) * src/routes/lang.js (added) * src/server.js (modified) * src/services/i18n.js (added) * src/views/partials/footer.ejs (modified) * src/views/partials/post-nav.ejs (modified) * src/views/partials/topnav.ejs (modified) * src/views/partials/view-switcher.ejs (modified) feat(i18n): interface language NL/EN/DE with visitor switcher (phase ... Sat, 20 Jun 2026 07:28:43 GMT roboburr [68b27a4] * src/middleware/render.js (modified) * src/routes/admin-shows.js (modified) * src/routes/shows.js (modified) * src/views/pages/admin-shows.ejs (modified) * src/views/partials/shared-styles.ejs (modified) * src/views/partials/view-switcher.ejs (modified) feat(agenda): Agenda opt-in — only shown when enabled + active on ... Sat, 20 Jun 2026 02:27:07 GMT roboburr [1ee967d] * src/middleware/render.js (modified) fix(render): refresh viewer avatar + role from DB (stale session ... Fri, 19 Jun 2026 08:37:28 GMT roboburr [da6fd02] * src/middleware/render.js (modified) * src/routes/admin-settings.js (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/partials/footer.ejs (modified) newsletter: optional sign-up in the footer (toggle in Admin → ... Fri, 19 Jun 2026 07:09:11 GMT roboburr [0beafed] * src/middleware/site.js (modified) fix: site-wide audio player never received tracks (loadAudioTracks ... Thu, 18 Jun 2026 05:54:36 GMT roboburr [94a876f] * src/middleware/site.js (modified) Hub: removed dead host-based site resolving (slug == hostname could ... Thu, 18 Jun 2026 03:46:25 GMT roboburr [f735304] * src/middleware/site.js (modified) * src/views/pages/admin-sites.ejs (modified) Hub: /sites/:slug → 301 to canonical /user/:slug (single URL scheme) ... Thu, 18 Jun 2026 03:28:34 GMT roboburr [7881080] * src/config/database.js (modified) * src/middleware/site.js (modified) * src/routes/account.js (modified) * src/routes/admin-sites.js (modified) * src/routes/admin.js (modified) * src/routes/hub.js (modified) * src/services/ensurePrimarySite.js (modified) * src/views/pages/admin-sites.ejs (modified) Hub #3: explicit is_primary flag + shared getPrimarySite() (DRY) ... Thu, 18 Jun 2026 03:19:09 GMT roboburr [98ecf51] * src/middleware/auth.js (modified) * src/routes/admin-sites.js (modified) * src/services/PermissionsService.js (modified) * src/views/pages/admin-site-edit.ejs (modified) Hub #1+#2: site admin permissions work + assign owner to another user ... Wed, 17 Jun 2026 00:49:19 GMT roboburr [a3e2f17] * src/middleware/render.js (modified) * src/views/shell.ejs (modified) Fix: update per-site accent + palette on htmx navigation The accent ... Wed, 17 Jun 2026 00:03:39 GMT roboburr [3cd1aaa] * src/assets/css/style.css (modified) * src/middleware/render.js (modified) * src/views/partials/chrome.ejs (added) * src/views/shell.ejs (modified) Hub: chrome in #pcms-chrome slot + out-of-band swap on htmx → header ... Tue, 16 Jun 2026 06:58:03 GMT roboburr [8aa85d0] * src/middleware/render.js (modified) * src/routes/prutter.js (modified) * src/services/PatreonService.js (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/user.ejs (modified) * src/views/partials/bottom-tab.ejs (modified) * src/views/partials/topnav.ejs (modified) Prutter = premium Hub feature: Hub-only + behind premium gate ... Tue, 16 Jun 2026 06:23:28 GMT roboburr [1b4d5dd] * src/middleware/render.js (modified) * src/routes/admin-patreon.js (added) * src/routes/admin-settings.js (modified) * src/server.js (modified) * src/services/PatreonService.js (added) * src/views/pages/admin-settings.ejs (modified) Patreon premium gate (Phase 1): entitlement verification + Connect ... Tue, 16 Jun 2026 04:28:40 GMT roboburr [83faa57] * README.md (modified) * src/middleware/render.js (modified) * src/server.js (modified) * src/views/partials/footer.ejs (modified) Rebrand: "Klonkt Hub Beta" -> "Klonkt Beta" + version number in ... Tue, 16 Jun 2026 03:38:33 GMT roboburr [00d54bc] * src/middleware/render.js (modified) Fix: htmx-partial 500 on non-ASCII characters in post title The ... Tue, 16 Jun 2026 03:17:44 GMT roboburr [baa2e59] * package-lock.json (modified) * src/middleware/render.js (modified) Branding: last prutfolio remnants (render comment + package-lock ... Tue, 16 Jun 2026 03:10:31 GMT roboburr [8453812] * README.md (modified) * package.json (modified) * scripts/migrate-posts-to-html.js (modified) * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/assets/js/smooth-scroll.js (modified) * src/middleware/site.js (modified) * src/routes/artists.js (modified) * src/routes/hub.js (modified) * src/server.js (modified) * src/services/CircleFederation.js (modified) * src/services/SettingsService.js (modified) * src/views/shell.ejs (modified) Branding: 100% PrutCMS/PrutFolio-free — Klonkt as original product ... Sun, 14 Jun 2026 18:35:59 GMT roboburr [a3169f5] * src/middleware/render.js (modified) * src/views/pages/hub-home.ejs (modified) * src/views/partials/profile-sheet.ejs (modified) * src/views/partials/topnav.ejs (modified) fix: viewer now sees the Admin link too (canSeeBeheer) The Admin ... Sun, 14 Jun 2026 18:07:51 GMT roboburr [8afbdd6] * README.md (modified) * package.json (modified) * src/middleware/auth.js (modified) * src/middleware/render.js (modified) * src/routes/admin-sites.js (modified) * src/routes/admin-users.js (modified) * src/routes/admin.js (modified) * src/routes/artists.js (added) * src/routes/hub.js (modified) * src/routes/posts.js (modified) * src/routes/prutter.js (modified) * src/server.js (modified) * src/views/pages/account.ejs (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/admin-users.ejs (modified) * src/views/pages/admin.ejs (modified) * src/views/pages/artists-directory.ejs (added) * src/views/pages/home.ejs (modified) * src/views/pages/hub-home.ejs (modified) * src/views/pages/my-site.ejs (modified) * src/views/pages/post.ejs (modified) * src/views/pages/viewer-blocked.ejs (added) * src/views/partials/bottom-tab.ejs (modified) * src/views/partials/footer.ejs (modified) * src/views/partials/profile-sheet.ejs (modified) * src/views/partials/topnav.ejs (modified) * src/views/shell.ejs (modified) feat: viewer role + artists directory + Klonkt Hub Beta rebrand ... Sun, 14 Jun 2026 16:59:38 GMT roboburr [42081fb] * src/middleware/render.js (modified) * src/views/partials/topnav.ejs (modified) hub: home button on user sites — masthead brand becomes the hub name ... Sun, 14 Jun 2026 16:49:24 GMT roboburr [ab544fd] * src/middleware/render.js (modified) * src/routes/hub.js (modified) * src/views/pages/hub-home.ejs (modified) * src/views/partials/profile-header.ejs (modified) fix: PrutFolio header + roster show the SITE OWNER's photo, not the ... Sun, 14 Jun 2026 16:17:14 GMT roboburr [8cb1dc7] * src/middleware/auth.js (modified) * src/middleware/render.js (modified) * src/routes/admin-comments.js (modified) * src/routes/admin-sites.js (modified) * src/routes/admin.js (modified) * src/views/pages/admin-comments.ejs (modified) * src/views/pages/hub-home.ejs (modified) * src/views/pages/my-site.ejs (added) * src/views/partials/topnav.ejs (modified) hub: artist self-management — owner manages their own subsite ... Sun, 14 Jun 2026 14:59:41 GMT roboburr [bf61be7] * src/middleware/site.js (modified) * src/routes/hub.js (added) * src/server.js (modified) * src/views/pages/hub-home.ejs (added) hub: company overview on / (latest posts from all users) + /user/ ... Sun, 14 Jun 2026 08:33:10 GMT roboburr [2cc887b] * src/middleware/render.js (modified) * src/views/pages/admin.ejs (modified) * src/views/partials/bottom-tab.ejs (modified) * src/views/partials/topnav.ejs (modified) tenancy: Prutter in hub only; Account tile removed from admin; ... Sun, 14 Jun 2026 08:18:50 GMT roboburr [6351545] * src/config/database.js (modified) * src/middleware/site.js (modified) * src/routes/admin-settings.js (added) * src/routes/admin.js (modified) * src/server.js (modified) * src/services/SettingsService.js (added) * src/views/pages/admin-settings.ejs (added) * src/views/pages/admin.ejs (modified) tenancy: runtime Solo/Hub mode + mode-aware /admin (Phase 1) Admin ... Thu, 11 Jun 2026 00:08:23 GMT roboburr [c88783e] * src/middleware/rate-limit.js (modified) fix: rate limiter crash behind Cloudflare/Caddy (req.ip with port) ... Wed, 06 May 2026 22:18:18 GMT Robin [7bc636b] * .env.example (added) * .gitignore (added) * README.md (added) * ecosystem.config.cjs (added) * package-lock.json (added) * package.json (added) * src/assets/.well-known/assetlinks.json (added) * src/assets/apk/soundfabrics.apk (added) * src/assets/css/audio.css (added) * src/assets/css/style.css (added) * src/assets/fonts/fraunces-latin-full-italic.woff2 (added) * src/assets/fonts/fraunces-latin-full-normal.woff2 (added) * src/assets/fonts/literata-latin-opsz-italic.woff2 (added) * src/assets/fonts/literata-latin-opsz-normal.woff2 (added) * src/assets/fonts/plus-jakarta-sans-latin-wght-italic.woff2 (added) * src/assets/fonts/plus-jakarta-sans-latin-wght-normal.woff2 (added) * src/assets/js/audio-player.js (added) * src/assets/js/htmx.min.js (added) * src/assets/js/install-app.js (added) * src/config/database.js (added) * src/db/migrate.js (added) * src/db/migrations/001-init.sql (added) * src/middleware/auth.js (added) * src/middleware/rate-limit.js (added) * src/middleware/render.js (added) * src/middleware/site.js (added) * src/routes/account.js (added) * src/routes/admin-audio.js (added) * src/routes/admin-comments.js (added) * src/routes/admin-playlists.js (added) * src/routes/admin-sites.js (added) * src/routes/admin-users.js (added) * src/routes/admin.js (added) * src/routes/audio.js (added) * src/routes/auth.js (added) * src/routes/comments.js (added) * src/routes/feed.js (added) * src/routes/posts.js (added) * src/routes/prutter.js (added) * src/routes/search.js (added) * src/routes/tags.js (added) * src/routes/types.js (added) * src/routes/users.js (added) * src/server.js (added) * src/services/AudioEmbedService.js (added) * src/services/AudioStreamService.js (added) * src/services/AudioTranscoder.js (added) * src/services/CRDTService.js (added) * src/services/HtmlSanitizerService.js (added) * src/services/MarkdownService.js (added) * src/services/PermissionsService.js (added) * src/services/PlatformIcons.js (added) * src/services/PlaylistService.js (added) * src/services/PrutterService.js (added) * src/services/SqliteSessionStore.js (added) * src/services/ThemeService.js (added) * src/views/pages/account.ejs (added) * src/views/pages/admin-audio.ejs (added) * src/views/pages/admin-comments.ejs (added) * src/views/pages/admin-playlists.ejs (added) * src/views/pages/admin-site-edit.ejs (added) * src/views/pages/admin-sites.ejs (added) * src/views/pages/admin-users.ejs (added) * src/views/pages/admin.ejs (added) * src/views/pages/archive.ejs (added) * src/views/pages/auth-login.ejs (added) * src/views/pages/auth-register.ejs (added) * src/views/pages/auth-reset-request.ejs (added) * src/views/pages/auth-reset.ejs (added) * src/views/pages/home.ejs (added) * src/views/pages/post-edit.ejs (added) * src/views/pages/post.ejs (added) * src/views/pages/prutter-conversation.ejs (added) * src/views/pages/prutter-inbox.ejs (added) * src/views/pages/search.ejs (added) * src/views/pages/tag.ejs (added) * src/views/pages/type.ejs (added) * src/views/pages/user.ejs (added) * src/views/pages/welcome.ejs (added) * src/views/partials/bottom-tab.ejs (added) * src/views/partials/footer.ejs (added) * src/views/partials/playlist-editor.ejs (added) * src/views/partials/post-card.ejs (added) * src/views/partials/post-tile.ejs (added) * src/views/partials/profile-header.ejs (added) * src/views/partials/profile-sheet.ejs (added) * src/views/partials/shared-styles.ejs (added) * src/views/partials/topnav.ejs (added) * src/views/partials/track-editor.ejs (added) * src/views/partials/view-switcher.ejs (added) * src/views/shell.ejs (added) Initial commit — PrutFolio v1 source (pulled from Hetzner /srv/prutfolio)