A live presentation and interactive seminar platform.
Nexra allows a presenter to control a synchronized PDF presentation for an audience. Audience members join via a browser and their view is kept in sync with the presenter's controls in real-time.
- Real-Time Sync: Viewers' slides sync instantly via WebSockets when the host changes slides.
- Audience Dashboard: Real-time view of connected attendees.
- Interactive Modals: Trigger full-screen announcements to all viewers simultaneously.
- Browser-based: Works in the browser across mobile and desktop.
- Presentation Management: Upload, store, and switch between multiple PDF decks.
- Presenter Notes: Presenters can write and view markdown-formatted notes for each slide.
- Frontend: React (Vite), TypeScript, Tailwind CSS, Framer Motion
- Backend: Node.js, Fastify, TypeScript
- Database: SQLite, Prisma ORM
- Real-time: WebSockets
- PDF Rendering: PDF.js
- Node.js 22+
- npm 10+
-
Install dependencies
npm install npm install --prefix backend npm install --prefix frontend
-
Initialize the database
cd backend npx prisma migrate dev --name init npx tsx src/seed.ts cd ..
-
Start the development server
npm run dev
- Frontend Viewer: http://localhost:5173
- Host Dashboard: http://localhost:5173/host (Default login: Sreedev / 12345678)
- Backend API: http://localhost:3001
-
Build the application
npm run build
-
Configure environment variables
Create or edit
backend/.env:NODE_ENV=production PORT=3000 JWT_SECRET=your-secure-random-secret DATABASE_URL="file:../data/database.db" STORAGE_PATH=./storage/presentations TRUST_PROXY=true
-
Deploy database
cd backend npx prisma migrate deploy npx tsx src/seed.ts cd ..
-
Start the server
npm run start
To expose the local server to the internet, you can use a tunnel like Cloudflare:
cloudflared tunnel --url http://localhost:3000backend/: Fastify server, WebSocket handlers, Prisma schema, and API routes.frontend/: React application, UI components, PDF viewer, and WebSocket client.package.json: Root configuration and concurrent start scripts.
- Presentation Library: Upload, select, and delete PDFs.
- Presentation Controls: Start, end, and navigate slides (keyboard + swipe).
- Fullscreen Preview: Preview PDF in fullscreen.
- Black Screen: Toggle black screen for all viewers.
- Reveal: Show a key takeaway modal to all viewers.
- Timer: Presentation stopwatch.
- Presenter Notes: Per-slide notes, auto-saved.
- Audience List: Live attendee table with search and sort.
- Data Export: Download audience data as CSV.
- Database Management: Clear all audience records.
| Key | Action |
|---|---|
→ / ↓ / Space |
Next slide |
← / ↑ |
Previous slide |
B |
Toggle black screen |
F5 |
Start presentation |
Esc |
End presentation |
| Swipe ← | Next slide (mobile) |
| Swipe → | Previous slide (mobile) |
For each audience member, the following is collected during a session:
- Name and Date of Birth
- IP Address and Browser
- Session ID, Join Time, and Last Seen status
MIT