| name | docs-expo-videos |
| description | Check Expo's YouTube channel for new videos not yet listed in docs additional resources. Use when the user wants to find and add recent Expo videos. |
| argument-hint | [optional: number-of-recent-videos-to-check] |
| version | 1.0.0 |
Check Expo YouTube for New Videos
Detect new videos on the Expo YouTube channel that are not yet in docs/public/static/talks.ts, then help the user add them.
Step 1: Fetch videos from the Expo Developers YouTube channel
The source of truth is the @ExpoDevelopers channel:
Since YouTube pages require JavaScript rendering, use the channel RSS feed as the programmatic equivalent:
https://www.youtube.com/feeds/videos.xml?channel_id=UCx_YiR733cfqVPRsQ1n8Fag
Important: Only consider videos that are published on the @ExpoDevelopers channel. Do NOT include videos from other channels. The RSS feed above is scoped to this channel only.
Parse each <entry> to extract:
videoId (from <yt:videoId>)
title (from <title>)
published date (from <published>)
author / channel name (from <author><name>)
link URL (from <link rel="alternate">)
Auto-skip filter: Automatically exclude (do not show in the results table) any video that matches any of these conditions:
- YouTube Shorts - the link URL contains
/shorts/ instead of /watch?v=
- Very short videos (under 2 minutes) - if the video description or title indicates a duration under 2 minutes, or if the video is clearly a sub-2-minute clip (e.g., quick tip, single-feature demo under 30 seconds)
- Blacklisted videos - permanently excluded by videoId (created for specific internal purposes, not suitable for docs):
_ogZuukmZa8 - "How to use Expo StatusBar | Expo SDK"
When videos are auto-skipped, note them at the bottom of the report:
Auto-skipped (Shorts or under 2 min): X videos
- "<title>" (reason: YouTube Short / under 2 min)
If $ARGUMENTS is a number, only consider that many most-recent entries. Otherwise check all entries in the feed (typically the 15 most recent).
Step 2: Collect existing video IDs
Read docs/public/static/talks.ts (path relative to the expo repo root, usually at ~/Documents/GitHub/expo/docs/public/static/talks.ts).
Grep for all videoId values across every exported array (TALKS, PODCASTS, LIVE_STREAMS, YOUTUBE_VIDEOS). Collect them into a set of known IDs.
Step 3: Compare and report
For each video from the RSS feed, check if its videoId already exists in the known set.
If every video from the feed is already tracked in talks.ts, report:
No new videos found from the @ExpoDevelopers channel.
Checked:
- https://www.youtube.com/@ExpoDevelopers/videos
- https://www.youtube.com/@ExpoDevelopers/streams
All X videos from the feed are already in talks.ts. The latest video is:
"<title>" (published <date>)
Then stop. Do not proceed to Step 4.
If there are new (untracked) videos, present results as a table:
New videos not in additional resources:
| # | Title | Video ID | Published | URL |
|---|-------|----------|-----------|-----|
| 1 | ... | ... | ... | https://youtube.com/watch?v=... |
| 2 | ... | ... | ... | https://youtube.com/watch?v=... |
Already tracked: X videos
Step 4: Ask which to add
If new videos were found, ask the user:
- Which videos they want to add (by number, "all", or "none")
- For each selected video, suggest a category using these heuristics:
- Talks: title contains "Keynote", "Conf", "Conference", "Summit", "Meetup", or names a known conference (App.js Conf, Chain React, React Advanced, React Universe)
- Video tutorials: title contains "How to", "Tutorial", "Guide", "Tips", "Build", "Debug"
- Live streams: title contains "Live", "Livestream", "Office hours", "AMA", "Stream", or the URL path was
/live/
- Podcasts: title contains "Podcast", "Episode", or a podcast brand name
Present the suggested category and proposed fields (title, event, description, videoId, home) for confirmation.
Step 5: Add entries
For each confirmed video:
- Add the entry to the correct array in
docs/public/static/talks.ts (prepend to the top of the array so newest entries come first).
- Follow the data format already in the file. Match the existing style exactly.
- Update the
modificationDate in the frontmatter of docs/pages/additional-resources/index.mdx to today's date (format: Month D, YYYY, e.g., March 17, 2026). This date should reflect when the PR is opened, which is typically today.
After adding, run the validation script if available:
node ~/.codex/skills/expo-additional-resources-curator/scripts/validate_talks.cjs
Important rules
- Only edit files locally.
- Always confirm with the user before writing to
talks.ts.
- Never recommend YouTube Shorts or videos under 2 minutes. These are auto-skipped during filtering and should not appear in the results table.
- If a video looks like it does not belong in additional resources (e.g., a community repost, not Expo-related, promotional/non-technical content), flag it and let the user decide.
- Strip "Expo" channel branding from event names if the actual event name is clear from the title.
- For the
description field, use speaker name(s) if identifiable from the video title or metadata.