# # ChangeLog for src in Klonkt # # Generated by Trac 1.6 # 09/09/2026 06:55:58 PM 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 ... Fri, 19 Jun 2026 01:09:15 GMT roboburr [91094a4] * src/config/database.js (modified) * src/routes/admin-audio.js (modified) * src/routes/download.js (added) * src/server.js (modified) * src/views/pages/admin-audio.ejs (modified) * src/views/pages/admin.ejs (modified) * src/views/pages/download.ejs (added) * src/views/pages/downloads.ejs (added) Download-for-email (premium feature #2) Fan leaves their email -> ... Fri, 19 Jun 2026 00:00:48 GMT roboburr [2e247e4] * src/config/database.js (modified) * src/routes/admin-newsletter.js (added) * src/routes/newsletter.js (added) * src/server.js (modified) * src/services/SubscriberService.js (added) * src/views/pages/admin-newsletter.ejs (added) * src/views/pages/admin.ejs (modified) * src/views/pages/newsletter.ejs (added) Newsletter / mailing list (premium feature #1) + SMTP wiring Email ... Thu, 18 Jun 2026 23:49:09 GMT roboburr [255e3d3] * src/routes/epk.js (added) * src/server.js (modified) * src/views/pages/epk.ejs (added) EPK / press kit (premium feature #4): shareable /pers press page per ... Thu, 18 Jun 2026 16:37:16 GMT roboburr [85d9fda] * src/views/shell.ejs (modified) Fix double page on back/forward (htmx history conflict) On ... Thu, 18 Jun 2026 16:30:54 GMT roboburr [b08b5bc] * src/server.js (modified) SW: intercept navigations only — fix broken images after refresh ... Thu, 18 Jun 2026 16:28:28 GMT roboburr [91d948c] * src/views/pages/post-edit.ejs (modified) Editor: blockquote button is now a real toggle (turning it off works) ... Thu, 18 Jun 2026 08:48:18 GMT roboburr [fbc8628] * src/routes/admin-audio.js (modified) * src/views/pages/admin-audio.ejs (modified) Audio upload: WAV up to 100 MB (other formats remain 50 MB) WAV is ... Thu, 18 Jun 2026 08:02:13 GMT roboburr [03af7f8] * src/views/pages/admin-seo.ejs (modified) SEO page: own style block (label-per-row, clean fields) The ... Thu, 18 Jun 2026 07:50:13 GMT roboburr [6623453] * src/routes/admin-seo.js (added) * src/routes/admin-sites.js (modified) * src/server.js (modified) * src/views/pages/admin-seo.ejs (added) * src/views/pages/admin-site-edit.ejs (modified) * src/views/pages/admin.ejs (modified) Admin: dedicated SEO page (/admin/seo) for advanced SEO The ... Thu, 18 Jun 2026 07:24:25 GMT roboburr [0dbb5c1] * src/assets/js/audio-player.js (modified) * src/views/shell.ejs (modified) Mini player: clickable on desktop → navigates to the associated post ... Thu, 18 Jun 2026 06:57:17 GMT roboburr [5c261b7] * src/views/pages/circle-feed.ejs (modified) Circle feed: "je" → "mijn" + standalone "Add sites via Admin" ... Thu, 18 Jun 2026 06:53:31 GMT roboburr [8e29f77] * src/views/pages/post.ejs (modified) Post: less blank space above the nav (.post-page margin-top 2rem → ... Thu, 18 Jun 2026 06:48:40 GMT roboburr [74544fb] * src/db/migrations/001-init.sql (modified) * src/routes/admin-sites.js (modified) * src/services/ensurePrimarySite.js (modified) * src/views/pages/post.ejs (modified) New sites: require login to comment on by default + post nav at top ... Thu, 18 Jun 2026 06:44:08 GMT roboburr [fee35fa] * src/views/pages/admin-settings.ejs (modified) Hub settings: hero preview properly full-width (object-fit cover ... Thu, 18 Jun 2026 05:56:15 GMT roboburr [86793f9] * src/routes/admin-sites.js (modified) * src/views/pages/admin-users.ejs (modified) Hub: "give this user a Klonkt" from the users page In hub mode each ... 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 ... Thu, 18 Jun 2026 03:06:02 GMT roboburr [6a2abb1] * src/views/shell.ejs (modified) Fix: colour leaks on back button in hub (htmx history restore does ... Wed, 17 Jun 2026 04:20:33 GMT roboburr [c50f22e] * src/views/pages/admin-settings.ejs (modified) Google login card: collapsible step-by-step setup guide ... Wed, 17 Jun 2026 04:02:46 GMT roboburr [441f5d6] * src/assets/css/style.css (modified) * src/views/partials/bottom-tab.ejs (modified) * src/views/partials/topnav.ejs (modified) * src/views/shell.ejs (modified) Login navigation via htmx (audio no longer jumps when opening login) ... Wed, 17 Jun 2026 03:52:13 GMT roboburr [125e0e1] * src/assets/css/audio.css (modified) * src/views/shell.ejs (modified) Fix: audio player floating on the auth/login screen (mobile) The ... Wed, 17 Jun 2026 03:48:04 GMT roboburr [dbde7f8] * src/views/partials/topnav.ejs (modified) Fix: theme toggle stops working after htmx navigation (stacked ... Wed, 17 Jun 2026 03:34:07 GMT roboburr [93d6345] * src/assets/css/style.css (modified) * src/views/partials/footer.ejs (modified) * src/views/shell.ejs (modified) Theme scrollbar + install button in the footer row (no longer a ... Wed, 17 Jun 2026 02:07:28 GMT roboburr [c3ad46d] * src/assets/css/style.css (modified) * src/views/shell.ejs (modified) Fix: horizontal clipping on html (not body) — no h-scroll + fixed ... Wed, 17 Jun 2026 02:00:53 GMT roboburr [dd80030] * src/views/pages/prutter-inbox.ejs (modified) Prutter inbox: also hide site footer (same as the chat) ... Wed, 17 Jun 2026 01:59:24 GMT roboburr [d5b9d2a] * src/assets/css/style.css (modified) * src/views/shell.ejs (modified) Fix: bottom tab scrolls with the page on mobile (overflow-x ... Wed, 17 Jun 2026 01:52:53 GMT roboburr [8f6a61d] * src/views/pages/prutter-conversation.ejs (modified) Prutter composer: clear after send + Enter behaviour + auto-grow - ... Wed, 17 Jun 2026 01:39:35 GMT roboburr [9611f31] * src/views/pages/prutter-conversation.ejs (modified) Prutter chat: hide site footer (was showing through the fixed chat) ... Wed, 17 Jun 2026 01:28:35 GMT roboburr [d3e2987] * src/views/pages/post-edit.ejs (modified) Post editor: Save bar above the audio player instead of below it ... Wed, 17 Jun 2026 01:24:14 GMT roboburr [2beef82] * src/views/pages/post-edit.ejs (modified) Post-editor: hide site tab bar in the editor (focus screen) On ... Wed, 17 Jun 2026 01:18:19 GMT roboburr [ca253750] * src/views/pages/post-edit.ejs (modified) Post-editor: action bar no longer floats on desktop ... Wed, 17 Jun 2026 01:14:00 GMT roboburr [edc462d] * src/views/pages/post-edit.ejs (modified) Post-editor: default status Published (new posts) + friendlier pin ... Wed, 17 Jun 2026 01:10:17 GMT roboburr [3068cc0] * src/views/pages/admin-site-edit.ejs (modified) Slug field as URL: dimmed host prefix + slug in accent colour The ... Wed, 17 Jun 2026 01:03:25 GMT roboburr [c2a9522] * src/assets/css/style.css (modified) * src/views/partials/topnav.ejs (modified) * src/views/shell.ejs (modified) User-menu dropdown frosted blur now works: masthead backdrop-filter ... Wed, 17 Jun 2026 01:00:03 GMT roboburr [d8693e4] * src/views/partials/topnav.ejs (modified) User-menu dropdown: frosted-glass background (more transparent 66% + ... Wed, 17 Jun 2026 00:55:54 GMT roboburr [dc4c067] * src/views/partials/shared-styles.ejs (modified) View-switcher: pill centred between the two lines (equal space ... Wed, 17 Jun 2026 00:51:18 GMT roboburr [1dca23b] * src/views/partials/shared-styles.ejs (modified) View-switcher: margin-top back to 0.5rem (tight under the profile ... 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:46:48 GMT roboburr [ee25d45] * src/assets/css/style.css (modified) * src/views/partials/shared-styles.ejs (modified) View-switcher: margin-top 1.5rem in shared-styles (the winning inline ... Wed, 17 Jun 2026 00:44:33 GMT roboburr [6b0a8e2] * src/assets/css/style.css (modified) * src/views/shell.ejs (modified) View-switcher: symmetric space above/below the pill bar (margin-top ... Wed, 17 Jun 2026 00:34:22 GMT roboburr [cbd1761] * src/views/pages/hub-home.ejs (modified) Hub-home: hero connects directly to the topnav (no gap) + dead hub- ...