A real-time interactive classroom application built with React, Vite, and Convex. Create live polling sessions with polls, quizzes, timers, and more for your classroom or presentation.
- π― Interactive Elements: Create polls, multiple choice questions, true/false questions, and text responses
- β±οΈ Timers: Built-in countdown timers for activities
- π₯ Real-time Participation: Students join with simple session codes
- π Live Results: See responses update in real-time
- π Secure Authentication: Anonymous authentication via Convex Auth
- π± Responsive Design: Works on desktop, tablet, and mobile
- Frontend: React 19, Vite, TailwindCSS
- Backend: Convex (serverless backend with real-time database)
- Hosting: Vercel (frontend) + Convex (backend)
- Authentication: Convex Auth
- Node.js 20+
- npm or yarn
- A Convex account (free tier available)
- A Vercel account (free tier available)
-
Clone the repository
git clone https://github.com/JonasWeinert/PollUP.git cd PollUP -
Install dependencies
npm install
-
Set up Convex
npx convex dev
This will:
- Prompt you to log in to Convex
- Create a new project (or link to existing)
- Generate
.env.localwith your development deployment URL - Start the Convex dev server
-
Run the development server
npm run dev
This starts both the frontend (Vite) and backend (Convex) in development mode.
-
Open your browser
- Navigate to
http://localhost:5173 - The app should be running with hot reload enabled
- Navigate to
βββ src/
β βββ components/ # React components
β βββ lib/ # Utility functions
β βββ main.tsx # App entry point
βββ convex/
β βββ schema.ts # Database schema
β βββ sessions.ts # Session management functions
β βββ elements.ts # Interactive element functions
β βββ responses.ts # Response handling functions
β βββ auth.ts # Authentication configuration
βββ public/ # Static assets
βββ dist/ # Build output (generated)
-
Generate a production deploy key
- Go to Convex Dashboard
- Select your project
- Navigate to Settings β Deploy Keys
- Click Generate a deploy key for Production
- Copy the key (starts with
prod:...)
-
Deploy to production
npx convex deploy
-
Connect your GitHub repository to Vercel
- Go to Vercel Dashboard
- Click Add New β Project
- Import your GitHub repository
- Vercel will auto-detect it as a Vite project
-
Configure environment variables in Vercel
- In your Vercel project settings
- Go to Settings β Environment Variables
- Add the following:
Variable Name Value Environment CONVEX_DEPLOY_KEYYour production deploy key from Step 1 Production, Preview, Development VITE_CONVEX_URLYour Convex production URL (e.g., https://your-project.convex.cloud)Production, Preview, Development -
Deploy
- Click Deploy in Vercel
- Your app will be live at
https://your-project.vercel.app
Every push to the main branch automatically triggers deployment:
git add .
git commit -m "Your changes"
git push origin mainWhat happens automatically:
- β Vercel detects the push via GitHub integration
- β
Runs
npx convex deploy(deploys backend, generates API files) - β
Runs
npm run build(builds frontend) - β Deploys to production
No manual deployment needed! π
If you need to deploy manually:
First-time setup:
./deploy.shSubsequent deployments:
./redeploy.shDeploy only backend:
npm run deploy:backendDeploy only frontend:
npm run deploy:frontendThis is a side project born out of frustration with propietary solutions like Mentimeter. Contributionsare very welcome! Here's how to get started:
-
Fork the repository
- Click the "Fork" button on GitHub
- Clone your fork locally
-
Create a feature branch
git checkout -b feature/your-feature-name
-
Make your changes
- Write clean, well-documented code
- Follow the existing code style
- Test your changes locally
-
Commit your changes
git add . git commit -m "feat: Add your feature description"
-
Push to your fork
git push origin feature/your-feature-name
-
Open a Pull Request
- Go to the original repository
- Click "New Pull Request"
- Select your branch
- Describe your changes clearly
Follow Conventional Commits:
feat:- New featurefix:- Bug fixdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
Examples:
git commit -m "feat: Add timer pause functionality"
git commit -m "fix: Resolve participant disconnect issue"
git commit -m "docs: Update deployment instructions"- TypeScript: Use proper typing, avoid
any - React: Use functional components and hooks
- Convex: Follow Convex best practices
- Formatting: Run
npm run lintbefore committing
- Test all features locally with
npm run dev - Verify builds work with
npm run build - Test in different browsers and screen sizes
- For backend changes, test with multiple concurrent users
Good PR practices:
- β Clear, descriptive title
- β Detailed description of changes
- β Reference related issues (e.g., "Fixes #123")
- β Screenshots/GIFs for UI changes
- β Keep changes focused and atomic
- β Ensure CI passes (if configured)
Before submitting:
- Code builds successfully (
npm run build) - No console errors or warnings
- Tested locally in dev and production mode
- Updated documentation if needed
- Followed commit message guidelines
| Command | Description |
|---|---|
npm run dev |
Start development server (frontend + backend) |
npm run build |
Build for production |
npm run lint |
Run TypeScript and ESLint checks |
npm run deploy |
Initial production deployment |
npm run redeploy |
Quick redeployment |
npm run deploy:backend |
Deploy Convex backend only |
npm run deploy:frontend |
Deploy Vercel frontend only |
"Could not resolve convex/_generated/api"
- Ensure
CONVEX_DEPLOY_KEYis set in Vercel - Check that Convex deployment succeeded
- Verify
convex/_generated/folder exists locally (runnpx convex dev)
"Authentication failed"
- Verify your Convex deploy key is correct
- Ensure it's set for the correct environment (Production/Preview)
- Regenerate the key if needed
Changes not reflecting
- Check that
npm run devis running - Ensure
npx convex devis running in the background - Clear browser cache and reload
Database issues
- Check Convex Dashboard for errors
- Verify schema matches your code in
convex/schema.ts - Run
npx convex devto sync schema
- Convex Documentation: https://docs.convex.dev
- Vite Documentation: https://vitejs.dev
- React Documentation: https://react.dev
- TailwindCSS: https://tailwindcss.com
This project is licensed under the MIT License - see the LICENSE file for details.
- π Found a bug? Open an issue
- π‘ Have a feature request? Start a discussion
- π¬ Questions? Check the documentation or ask in discussions
Vibe coded with β€οΈ for educators and presenters