Pulse is a lightweight, self-hosted web application for running interactive live sessions like polls, Q&A, rankings, ratings, and wordclouds. It's built for speed, real-time interactivity, and privacy.
- Real-Time Synchronization: Uses Socket.io to push results instantly to all connected screens.
- Multiple Session Types:
- Wordcloud (Dynamic sizing based on frequency)
- Poll (Single Choice)
- Ranking (Prioritization)
- Rating (5-Star Scale)
- Q&A (Audience questions with upvotes)
- Open Ended (Brainstorming)
- Session Timer: Hosts can set a live countdown that automatically locks the session when time is up.
- Multi-Tenant Architecture: Secure dashboard for multiple users/teachers to manage their own independent sessions.
- Glassmorphism UI: Modern, slick, and highly responsive UI built with Tailwind CSS and Framer Motion.
- Privacy First: Self-hosted on your own infrastructure. No third-party tracking.
- Frontend: React, Vite, Tailwind CSS, Framer Motion, Recharts
- Backend: Node.js, Express, Socket.io, Prisma (SQLite), JWT Authentication
- Infrastructure: Docker & Docker Compose
git clone https://github.com/thefraggle/pulse.git
cd pulseYou can customize the installation by providing environment variables. For a quick start, Pulse will use safe defaults, but for production, you must set your own secrets!
# Backend variables
cp backend/.env.example backend/.env
# Frontend variables
cp frontend/.env.example frontend/.envEdit both .env files to set your own ADMIN_PASSWORD and JWT_SECRET.
docker compose up -d --buildNote: The first time the container starts, Prisma will automatically push the SQLite database schema.
Open your browser and navigate to http://localhost (or your server's IP/Domain).
- Public View:
http://localhost/ - Admin Dashboard:
http://localhost/dashboard(Login usingadminand your configuredADMIN_PASSWORD).
If you want to host Pulse publicly, you might want to link your own Legal Notice (Impressum) and Privacy Policy. Pulse allows you to inject these links dynamically without altering the code.
- Create a
public/impressum.htmlinside thefrontend/directory (These files are ignored by git so your personal data stays private). - Set
VITE_IMPRESSUM_URL=/impressum.htmlin yourfrontend/.env. - Rebuild your docker container. The links will now appear in the footer.
MIT License - Copyright 2026 Daniel Notthoff.