# # ChangeLog for src in Klonkt # # Generated by Trac 1.6 # 09/09/2026 03:39:59 AM Sat, 20 Jun 2026 05:04:13 GMT roboburr [0d7acdf] * src/assets/css/audio.css (modified) * src/config/database.js (modified) * src/routes/admin-audio.js (modified) * src/routes/posts.js (modified) * src/services/AudioEmbedService.js (modified) * src/services/AudioTranscoder.js (modified) * src/views/partials/track-editor.ejs (modified) * src/views/shell.ejs (modified) feat(audio): per-track owner/credit + license (+ written to mp3 ID3 ... Sat, 20 Jun 2026 04:46:35 GMT roboburr [fef781e] * src/assets/css/embed.css (modified) * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/routes/audio.js (modified) * src/services/AudioEmbedService.js (modified) * src/views/pages/post-edit.ejs (modified) * src/views/shell.ejs (modified) revert: remove YouTube audio functionality (doesn't work) YouTube ... Sat, 20 Jun 2026 04:42:18 GMT roboburr [8ab20b6] * src/assets/js/audio-player.js (modified) * src/views/shell.ejs (modified) fix(player): muted start to work around YouTube autoplay block ... Sat, 20 Jun 2026 04:39:28 GMT roboburr [8d43aa1] * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/views/shell.ejs (modified) fix(player): prewarm hidden YT player (autoplay within gesture) The ... Sat, 20 Jun 2026 04:31:01 GMT roboburr [e056e56] * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/views/shell.ejs (modified) fix(player): YT album via queue expansion (reliable playback) ... Sat, 20 Jun 2026 04:28:31 GMT roboburr [71e8fa5] * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/views/shell.ejs (modified) fix(player): YT playlist now plays (listType:'playlist') ... Sat, 20 Jun 2026 04:22:32 GMT roboburr [d43ea3f] * src/assets/css/embed.css (modified) * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/views/shell.ejs (modified) feat(embed): YouTube playlist/album as audio on the site An ... Sat, 20 Jun 2026 04:08:28 GMT roboburr [b56afa7] * src/assets/js/embed-player.js (modified) * src/routes/audio.js (modified) * src/views/shell.ejs (modified) feat(embed): show real YouTube title on the audio-only card YT ... Sat, 20 Jun 2026 04:03:58 GMT roboburr [976d36d] * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/views/shell.ejs (modified) fix(embed): bar-free square cover for YouTube audio hqdefault is ... Sat, 20 Jun 2026 03:53:58 GMT roboburr [9e6b54f] * src/assets/css/embed.css (modified) * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (modified) * src/views/shell.ejs (modified) feat(player): YouTube audio via the site audio player (continuous ... Sat, 20 Jun 2026 03:42:00 GMT roboburr [73b41eb] * src/assets/css/embed.css (modified) * src/assets/js/embed-player.js (modified) * src/services/AudioEmbedService.js (modified) * src/views/pages/post-edit.ejs (modified) * src/views/shell.ejs (modified) feat(embed): YouTube audio-only option in posts Per embed you now ... Sat, 20 Jun 2026 03:20:00 GMT roboburr [389aa99] * src/views/shell.ejs (modified) fix(nav): no "bare content" on fast/repeated back-forward The ... Sat, 20 Jun 2026 03:14:25 GMT roboburr [2fc9b7f] * src/routes/admin-circle.js (modified) fix(circle): do not add hubs/non-circle sites as partner A hub does ... Sat, 20 Jun 2026 03:10:42 GMT roboburr [7990e00] * src/views/shell.ejs (modified) fix(nav): auth form pages via htmx → audio keeps playing Visiting ... Sat, 20 Jun 2026 03:04:22 GMT roboburr [557a76f] * src/assets/css/embed.css (modified) * src/assets/js/embed-player.js (modified) * src/views/shell.ejs (modified) feat(embed): volume slider + mute for YouTube & SoundCloud YT/SC ... Sat, 20 Jun 2026 02:54:09 GMT roboburr [2873b30] * src/assets/js/embed-player.js (modified) * src/views/shell.ejs (modified) fix(embed): Spotify directly as bare iframe (instant, no API wait) ... Sat, 20 Jun 2026 02:52:15 GMT roboburr [16b0c00] * src/assets/js/embed-player.js (modified) * src/server.js (modified) * src/views/shell.ejs (modified) fix(embed): Spotify API via CSP whitelist + faster fallback ... Sat, 20 Jun 2026 02:37:34 GMT roboburr [5f47671] * src/assets/js/audio-player.js (modified) * src/routes/search.js (modified) * src/views/shell.ejs (modified) fix: tablet opens full-player + clean search snippet - ... Sat, 20 Jun 2026 02:33:25 GMT roboburr [1720482] * CHANGELOG.md (modified) * src/routes/search.js (modified) * src/views/pages/search.ejs (modified) feat(search): tracks searchable + prefix-matching for posts - ... 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 ... Sat, 20 Jun 2026 02:20:53 GMT roboburr [795c925] * src/services/PlaylistService.js (modified) fix(playlist): album/playlist cover falls back to first track cover ... Sat, 20 Jun 2026 02:17:12 GMT roboburr [5258945] * src/assets/css/style.css (modified) * src/assets/js/audio-player.js (modified) * src/views/shell.ejs (modified) feat(player): persistent highlight on the active track The ... Sat, 20 Jun 2026 02:14:20 GMT roboburr [ddf549f] * src/services/AudioEmbedService.js (modified) fix(player): playlist queue now carries track id (scroll-to-track) ... Sat, 20 Jun 2026 02:09:51 GMT roboburr [359b9ae] * src/assets/css/style.css (modified) * src/routes/posts.js (modified) * src/services/AudioEmbedService.js (modified) * src/views/shell.ejs (modified) fix(player): scroll-to-track also from album & playlist Album track ... Sat, 20 Jun 2026 01:57:35 GMT roboburr [8f6225c] * src/routes/account.js (modified) * src/routes/admin-audio.js (modified) * src/routes/admin-settings.js (modified) * src/routes/admin-sites.js (modified) * src/routes/posts.js (modified) * src/services/ImageWebpService.js (added) feat(images): new uploads automatically converted to WebP Shared ... Sat, 20 Jun 2026 01:52:46 GMT roboburr [fa08981] * src/assets/js/audio-player.js (modified) * src/routes/audio.js (modified) * src/views/shell.ejs (modified) fix(player): scroll-to-track works for site-wide tracks too ... Sat, 20 Jun 2026 01:38:16 GMT roboburr [230e446] * src/assets/css/style.css (modified) * src/assets/js/audio-player.js (modified) * src/services/AudioEmbedService.js (modified) * src/views/shell.ejs (modified) feat(player): mini-player jumps to post AND scrolls to the track ... Sat, 20 Jun 2026 01:32:20 GMT roboburr [d188736] * src/assets/css/style.css (modified) * src/views/shell.ejs (modified) feat: images harder to save (right-click + drag blocked) Friction ... Sat, 20 Jun 2026 01:28:36 GMT roboburr [1f0c85b] * src/assets/css/style.css (modified) * src/views/partials/post-tile.ejs (modified) * src/views/shell.ejs (modified) ui(grid): show source site on hover on circle feed tiles Grid tiles ... Sat, 20 Jun 2026 01:25:43 GMT roboburr [dfc5379] * src/routes/admin-circle.js (modified) feat(circle): immediately sync a new circle on add /add now runs ... Sat, 20 Jun 2026 01:24:26 GMT roboburr [6d882b1] * src/routes/account.js (modified) * src/views/pages/account.ejs (modified) feat(account): email address editable Profile form gets an email ... Sat, 20 Jun 2026 01:20:57 GMT roboburr [11ba289] * src/routes/auth.js (modified) fix(auth): Google login matches on linked google_sub first (not ... Sat, 20 Jun 2026 01:18:06 GMT roboburr [36afccd] * src/views/pages/auth-login.ejs (modified) fix(auth): "Sign in with Google" text readable on hover The white ... Sat, 20 Jun 2026 01:16:16 GMT roboburr [6fcd0cf] * src/views/pages/account.ejs (modified) fix(account): "Link Google account" button text readable (white text) ... Sat, 20 Jun 2026 01:14:46 GMT roboburr [3ca24f9] * src/views/pages/admin-google.ejs (modified) ui(admin-google): clearer redirect URI instruction Redirect URI ... Sat, 20 Jun 2026 01:09:38 GMT roboburr [3fb8390] * src/views/pages/auth-login.ejs (modified) ui(auth): center subtitle text on login page Co-Authored-By: Claude ... Sat, 20 Jun 2026 01:06:11 GMT roboburr [77b6fca] * src/views/pages/auth-login.ejs (modified) ui(auth): clickable "Administrator?" box on public login → ... Fri, 19 Jun 2026 22:57:07 GMT roboburr [254872f] * src/views/pages/post-edit.ejs (modified) ui(editor): hide "drag image / select text" hint on touch Not ... Fri, 19 Jun 2026 22:56:00 GMT roboburr [b988c96] * src/views/pages/post-edit.ejs (modified) fix(editor): Done button only in fullscreen (specificity) + larger ... Fri, 19 Jun 2026 22:52:51 GMT roboburr [43fea32] * src/views/pages/post-edit.ejs (modified) ui(editor): larger "Done" button in fullscreen Co-Authored-By: ... Fri, 19 Jun 2026 22:44:27 GMT roboburr [9163b15] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) ui(editor): simple inline content layout on touch (toolbar hidden) ... Fri, 19 Jun 2026 22:37:36 GMT roboburr [b12e20d] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) feat(editor): edit content as a fullscreen "page" with back button + ... Fri, 19 Jun 2026 13:13:05 GMT roboburr [c1a4147] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): scroll lock removed — edit page could no longer scroll ... Fri, 19 Jun 2026 13:09:31 GMT roboburr [a623e7e] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) ui(editor): tap-to-edit pill sticky at the bottom instead of centred ... Fri, 19 Jun 2026 12:55:44 GMT roboburr [a4f6827] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): exit fullscreen scrolls to content top + clearer tap ... Fri, 19 Jun 2026 12:50:52 GMT roboburr [61bb585] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) feat(editor): content not typeable inline on touch — editing = ... Fri, 19 Jun 2026 12:45:07 GMT roboburr [5d68686] * CHANGELOG.md (modified) * src/assets/css/style.css (modified) * src/views/shell.ejs (modified) ui(mobile): hide scrollbars on touch (pointer:coarse) @media ... Fri, 19 Jun 2026 12:42:23 GMT roboburr [de21a3b] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): no double scrollbar in fullscreen In fullscreen only ... Fri, 19 Jun 2026 12:38:30 GMT roboburr [e22230e] * src/views/pages/post-edit.ejs (modified) fix(editor): remove 350ms scroll guard + always type fullscreen on ... Fri, 19 Jun 2026 12:35:04 GMT roboburr [f3f43df] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) * src/views/shell.ejs (modified) ui: text fields grow with content instead of scrolling internally (no ... Fri, 19 Jun 2026 12:32:57 GMT roboburr [c01f471] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) feat(editor): always type fullscreen on mobile/tablet (touch) On ... Fri, 19 Jun 2026 12:26:53 GMT roboburr [9217e4e] * CHANGELOG.md (modified) * src/views/shell.ejs (modified) fix(mobile): remove interactive-widget=resizes-content again It ... Fri, 19 Jun 2026 12:24:21 GMT roboburr [7d81265] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): toolbar sticky inside the scroll box on mobile The ... Fri, 19 Jun 2026 12:20:35 GMT roboburr [859bace0] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): mobile writing field as bounded box with internal scroll ... Fri, 19 Jun 2026 12:14:21 GMT roboburr [2d596cf] * src/views/pages/post-edit.ejs (modified) fix(editor): catch async caret scroll on mobile Chrome (empty caret + ... Fri, 19 Jun 2026 12:09:06 GMT roboburr [f8e8f9e] * src/views/pages/post-edit.ejs (modified) fix(editor): more robust anti-jump on formatting (Chrome) ... Fri, 19 Jun 2026 12:06:00 GMT roboburr [cbfbf88] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): no view jump on formatting button — hold scroll position ... Fri, 19 Jun 2026 12:02:20 GMT roboburr [5f7dba2] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) * src/views/shell.ejs (modified) fix(editor): action bar correctly above keyboard (no mid-screen bug) ... Fri, 19 Jun 2026 11:56:37 GMT roboburr [408afc1] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): Save/Cancel bar above the keyboard on mobile The ... Fri, 19 Jun 2026 11:51:57 GMT roboburr [4ad669a] * src/views/pages/admin.ejs (modified) ui(admin): label the Google button in Admin simply "Google" ... Fri, 19 Jun 2026 11:50:23 GMT roboburr [9ef3c56] * CHANGELOG.md (modified) * src/assets/css/style.css (modified) * src/views/shell.ejs (modified) fix(mobile): hide fixed bottom bars when the keyboard is open ... Fri, 19 Jun 2026 11:45:23 GMT roboburr [a0bff44] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): no autofocus on title on mobile (no keyboard popup) ... Fri, 19 Jun 2026 11:42:39 GMT roboburr [06f3791] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): toolbar stays in view in fullscreen on mobile (visual ... Fri, 19 Jun 2026 11:38:22 GMT roboburr [d2078f4] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) feat(editor): full-screen writing mode Button in the editor toolbar ... Fri, 19 Jun 2026 11:35:34 GMT roboburr [16ce669] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) ui(editor): clear active/inactive state for formatting on mobile ... Fri, 19 Jun 2026 10:34:24 GMT roboburr [a7e8e19] * CHANGELOG.md (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): mobile — formatting buttons no longer steal focus ... Fri, 19 Jun 2026 10:08:41 GMT roboburr [f83ccf3] * src/views/pages/fan-gate.ejs (modified) ui(fan-gate): post-nav cascade-identiek aan de post (.container + ... Fri, 19 Jun 2026 10:03:52 GMT roboburr [09ecc5f] * src/routes/admin-settings.js (modified) * src/views/pages/admin-google.ejs (added) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/admin.ejs (modified) ui(admin): Google login on its own Admin page - New page ... Fri, 19 Jun 2026 09:57:47 GMT roboburr [f33b24a] * src/views/pages/fan-gate.ejs (modified) ui(fan-gate): post-nav pixel-perfect match with the regular post ... Fri, 19 Jun 2026 09:55:26 GMT roboburr [247988e] * CHANGELOG.md (modified) * src/routes/account.js (modified) * src/routes/auth.js (modified) * src/views/pages/account.ejs (modified) * src/views/pages/auth-login.ejs (modified) feat(auth): admin can link Google and use it to log in - Account → ... Fri, 19 Jun 2026 09:49:35 GMT roboburr [535f955] * CHANGELOG.md (modified) * src/config/database.js (modified) * src/routes/posts.js (modified) * src/views/pages/favorites.ejs (added) * src/views/pages/post.ejs (modified) * src/views/partials/like-button.ejs (added) * src/views/partials/profile-sheet.ejs (modified) * src/views/partials/topnav.ejs (modified) feat: post likes + favourites page for logged-in users - New ... Fri, 19 Jun 2026 09:40:04 GMT roboburr [8cdb377] * CHANGELOG.md (modified) * src/routes/posts.js (modified) * src/views/partials/post-nav.ejs (modified) ui(post-nav): show 📌 when the Newer/Older post is pinned ... Fri, 19 Jun 2026 09:38:20 GMT roboburr [1e2e9e7] * CHANGELOG.md (modified) * src/routes/posts.js (modified) * src/views/pages/fan-gate.ejs (modified) * src/views/pages/post.ejs (modified) * src/views/partials/post-nav.ejs (added) ui(fan-gate): show Newer/Older post navigation on the fan gate too ... Fri, 19 Jun 2026 09:31:54 GMT roboburr [f4b7b6a] * CHANGELOG.md (modified) * src/routes/auth.js (modified) * src/views/pages/auth-login.ejs (modified) feat(auth): public login = Google only; admin login hidden at ... Fri, 19 Jun 2026 09:21:25 GMT roboburr [1080d14] * CHANGELOG.md (modified) * src/views/shell.ejs (modified) ui(nav): scroll to top when navigating to a different post Links ... Fri, 19 Jun 2026 09:16:29 GMT roboburr [5c27e8e] * CHANGELOG.md (modified) * src/views/pages/post.ejs (modified) ui(post): consistent Newer/Older navigation on every post When a ... Fri, 19 Jun 2026 09:09:45 GMT roboburr [90259da] * CHANGELOG.md (added) * package.json (modified) * src/routes/changelog.js (added) * src/server.js (modified) * src/views/pages/changelog.ejs (added) * src/views/partials/footer.ejs (modified) feat: release tracking — version in footer links to /changelog - ... Fri, 19 Jun 2026 08:49:05 GMT roboburr [323abb0] * src/views/pages/admin-settings.ejs (modified) ui(settings): mode config below Mode card + fix radio regression - ... Fri, 19 Jun 2026 08:41:37 GMT roboburr [0804d61] * src/views/pages/admin-settings.ejs (modified) ui: settings forms cleaner — stacked labels + full-width inputs ... Fri, 19 Jun 2026 08:39:16 GMT roboburr [a474bd2] * src/views/pages/admin-comments.ejs (modified) ui: comment moderation "Recent decisions" as cards instead of a flat ... 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 08:34:13 GMT roboburr [7eb35ae] * src/views/pages/post-edit.ejs (modified) editor: note that the excerpt is also the Circles summary ... Fri, 19 Jun 2026 08:29:28 GMT roboburr [ca507ef] * src/config/mailer.js (modified) * src/routes/admin-settings.js (modified) * src/views/pages/admin-settings.ejs (modified) feat: SMTP configurable via Admin → Settings (app_settings, env ... Fri, 19 Jun 2026 08:25:35 GMT roboburr [977f65d] * src/assets/css/style.css (modified) * src/views/shell.ejs (modified) ui: date/time picker in site theme (dark/light follows toggle) + ... Fri, 19 Jun 2026 08:20:35 GMT roboburr [13b2986] * src/routes/epk.js (modified) * src/views/pages/epk.ejs (modified) EPK: Music section = top 10 most played (instead of first 6 in order) ... Fri, 19 Jun 2026 08:18:26 GMT roboburr [59e522f] * src/routes/posts.js (modified) 404: unknown slug now falls through to the proper 404 page (instead ... Fri, 19 Jun 2026 08:16:57 GMT roboburr [3b6e04a] * src/server.js (modified) * src/views/pages/404.ejs (added) 404: proper, mobile-friendly page instead of bare text Catch-all ... Fri, 19 Jun 2026 08:08:06 GMT roboburr [2900f1d] * src/assets/css/style.css (modified) * src/views/shell.ejs (modified) fix: button text unreadable on hover (a:hover overrode accent button ... Fri, 19 Jun 2026 08:00:37 GMT roboburr [b919a67] * src/routes/auth.js (modified) * src/views/pages/auth-login.ejs (modified) auth: all Google login errors as clear explanation blocks (codes ... Fri, 19 Jun 2026 07:57:15 GMT roboburr [70679063] * src/routes/auth.js (modified) * src/views/pages/admin-audio.ejs (modified) * src/views/pages/auth-login.ejs (modified) fix: download toggle without page reload + clear explanation page on ... Fri, 19 Jun 2026 07:28:25 GMT roboburr [9b3e12c] * src/views/shell.ejs (modified) fix: post URL now updates in the address bar — htmx:beforeRequest ... Fri, 19 Jun 2026 07:26:39 GMT roboburr [e9cfa3c] * src/views/pages/admin-stats.ejs (modified) fix: stats chart overflowed the card at 90 days 90 day columns + ... Fri, 19 Jun 2026 07:23:36 GMT roboburr [6b8afb1] * src/views/shell.ejs (modified) fix: address bar not updating on post click (htmx history off + hx- ... Fri, 19 Jun 2026 07:09:11 GMT roboburr [0beafed] * src/middleware/site.js (modified) fix: site-wide audio player never received tracks (loadAudioTracks ... Fri, 19 Jun 2026 06:55:07 GMT roboburr [84325b8] * src/views/partials/chrome.ejs (modified) chrome: feature pages headerless (own header) — topnav stays, profile ... Fri, 19 Jun 2026 06:47:40 GMT roboburr [8d32dcf] * src/config/database.js (modified) * src/routes/admin-shows.js (added) * src/routes/shows.js (added) * src/server.js (modified) * src/services/SubscriberService.js (modified) * src/views/pages/admin-shows.ejs (added) * src/views/pages/admin.ejs (modified) * src/views/pages/shows.ejs (added) Show agenda + notify-me (premium feature #8) — last of the 8 - DB: ... Fri, 19 Jun 2026 04:28:02 GMT roboburr [b9dc94c] * src/config/database.js (modified) * src/routes/posts.js (modified) * src/server.js (modified) * src/services/Scheduler.js (added) * src/views/pages/fan-gate.ejs (added) * src/views/pages/post-edit.ejs (modified) Release scheduling + fan-only previews (premium feature #3) - DB: ... Fri, 19 Jun 2026 04:13:46 GMT roboburr [6be57b4] * src/routes/admin-audio.js (modified) * src/routes/embed.js (added) * src/server.js (modified) * src/views/pages/admin-audio.ejs (modified) * src/views/pages/embed-player.ejs (added) Embeddable player (premium feature #7) Standalone /embed page (no ... Fri, 19 Jun 2026 04:07:24 GMT roboburr [1794fac] * src/config/database.js (modified) * src/routes/admin-stats.js (modified) * src/services/StatsService.js (modified) * src/views/pages/admin-stats.ejs (modified) Pro stats (premium feature #5): referrers + period selector + all- ... Fri, 19 Jun 2026 03:46:42 GMT roboburr [37edecd] * src/config/database.js (modified) * src/routes/admin-stats.js (modified) * src/routes/linkbio.js (added) * src/server.js (modified) * src/views/pages/admin-stats.ejs (modified) * src/views/pages/admin.ejs (modified) * src/views/pages/linkbio.ejs (added) Link-in-bio + click stats (premium feature #6) Linktree-style page ...