# # ChangeLog for src in Klonkt # # Generated by Trac 1.6 # 09/09/2026 08:57:45 PM Mon, 15 Jun 2026 01:14:02 GMT roboburr [f45fc82] * src/routes/admin.js (modified) * src/views/pages/admin.ejs (modified) * src/views/pages/my-site.ejs (modified) feat: posts/drafts list on the dashboard — drafts findable again ... Mon, 15 Jun 2026 01:06:49 GMT roboburr [b50a885] * src/views/pages/post-edit.ejs (modified) * src/views/partials/track-editor.ejs (modified) fix: cover URL field accepts relative /media/ paths (type=url -> ... Sun, 14 Jun 2026 23:26:17 GMT roboburr [cb6b1ad] * src/assets/css/audio.css (modified) * src/views/shell.ejs (modified) fix: tablet full-player queue gets full width (660px instead of ... Sun, 14 Jun 2026 23:21:54 GMT roboburr [67d4067] * src/assets/css/audio.css (modified) * src/views/shell.ejs (modified) fix: tablet full-player uses 'safe center' — cover no longer clipped ... Sun, 14 Jun 2026 23:12:05 GMT roboburr [102d2f0] * src/assets/css/audio.css (modified) * src/views/shell.ejs (modified) fix: tablet/auto full-player overrides now win (cascade order) + ... Sun, 14 Jun 2026 22:17:23 GMT roboburr [ddecd9a] * src/assets/css/audio.css (modified) * src/assets/js/audio-player.js (modified) * src/views/shell.ejs (modified) feat: audio player three layouts — desktop mini-only, tablet/auto ... Sun, 14 Jun 2026 18:55:44 GMT roboburr [a1c8cb8] * src/routes/admin-sites.js (modified) * src/routes/artists.js (modified) * src/routes/hub.js (modified) * src/routes/posts.js (modified) * src/server.js (modified) * src/views/pages/artists-directory.ejs (modified) * src/views/pages/hub-home.ejs (modified) feat: directory URL /artiesten -> /leden + count 'N Klonkt's' - ... Sun, 14 Jun 2026 18:48:50 GMT roboburr [74c2473] * src/routes/artists.js (modified) * src/views/pages/artists-directory.ejs (modified) * src/views/pages/hub-home.ejs (modified) copy: hub-home/directory 'Artiesten' -> 'Leden' + feed heading 'our ... Sun, 14 Jun 2026 18:46:13 GMT roboburr [ce8c8c2] * src/routes/artists.js (modified) * src/routes/hub.js (modified) * src/views/pages/hub-home.ejs (modified) feat: hub-home shows main/label account separately (not under ... 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:23:48 GMT roboburr [5e95aac] * src/server.js (modified) * src/views/pages/admin-users.ejs (modified) fix: users list alignment + site icon SF -> K (Klonkt) - ... Sun, 14 Jun 2026 18:16:58 GMT roboburr [c869272] * src/server.js (modified) fix: allow inline event handlers (CSP) — avatar upload + role ... 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 17:25:41 GMT roboburr [b94c08e] * src/views/pages/home.ejs (modified) * src/views/pages/post.ejs (modified) * src/views/pages/search.ejs (modified) * src/views/partials/bottom-tab.ejs (modified) * src/views/partials/profile-sheet.ejs (modified) fix: all site-scoped links use siteUrlBase in hub mode Follow-up on ... Sun, 14 Jun 2026 17:13:12 GMT roboburr [7963a6e] * src/views/partials/post-card.ejs (modified) * src/views/partials/post-tile.ejs (modified) fix: feed post links use siteUrlBase (clicking did not work in hub) ... Sun, 14 Jun 2026 17:10:16 GMT roboburr [0c2228a] * src/routes/admin-users.js (modified) * src/views/pages/admin-users.ejs (modified) * src/views/partials/topnav.ejs (modified) hub: home button actually visible + delete for every user (cascade) ... Sun, 14 Jun 2026 17:04:48 GMT roboburr [05a6ca0] * src/views/pages/admin-users.ejs (modified) admin: align users list — fixed position for the delete button The ... Sun, 14 Jun 2026 17:01:56 GMT roboburr [3c196f9] * src/views/shell.ejs (modified) fix: view switcher on non-feed pages goes to the SITE home, not ... 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:55:06 GMT roboburr [6150acb] * src/views/pages/account.ejs (modified) account: cleaner profile card — clickable avatar with camera badge ... 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:28:57 GMT roboburr [a64f642] * src/routes/admin-users.js (modified) * src/views/pages/admin-users.ejs (modified) admin: read-only ("View mode") configurable per user in Admin -> ... Sun, 14 Jun 2026 16:25:27 GMT roboburr [640b39c] * src/config/database.js (modified) * src/routes/auth.js (modified) * src/server.js (modified) * src/views/shell.ejs (modified) auth: read-only view accounts (view everything, modify nothing) New ... 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 16:02:09 GMT roboburr [ccbd6a6] * src/views/shell.ejs (modified) hub: global pages (e.g. /account) bare; PrutFolio chrome only on ... Sun, 14 Jun 2026 15:48:20 GMT roboburr [a7e12de] * src/routes/auth.js (modified) * src/views/shell.ejs (modified) auth: no shell chrome on login/register/reset (headerless focus ... Sun, 14 Jun 2026 15:42:44 GMT roboburr [337ec5a] * src/views/pages/hub-home.ejs (modified) hub: minimal auth nav over the hero on the overview (login back) ... Sun, 14 Jun 2026 15:37:12 GMT roboburr [4c5169f] * src/routes/admin-settings.js (modified) * src/routes/hub.js (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/hub-home.ejs (modified) * src/views/shell.ejs (modified) hub: overview is a headerless landing with hero image The hub ... Sun, 14 Jun 2026 15:21:25 GMT roboburr [6e0249f] * src/routes/admin-settings.js (modified) * src/routes/hub.js (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/hub-home.ejs (modified) hub: generic home page (not owned by any user) + admin-managed ... Sun, 14 Jun 2026 15:15:52 GMT roboburr [743bb81] * src/routes/hub.js (modified) * src/views/pages/hub-home.ejs (modified) hub: fix /user/:slug showed the overview instead of the site + ... Sun, 14 Jun 2026 15:09:49 GMT roboburr [4d7443b] * src/routes/hub.js (modified) * src/views/pages/hub-home.ejs (modified) hub: home page redesigned as a label landing page Separate landing ... 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 14:53:03 GMT roboburr [52215bc] * src/config/database.js (modified) * src/services/SettingsService.js (modified) * src/views/pages/admin-settings.ejs (modified) tenancy: /gebruikers -> /user/ in settings text + comments (Robin's ... 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:29:39 GMT roboburr [8b014ef] * src/routes/admin-sites.js (modified) * src/views/pages/admin-audio.ejs (modified) * src/views/pages/admin-comments.ejs (modified) * src/views/pages/admin-playlists.ejs (modified) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/admin-site-edit.ejs (modified) * src/views/pages/admin-sites.ejs (modified) * src/views/pages/admin-users.ejs (modified) admin: one consistent "← Admin" back button on all admin pages ... Sun, 14 Jun 2026 08:21:55 GMT roboburr [07775b7] * src/routes/admin-sites.js (modified) * src/views/pages/admin-site-edit.ejs (modified) tenancy: Appearance page back link is mode-aware (solo -> 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 ... Sun, 14 Jun 2026 07:31:23 GMT roboburr [9e27d64] * .env.example (modified) * package-lock.json (modified) * package.json (modified) * scripts/reset-admin.mjs (added) * src/config/google.js (modified) * src/config/mailer.js (added) * src/routes/account.js (modified) * src/routes/auth.js (modified) * src/server.js (modified) * src/views/pages/account.ejs (modified) * src/views/pages/auth-login.ejs (modified) * src/views/pages/auth-register.ejs (modified) * src/views/pages/auth-reset-request.ejs (modified) * src/views/pages/auth-reset.ejs (modified) * src/views/pages/welcome.ejs (modified) * src/views/partials/shared-styles.ejs (modified) auth: password admin + per-instance Google for listeners (no broker) ... Sun, 14 Jun 2026 06:55:51 GMT roboburr [32cc601] * .env.example (modified) * package-lock.json (modified) * package.json (modified) * src/config/google.js (modified) * src/routes/auth.js (modified) auth: route Google login via central Klonkt broker (no credentials ... Sun, 14 Jun 2026 06:32:57 GMT roboburr [ae924a2] * src/server.js (modified) auth: update startup banner (Google login instead of register) ... Sun, 14 Jun 2026 04:39:57 GMT roboburr [c80e78b] * .env.example (modified) * src/config/database.js (modified) * src/config/google.js (added) * src/routes/account.js (modified) * src/routes/auth.js (modified) * src/views/pages/account.ejs (modified) * src/views/pages/auth-login.ejs (modified) * src/views/pages/welcome.ejs (modified) * src/views/partials/shared-styles.ejs (modified) auth: replace username/password with Google login Listeners (and ... Sun, 14 Jun 2026 04:20:02 GMT roboburr [89d6536] * src/assets/js/audio-player.js (modified) * src/views/shell.ejs (modified) fix: track buttons via event delegation (survives HTMX history- ... Sun, 14 Jun 2026 04:07:28 GMT roboburr [2b52bfb] * src/assets/js/audio-player.js (modified) * src/views/shell.ejs (modified) audio: mobile — back button closes the now-playing sheet (history ... Sun, 14 Jun 2026 04:01:38 GMT roboburr [942028f] * src/assets/.well-known/assetlinks.json (deleted) * src/assets/apk/soundfabrics.apk (deleted) * src/assets/js/install-app.js (modified) * src/server.js (modified) * src/views/partials/footer.ejs (modified) * src/views/shell.ejs (modified) app: remove APK/TWA variant — PWA-only install Robin: only PWA ... Sun, 14 Jun 2026 02:40:35 GMT roboburr [9b36f45] * src/assets/js/audio-player.js (modified) * src/views/shell.ejs (modified) audio: mobile — tapping a track automatically opens the now-playing ... Sun, 14 Jun 2026 01:25:19 GMT Robin Genis [b5bae24] * .well-known/assetlinks.json (added) * deploy/DEPLOY.md (added) * deploy/backup.sh (added) * deploy/nginx.conf.example (added) * deploy/verify.ps1 (added) * scripts/import-v9-posts.js (added) * scripts/migrate-posts-to-html.js (added) * scripts/v9-posts-import.sql (added) * src/assets/js/audio-player.js (modified) * src/assets/js/lenis.min.js (added) * src/assets/js/smooth-scroll.js (added) * src/server.js (modified) * src/views/shell.ejs (modified) reconcile: commit uncommitted live /srv state (playback fix + ... 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, 20 May 2026 22:19:03 GMT Robin Genis [353c39c] * src/server.js (modified) audio: allow blob: in CSP media-src (fix Step-1 no-play/auto-skip ... Wed, 20 May 2026 22:14:01 GMT Robin Genis [21522ae] * src/assets/js/audio-player.js (modified) * src/routes/admin-audio.js (modified) * src/routes/admin-playlists.js (modified) * src/routes/audio.js (modified) * src/routes/posts.js (modified) * src/services/AudioStreamService.js (modified) * src/services/PlaylistService.js (modified) * src/views/pages/admin-audio.ejs (modified) * src/views/partials/track-editor.ejs (modified) * src/views/shell.ejs (modified) audio: Spotify-style blob playback + same-origin gate (fix playback ... Thu, 07 May 2026 22:38:43 GMT Robin [8681239] * .beads/issues.jsonl (modified) * src/assets/css/audio.css (modified) * src/assets/js/audio-player.js (modified) * src/views/shell.ejs (modified) audio v3: robust continuous playback — pause+load reset, error auto- ... Thu, 07 May 2026 20:02:41 GMT Robin [cf96890] * src/views/shell.ejs (modified) Cache buster ?v=2 on audio-player.js — prevents Cloudflare 1y stale ... 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)