About this project
Vouzot is a Louisiana-focused Learning Management System — think Masterclass but rooted in South Louisiana culture. The platform lets content creators upload and manage video course curricula teaching Louisiana cooking, Cajun and jazz music, French dialects, Creole, Kouris Vini, and Cajun French. Students enroll in structured courses, track progress, and book one-on-one video mentor sessions with instructors. Features a built-in live chat support system (non-AI), newsletter subscription, and a full instructor directory. Co-founded with Dr. Daniel DeKerlegand (PhD in AI), with planned AI integration for the language learning modules. Built with Next.js 14 App Router, Mux video streaming, Stripe subscriptions, Stream video SDK for mentor sessions, and Socket.io for real-time features. Currently in active development at vouzot-test.vercel.app — not yet publicly launched.
Technology & Features
- Tailwind CSS
- Next.js 14 (App Router)
- Zustand
- TypeScript
- Zod
- React Hook Form
- MongoDB
- Shadcn UI
- Framer Motion
- GSAP
- TanStack Table
- Stripe
- Docker
- Prisma ORM
- NextAuth v5
- Socket.io
- Stream Video SDK
- UploadThing
# package.json{
"dependencies": {
"@auth/prisma-adapter": "1.0.12",
"@chromatic-com/storybook": "^1.6.1",
"@fontsource/kaushan-script": "^5.0.21",
"@fontsource/sirin-stencil": "^5.0.19",
"@gsap/react": "^2.1.1",
"@hello-pangea/dnd": "^16.6.0",
"@hookform/resolvers": "^3.3.4",
"@mux/mux-node": "7.3.2",
"@mux/mux-player-react": "2.2.0",
"@nextui-org/checkbox": "^2.0.25",
"@nextui-org/chip": "^2.0.28",
"@nextui-org/progress": "^2.0.25",
"@nextui-org/skeleton": "^2.0.24",
"@nextui-org/spinner": "^2.0.30",
"@nextui-org/system": "^2.0.15",
"@nextui-org/theme": "^2.1.18",
"@nextui-org/tooltip": "^2.0.30",
"@prisma/client": "^5.11.0",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-alert-dialog": "^1.0.5",
"@radix-ui/react-avatar": "^1.0.4",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-popover": "^1.1.1",
"@radix-ui/react-scroll-area": "^1.1.0",
"@radix-ui/react-select": "^2.0.0",
"@radix-ui/react-separator": "^1.0.3",
"@radix-ui/react-slot": "^1.0.2",
"@radix-ui/react-switch": "^1.0.3",
"@radix-ui/react-toast": "^1.1.5",
"@radix-ui/react-toggle": "^1.1.0",
"@radix-ui/react-tooltip": "^1.0.7",
"@storybook/addon-essentials": "^8.2.2",
"@storybook/addon-interactions": "^8.2.2",
"@storybook/addon-links": "^8.2.2",
"@storybook/addon-onboarding": "^8.2.2",
"@storybook/addon-themes": "^8.2.2",
"@storybook/addons": "^7.6.17",
"@storybook/blocks": "^8.2.2",
"@storybook/nextjs": "^8.2.2",
"@storybook/react": "^8.2.2",
"@storybook/test": "^8.2.2",
"@storybook/theming": "^8.2.2",
"@stream-io/node-sdk": "^0.1.13",
"@stream-io/video-react-sdk": "^0.5.12",
"@stripe/stripe-js": "^3.2.0",
"@tanstack/react-table": "^8.15.3",
"@testing-library/dom": "^10.3.1",
"@testing-library/jest-dom": "^6.4.6",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2",
"@tiptap/extension-heading": "^2.4.0",
"@tiptap/pm": "^2.4.0",
"@tiptap/react": "^2.4.0",
"@tiptap/starter-kit": "^2.4.0",
"@types/bcryptjs": "^2.4.6",
"@types/locomotive-scroll": "^4.1.3",
"@types/node": "^20.12.2",
"@types/react": "^18.2.73",
"@types/react-datepicker": "^6.2.0",
"@types/react-dom": "^18.2.23",
"@types/uuid": "^9.0.8",
"@uploadthing/react": "^5.5.0",
"autoprefixer": "^10.4.19",
"axios": "^1.6.8",
"bcryptjs": "^2.4.3",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"eslint": "^8.57.0",
"eslint-config-next": "14.1.4",
"eslint-plugin-storybook": "^0.8.0",
"framer-motion": "^11.0.24",
"gsap": "^3.12.5",
"input-otp": "^1.2.4",
"lenis": "^1.0.44",
"locomotive-scroll": "5.0.0-beta.8",
"lucide-react": "^0.364.0",
"next": "14.1.4",
"next-auth": "5.0.0-beta.4",
"next-themes": "^0.3.0",
"postcss": "^8.4.38",
"prisma": "^5.11.0",
"query-string": "^9.0.0",
"react": "^18.2.0",
"react-confetti": "^6.1.0",
"react-datepicker": "^6.6.0",
"react-dom": "^18.2.0",
"react-hook-form": "^7.51.2",
"react-hot-toast": "^2.4.1",
"react-icons": "^5.0.1",
"react-locomotive-scroll": "^0.2.0",
"react-quill": "^2.0.0",
"react-spinners": "^0.13.8",
"react-type-animation": "^3.2.0",
"react-use-measure": "^2.1.1",
"recharts": "^2.12.4",
"resend": "^3.2.0",
"socket.io": "^4.7.5",
"socket.io-client": "^4.7.5",
"storybook": "^8.2.2",
"stripe": "^14.24.0",
"tailwind-merge": "^2.2.2",
"tailwindcss": "^3.4.3",
"tailwindcss-animate": "^1.0.7",
"ts-node": "^10.9.2",
"typescript": "^5.4.3",
"uploadthing": "^5.5.3",
"uuid": "^9.0.1",
"zod": "^3.22.4",
"zustand": "^4.5.2"
}
}Environment
Make sure to add these to either local.env or .env file
# .env


