Cream is a modern, real-time messaging and video calling web app built with Next.js, React and Convex. It bundles a polished UI (Tailwind + Radix), in-app video/voice using Stream Video SDK, realtime data via Convex, and authentication with Clerk.
- Real-time messaging and presence
- Video calling and meeting rooms (Stream Video SDK integration)
- Authenticated routes and user management via Clerk
- Responsive, accessible UI components built with Radix and Tailwind CSS
- Convex for realtime backend and data syncing
- TypeScript-first developer experience
- Next.js 16 (React 19)
- React + TypeScript
- Tailwind CSS (v4) + Radix UI primitives
- Convex (realtime backend)
- Stream Video & Stream Chat
- Clerk for authentication
- Zod + react-hook-form for validation/forms
Prerequisites:
- Node.js 18+ (or newer LTS)
- npm or pnpm
Install and run locally:
# install
npm install
# run development server
npm run devOpen http://localhost:3000 after the dev server starts.
Notes:
- This project uses Convex for realtime storage. If you run a local Convex dev environment, start it before running the Next dev server. See the Convex docs for
convex devusage. - Some features require API/service keys (Stream, Clerk). Provide the required env variables in a .env.local file. Example env names are listed below.
Create a .env.local (not committed) and add keys required by your setup. Typical variables used by apps like this include:
- NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
- CLERK_SECRET_KEY
- CONVEX_URL (or use local
convex dev) - STREAM_API_KEY and STREAM_API_SECRET (for Stream Video/Chat - only on server)
Adjust names and usage to match the project's actions and provider setup.
app/- Next.js app directory (routes, layouts, pages)dashboard/- main authenticated area and video call routes
components/- shared UI components (header, sidebar, cards, etc.)components/ui/- design system and primitives (Radix wrappers, form controls)convex/- Convex functions, schema and generated clientlib/- helpers, stream server utilities, custom logichooks/- custom React hooksactions/- server actions, background tasks
This repo follows a feature-first layout inside app/, with a design system in components/ui for reuse.
- Linting:
npm run lint(uses ESLint) - Build for production:
npm run.buildandnpm run startto run the compiled app - Tailwind v4 is configured; adjust
globals.cssif adding new utilities - Use
use-debounce,use-...hooks inhooks/for optimized UI behavior. There are some TODOs in the code (e.g., sidebar hover scaling) — check components for small UI fixes.
The project includes a convex/ folder with schema and generated files. Typical workflow:
- Install and login to Convex CLI (if you need local dev): https://convex.dev
- Run
convex devfor local development (if you rely on a local Convex instance) - Deploy Convex functions when ready:
convex deploy(refer to your Convex project docs)
Clerk is included (@clerk/nextjs). See the provider/ and components files for integration points. Configure Clerk keys in env variables to enable login, user sync and protected routes.
Stream Video SDK is used for calls. Check lib/stream.ts and lib/streamServer.ts for helper functions and server-side token generation.
Contributions are welcome! Suggested workflow:
- Fork the repo
- Create a feature branch
- Add tests for new behavior where practical
- Open a PR with a clear description of the change
Please keep changes small and focused. If adding a new service integration, document required env variables and setup steps.
- If pages fail to load, confirm
npm installcompleted without errors and that required env variables are present. - If Convex-related errors appear, start local Convex or confirm remote Convex URL is correct.
This repo doesn't declare a license file. If you want to add one, a popular choice is the MIT license. Add LICENSE to the repo and update this section.
If you want me to tailor the README further (add screenshots, CI/CD, or exact env variable names and examples), tell me which parts you want and I will update the file.