10 Commits

Author SHA1 Message Date
svemagie
b8e2b6472f fix: remove content property to prevent double video embed
The `content` property caused the video to render twice: once from
the markdown body and once from the `likeOf` frontmatter in the
Eleventy template. Likes now rely solely on `like-of` + `name`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 09:59:38 +01:00
svemagie
ae0b879401 fix: write like posts to GitHub store via postTemplate + store.createFile
Previously sync only inserted into MongoDB, causing "file not found" errors
when Indiekit tried to read the post. Now generates markdown via
publication.postTemplate() and writes to GitHub via publication.store.createFile(),
matching the micropub endpoint's create flow. Reset also deletes store files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:38:23 +01:00
svemagie
cc3551f3f5 fix: simplify like post content and create as draft
Content is now "Title - Author" instead of "Liked X by Y on YouTube".
Posts are created with post-status: draft so they can be reviewed
before publishing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:25:59 +01:00
svemagie
768dc40963 feat: add reset button to delete all likes data
POST /likes/reset deletes all YouTube like posts from the posts
collection, clears the youtubeLikesSeen set, and removes the
baseline and sync metadata. Next sync will re-baseline.

Button is tucked inside a <details> disclosure to prevent
accidental clicks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:00:50 +01:00
svemagie
6bd7966409 feat: full likes dashboard with connection status, stats, recent likes
- Controller passes baseline status, seen count, recent like posts,
  total count, and flash messages from query params
- View uses Indiekit UI components (section, summary, prose, button,
  notificationBanner) for consistent look
- Recent likes list with thumbnails, titles, channel names
- Connection badge (connected/disconnected), sync controls
- Overview stats: seen videos, like posts, baseline status, last sync
- CSS for likes dashboard components
- Updated en/de locale strings with flash messages and new labels

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:54:28 +01:00
svemagie
252a228653 fix: only sync new YouTube likes, not existing ones
First sync snapshots all current liked video IDs into a
youtubeLikesSeen collection without creating posts. Subsequent
syncs only create posts for likes not in the seen set.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:38:51 +01:00
svemagie
3dda28d3dc feat: add YouTube liked videos sync via OAuth 2.0
Adds OAuth 2.0 flow to connect a YouTube account and sync liked
videos as "like" posts on the blog. Includes:
- OAuth authorize/callback/disconnect flow with token persistence
- getLikedVideos() method using videos.list?myRating=like
- Background periodic sync + manual sync trigger
- Dashboard UI for connection status and sync controls
- Public JSON API for querying synced likes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 20:53:38 +01:00
Ricardo
8139bef1d4 feat: multi-channel support in admin dashboard UI
- Dashboard now fetches and displays all configured channels
- Each channel shows its own header, live status, and videos
- Channels are separated by visual dividers
- Backward compatible with single-channel config
- Version bump to 1.2.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:08:37 +01:00
Ricardo
43090ce8af fix: dashboard controller support for multi-channel mode
The Indiekit backend UI was broken when using channels array
because the dashboard controller only checked for channelId/channelHandle.

Now uses getPrimaryChannel() helper to extract the first channel
from either single-channel or multi-channel configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:59:25 +01:00
Ricardo
2b8de8027b Initial commit: YouTube channel endpoint for Indiekit
Features:
- Display latest videos from any YouTube channel
- Live streaming status with animated badge
- Upcoming stream detection
- Admin dashboard with video grid
- Public JSON API for Eleventy integration
- Quota-efficient API usage (playlist method)
- Smart caching (5min videos, 1min live status)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 23:02:13 +01:00