# # ChangeLog for src/services in Klonkt # # Generated by Trac 1.6 # 09/09/2026 11:49:04 PM Wed, 24 Jun 2026 13:24:23 GMT Robin Genis [7d932ce] * src/config/database.js (modified) * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) * src/services/i18n.js (modified) * src/views/pages/authorize-interaction.ejs (modified) * src/views/pages/post.ejs (modified) * src/views/partials/fedi-node.ejs (added) feat(activitypub): nested threading + delete your own replies Inbox ... Wed, 24 Jun 2026 13:11:01 GMT Robin Genis [cc24fa1] * src/services/ActivityPubService.js (modified) fix(activitypub): dedup guard on outbound replies (prevent double- ... Wed, 24 Jun 2026 13:04:50 GMT Robin Genis [41a7637] * src/routes/posts.js (modified) * src/services/i18n.js (modified) * src/views/pages/authorize-interaction.ejs (modified) fix(activitypub): instant Send + confirmation on remote reply Send ... Wed, 24 Jun 2026 12:58:40 GMT Robin Genis [7f46112b] * src/assets/css/style.css (modified) * src/services/i18n.js (modified) * src/views/pages/post.ejs (modified) * src/views/shell.ejs (modified) feat(activitypub): per-comment reply-via-fediverse + clearer button ... Wed, 24 Jun 2026 12:52:51 GMT Robin Genis [2826bb97] * src/services/ActivityPubService.js (modified) * src/services/i18n.js (modified) * src/views/pages/authorize-interaction.ejs (modified) feat(activitypub): full post on reply page + strip audio shortcodes ... Wed, 24 Jun 2026 12:44:21 GMT Robin Genis [3d7312a] * src/assets/css/style.css (modified) * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) * src/services/i18n.js (modified) * src/views/pages/authorize-interaction.ejs (added) * src/views/pages/post.ejs (modified) * src/views/shell.ejs (modified) feat(activitypub): remote interaction — reply to any fediverse post ... Wed, 24 Jun 2026 12:16:43 GMT Robin Genis [3a2c9d3] * src/assets/css/style.css (modified) * src/services/i18n.js (modified) * src/views/pages/post.ejs (modified) * src/views/shell.ejs (modified) style(activitypub): match fediverse section to native comment styling ... Wed, 24 Jun 2026 12:09:08 GMT Robin Genis [55bc7f9] * src/assets/css/style.css (modified) * src/config/database.js (modified) * src/routes/activitypub.js (modified) * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) * src/services/i18n.js (modified) * src/views/pages/post.ejs (modified) * src/views/shell.ejs (modified) feat(activitypub): reply back to the fediverse (Phase 4 outbound) ... Wed, 24 Jun 2026 11:44:23 GMT Robin Genis [c16e0a5] * src/assets/css/style.css (modified) * src/config/database.js (modified) * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) * src/services/i18n.js (modified) * src/views/pages/post.ejs (modified) * src/views/shell.ejs (modified) feat(activitypub): inbound interactions — replies, likes, boosts ... Wed, 24 Jun 2026 11:22:49 GMT Robin Genis [eb852c5] * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) feat(activitypub): federate post deletions (Delete + Tombstone) ... Wed, 24 Jun 2026 11:16:28 GMT Robin Genis [5a93ac0] * src/routes/activitypub.js (modified) * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) feat(activitypub): federate images as attachments Cover image + ... Wed, 24 Jun 2026 11:11:29 GMT Robin Genis [065452a] * src/services/ActivityPubService.js (modified) fix(activitypub): include post title in the Note content Mastodon ... Wed, 24 Jun 2026 10:35:48 GMT Robin Genis [5bf63b7] * src/routes/activitypub.js (modified) * src/routes/posts.js (modified) * src/services/ActivityPubService.js (modified) feat(activitypub): phase 1b — Follow/Accept, HTTP Signatures, ... Wed, 24 Jun 2026 10:27:56 GMT Robin Genis [6bd25d1] * src/config/database.js (modified) * src/routes/activitypub.js (added) * src/server.js (modified) * src/services/ActivityPubService.js (added) feat(activitypub): phase 1 — discoverable/fetchable actor (WebFinger, ... 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:57:50 GMT Robin Genis [475eeda] * src/services/i18n.js (modified) * src/views/pages/admin.ejs (modified) feat: premium status badge on the admin dashboard Below the title, ... Tue, 23 Jun 2026 16:27:27 GMT Robin Genis [fe6aac9] * src/routes/admin-updates.js (modified) * src/services/i18n.js (modified) * src/views/pages/admin-updates.ejs (modified) feat: Updates page shows the last 5 changes (git log) Admin -> ... 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:24:46 GMT Robin Genis [8f2f97c] * src/config/database.js (modified) * src/routes/admin-sites.js (modified) * src/routes/posts.js (modified) * src/routes/prutter.js (deleted) * src/server.js (modified) * src/services/PrutterService.js (deleted) * src/views/pages/admin-site-edit.ejs (modified) * src/views/pages/prutter-conversation.ejs (deleted) * src/views/pages/prutter-inbox.ejs (deleted) * src/views/pages/user.ejs (modified) * src/views/partials/bottom-tab.ejs (modified) * src/views/partials/topnav.ejs (modified) * src/views/shell.ejs (modified) Prutter (DM feature) fully removed Reason: redundant feature + ... Tue, 23 Jun 2026 14:11:51 GMT Robin Genis [24cdcc6] * src/routes/auth.js (modified) * src/services/i18n.js (modified) * src/views/pages/auth-register.ejs (modified) setup: first-run wizard (language choice + site name) on ... Mon, 22 Jun 2026 13:22:24 GMT roboburr [1ce1ffe] * src/services/i18n.js (modified) i18n: feature name Circle -> Circles (plural) in NL/EN/DE; ... Mon, 22 Jun 2026 03:38:58 GMT roboburr [814ad8b] * src/services/CircleService.js (modified) * src/services/i18n.js (modified) * src/views/pages/admin-circle.ejs (modified) feat(circles): site name automatically from the remote actor (no ... 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 20:14:38 GMT roboburr [0251bae] * src/assets/css/style.css (modified) * src/services/ThemeService.js (modified) * src/views/shell.ejs (modified) feat(themes): more colour variety — fewer greens/blues in accents + ... Sun, 21 Jun 2026 19:13:58 GMT roboburr [1ee5f65] * src/services/i18n.js (modified) fix(i18n): & displayed literally — use plain & in values ... Sun, 21 Jun 2026 19:01:45 GMT roboburr [c1b757d] * src/services/i18n.js (modified) * src/views/pages/admin-google.ejs (modified) feat(admin): Google setup revised — beginner-friendly explanation ... Sun, 21 Jun 2026 18:41:31 GMT roboburr [9a34d31] * src/config/database.js (modified) * src/services/NotificationService.js (modified) fix(notifications): table renamed to user_notifications (collision ... 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 17:26:47 GMT roboburr [097da22] * src/routes/search.js (modified) * src/services/i18n.js (modified) * src/views/pages/search.ejs (modified) * src/views/partials/topnav.ejs (modified) feat(zoeken): live results while typing + search in events & pages ... 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 16:32:54 GMT roboburr [015ce46] * src/services/Scheduler.js (modified) * src/services/i18n.js (modified) * src/views/pages/post-edit.ejs (modified) fix(inplannen): scheduled posts never went live + timezone bug (1) ... Sun, 21 Jun 2026 16:19:21 GMT roboburr [48ebfa7] * src/assets/vendor/cropper.min.css (added) * src/assets/vendor/cropper.min.js (added) * src/services/i18n.js (modified) * src/views/pages/post-edit.ejs (modified) feat(editor): rotate/crop/mirror images before upload Cropper.js ... Sun, 21 Jun 2026 15:54:13 GMT roboburr [11b3ba5] * src/routes/posts.js (modified) * src/services/i18n.js (modified) * src/views/pages/post-edit.ejs (modified) fix(editor): schedule publication behind an on/off toggle (no ... 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 ... Sun, 21 Jun 2026 15:05:14 GMT roboburr [4885eab] * src/services/i18n.js (modified) * src/views/pages/404.ejs (modified) * src/views/pages/account.ejs (modified) * src/views/pages/archive.ejs (modified) * src/views/pages/artists-directory.ejs (modified) * src/views/pages/auth-login.ejs (modified) * src/views/pages/auth-reset-request.ejs (modified) * src/views/pages/auth-reset.ejs (modified) * src/views/pages/changelog.ejs (modified) * src/views/pages/circle-feed.ejs (modified) * src/views/pages/circle-post.ejs (modified) * src/views/pages/download.ejs (modified) * src/views/pages/epk.ejs (modified) * src/views/pages/fan-gate.ejs (modified) * src/views/pages/favorites.ejs (modified) * src/views/pages/home.ejs (modified) * src/views/pages/hub-home.ejs (modified) * src/views/pages/linkbio.ejs (modified) * src/views/pages/my-site.ejs (modified) * src/views/pages/newsletter.ejs (modified) * src/views/pages/post-edit.ejs (modified) * src/views/pages/prutter-conversation.ejs (modified) * src/views/pages/prutter-inbox.ejs (modified) * src/views/pages/tag.ejs (modified) * src/views/pages/type.ejs (modified) * src/views/pages/user.ejs (modified) * src/views/pages/viewer-blocked.ejs (modified) feat(i18n phase 6): remaining public + other pages translated ... Sun, 21 Jun 2026 14:32:39 GMT roboburr [bbf9d1a] * src/services/i18n.js (modified) * src/views/pages/admin-audio.ejs (modified) * src/views/pages/admin-circle.ejs (modified) * src/views/pages/admin-comments.ejs (modified) * src/views/pages/admin-epk.ejs (modified) * src/views/pages/admin-google.ejs (modified) * src/views/pages/admin-help.ejs (modified) * src/views/pages/admin-newsletter.ejs (modified) * src/views/pages/admin-playlists.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-sites.ejs (modified) * src/views/pages/admin-stats.ejs (modified) * src/views/pages/admin-updates.ejs (modified) * src/views/pages/admin-users.ejs (modified) feat(i18n phase 5): all admin sub-pages translated (NL/EN/DE) ... Sun, 21 Jun 2026 11:45:21 GMT roboburr [fe86013] * src/services/i18n.js (modified) * src/views/pages/post.ejs (modified) * src/views/pages/search.ejs (modified) * src/views/partials/like-button.ejs (modified) feat(i18n phase 4): post comments/like/related + search page ... Sun, 21 Jun 2026 11:35:49 GMT roboburr [137cca5] * src/services/i18n.js (modified) * src/views/pages/auth-login.ejs (modified) * src/views/pages/auth-register.ejs (modified) * src/views/pages/welcome.ejs (modified) * src/views/partials/bottom-tab.ejs (modified) feat(i18n phase 3): welcome/first-run, login, register, bottom-tab ... Sun, 21 Jun 2026 11:23:05 GMT roboburr [bffb348] * src/services/i18n.js (modified) feat(i18n): per-instance default language via KLONKT_DEFAULT_LANG ... Sat, 20 Jun 2026 14:14:32 GMT roboburr [999aad2] * src/assets/css/style.css (modified) * src/services/ThemeService.js (modified) * src/views/shell.ejs (modified) feat(themes): preview colours synced with real CSS + 4 palettes + 4 ... Sat, 20 Jun 2026 13:50:48 GMT roboburr [91c0a39] * src/services/i18n.js (modified) * src/views/pages/admin.ejs (modified) * src/views/pages/downloads.ejs (modified) * src/views/pages/shows.ejs (modified) feat(i18n phase 2): admin dashboard + public calendar/downloads ... 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 12:29:15 GMT roboburr [bb82e7f] * src/services/StatsService.js (modified) * src/views/pages/admin-stats.ejs (modified) feat(stats): bot filter + clear labels (visitor-days ≠ unique ... Sat, 20 Jun 2026 05:43:49 GMT roboburr [a66f691] * src/assets/css/audio.css (modified) * src/services/AudioEmbedService.js (modified) * src/views/shell.ejs (modified) fix(audio): link-only track shows cover (instead of music note) A ... Sat, 20 Jun 2026 05:37:42 GMT roboburr [d727e92] * src/assets/css/audio.css (modified) * src/routes/admin-audio.js (modified) * src/routes/posts.js (modified) * src/services/AudioEmbedService.js (modified) * src/services/PlaylistService.js (modified) * src/views/pages/admin-audio.ejs (modified) * src/views/shell.ejs (modified) feat(audio): tracks without audio (link-only) — list with open-in ... Sat, 20 Jun 2026 05:23:08 GMT roboburr [183875b] * 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/PlaylistService.js (modified) * src/views/partials/track-editor.ejs (modified) * src/views/shell.ejs (modified) feat(audio): per-track "open in" Spotify/YouTube/SoundCloud links ... 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 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 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: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: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 ... 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: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 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 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 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 ... Tue, 16 Jun 2026 22:56:49 GMT roboburr [6224462] * src/services/PermissionsService.js (modified) * src/views/shell.ejs (modified) Hub: show bottom tab (Home/Search/Login) on the hub landing too The ... 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 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 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:46:10 GMT roboburr [151a72c] * src/services/CircleService.js (modified) * src/views/pages/admin-circle.ejs (modified) Circle UI: reason on its own line + clean word wrapping; message ... 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 04:23:01 GMT roboburr [bdc3c1e] * src/server.js (modified) * src/services/ensurePrimarySite.js (added) * src/views/pages/admin.ejs (modified) Always guarantee a primary site (solo/hub/circle) via ... 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 01:15:27 GMT roboburr [57929aa] * src/services/CircleService.js (modified) Circles: lazy prepares in CircleService (fix crash on boot) The ... 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:52:39 GMT roboburr [25d4041] * src/server.js (modified) * src/services/CircleService.js (added) Circles v1 — step 3: pull side (CircleService.sync) - ... 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 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 03:23:14 GMT roboburr [4c9f29a] * src/assets/css/embed.css (added) * src/assets/js/audio-player.js (modified) * src/assets/js/embed-player.js (added) * src/server.js (modified) * src/services/AudioEmbedService.js (modified) * src/views/shell.ejs (modified) feat: on-brand media embeds via the real player APIs Replaces bare ... 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 ... 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: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 ... 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)