Building your page
Live data and connected accounts
Most widgets show what you type into them. A few can go and fetch it: your follower count, your newest video, the last six films you logged. This chapter covers every one of them, what each needs from you, and — just as importantly — which ones are not available right now.
What Live data does
There is no Connections page in Enchant.ee. Every connector lives inside the widget that uses it. Open your page in the editor, tap the widget, and the sheet titled Edit Widget opens with that widget's controls in it — the connector is one of them.
Six widgets can go and fetch something for you:
- Social Link — a real follower or subscriber count, plus your latest post.
- Stats — up to four big numbers, each one pointed at its own platform.
- Posts — your blog, pulled in from its RSS feed.
- Film log — your recent watches from Letterboxd.
- Bookshelf — a shelf from Goodreads.
- Music — search a song catalogue, or paste a share link and get a player.
The Embed widget belongs in the same chapter but is not a connector: it fetches nothing and renders the other site's own player or card. It has a section at the end.
Two different kinds of freshness
This distinction decides how you work with each one, so it is worth fixing in your head now.
- Handles refresh themselves. Once a Social Link or a Stats row has been fetched once, the number is re-read on the server every time somebody loads your public page. You never have to open the editor again.
- Feeds do not. The Posts, Film log and Bookshelf widgets update only when you press Sync in the editor. Nothing happens on its own.
Note
All seven of those widgets also have a Background color picker, which has nothing to do with connecting anything and is left out of the tables below.
Choose a display style that shows it
This is the commonest disappointment with the whole feature. Fetch worked, the toast said Live data connected, and the widget on the canvas looks exactly the same as before. Nothing is broken — the default display simply does not show numbers.
The field is Display style, a row of four buttons in the social widget's edit sheet.
| Button | What the visitor sees |
|---|---|
| Icon (the default) | The platform icon, with your Label printed under it when the page theme's Icon labels toggle is on, which it is by default. Live data is stored, but none of it is visible. |
| Button | Icon, Label and the Handle field. Live data is still not visible. |
| Stat | The big number, its label, and an optional growth chip. This is the one that shows a follower count. |
| Post | Thumbnail, Post title and Meta, tapping through to the post itself. This is the one that shows your latest post. |
Watch out
Leave Label blank and the widget falls back to a sensible word per platform: subscribers for YouTube and Telegram, members for Discord and Reddit, monthly listeners for Spotify, and followers for everything else.
Disconnecting a handle
Tap the disconnect link next to the green dot. There is no confirmation dialog and no toast — the green line simply goes away.
Watch out
TikTok and Instagram
Neither one can fetch anything at the moment
These two are built differently from the handle connectors, which is why they are stuck: neither platform publishes a follower count you can read from a public profile, so a handle field would have nothing to read. They would need you to authorise Enchant.ee against your own account instead — and that is not switched on here.
Everything else on a TikTok or Instagram widget works normally: the icon, the link, the Display style row, and the Number and Post title fields you fill in yourself. Only the automatic part is missing.
Live numbers in the Stats widget
The Stats widget shows up to four big numbers. Each row can be pointed at one of the same handle-based platforms, so the number keeps itself up to date instead of going stale the week after you typed it.
- Select the Stats widget. Under Stats (up to 4), add your rows — value, label and an optional trend.
- A section called Live sources (optional) appears as soon as one row exists.
- Each row shows its number, a dropdown, and — once you pick a platform — a handle box and a Fetch button.
- The dropdown starts on manual, and a manual row reads typed by hand beside it.
- Type the handle and press Fetch. The button shows an ellipsis while it works.
- Success reads Stat 1 updated — the row's own number — with the value it found.
Watch out
Heads up
twitch and reddit alongside the others, but as with the social widget neither can fetch anything right now — Fetch answers Not available yet.Watch out
handle. Use the shapes from the table earlier in this chapter: @channel for YouTube, you@mastodon.social for Mastodon, an invite link for Discord.| Setting | Where | Type | Values | Default | Plan |
|---|---|---|---|---|---|
| Stats (up to 4) | Edit Widget → Stats | Repeating rows | Value / label / trend, maximum 4 rows | 3 demo rows: 120+ projects, 8 years, 42k followers +12% | All |
| Live sources (optional) — source | Edit Widget → Stats | Dropdown per row | manual · youtube · github · twitch · bluesky · mastodon · discord · reddit · telegram | manual | All |
| Live sources (optional) — handle | Edit Widget → Stats | Text + Fetch | A handle or profile URL. Fetch is disabled while the box is empty | Empty | All |
| Layout | Edit Widget → Stats | 2 buttons | row · grid | row | All |
| Align | Edit Widget → Stats | 2 buttons | left · center | center | All |
| Hero stat (purple accent) | Edit Widget → Stats | Button row | None, or a row number | None | All |
| Count up in view | Edit Widget → Stats | Toggle | On · Off | On | All |
| Dividers between stats | Edit Widget → Stats (row layout only) | Toggle | On · Off | On | All |
Your blog in the Posts widget
The Posts widget can import your writing from an RSS or Atom feed — the standard list of recent posts that nearly every blogging platform publishes. Substack, Medium, Ghost and WordPress all work.
- Select the Posts widget and find Sync from your blog (RSS).
- Paste your feed address. The placeholder shows the shape:
https://you.substack.com/feed. - Press Sync. It reads Syncing with a turning icon while it works.
- Success reads Imported 5 entries with "Entries stay editable — re-sync any time."
Each imported post arrives with its title, its link, the date as Jun 2026, the first category as a tag, and an excerpt cut to 140 characters.
- Up to five posts come across, which matches the widget's own Posts (up to 5) limit.
- Pasting your site address usually works too. If the address you gave is not a feed, it tries again with
/feedon the end. - The address is remembered and pre-filled in the field next time.
Re-syncing replaces the whole list
| Setting | Where | Type | Values | Default | Plan |
|---|---|---|---|---|---|
| Sync from your blog (RSS) | Edit Widget → Posts | Text + Sync | An RSS or Atom feed address, up to 500 characters | The address you last synced | All |
| Title (optional) | Edit Widget → Posts | Text | Free text | Latest writing | All |
| Posts (up to 5) | Edit Widget → Posts | Repeating rows | Title / link / date / tag / excerpt, maximum 5 rows | 3 demo rows | All |
| Feature the first post | Edit Widget → Posts | Toggle | On · Off | On | All |
| Numbered index | Edit Widget → Posts | Toggle | On · Off | Off | All |
| Show dates | Edit Widget → Posts | Toggle | On · Off | On | All |
| Show tags | Edit Widget → Posts | Toggle | On · Off | On | All |
| Tag color | Edit Widget → Posts | 2 buttons | neutral · brand | neutral | All |
Letterboxd in the Film log widget
The Film log widget imports your recent watches, with your own star ratings, straight from your Letterboxd profile.
- Select the Film log widget and find Sync from Letterboxd.
- Type your username,
@username, or the address of your profile —letterboxd.com/usernameis enough. The feed address is worked out for you. - Press Sync.
- Up to six films come across, matching the widget's own limit — the Add film button disappears at six rows.
- What is imported: title, year, your star rating (0 to 5, in halves), and whether it was a rewatch.
- What is not: the liked heart, and rewatch counts above one. Imported rewatches arrive as
×1— bump them with the Rewatch stepper if you want the real number.
Every row stays editable by hand. A film you add yourself starts at rating 3.5, and the rating slider runs 0 to 5 in steps of 0.5.
| Setting | Where | Type | Values | Default | Plan |
|---|---|---|---|---|---|
| Sync from Letterboxd | Edit Widget → Film log | Text + Sync | username · @username · letterboxd.com/username | The address you last synced | All |
| Strip label | Edit Widget → Film log | Text | Free text | Recent watches | All |
| Films | Edit Widget → Film log | Repeating rows | Title / year / rating / rewatch / liked, maximum 6 rows | 3 demo films | All |
| Film rating | Edit Widget → Film log | Slider | 0 to 5, in steps of 0.5 | 3.5 on a row you add | All |
| Rewatch | Edit Widget → Film log | Stepper | 0 to 20, shown as ×N | 0 | All |
| liked | Edit Widget → Film log | Heart toggle | On · Off | Off | All |
| Star style | Edit Widget → Film log | 2 buttons | mono · gold | mono | All |
| Sort | Edit Widget → Film log | 2 buttons | Manual · By rating | Manual | All |
| Show stars | Edit Widget → Film log | Toggle | On · Off | On | All |
| Filmstrip rail | Edit Widget → Film log | Toggle | On · Off | On | All |
Goodreads in the Bookshelf widget
The Bookshelf widget imports a Goodreads shelf — what you are reading, what you have finished, and what is queued up.
- Select the Bookshelf widget and find Sync from Goodreads (shelf RSS).
- Paste either the shelf's RSS address (
goodreads.com/review/list_rss/…) or the ordinary shelf page address (goodreads.com/review/list/<id>?shelf=…), which is converted for you. - Press Sync.
- Up to six books come across — the Add book button disappears at six rows.
- Status is worked out from your shelves:
currently-readingbecomes reading,to-readbecomes queued, and anything else becomes finished. - Your star rating comes across when it is above zero.
- Reading progress does not. Set the percentage yourself with the per-book slider.
Watch out
no entries found — is that a feed URL? — the same message an address that is not a feed produces.A book you add by hand starts as queued, which shows neither slider; switch it to reading for the progress slider or finished for the rating one.
| Setting | Where | Type | Values | Default | Plan |
|---|---|---|---|---|---|
| Sync from Goodreads (shelf RSS) | Edit Widget → Bookshelf | Text + Sync | A list_rss address or an ordinary shelf page address | The address you last synced | All |
| Shelf label | Edit Widget → Bookshelf | Text | Free text | Reading now | All |
| Books | Edit Widget → Bookshelf | Repeating rows | Title / author / status / progress or rating, maximum 6 rows | 3 demo books | All |
| Book status | Edit Widget → Bookshelf | 3 buttons | reading · finished · queued | queued on a row you add | All |
| Book progress | Edit Widget → Bookshelf (reading) | Slider | 0 to 100, shown as a percentage | 0 | All |
| Book rating | Edit Widget → Bookshelf (finished) | Slider | 0 to 5, in steps of 0.5 | 0 | All |
| Sort | Edit Widget → Bookshelf | 2 buttons | Manual · Reading first | Manual | All |
| Show reading progress | Edit Widget → Bookshelf | Toggle | On · Off | On | All |
| Accent progress bar (purple) | Edit Widget → Bookshelf | Toggle | On · Off | On | All |
| Color spines by status | Edit Widget → Bookshelf | Toggle | On · Off | On | All |
The Music widget
The Music widget works two ways, chosen by a pair of buttons at the top of its edit sheet: Search songs and Paste link.
Search songs — a 30-second preview player
- Tap Search songs and type into Find a song (30s preview player).
- Press Search, or press Enter. The button stays disabled until you have typed at least two characters.
- Up to eight results come back, each with artwork, title and artist.
- Tap the one you want. A toast reads Track set, followed by the track name and "30s preview plays right on your page."
- The chosen track appears in a confirmation row with a green on canvas chip.
The panel is honest about what this is: "Search is free (iTunes catalog) — visitors tap play for a 30-second preview, no login needed." Nobody needs an account of any kind to hear it. Tracks with no preview clip are filtered out of the results entirely.
Paste link — an embedded player
- Tap Paste link and paste a share link into Music link.
- A row appears reading Detected: with a chip naming what it recognised —
spotify,soundcloud,youtube,apple, or unknown link. - For Spotify, SoundCloud and YouTube a small auto-fill title link appears on the right. Tap it to read the track title from the provider.
- Optionally fill Caption / now playing (optional) and pick a Caption position.
The link field accepts Spotify, SoundCloud, YouTube and YouTube Music, and Apple Music. Apple Music has no auto-fill — that link is deliberately hidden for it, because Apple publishes no way to read the title. Type it yourself.
The two modes fight, and the last one you touched wins
Watch out
A link nothing recognises renders a placeholder tile reading Music with the hint "Paste a Spotify, SoundCloud, YouTube or Apple Music link" — a useful sign that you pasted a page address rather than a share link.
| Setting | Where | Type | Values | Default | Plan |
|---|---|---|---|---|---|
| Search songs / Paste link | Edit Widget → Music | 2 buttons | Search songs · Paste link | Paste link on a new widget; Search songs once a preview track is set | All |
| Find a song (30s preview player) | Edit Widget → Music (Search songs) | Text + Search | At least 2 characters, up to 120. Enter also searches | Empty | All |
| Music link | Edit Widget → Music (Paste link) | Text | A Spotify, SoundCloud, YouTube, YouTube Music or Apple Music address, up to 500 characters | Empty | All |
| auto-fill title | Edit Widget → Music (Paste link) | Link | Hidden for Apple Music and for an unrecognised link | — | All |
| Caption / now playing (optional) | Edit Widget → Music | Text | Free text, placeholder Latest single | Empty | All |
| Caption position | Edit Widget → Music | 3 buttons | none · top · bottom | bottom when a caption exists, otherwise none | All |
The Embed widget
The Embed widget — its tile in Add a widget is labelled Embed and described YouTube, Insta, Spotify… — is the catch-all for pulling in content from a site that has no widget of its own. Nothing is fetched by us; it renders the other site's own player or card.
The field is Embed link or HTML code, and it takes either. Paste a link (YouTube, Instagram, Spotify, Vimeo, TikTok, Twitter) or the full embed code — the blockquote or iframe markup you copy from the other platform's own embed option. It works out which of the two you gave it.
A Detected: chip names what it recognised: youtube, vimeo, spotify, instagram, tiktok, twitter or custom. A second chip reads HTML embed when you pasted markup. The box grows from two lines to five as soon as your text contains a tag.
| Setting | Where | Type | Values | Default | Plan |
|---|---|---|---|---|---|
| Embed link or HTML code | Edit Widget → Embed | Text area | A share link, or pasted blockquote / iframe markup | Empty | All |
| Caption (optional) | Edit Widget → Embed | Text | Free text, placeholder Shown as a strip below the embed | Empty | All |
| Show caption below embed | Edit Widget → Embed | Toggle | On · Off | On | All |
How often your public page updates
Once a social widget or a stats row has been fetched once, the numbers are refreshed on the server whenever your public page is served. You do not have to open the editor again, and you do not have to publish again.
Three timings decide how fresh that actually is:
- Each platform's answer is cached for one hour. Asking twice inside the hour gets the same figure.
- Your public page is rebuilt at most every 300 seconds — five minutes.
- Each page render gives the refresh 800 milliseconds to come back. If it is slower, that render uses the values already saved.
Put together: a change on YouTube can take roughly an hour, plus a rebuild cycle, to show up on your page. That is normal.
A visitor never sees a blank or an error
Heads up
Three things that look like connectors and are not
Onboarding — Connect your socials
Step three of setup is headed Connect your socials with seventeen boxes to type handles into. Despite the name, nothing is connected: it creates plain social link widgets on your first page. No follower counts, no fetching. A bare handle is turned into that platform's profile address; a full https:// address passes through unchanged.
Watch out
Watch out
Settings — Linked accounts
The Linked accounts card in Settings is a private notepad, and its own subtitle says so: "A private scratchpad, saved on this device. To show links on your page, use the social widget." Even the save toast is worded carefully — it names the platform and then says where it went, as in Instagram saved on this device, never "linked".
- Nothing is sent to the server. It lives in this browser only, so a second device shows an empty list.
- It never appears on your public page. For that you need a social widget.
- The address must be a full one. Anything that does not start with
http://orhttps://is refused with Paste a full link — it should start with https://.
AI Composer — Use my connected accounts
The Composer's Links card offers a button called Use my connected accounts, which turns each account you have linked into a link row. Account linking is the TikTok and Instagram flow from earlier in this chapter, and it is unavailable, so the button has nothing to import and reports No connected accounts yet — link one in Settings. Add your links with Add a link instead.
Watch out
The card holds up to 40 links. Each row takes a label of up to 60 characters and an address of up to 500. Once you have 40, the Add a link button hides itself.
Limits worth knowing
| Limit | Value |
|---|---|
| Fetching or syncing too fast | Briefly refused, then allowed again a moment later |
| How long a platform's answer is cached | 1 hour |
| How long a fetch waits before giving up | 3.5 seconds for a platform, 4.5 for an address you typed |
| Blog posts imported | 5 |
| Films imported | 6 |
| Books imported | 6 |
| Song search results | 8 |
| Stats rows | 4 |
| Latest-post text kept | 90 characters, then an ellipsis |
| Blog excerpt kept | 140 characters |
| Handle length | 200 characters |
| Song search query | At least 2 characters, at most 120 |
| A music link or feed address | 500 characters |
| Size of a feed we will download | Bounded — an unusually large feed is refused rather than downloaded |
| Redirects a feed may go through | A small number of hops; a feed that bounces further is refused |
When something goes wrong
These are the messages this feature can actually produce, and what each one means.
| What you see | What it means and what to do |
|---|---|
| Not available yet — "This platform's API key isn't set up on the server." | That platform cannot fetch anything here. Right now this applies to Twitch and Reddit. Type the number by hand. |
Couldn't fetch live data — channel not found | The handle does not resolve. Check the spelling, and try pasting the full profile address instead of the short handle. |
Couldn't fetch live data — use user@instance format | Mastodon only. Add the instance: you@mastodon.social, or paste the full profile address. |
Couldn't fetch live data — a "chat not found" wording, or channel not found (is the bot an admin?) | Telegram only. The bot has to be an administrator of your channel before it can count members. |
Couldn't fetch live data — Too many requests | You have pressed Fetch or Sync too often in quick succession. Pause for a short while and try again. |
Couldn't fetch live data — HTTP 404 or another HTTP number | The platform answered with an error. Usually a wrong handle; occasionally the platform is having a bad day. Failures are not cached, so retrying costs nothing. |
Fetch failed — no number returned | Stats widget only. The platform answered but had no count to give — a YouTube channel with its subscriber count hidden does this. |
Sync failed — no entries found — is that a feed URL? | The address is not a feed, or the feed is empty or private. Look for the RSS link on your blog; a Goodreads shelf must be public. |
Sync failed — response too large or too many redirects | The feed is too big to download, or bounces through too many addresses. Try the feed's direct address. |
Sync failed — URL not allowed or host not found | The address was refused for safety — it points somewhere private or non-public — or the site does not exist. Check it in a browser first. |
| No results — "Try the song + artist name." | Music search found nothing. Add the artist's name to the song title; it narrows the catalogue a lot. |
| Search failed with an error underneath | The song search itself did not go through. Try again in a moment. |
Couldn't fetch title — no title found | The music provider did not return a title for that link. Type the caption yourself. Apple Music has no auto-fill at all, so the caption is always manual there. |
If a fetch keeps failing on a handle you are sure about, remember that failures are never cached — you can correct the handle and press Fetch again straight away. Successes are cached for an hour, so a number that will not budge is almost always the cache, not a bug.
Still stuck? Email support@enchant.ee.
Something here wrong or missing? Email support@enchant.ee.