Links & Feeds
This is the main content area below your tiles. Links, content feeds, and cards all live in one unified list that you can arrange however you like. A sponsored link between two feed cards? Three YouTube feeds in a row? Totally fine. The order in the wizard is the order on your page.
Adding Content
Section titled “Adding Content”Click + Add content and pick a type. The picker is grouped by what each type does:
Link card
| Type | What it does |
|---|---|
| External Link | A custom card with emoji, title, subtitle, and URL |
Feed cards
| Type | What it does |
|---|---|
| YouTube | Pulls your latest videos automatically |
| Substack | Pulls your newsletter posts automatically |
| Medium | Pulls your articles automatically |
| Podcast | Pulls episodes from any podcast RSS feed |
| Twitch | Shows live/offline status, current game, and an optional link to your most recent past broadcast |
| Etsy | Pulls your shop listings automatically |
| Custom RSS | Pulls from any RSS source |
| Bluesky | Shows your recent Bluesky posts |
| Shows your recent Reddit posts, comments, or both | |
| Trakt | Shows what you’ve recently watched on Trakt — shows, movies, or both |
| Bookshelf | Shows a row of book covers from your Goodreads or Hardcover shelves |
Embedded cards
| Type | What it does |
|---|---|
| Embedded Music | Embeds a Spotify, Apple Music, YouTube, or SoundCloud share link |
| Schedule | Embeds a Calendly or Cal.com booking page |
| Ko-fi | Embeds a Ko-fi donation widget |
Every type can be added multiple times. Mix and match however you want.
External Links
Section titled “External Links”The most flexible card type. Use these for anything with a URL: your store, a landing page, a course, a collab, a tip jar.
| Field | Description |
|---|---|
| Emoji | An icon displayed on the card |
| Title | The link name |
| Subtitle | A short description below the title |
| URL | Where the link goes |
| Badge | An optional label (see below) |
| Accent Color | The card’s color theme |
Badges
Section titled “Badges”Badges are small labels on a link card. Options include Sponsored, Limited time, New, Sale, or a custom label you type yourself. Leave blank for no badge.
A word of advice: use badges sparingly. One or two on a page draw the eye. Five makes them all invisible.
YouTube Feed
Section titled “YouTube Feed”Shows your latest videos with thumbnails. Visitors see your recent uploads without you lifting a finger.
| Field | Description |
|---|---|
| Channel Name | Display name for the card |
| Channel URL | Your YouTube channel URL |
| Channel ID | Your YouTube Channel ID (starts with UC). Find yours here. |
| Videos to Show | 1 to 5 recent videos |
| Accent Color | Card color theme |
The Channel ID is the part people get stuck on. It’s not your channel name or URL. Go to youtube.com/account_advanced and look for the string starting with UC.
Substack Feed
Section titled “Substack Feed”Shows your latest newsletter posts.
| Field | Description |
|---|---|
| Newsletter Name | Display name for the card |
| Feed URL | Your Substack feed URL (e.g., https://you.substack.com/feed) |
| Posts to Show | 1 to 5 recent posts |
| Accent Color | Card color theme |
Make sure the feed URL ends in /feed. That’s the RSS endpoint Beacon reads from.
Medium Feed
Section titled “Medium Feed”Shows your latest articles.
| Field | Description |
|---|---|
| Username | Your Medium username (include the @) |
| Posts to Show | 1 to 5 recent articles |
| Accent Color | Card color theme |
Podcast Feed
Section titled “Podcast Feed”Pulls recent episodes from any podcast RSS feed. Works with any podcast host (Anchor, Buzzsprout, Transistor, etc.) as long as you have the RSS URL.
| Field | Description |
|---|---|
| Podcast Name | Display name for the card |
| RSS Feed URL | Your podcast’s RSS feed URL |
| Episodes to Show | 1 to 5 recent episodes |
| Accent Color | Card color theme |
Twitch
Section titled “Twitch”Shows whether you’re live right now, with a pulsing LIVE badge when you’re streaming.
When you’re live, the subtitle reads Twitch · {game} · {uptime} (e.g. Twitch · Diablo IV · 2h 3m). When you’re offline, it reads Twitch · Last played: {game} if a game is known, or just Twitch for accounts that have never streamed.
| Field | Description |
|---|---|
| Username | Your Twitch username |
| Recent stream link | Optional. When set to Show, a sublink appears under the card linking to your most recent past broadcast (VOD). Default is hidden. |
| Accent Color | Card color theme |
The status check runs every 60 seconds while a visitor is on your page. The VOD sublink (when enabled) loads once per page view — VODs don’t change minute-to-minute.
Twitch’s data comes from decapi.me, a free third-party service. No credentials needed. If decapi is briefly unreachable, the card keeps its last-rendered state rather than going blank.
Etsy Feed
Section titled “Etsy Feed”Shows your recent shop listings.
| Field | Description |
|---|---|
| Shop Name | Your Etsy shop name |
| Listings to Show | 1 to 5 recent listings |
| Accent Color | Card color theme |
Custom RSS
Section titled “Custom RSS”Pulls content from any RSS source: a blog, a news site, a niche feed. If it has an RSS URL, Beacon can display it.
| Field | Description |
|---|---|
| Feed Name | Display name for the card |
| Feed URL | The RSS feed URL |
| Icon Name | Icon identifier |
| Items to Show | 1 to 5 recent items |
| Accent Color | Card color theme |
Bluesky
Section titled “Bluesky”Shows your recent Bluesky posts. Each row has the post text (clamped to 3 lines), an inline image thumbnail when the post has images, and a relative timestamp.
| Field | Description |
|---|---|
| Bluesky handle | Your bare handle — no @, no URL. Custom domains work too (e.g. dpb.me). |
| Display name | Optional. When set, shows as the card title with @handle underneath. When blank, the title is @handle and the subtitle reads “Bluesky.” |
| Show | What to include: posts only, posts + replies, posts + reposts, or everything. Default is posts only. |
| Posts to show | 1 to 5 recent posts |
| Accent Color | Card color theme |
No credentials. Bluesky’s public API is open and friendly to direct browser access, so the card fetches without going through any proxy.
Shows your recent Reddit activity. Choose posts, comments, or both — when you pick “both,” they’re interleaved by date.
| Field | Description |
|---|---|
| Reddit username | Your bare username — no u/, no URL. |
| Show | Posts, comments, or both. Default is posts. |
| Items to show | 1 to 5 recent items |
| Accent Color | Card color theme |
No credentials. The card fetches Reddit’s public per-user RSS feed through Beacon’s feed proxy.
A small caveat: Reddit can be touchy about rate limits. If your card occasionally appears empty, it usually means Reddit briefly throttled the request — reload or check back in a moment. The header (with click-through to your profile) stays visible either way.
NSFW posts and comments will appear in the card if they’re in your recent activity. There’s no NSFW filter in this version.
Shows what you’ve recently watched. Episodes render as Show · S2E5 · Episode title. Movies render as Movie · year.
| Field | Description |
|---|---|
| Trakt username | The slug from your trakt.tv/users/{slug} profile URL. |
| Trakt client ID | A free read-only key you generate at trakt.tv/oauth/applications. Takes about a minute. |
| Show | Shows, movies, or both. Default is shows. |
| Items to show | 1 to 5 recent items |
| Accent Color | Card color theme |
Why your own client ID? Trakt requires a key on every request. Beacon could ship a shared one, but its rate limit is per key — heavy usage from one site would throttle everyone else’s. Bringing your own keeps your card’s quota independent.
The card doesn’t show poster artwork. Trakt removed image embedding from their public API in 2017, and pulling posters from a different source would mean another credential to manage. Text-only rows match the rest of Beacon’s feed cards.
Bookshelf
Section titled “Bookshelf”Shows a horizontal grid of book covers (3 to 8) from one of your reading shelves. Pick your source with the segmented control — Goodreads or Hardcover.
| Goodreads | Hardcover | |
|---|---|---|
| Credentials | Numeric user ID | API token from hardcover.app/account/api |
| Update model | Live — fetches every page load | Snapshot — captured when you click Refresh snapshot |
| Available shelves | Read, Want to read, Currently reading, DNF | Same four, plus your own custom lists |
| Cover size | Smaller | Larger (higher quality) |
Bookshelf is different from the Now Reading tile. Now Reading shows the one book you’re reading right now. Bookshelf shows several books from a chosen shelf — for “what I’ve been reading lately,” “TBR,” “best of 2025,” and so on. You can add multiple Bookshelf cards to a page, each with its own source and shelf.
Goodreads source
| Field | Description |
|---|---|
| Goodreads user ID | The numeric ID from your profile URL — for goodreads.com/user/show/140474195-yourname, the ID is 140474195. |
| Shelf | Read, Want to read, Currently reading, or Did not finish |
| Books to show | 3 to 8 covers |
| Service URL | Optional. Override under Advanced if you run your own PirateReads instance. |
Hardcover source
| Field | Description |
|---|---|
| Hardcover token | Your API token from hardcover.app/account/api. |
| Show | Status (one of the four shelves) or Custom list (one of your own Hardcover lists). |
| Status shelf | When “Status” is picked: Read, Want to read, Currently reading, or DNF. |
| Custom list | When “List” is picked: a dropdown populated by clicking Load lists after you paste your token. |
| Books to show | 3 to 8 covers |
| Refresh snapshot | Button. Click to capture the current shelf contents and bake them into your built site. |
The Hardcover source uses snapshot mode — the wizard captures the shelf when you click Refresh snapshot, and your token never reaches your published site. To update the shelf after starting or finishing a book, or editing a list on Hardcover, re-open the wizard and click Refresh snapshot.
If you fill out one source’s fields, switch to the other and fill those out too, then switch back, your original inputs are still there. Switching sources isn’t destructive.
Embedded cards
Section titled “Embedded cards”A few content types render as iframe embeds — Beacon hands the visual treatment off to the source platform’s own player or widget. Embedded Music, Schedule, and Ko-fi all use this pattern.
These cards skip Beacon’s usual card chrome (icon tile, header, divider) on purpose. Spotify, Apple Music, Calendly, Ko-fi, and the rest already paint complete branded experiences inside their iframes — wrapping that in another card produced a “logo on logo” double-card effect, so we let each embed stand on its own.
A few things to know:
- The card’s accent color doesn’t appear on the deployed page. Beacon’s palette can’t reach inside the iframe.
- Card heights are set per provider. If you stack different providers, the cards will be visually different sizes. Intentional — each provider’s iframe is designed for its own native size.
- Click-throughs to the source page are handled inside the iframe (Spotify’s logo pip, Apple’s “View in App” button, Calendly’s branding, etc.).
- Embeds are heavy — the iframes pull a few hundred kilobytes each. Beacon lazy-loads them so they don’t fetch until they scroll into view.
Embedded Music
Section titled “Embedded Music”Embeds a music share link as a featured player on your page. Different from the Now Playing tile — that one shows what you’re listening to right now. Embedded Music is manually curated: you pick a specific track, album, playlist, or video to feature.
| Field | Description |
|---|---|
| Share URL | A share link from one of the supported providers (see below) |
| Theme (experimental) | auto, dark, or light. Provider support varies — see note. |
| Accent Color | Persisted but doesn’t affect the deployed page |
Supported providers and where to copy the share link:
| Provider | Where to copy from |
|---|---|
| Spotify | ”Copy link” on any track, album, playlist, artist, episode, or show |
| Apple Music | ”Share → Copy Link” on any album, playlist, song, or station |
| YouTube | A standard youtube.com/watch?v=…, youtu.be/…, or youtube.com/playlist?list=… URL. Music videos on music.youtube.com work too. |
| SoundCloud | A track URL, set/playlist URL, or artist page URL |
If you paste a URL Beacon doesn’t recognize, the wizard’s Verify step flags it before you can build.
About the theme picker. Iframe theming is patchy. Spotify currently shows dark regardless of the choice. Apple Music respects dark and light via undocumented parameters that may break without warning. YouTube and SoundCloud ignore the picker entirely (their iframes follow the visitor’s own preferences). The picker is labeled “experimental” because that’s what it is — a “just in case” lever for the cases where it does work.
Schedule
Section titled “Schedule”Embeds a booking page from Calendly or Cal.com. Visitors can book a slot directly on your Beacon without leaving the page.
| Field | Description |
|---|---|
| Booking URL | Your Calendly link (e.g. calendly.com/yourname/30min) or Cal.com link (e.g. cal.com/yourname) |
| Accent Color | Persisted but doesn’t affect the deployed page |
If you use both Calendly and Cal.com, add two separate Schedule cards. There’s no “fallback to my other booking app” feature.
Embeds a Ko-fi donation widget for tipping or one-time supports.
| Field | Description |
|---|---|
| Ko-fi URL | Your ko-fi.com/yourname profile link |
| Accent Color | Persisted but doesn’t affect the deployed page |
The embed includes Ko-fi’s full donation panel with payment options. Apple Pay and Google Pay work inside the iframe.
Reordering
Section titled “Reordering”Drag any item by its handle to change the order. Links and feeds can be mixed freely.
Keyboard shortcut: Tab to a drag handle and press the up or down arrow to move that item. The handle re-focuses on the moved item so you can keep adjusting.
Editing and Deleting
Section titled “Editing and Deleting”Click Edit to expand an item’s settings inline. Save to keep changes, Cancel to discard. Opening a different item’s editor while one is already open auto-saves the open one — you don’t have to remember to save first.
The trash icon turns the row into an inline confirmation that names what you’re removing — for example, Remove this YouTube feed? or Remove this Substack feed? Default focus is on Keep; pressing Enter accidentally won’t delete anything. Escape also cancels.
How Feeds Stay Fresh
Section titled “How Feeds Stay Fresh”Most feed cards (YouTube, Substack, Medium, Podcast, Etsy, Custom RSS, Reddit) fetch the latest content every time someone visits your page, routed through Beacon’s feed proxy. Publish something new and it shows up within minutes. No rebuilding needed.
Twitch, Bluesky, and Trakt also fetch live but talk directly to their platforms — no proxy needed.
Bookshelf depends on which source you picked: Goodreads fetches live every page load; Hardcover uses snapshot mode (refresh in the wizard, then rebuild).
Embedded cards (Embedded Music, Schedule, Ko-fi) load their iframes from the source platform on every page load.
Most tiles fetch live on every page load too:
| Tile | Data source | Update frequency |
|---|---|---|
| Now Playing | Last.fm or ListenBrainz | Every 30 seconds (polling) |
| Now Reading (Goodreads) | PirateReads | Every page load |
| Letterboxd | RSS via Beacon’s proxy | Every page load |
| GitHub | GitHub public API | Every page load |
| Chess.com | Chess.com public API | Every page load |
| Weather | Open-Meteo API | Every page load |
| Countdown | Local calculation | Real time |
Now Reading (Hardcover) and Steam work differently — they use snapshot mode. The wizard captures your current book or game data when you click Refresh snapshot, and the result is baked into your built site. They don’t update on their own; refresh in the wizard, then rebuild and redeploy. See Tiles for details.
Custom tiles are static. They display whatever you typed in the wizard and link wherever you pointed them.
If a feed isn’t loading
Section titled “If a feed isn’t loading”Beacon pulls content from external platforms every time someone visits your page. Occasionally, a platform like YouTube or Substack has downtime. When that happens, Beacon handles it automatically.
If the feed loaded successfully at any point in the past 24 hours, your visitors still see your content. It might be a few hours old, but the card looks and works normally.
If there’s no recent version available (for example, a brand-new feed that hasn’t loaded successfully yet), the card shows your platform name, icon, and a link to your profile. Your visitor can still click through to your channel or page. When the platform recovers, the full card returns on the next page load. No action needed.
Troubleshooting
Section titled “Troubleshooting”If a card isn’t showing your content, open your feed URL directly in a browser:
- YouTube:
https://www.youtube.com/feeds/videos.xml?channel_id=YOUR_CHANNEL_ID - Substack:
https://yourname.substack.com/feed - Podcast: your RSS feed URL
If you see XML content, the feed is working and the issue is likely a configuration typo in the wizard. Double-check your Channel ID, username, or feed URL.
If you see an error, the platform is down. Give it time. Your page is still functional in the meantime.