Stories
Stories add an Instagram-style strip of tappable circles to your site. Each story opens a full-screen viewer with auto-advancing slides, progress bars, swipe/keyboard navigation, and an optional call-to-action link on every slide. Comparable story plugins on other platforms sell for around $49/year per site — in jekcms it ships with your license.
Open Plugins → Stories in the admin sidebar. If you don't see it, activate Stories under Plugins first.
Creating a story
- Go to Stories → New Story
- Give it a title — this appears under the circle on your site
- Optionally upload a cover image (the circle thumbnail). If you skip it, the first image slide is used automatically
- Save, then add slides
Slide types
- Images — upload one or many at once; AVIF/WebP conversion is automatic
- Video — MP4 or WebM up to 25 MB; the slide lasts as long as the video, sound is off until the visitor taps the speaker
- Text cards — announcement or promo text on a gradient background, six presets included
- Polls — a question with 2–4 answers; visitors tap to vote and instantly see percentage bars
Every slide can carry a caption, a duration (2–30 s, non-video slides), and a link. Links render as clickable text: the caption or card text itself opens the link, and you can link any single word inside a text with [visible text](https://url) syntax.
Reorder slides and stories with the arrow buttons. Slides you delete also remove their story-specific uploads.
Auto-stories from posts
With Auto-create a story when a post is published enabled (Settings → General), every new post becomes a story automatically: featured image, title, and a "Read Post" link. Auto-stories retire on their own after the configured lifetime (default 7 days), so the strip always shows your freshest content with zero manual work.
Reactions
Visitors can react to any slide with a single tap (🔥 ❤️ 👏) — no login, no cookies, one reaction per slide. Toggle reactions off in Settings if you prefer a quieter strip.
Statistics
The Statistics tab shows, per story: opens, per-slide views (with a 7-day column), link clicks with CTR, reactions, poll results per option, and a completion rate (how many viewers reached the last slide). Use it to see where viewers drop off and which links actually convert.
Scheduling and highlights
- Publish from / Expires at — stories can go live and retire automatically. Expired stories disappear from the strip on their own
- Highlight — a permanent story that never expires. Highlights are pinned to the end of the strip, like Instagram's profile highlights
- Live / Draft — drafts are never shown, so you can prepare a story calmly and publish when ready
Placement — per theme, no code
Under Appearance & Placement you decide where the strip renders:
- Right below the header (recommended)
- Top of the content area
- Very top of the page
- Right above the footer
- After a custom CSS selector — for pixel-precise placement on customized themes
The position is stored per theme: switch themes and each one remembers its own placement. You also choose which pages show the strip — homepage, posts, static pages, and/or archives.
Appearance
Shape (circle or vertical card), size (S/M/L), ring style (classic gradient, solid color, or none), alignment, optional strip heading, and title visibility are all configurable, with a live preview in the settings panel. Circles visitors have already watched turn gray automatically.
Performance
- The strip is rendered server-side — no layout shift, no flash of unstyled content
- The viewer script is a single dependency-free file (~5 KB compressed), loaded deferred and cached for a week
- When no story is live, your pages get zero extra bytes and zero extra requests
- View counts are collected with
sendBeacon— no analytics service, no cookies
View tracking
Each story row in the admin list shows its total views (counted once per visitor per page load). Use it to see which announcements actually get opened.