In the App Router, components run on the server by default. Anything with useState, useEffect or onClick must run in the browser, and you mark that with "use client".
Put it in the carousel file, not the page:
// components/testimonials.tsx
"use client";
import { useState } from "react";
...The page stays a server component, so metadata keeps working, and it can still render <Testimonials />. Rule of thumb: push "use client" as far down the tree as you can.
v0 usually adds the directive itself; it probably got lost when you copied only part of the code.