ReactionSaaS
Documentation

Nuxt.js installation (ReactionSDK)

Load sdk.js from a client-only Nuxt plugin, then render reaction-video for ReactionSDK overlays (tap, poll, rating, slider, and CTA).

Vue SPA without Nuxt: Vue guide. ReactifySDK threads: ReactifySDK Nuxt installation.

1) Runtime config

nuxt.config.ts
// nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    public: {
      reactionApiKey: process.env.NUXT_PUBLIC_REACTION_API_KEY || "",
      reactionAccountId: process.env.NUXT_PUBLIC_REACTION_ACCOUNT_ID || "",
    },
  },
});

2) Client plugin

plugins/reaction-sdk.client.ts
// plugins/reaction-sdk.client.ts
export default defineNuxtPlugin(() => {
  if (import.meta.server) return;
  const src = "https://reactify-cdn.s3.us-east-2.amazonaws.com/sdk.js?v=2.0.8";
  if (document.querySelector(`script[src="${src}"]`)) return;

  const config = useRuntimeConfig();
  const s = document.createElement("script");
  s.src = src;
  s.async = true;
  s.onload = () => {
    const apiKey = config.public.reactionApiKey as string | undefined;
    const accountId = config.public.reactionAccountId as string | undefined;
    if (!apiKey?.trim()) return;
    (window as any).Reactify?.init?.({
      apiKey,
      accountId,
      baseUrl: "https://api.reactionsaas.com",
      mode: "production",
      allowedOrigins: [window.location.origin],
    });
  };
  document.body.appendChild(s);
});

3) Component + page

ReactionVideo.vue
<!-- components/ReactionVideo.vue — client-only custom element -->
<template>
  <reaction-video
    :src="src"
    overlays="tap,poll,slider,rating"
    poll-question="Which style do you prefer?"
    cta-text="Buy Now"
    overlay-position="bottom-center"
    interaction-type="tap"
  />
</template>

<script setup lang="ts">
defineProps<{ src: string }>();
</script>
pages/index.vue
<!-- pages/index.vue -->
<template>
  <ClientOnly>
    <ReactionVideo src="https://yourcdn.com/video.mp4" />
  </ClientOnly>
</template>
Run in Playground
<reaction-video src="video.mp4" overlays="tap,poll,rating,slider,cta" cta-text="Buy Now" interaction-type="rating"></reaction-video>

Try this config in the Playground.

4) View analytics

Try it live

Preview overlay interactions on a sample video (same demo as the docs playground).

Rate:
ReactionSDK demo