A full-stack quiz platform where teachers create quizzes (with AI), students play them, and results are tracked.
# Install all dependencies
cd wayground
npm run install:all
cd backend
cp .env.example .env
Edit .env:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/wayground
# OR for Atlas: mongodb+srv://<user>:<pass>@cluster.mongodb.net/wayground
JWT_SECRET=any_long_random_string_here
JWT_EXPIRE=7d
GEMINI_API_KEY=your_key_from_aistudio_google_com
# Terminal 1 — Backend
cd backend && npm run dev
# Terminal 2 — Frontend
cd frontend && npm run dev
Open http://localhost:5173 🎉
wayground/
├── backend/ # Node.js + Express API
│ └── src/
│ ├── models/ # Mongoose schemas
│ │ ├── User.js # Auth + roles
│ │ ├── Quiz.js # Quiz + questions
│ │ └── Result.js # Scores + answers
│ ├── routes/
│ │ ├── auth.js # /api/auth/*
│ │ ├── quiz.js # /api/quizzes/*
│ │ ├── result.js # /api/results/*
│ │ └── ai.js # /api/ai/generate
│ ├── middleware/
│ │ └── auth.js # JWT + role guard
│ └── server.js # Entry point
│
└── frontend/ # React + Vite + Tailwind
└── src/
├── pages/
│ ├── Landing.jsx
│ ├── Login.jsx
│ ├── Register.jsx
│ ├── Dashboard.jsx # Teacher & Student views
│ ├── CreateQuiz.jsx # + AI generator
│ ├── EditQuiz.jsx
│ ├── PlayQuiz.jsx # Timer + question flow
│ ├── Results.jsx # Score + review
│ └── MyResults.jsx # Student history
├── components/
│ └── Navbar.jsx
├── context/
│ └── AuthContext.jsx # Global auth state
└── api/
└── index.js # Axios instance
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register |
— | Create account |
| POST | /api/auth/login |
— | Login |
| GET | /api/auth/me |
✓ | Current user |
| GET | /api/quizzes |
✓ | All published quizzes |
| GET | /api/quizzes/my |
Teacher | My quizzes |
| POST | /api/quizzes |
Teacher | Create quiz |
| PUT | /api/quizzes/:id |
Teacher | Edit quiz |
| DELETE | /api/quizzes/:id |
Teacher | Delete quiz |
| POST | /api/results/submit |
Student | Submit quiz |
| GET | /api/results/my |
Student | My history |
| GET | /api/results/quiz/:id |
Teacher | Quiz leaderboard |
| POST | /api/ai/generate |
Teacher | AI question gen |
Uses Google Gemini 1.5 Flash (free, 1M tokens/day).
.env as GEMINI_API_KEY| Layer | Tech |
|---|---|
| Frontend | React 18 + Vite + Tailwind CSS |
| Backend | Node.js + Express |
| Database | MongoDB + Mongoose |
| Auth | JWT (jsonwebtoken + bcryptjs) |
| AI | Google Gemini 1.5 Flash |
| Icons | Lucide React |
| Fonts | Syne + DM Sans |