# # ChangeLog for src/routes in Klonkt # # Generated by Trac 1.6 # 09/09/2026 09:22:36 PM 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: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 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 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: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: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 ... 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: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: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: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: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: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: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 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 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 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 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 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 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:29:16 GMT roboburr [79bba6e] * src/routes/prutter.js (modified) * src/views/pages/hub-home.ejs (modified) * src/views/pages/prutter-conversation.ejs (modified) * src/views/partials/chrome.ejs (modified) * src/views/shell.ejs (modified) Audio never jumps + hub topnav + Prutter chat mobile-first - Global ... Tue, 16 Jun 2026 22:28:54 GMT roboburr [2248cd2] * src/config/google.js (modified) * src/routes/admin-settings.js (modified) * src/views/pages/admin-settings.ejs (modified) Google login configurable in-app: Admin → Settings card (no .env ... Tue, 16 Jun 2026 20:52:32 GMT roboburr [221a209] * src/config/database.js (modified) * src/routes/circle.js (modified) * src/services/CircleFederation.js (modified) * src/services/CircleService.js (modified) * src/views/pages/circle-post.ejs (modified) Circle: carry over + display tags from the original post Publisher ... Tue, 16 Jun 2026 19:02:15 GMT roboburr [62b899d] * src/routes/admin-circle.js (modified) * src/services/CircleFederation.js (modified) * src/services/CircleService.js (modified) * src/views/pages/admin-circle.ejs (modified) Circle: strip shortcodes from summary + "Sync all now" button ... Tue, 16 Jun 2026 18:49:32 GMT roboburr [682d504] * src/routes/circle.js (modified) * src/services/CircleService.js (modified) Circle: remove cached posts on outdated + exclude outdated sites from ... Tue, 16 Jun 2026 18:46:59 GMT roboburr [1be21ba] * src/routes/account.js (modified) * src/views/pages/account.ejs (modified) Account: owner can edit site name + tagline in account settings New ... Tue, 16 Jun 2026 18:45:02 GMT roboburr [e9229f2] * src/routes/auth.js (modified) Phase 4: Fan login (Google) behind premium gate fanLoginReady() = ... Tue, 16 Jun 2026 10:30:37 GMT roboburr [029f047] * src/routes/admin-settings.js (modified) * src/views/pages/admin-settings.ejs (modified) Phase 2: Hub mode behind premium gate (premiumUnlocked) Switching ... Tue, 16 Jun 2026 09:41:28 GMT roboburr [d549549] * src/config/database.js (modified) * src/routes/admin-stats.js (added) * src/routes/audio.js (modified) * src/routes/posts.js (modified) * src/server.js (modified) * src/services/StatsService.js (added) * src/views/pages/admin-stats.ejs (added) * src/views/pages/admin.ejs (modified) Statistics module (Phase 3): cookie-free tracking + premium stats ... Tue, 16 Jun 2026 07:35:21 GMT roboburr [8ea3d0d] * src/config/database.js (modified) * src/routes/admin-sites.js (modified) * src/routes/circle.js (modified) * src/services/ensurePrimarySite.js (modified) * src/views/pages/circle-feed.ejs (modified) Defaults: new sites grid + moderate; Circle page graphical header ... Tue, 16 Jun 2026 07:04:18 GMT roboburr [2c246d4] * src/routes/admin-sites.js (modified) * src/views/pages/admin-site-edit.ejs (modified) Appearance: remove dead profile_name/bio write + Prutter toggle only ... 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:33:38 GMT roboburr [f63cbc2] * src/routes/federation.js (modified) * src/services/CircleFederation.js (modified) * src/services/CircleService.js (modified) Circles: protocol version enforced via signature binding (update ... 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 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 ... Tue, 16 Jun 2026 02:51:47 GMT roboburr [ff08153] * src/routes/admin-updates.js (added) * src/server.js (modified) * src/views/pages/admin-updates.ejs (added) * src/views/pages/admin.ejs (modified) Update feature: Admin -> Updates (git-based v1, per instance) Admin ... Tue, 16 Jun 2026 02:22:31 GMT roboburr [7917407] * src/routes/circle.js (modified) * src/views/pages/circle-post.ejs (added) Circles: local read page /cirkel/:id (stay on your site) + source in ... Tue, 16 Jun 2026 01:52:09 GMT roboburr [43dbf9c] * src/routes/circle.js (modified) * src/views/pages/circle-feed.ejs (modified) * src/views/partials/post-card.ejs (modified) * src/views/partials/post-tile.ejs (modified) * src/views/shell.ejs (modified) Circles: /cirkel uses the home view (timeline + grid + switcher) - ... Tue, 16 Jun 2026 01:12:00 GMT roboburr [0b7ebbf] * docs/cirkels-v1-spec.md (added) * src/config/database.js (modified) * src/routes/admin-circle.js (added) * src/routes/admin-settings.js (modified) * src/routes/circle.js (added) * src/routes/federation.js (added) * src/server.js (modified) * src/services/CircleFederation.js (added) * src/services/CircleService.js (added) * src/services/SettingsService.js (modified) * src/views/pages/admin-circle.ejs (added) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/circle-feed.ejs (added) Merge branch 'feat/cirkels-v1' # Conflicts: # ... Tue, 16 Jun 2026 01:08:28 GMT Robin Genis [63edb0d] * 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: hero image upload + dark overlay slider Reconcile of live ... Tue, 16 Jun 2026 01:03:40 GMT roboburr [efdde37] * src/routes/federation.js (modified) Circles v1 — publication disabled in hub mode (solo-to-solo only) ... Tue, 16 Jun 2026 00:59:24 GMT roboburr [0091cb7] * src/config/database.js (modified) * src/routes/admin-circle.js (added) * src/routes/admin-settings.js (modified) * src/routes/circle.js (added) * src/server.js (modified) * src/services/CircleFederation.js (modified) * src/views/pages/admin-circle.ejs (added) * src/views/pages/admin-settings.ejs (modified) * src/views/pages/circle-feed.ejs (added) Circles v1 — steps 4+5: Admin UI + /cirkel feed - Mode 'Circles' in ... Tue, 16 Jun 2026 00:38:38 GMT roboburr [b300682] * docs/cirkels-v1-spec.md (added) * src/config/database.js (modified) * src/routes/federation.js (added) * src/server.js (modified) * src/services/CircleFederation.js (added) * src/services/SettingsService.js (modified) Circles v1 — foundation: migration + signed own publication Steps ... Mon, 15 Jun 2026 04:02:17 GMT roboburr [6117035] * src/routes/posts.js (modified) * src/views/pages/post.ejs (modified) fix: post navigation over ALL posts incl. pinned (no more pinned-only ... Mon, 15 Jun 2026 03:39:35 GMT roboburr [d54dade] * src/routes/posts.js (modified) * src/views/pages/post.ejs (modified) fix: hub mode — related posts + Newer/Older across ALL users In hub ... Mon, 15 Jun 2026 03:23:29 GMT roboburr [3e86f1c] * package.json (modified) * scripts/backfill-durations.mjs (added) * src/routes/admin-audio.js (modified) * src/services/AudioTranscoder.js (modified) * src/views/partials/track-editor.ejs (modified) feat: automatic track duration — no more manually entering seconds ... Mon, 15 Jun 2026 01:48:56 GMT roboburr [1907a18] * src/routes/posts.js (modified) * src/services/AudioEmbedService.js (modified) * src/views/pages/post-edit.ejs (modified) feat: embed media via editor button ([[embed:url]] shortcode) Embed ... 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 ... 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: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: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 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 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: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 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 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 ... 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 ... 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)