CALLU is a private, invite-only community platform for professionals, creators, and visionaries. It provides high-fidelity voice and video calls, collaborative rooms with real-time chat and a synchronized music player, and a curated member directory — all within an exclusive, manually-reviewed network.
- Curated Access — Applications are reviewed manually; fewer than 1% of applicants are accepted, ensuring a high-trust environment.
- OTP Authentication — Members log in with a one-time code sent to their verified email address. No passwords to remember or leak.
- 1-on-1 Voice & Video Calls — Peer-to-peer calls powered by WebRTC (SimplePeer) with real-time signaling over Socket.IO.
- Community Rooms — Multi-participant voice/video rooms featuring:
- Screen sharing
- Real-time text chat with file attachments (stored via ImageKit, auto-expired)
- Synchronized music player (YouTube-sourced, queue-based, host-controlled)
- Live Presence — See which members are currently online, updated in real time.
- Admin Dashboard — Manage applicants (approve / reject), view members, and oversee the community.
- Settings & Wallet — Member profile customization and wallet management.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) + TypeScript |
| UI | React 19, Tailwind CSS v4, Framer Motion, Lenis |
| Real-time | Socket.IO (server + client) |
| Video/Voice | SimplePeer (WebRTC) |
| Database | MongoDB via Mongoose |
| Email / OTP | Resend |
| File Storage | ImageKit |
| Music | YouTube IFrame API via react-youtube |
| Deployment | Render |
- Node.js ≥ 18
- npm ≥ 9
- A running MongoDB instance (local or Atlas)
- A Resend account with an API key and a verified sender address
- (Optional) An ImageKit account for room chat file attachments
-
Clone the repository
git clone https://github.com/sanks011/callu.git cd callu -
Install dependencies
npm install
-
Configure environment variables
Create a
.envfile in the project root (see Environment Variables below):cp .env.example .env # if an example file exists, otherwise create it manually -
Seed the database (optional — creates sample data)
npm run seed
-
Start the development server
npm run dev
Open http://localhost:3000 in your browser.
Create a .env file at the root of the project with the following variables:
# ── Server ───────────────────────────────────────────────────────────────────
NODE_ENV=development
PORT=3000
# Public base URL (used for absolute links, e.g. in emails)
NEXT_PUBLIC_URL=http://localhost:3000
# ── MongoDB ───────────────────────────────────────────────────────────────────
MONGODB_URI=mongodb://localhost:27017/callu
# ── Admin Credentials ─────────────────────────────────────────────────────────
ADMIN_ID=your_admin_id
ADMIN_PASSWORD=your_admin_password
# ── Email / OTP (Resend) ──────────────────────────────────────────────────────
RESEND_API_KEY=re_xxxxxxxxxxxxxxxxxxxx
RESEND_FROM_EMAIL=noreply@yourdomain.com
# Optional: receives a BCC copy of every OTP email (useful for auditing)
OTP_BCC_EMAIL=audit@yourdomain.com
# ── ImageKit (room chat file attachments) ─────────────────────────────────────
IMAGEKIT_PUBLIC_KEY=public_xxxxxxxxxxxxxxxxxxxx
IMAGEKIT_PRIVATE_KEY=private_xxxxxxxxxxxxxxxxxxxx
IMAGEKIT_URL_ENDPOINT=https://ik.imagekit.io/your_idNote: ImageKit variables are optional. If omitted, room chat file attachments and automatic cleanup of expired uploads are disabled.
| Command | Description |
|---|---|
npm run dev |
Start the development server with hot-reload (via nodemon + ts-node) |
npm run build |
Build the Next.js app and compile the custom server for production |
npm start |
Run the production server (requires npm run build first) |
npm run lint |
Lint the codebase with ESLint |
npm run seed |
Seed the MongoDB database with initial data |
callu/
├── app/ # Next.js App Router pages and API routes
│ ├── admin/ # Admin dashboard
│ ├── api/ # REST API routes (auth, apply, calls, rooms, …)
│ ├── dashboard/ # Member dashboard (members, calls, rooms, settings, wallet)
│ └── page.tsx # Landing page
├── components/ # Shared React components
├── context/ # React context providers (auth, …)
├── lib/ # Server-side utilities (DB, email, config validation)
├── models/ # Mongoose models (User, Room, CallLog, …)
├── public/ # Static assets
├── server.ts # Custom Node.js + Socket.IO server entry point
├── seed.ts # Database seeding script
├── render.yaml # Render deployment configuration
└── next.config.ts # Next.js configuration
The project ships with a render.yaml for one-click deployment on Render.
- Push your code to GitHub.
- Create a new Web Service on Render and connect your repository.
- Render will automatically detect
render.yamland use the configured build (npm install && npm run build) and start (npm start) commands. - Add all required Environment Variables in the Render dashboard under Environment.
Contributions are welcome! Please open an issue or pull request for bug fixes, improvements, or new features. Make sure npm run lint passes before submitting.
Pull requests should follow the template in .github/pull_request_template.md, include a Fixes #<issue-number> reference, and use a conventional PR title such as fix: short summary.