20 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
0191a2a957 docs: document store integration, draft posts, reset behavior
- Add store integration section explaining the postTemplate → createFile flow
- Update API response example to use new "Title - Author" name format
- Add reset route to admin routes table
- Update troubleshooting: reset button, store-only migration path

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 23:01:13 +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
56f859e70d docs: note draft status and simplified content format
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:26:41 +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
c0563cfca1 feat: add API endpoints reference to bottom of YouTube dashboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:02:58 +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
f7cf168cd4 docs: describe likes admin dashboard UI sections
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:55:13 +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
ab5380bf19 docs: document baseline-first sync, MongoDB collections, troubleshooting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:43:08 +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
72cc2238f4 docs: add YouTube Likes Sync documentation to README
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 20:57:31 +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
f14453368c feat: add i18n support for 14 languages
Add translations for de, es, es-419, fr, hi, id, it, nl, pl, pt, pt-BR, sr, sv, zh-Hans-CN
to match upstream Indiekit's supported locales.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 22:33:41 +01:00
Ricardo
58ea798106 docs: update CLAUDE.md and README.md with multi-channel support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 18:23:26 +01:00
Ricardo
4119391ef3 refactor: align to upstream @indiekit/frontend patterns
- Extract 177 lines inline CSS to assets/styles.css
- Create intermediate layout (views/layouts/youtube.njk)
- Use section() macro for dashboard sections
- Rename CSS prefix from yt-* to youtube-*
- Replace inline style for LIVE duration badge with CSS class
- Use upstream CSS custom properties without fallbacks
- Keep animation CSS (@keyframes youtube-pulse)
- Add assets to package.json files array
- Bump version to 1.2.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 19:18:37 +01:00
Ricardo
0413328e43 chore: bump version to 1.2.1 2026-02-06 16:41:20 +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