MiladJoodi / MeetCast
git clone https://github.com/MiladJoodi/MeetCast.git
A real-time video meeting platform built with Next.js, LiveKit, PostgreSQL, and TypeScript.
+0
stars, 24h · #37,115
+~0
stars, 7 days · #42,570
+78
stars, 30 days · #8,929
78
★ total
2
forks · 0 open issues
Star history (as recorded here)
LanguageTypeScript
License—
Created2026-09-24 (28d ago)
Last push26d ago
Watchers0
OwnerUser
Links
- GitHub: github.com/MiladJoodi/MeetCast
- Homepage: https://Webinari.ir
- Releases · Issues · Hacker News mentions
README excerpt
# MeetCast MeetCast is a video meeting application built with Next.js, LiveKit, PostgreSQL, and TypeScript. You schedule a room, share an invite, and join with camera, mic, screen share, chat, and basic moderation. Plans control participant counts and meeting duration. Private rooms restrict join to allowlisted account emails. **Stack:** Next.js 16 · React 19 · TypeScript · Tailwind CSS 4 · Drizzle · Neon Postgres · LiveKit · Vitest · pnpm 12 In-app docs (after `pnpm dev`): open `/docs` on your local app. --- ## Features ### Meetings - Create / edit rooms with a start and end time - Public or private visibility - Invite links (`inviteCode`) - Allowed-email list for private rooms (no invite emails — share the link yourself) - Participant capacity (plan-driven; SFU hard cap 50) - Status: waiting / active / ended - Host can end a meeting from the dashboard ### Realtime - Camera, microphone, screen share - Participant grid and speaking state - Chat, raise hand, reactions (LiveKit data channel) - Soft LiveKit token refresh before JWT expiry - Reconnect / disconnect banner ### Roles & moderation - Host, moderator, participant, guest (guests only on public rooms) - Mute, disable camera, remove participant - Moderator promote/demote ### Account - Register / login / logout - Database sessions (httpOnly cookie) - Password change, session revoke, account delete - Soft email verification (login works without verifying) - Forgot / reset password (Resend optional) ### Plans & billing - Free / Starter / Pro / Business (seeded in migrations; admins can edit) - Limits: max concurrent participants, max room duration - Checkout → order → payment → idempotent fulfill - ZarinPal when configured; in-app mock gateway in non-production without a merchant - Current migration sets plan prices to **0** IRR so checkout still runs without a gateway ### Admin - Users, rooms, plans, orders, audit logs - Bootstrap admins via `ADMIN_EMAILS` --- Suggested captures: landing, dashboard, rooms, live meeting, plans, private room settings, admin, account settings. --- ## Tech stack | Technology | Purpose | | ---------- | ------- | | Next.js 16 | App Router UI, Server Actions, API routes | | React 19 | Application UI | | TypeScript | Types across app and libs | | Tailwind CSS 4 | Styling | | PostgreSQL / Neon | Persistent data | | Drizzle ORM | Schema + migrations | | LiveKit | Audio, video, screen share, data channel | | `@node-rs/argon2` | Password hashing (Argon2id) | | Zod | Validation | | Vitest | Unit tests | | Resend (HTTP API) | Optional auth email | | ZarinPal | Optional paid checkout | --- ## Architecture [code] **Next.js** owns authentication, room access, plan limits, billing fulfillment, admin actions, and LiveKit token minting. **PostgreSQL** stores durable application data. LiveKit is not the database. **LiveKit** carries AV and lightweight collaboration. Secrets (`LIVEKIT_API_SECRET`, `AUTH_SECRET`, `DATABASE_URL`) stay server-side. There is **no** `middleware.ts`, **