⚡Kickstart Your OTT App with Zezo UI Kit
Build sleek, high-performance OTT platforms effortlessly using the Zezo OTT UI Kit — a customizable React component library optimized for streaming apps.
Whether you’re using React or Next.js, this guide helps you get started with project setup, installing dependencies, and building modern UIs fast.
✅ Supported Environments
| Framework | Support |
|---|---|
| Next.js | ✅ Fully Supported |
| React | ✅ Fully Supported |
⚠️ Note: Optimized for Next.js 13+ (App Router) and React 18+. Limited support for legacy setups.
1️⃣ Choose Your Setup
Choose a framework to begin:
Next.js
🚀 Next.js Setup
npx create-next-app@latestOn installation, you’ll see the following prompts:
What is your project named? my-app
Would you like to use TypeScript? No / Yes
Would you like to use ESLint? No / Yes
Would you like to use Tailwind CSS? No / Yes
Would you like your code inside a `src/` directory? No / Yes
Would you like to use App Router? (recommended) No / Yes
Would you like to use Turbopack for `next dev`? No / Yes
Would you like to customize the import alias (`@/*` by default)? No / Yes
What import alias would you like configured? @/*After responding to the prompts, create-next-app will automatically create a new directory with the name of your project and install the required dependencies.
⚠️ Important:
Make sure to select Yes for TypeScript when prompted. This ensures that you get the best tooling support, automatic type-checking, and a smoother, error-free development experience.
Step 2: Navigate into your project directory
cd my-app2️⃣ Install Zezo UI Kit
Install the Zezo OTT React UI Kit to use ready-made OTT components like Header, ContentDetails, FavoriteButton, and more.
pnpm
pnpm add @zezosoft/zezo-ott-react-ui-kit3️⃣ Setup React Query
Zezo UI Kit relies on React Query for efficient data fetching, caching, and state management. Follow these steps to set it up globally in your app.
📦 Install React Query
pnpm
pnpm add @tanstack/react-query🔧 Create a React Query Provider
Create a global provider to wrap your entire app and enable caching + devtools.
"use client";
import { ReactNode } from "react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
const queryClient = new QueryClient();
export function ReactQueryProvider({ children }: { children: ReactNode }) {
return (
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
);
}🧩 Usage in App Layout
Wrap your entire application with the ReactQueryProvider component to ensure global caching and mutation handling using React Query.
📂 File: app/layout.tsx
Update your root layout to include the provider:
import { ReactQueryProvider } from "./providers";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>
<ReactQueryProvider>
{/* ✅ Global Providers */}
{/* 🧩 Add your Header, Footer, Toast, etc. here */}
{children}
</ReactQueryProvider>
</body>
</html>
);
}4️⃣ Add Zezo Header
The Header component renders your top navigation bar with categories, settings, and user profile info.
✅ Basic Example
"use client";
import { Header as ZezoOttHeader } from "@zezosoft/zezo-ott-react-ui-kit";
import Link from "next/link";
import { useState } from "react";
import { useRouter } from "next/navigation";
import { useMutation } from "@tanstack/react-query";
import toast from "react-hot-toast";
import { zezoClient } from "@/lib/zezoClient";
interface HeaderProps {
settings: IWebSetting | null;
categories: IGetCategoriesData[] | null;
whoami: IWhoami | null;
}
const Header: React.FC<HeaderProps> = ({
categories = [],
settings,
whoami,
}) => {
const router = useRouter();
const [search, setSearch] = useState("");
const logoutMutation = useMutation({
mutationFn: zezoClient().auth.logout,
onSuccess: () => router.push("/"),
onError: () => toast.error("Logout failed"),
});
return (
<ZezoOttHeader
logo={{
src: settings?.logo || "https://default-logo.png",
alt: "Zezo OTT",
href: "/",
linkComponent: Link,
}}
menu={{
menu: categories,
menuShowLimit: 4,
}}
search={{
value: search,
onChange: (e) => {
setSearch(e.target.value);
router.replace(`/search?q=${encodeURIComponent(e.target.value)}`);
},
}}
profile={{ href: "/phone-login" }}
user={whoami}
onLogout={() => logoutMutation.mutate()}
/>
);
};
export default Header;📋 Header Props
| Prop | Description |
|---|---|
logo | Logo configuration including image URL, alt text, and logout handling |
menu | Category menu options like visible count, slug prefix, and category list |
search | Search input settings – placeholder, value, and input handler |
profile | Profile navigation setup (e.g., avatar dropdown or profile page link) |
user | Current user details (e.g., name, avatar, email) |
onLogout | Function to call when the logout button is clicked |
ℹ️ You can also use
linkComponentto customize routing (next/link,react-router-dom, etc.)
5️⃣ Run Your App
pnpm
pnpm devThis will start the development server. You can now open your browser and go to http://localhost:3000 to see your app live!
💡 Tips for Success
- Use TypeScript for better tooling and developer experience.
- Enable App Router if you’re using Next.js 13+.
- Tailwind CSS works perfectly with the Zezo UI Kit.
- Customize components using
className,slots, andprops. - Check your bundle size and optimize for production.
📚 Explore More
✍️ Made with ❤️ by Naresh Desai