Skip to content

Public story carousel — shared AIOHM component ​

Gap verified before implementation ​

The existing platform offers admin gallery selectors and video-beat editing, not a public ordered story carousel with per-video invitations and share links. This change adds one reusable Blade component and two dependency-free assets. Existing gallery, Muse Ambassador, and answer-intake backends are reused.

Usage ​

Render <x-public-story-carousel :stories="$stories" id="story-film" /> and load /css/public-story-carousel.css and /js/public-story-carousel.js once on that page. Every story supplies: id, short_title, title, eyebrow, description, question, invitation, action, duration_label, video, poster, answer_url, share_url. Use approved public media URLs and escaped server-side story data. Styling uses --psc-green, --psc-cream, and --psc-gold custom properties for branding.

The first chapter is selected unless a valid #story-{id} link selects another. Tabs support arrow/Home/End keys. Switching pauses other players. Videos do not autoplay. Actual ended events mark chapters watched for this visit only; no storage, analytics, points, follower changes, or forced locks are introduced. Shares use the individual story title, question, and supplied canonical URL. Animations respect reduced motion and the layout stacks on small screens.

A local aiohm:story-selected event carries the selected id/title/question for optional companion presentation. The existing Ask Muse widget can include its optional data-story-ref value in a submitted question. A hosting controller must resolve that id against its approved public catalog before adding any context. The native public controller on other sites ignores this optional field.

Integration and validation ​

AdiSaan's catalog and invitations remain in its theme configuration. Audience answers still use EchoSubmissionController and its existing consent/spam guards. No duplicate agent, chat service, carousel library, or publishing backend exists.

Public-site regression tests: 10 passed, 23 assertions. JavaScript syntax and ESLint checks passed. Browser checks verified first-video playback, watched completion, tab selection, chapter-specific answer prompt, deep-link selection, and 390px responsive layout with no horizontal page overflow.

Deploy the component, CSS and JS together. If a public host whitelists asset paths, add only these two exact paths. Load the existing Ask Muse script update and view cache-version change together if selected-story chat context is used. Other sites are not automatically redesigned; opt in by rendering the component.