Guaranteed best solution you will need to
Benefits
Save 100+ dev hours using this Spin The Wheel component rather than building it yourself
Guide users with customizable screens for a dynamic experience.
Our components will adjust according to your 100% of needs, no sacrifice in user experience.
Control text and features via our no-code Spin The Wheel.
Spin The Wheel data is automatically added to the Customer 360.
Our team makes sure that we meet all your demands forever when using our component
Send data from Spin The Wheel directly to your CRM or any other tools
Faster, Smarter Onboarding
PLG OS Spin The Wheel component
Web & Mobile code out of the box
Tracking and cool charts out of the box
Maintenance and bug fixes out of the box
Change any text/data using no code PLG OS Dashboard out of the box
Adding data into customer 360 out of the box
A/B Testing, Personalization, Faster deployment and so much more out of the box
PLG OS Spin The Wheel component
Build everything from scratch
Work with devs, designers, product to build and maintain it
Tracking and building cool charts from the scratch
No Advanced insights & analytics
No A/B testing, personalization
Slower deployment
24/7 customer support
Installation
Follow the installation guide to install Next.js sdk
Go to plg os platform and deploy Spin The Wheel component
copy paste the generated Spin The Wheel code into your project and npm start
Next.js setup
Next.js uses the same @questlabs/react-sdk package as React (version 2.3.0 on npm as of September 2026). App Router pages are Server Components by default, and the SDK bundle does not include a "use client" directive, so load the wheel from your own Client Component.
npm install @questlabs/react-sdkMark the file with "use client" and load the SDK with next/dynamic and ssr: false, so the wheel renders in the browser only.
app/components/SpinWheel.jsx
"use client";
import dynamic from "next/dynamic";
import "@questlabs/react-sdk/dist/style.css";
const QuestProvider = dynamic(
() => import("@questlabs/react-sdk").then((mod) => mod.QuestProvider),
{ ssr: false }
);
const SpinTheWheel = dynamic(
() => import("@questlabs/react-sdk").then((mod) => mod.SpinTheWheel),
{ ssr: false }
);
export default function SpinWheel() {
return (
<QuestProvider apiKey="your-api-key" entityId="your-entity-id" apiType="PRODUCTION">
<SpinTheWheel
userId="your-user-id"
token="your-user-token"
campaignId="your-campaign-id"
/>
</QuestProvider>
);
}The page itself stays a Server Component; only SpinWheel runs on the client.
app/rewards/page.jsx
import SpinWheel from "../components/SpinWheel";
export default function RewardsPage() {
return <SpinWheel />;
}ssr: false only works inside a Client Component, which is why the dynamic() calls live in the file marked "use client", not in the page.QuestProvider and SpinTheWheel as named exports, so each import() picks the export with .then((mod) => mod.Name).apiType is "PRODUCTION" (the default) or "STAGING". The wheel's other props are the same as in React; see the React Spin The Wheel setup.Sources: @questlabs/react-sdk on npm · Next.js docs: Server and Client Components · Next.js docs: Lazy loading (ssr: false, named exports)
Explore expert articles on the latest trends and tips in data
View all Blogs