Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
238 commits
Select commit Hold shift + click to select a range
705e985
Added dynamic background
tildetilde Aug 5, 2025
b4a6d73
Deleted shaders
tildetilde Aug 6, 2025
bd7abba
Merge pull request #1 from tildetilde/file-structure
tildetilde Aug 6, 2025
355602c
Create TODO.md
tildetilde Aug 6, 2025
41ac672
Merge branch 'main' of https://github.com/tildetilde/project-final
tildetilde Aug 6, 2025
ed00c77
basic backend set up
Idahel Aug 6, 2025
05db2e8
Merge pull request #2 from tildetilde/backend-set-up
Idahel Aug 6, 2025
4a47736
Design setup
tildetilde Aug 6, 2025
5564d7a
Merge branch 'main' of https://github.com/tildetilde/project-final
tildetilde Aug 6, 2025
8b1d271
tailwind fix
tildetilde Aug 6, 2025
cb09c44
tailwind config
tildetilde Aug 6, 2025
555b654
tailwind config
tildetilde Aug 6, 2025
3704246
config taiwlind
tildetilde Aug 6, 2025
50764cb
design test
tildetilde Aug 6, 2025
04c84c5
tailwind setup
tildetilde Aug 6, 2025
a3f7784
added ui components
tildetilde Aug 6, 2025
28820ce
tailwind config
tildetilde Aug 6, 2025
e92c5e7
Design system
tildetilde Aug 6, 2025
b9775df
Merge pull request #3 from tildetilde/creating-ui-parts
tildetilde Aug 6, 2025
12c643d
Building pages
tildetilde Aug 7, 2025
c395ff6
Added routes
tildetilde Aug 7, 2025
0b49f97
STyled playing cards
tildetilde Aug 7, 2025
daf29e0
Merge pull request #4 from tildetilde/styling-TimeLineCard
tildetilde Aug 7, 2025
9c8a3ea
Login file setup
tildetilde Aug 7, 2025
ba758ff
Merge pull request #5 from tildetilde/login-modal
tildetilde Aug 7, 2025
0991243
backend before refactoring
Idahel Aug 11, 2025
8332029
Merge pull request #6 from tildetilde/connect-spotify-api
Idahel Aug 11, 2025
3293df5
Login modal up
tildetilde Aug 11, 2025
119859f
Merge pull request #7 from tildetilde/login-modal
tildetilde Aug 11, 2025
0ddb1ae
Added orientation guard
tildetilde Aug 11, 2025
90aa8a6
Merge pull request #8 from tildetilde/game-mode
tildetilde Aug 11, 2025
5c6f806
login backend + frontend
Idahel Aug 11, 2025
168604a
Game mode update
tildetilde Aug 11, 2025
eeea765
Merge pull request #9 from tildetilde/game-mode
tildetilde Aug 11, 2025
90a1dbc
Add token status endpoint and enhanced token management
Idahel Aug 11, 2025
b4b8f3a
Merge branch 'main' into connect-login
Idahel Aug 11, 2025
76c9e49
Merge pull request #10 from tildetilde/connect-login
Idahel Aug 11, 2025
f0b76c2
improving game mode
tildetilde Aug 11, 2025
6b81e9c
Merge pull request #11 from tildetilde/game-mode
tildetilde Aug 11, 2025
9f6bc43
frontend
Idahel Aug 11, 2025
c333a5c
Merge pull request #12 from tildetilde/connect-login
Idahel Aug 11, 2025
432f0d3
trying to fix sign in
Idahel Aug 11, 2025
8f7520b
Merge pull request #13 from tildetilde/fix-login
Idahel Aug 11, 2025
b81794b
trying to make authflow correct
Idahel Aug 12, 2025
b2f44f8
Merge pull request #14 from tildetilde/auth-fix
Idahel Aug 12, 2025
3e8ad31
spotify auth fixed
Idahel Aug 12, 2025
567873f
Merge pull request #15 from tildetilde/spotify-auth
Idahel Aug 12, 2025
40411ca
Update package.json
tildetilde Aug 13, 2025
907d713
Mockup data and improved timeline
tildetilde Aug 13, 2025
d26408a
Merge pull request #16 from tildetilde/improving-game-mode
tildetilde Aug 13, 2025
a36e8e5
Adjusting currentCard being draggable
tildetilde Aug 13, 2025
b7ced59
Merge pull request #17 from tildetilde/improving-game-mode
tildetilde Aug 13, 2025
fd62ce4
improved drag and drop for timeline
tildetilde Aug 14, 2025
d840447
Merge pull request #18 from tildetilde/improving-game-mode
tildetilde Aug 14, 2025
6dfd3c1
Improved start card logic
tildetilde Aug 14, 2025
04590e6
Merge pull request #19 from tildetilde/improving-game-mode
tildetilde Aug 14, 2025
54a4487
Option to change position in Timeline
tildetilde Aug 14, 2025
6d7ebb4
Merge pull request #20 from tildetilde/improving-game-mode
tildetilde Aug 14, 2025
c45eff6
Visual Feedback for right and wrong
tildetilde Aug 14, 2025
66674be
Merge pull request #21 from tildetilde/feedback-for-right-and-wrong
tildetilde Aug 14, 2025
cc43700
Logic for points
tildetilde Aug 14, 2025
8de2d6c
Merge pull request #22 from tildetilde/points-logic-for-team
tildetilde Aug 14, 2025
5dcc5c6
cleaned up index.tserror handling
Idahel Aug 14, 2025
72bd3d3
Merge pull request #23 from tildetilde/check-auth
Idahel Aug 14, 2025
7de28f7
New loading page
tildetilde Aug 14, 2025
5adf4a1
Merge pull request #24 from tildetilde/new-loading-page
tildetilde Aug 14, 2025
53dda33
Erasing mockup sign in
tildetilde Aug 18, 2025
fb59566
Merge pull request #25 from tildetilde/reset-of-mockup
tildetilde Aug 18, 2025
d9d6f3e
Updated
tildetilde Aug 18, 2025
9130b40
Merge pull request #26 from tildetilde/reset-of-mockup
tildetilde Aug 18, 2025
337572a
New intro and home
tildetilde Aug 18, 2025
67a66e3
Merge pull request #27 from tildetilde/creating-landing-page
tildetilde Aug 18, 2025
4b5944f
Hard reset to mack data
tildetilde Aug 18, 2025
40c7a42
Merge remote-tracking branch 'origin/main' into restore-loading-page
tildetilde Aug 18, 2025
c6312a8
Merge pull request #28 from tildetilde/restore-loading-page
tildetilde Aug 18, 2025
0fe4e54
Using own data in timeline
tildetilde Aug 18, 2025
c6af1a6
Merge pull request #29 from tildetilde/new-game-mode
tildetilde Aug 18, 2025
ddd567c
Using own data with no mockup data
tildetilde Aug 18, 2025
0ded019
Merge pull request #30 from tildetilde/new-game-mode
tildetilde Aug 18, 2025
c9dffc1
Improved design
tildetilde Aug 20, 2025
1b1aef1
Merge pull request #31 from tildetilde/new-game-mode
tildetilde Aug 20, 2025
a3442ac
Improved design
tildetilde Aug 20, 2025
7d5a4da
Merge pull request #32 from tildetilde/design-of-game-mode
tildetilde Aug 20, 2025
f233787
changed backend from using spotify api and auth to our own quiz data
Idahel Aug 20, 2025
8b2535a
Merge pull request #33 from tildetilde/backend-clean-up
Idahel Aug 20, 2025
0774fa3
Approved corner layout of gamemode
tildetilde Aug 20, 2025
354a2e6
Merge pull request #34 from tildetilde/design-of-game-mode
tildetilde Aug 20, 2025
e2dba60
Updated design of timeline
tildetilde Aug 20, 2025
c4b2b07
Merge pull request #35 from tildetilde/design-of-game-mode
tildetilde Aug 20, 2025
ad6dd29
Update GameMode.tsx
tildetilde Aug 21, 2025
5dab5ef
Merge pull request #36 from tildetilde/improving-timeline
tildetilde Aug 21, 2025
35d0f3b
added question and isViseble to api response
Idahel Aug 21, 2025
0ad544f
Merge pull request #37 from tildetilde/connect-frontend-backend
Idahel Aug 21, 2025
c37ab87
Erased old API leftovers (artist, TrackCard etc)
tildetilde Aug 21, 2025
4ebc7e6
Merge pull request #38 from tildetilde/deleting-all-from-sptoify-api
tildetilde Aug 21, 2025
8f698aa
clean up
Idahel Aug 21, 2025
07e986f
clean up
Idahel Aug 21, 2025
b15e9b2
Merge pull request #39 from tildetilde/clean-up-backend
Idahel Aug 21, 2025
b244b2a
Added coastline
tildetilde Aug 21, 2025
fc25540
Merge pull request #40 from tildetilde/tilde-backend-and-frontend
tildetilde Aug 21, 2025
b989d30
frontend and backend connected
Idahel Aug 21, 2025
f4c5284
Merge pull request #41 from tildetilde/set-up-connection-frontend-bac…
Idahel Aug 21, 2025
f40a781
updated timeline card, current card and gameMode view
Idahel Aug 21, 2025
b04df17
Merge pull request #42 from tildetilde/fix-category-cards
Idahel Aug 21, 2025
9b5a178
updated data
Idahel Aug 21, 2025
e341903
Merge pull request #43 from tildetilde/max-10-card-win
Idahel Aug 21, 2025
bd8ba7f
added random logic for item card render using shuffle
Idahel Aug 21, 2025
c3bd262
Merge pull request #44 from tildetilde/game-logic
Idahel Aug 21, 2025
60ca583
Home have categories
tildetilde Aug 21, 2025
ef7a5ed
Merge pull request #45 from tildetilde/improve-home-page
tildetilde Aug 21, 2025
019c86d
Added placeholder game settings
tildetilde Aug 21, 2025
cec2270
Merge pull request #46 from tildetilde/improve-home-page
tildetilde Aug 21, 2025
148cb3d
removed unused import
Idahel Aug 22, 2025
7fc20f7
Merge pull request #47 from tildetilde/game-board-width
Idahel Aug 22, 2025
5ff72f7
admin page to delete, edit and create new data to quiz
Idahel Aug 22, 2025
23391b7
Merge pull request #48 from tildetilde/admin-page
Idahel Aug 22, 2025
e026424
game settings up and running
tildetilde Aug 22, 2025
208b0e6
Merge pull request #49 from tildetilde/tilde-game-settings
tildetilde Aug 22, 2025
0e65735
Update GameMode.tsx
tildetilde Aug 22, 2025
d2e2b60
Merge pull request #50 from tildetilde/game-mode-fix
tildetilde Aug 22, 2025
a2b85ad
Improving Timer logic
tildetilde Aug 22, 2025
23bfa40
Merge pull request #51 from tildetilde/imporivng-game-settings
tildetilde Aug 22, 2025
ccf1804
Created Winner function
tildetilde Aug 22, 2025
cd81355
Merge pull request #52 from tildetilde/tilde-winner-function
tildetilde Aug 22, 2025
38a2a99
Current team showing in game mode
tildetilde Aug 25, 2025
022adee
Merge pull request #53 from tildetilde/tilde-gamesettings-polish
tildetilde Aug 25, 2025
f0ff350
Winner feedback
tildetilde Aug 25, 2025
b0e0730
Merge pull request #54 from tildetilde/tilde-gamesettings-polish
tildetilde Aug 25, 2025
ced815f
added game reset and confirmation pop up for homepage link on game mo…
Idahel Aug 25, 2025
133894a
Merge pull request #55 from tildetilde/reset-game
Idahel Aug 25, 2025
2751bb0
Winner feedback + options after game is over
tildetilde Aug 25, 2025
fa7a654
Merge pull request #56 from tildetilde/tilde-gamesettings-polish
tildetilde Aug 25, 2025
e66990d
Limiting intro using session storage
tildetilde Aug 25, 2025
9b48908
Merge pull request #57 from tildetilde/tilde-set-intro-as-done
tildetilde Aug 25, 2025
6593c82
changed team names in game settings
tildetilde Aug 25, 2025
4765fa8
Merge pull request #58 from tildetilde/timeline-look
tildetilde Aug 25, 2025
e226024
less wide timeline
tildetilde Aug 25, 2025
171fc9c
Merge pull request #59 from tildetilde/tilde-timeline-width
tildetilde Aug 25, 2025
2930c67
added deployed backend URL
Idahel Aug 25, 2025
ce432f3
Merge pull request #60 from tildetilde/use-deployed-backend
Idahel Aug 25, 2025
b8c4df7
Update GameBoard.tsx
tildetilde Aug 25, 2025
093e91e
added netlify redirects and toml
Idahel Aug 25, 2025
cfa7401
Merge pull request #61 from tildetilde/check-admin
Idahel Aug 25, 2025
01eb30d
changed netlify toml
Idahel Aug 25, 2025
d48ddfa
Merge pull request #62 from tildetilde/netlify
Idahel Aug 25, 2025
6c58fae
Implemented spinner
tildetilde Aug 25, 2025
c99c5c6
Merge pull request #63 from tildetilde/tilde-loading-spinner
tildetilde Aug 25, 2025
25789f5
new intro
tildetilde Aug 25, 2025
e7b9a42
Merge pull request #64 from tildetilde/tilde-itnro
tildetilde Aug 25, 2025
ee394a3
improved intro
tildetilde Aug 25, 2025
1df1be4
Merge pull request #65 from tildetilde/tilde-itnro
tildetilde Aug 25, 2025
86e7a60
improved intro and home screen
tildetilde Aug 25, 2025
5cb1381
Merge pull request #66 from tildetilde/tilde-itnro
tildetilde Aug 25, 2025
2b0ca84
new width to game settings container
Idahel Aug 26, 2025
f97d94e
Merge pull request #67 from tildetilde/game-settings-update
Idahel Aug 26, 2025
1b03d45
Update banganzalogo.svg
tildetilde Aug 26, 2025
47e86b7
Merge pull request #68 from tildetilde/tilde-itnro
tildetilde Aug 26, 2025
8644cd9
adjusted card sizes
Idahel Aug 26, 2025
ea3aa4a
Merge pull request #69 from tildetilde/timeline-cards-resize
Idahel Aug 26, 2025
d3b768d
removed dots from the header, changed scaling on current card and tim…
Idahel Aug 26, 2025
fe63e23
Merge pull request #70 from tildetilde/remove-dot-pattern
Idahel Aug 26, 2025
125e30a
New category look
tildetilde Aug 26, 2025
1866eab
Merge pull request #71 from tildetilde/tilde-new-category-cards
tildetilde Aug 26, 2025
d5ef2d0
resized cards: timeline, current card. Changed size on heading, remov…
Idahel Aug 27, 2025
a24612e
Merge pull request #72 from tildetilde/restore-cards
Idahel Aug 27, 2025
16b1acd
game reset when choosing new category
Idahel Aug 27, 2025
966c23d
Merge pull request #73 from tildetilde/reset-game-when-finished
Idahel Aug 27, 2025
238f3c1
new icons and question names
tildetilde Aug 27, 2025
b434abe
Merge pull request #74 from tildetilde/tilde-category-card
tildetilde Aug 27, 2025
3c745ae
changed gap
Idahel Aug 27, 2025
40747ed
Merge pull request #75 from tildetilde/fix-spacing-drag-and-drop
Idahel Aug 27, 2025
db87684
improved home
tildetilde Aug 27, 2025
cc48f77
Merge pull request #76 from tildetilde/tilde-category-card
tildetilde Aug 27, 2025
edf6e55
icons - kebab-case to camelCase
Idahel Aug 27, 2025
8301e2b
Merge pull request #77 from tildetilde/error-fix
Idahel Aug 27, 2025
c31ebb7
added better game feedback
Idahel Aug 27, 2025
fd1758a
Merge pull request #78 from tildetilde/game-feedback
Idahel Aug 27, 2025
7daeaf7
changed card font to mono
Idahel Aug 27, 2025
92226b3
Merge pull request #79 from tildetilde/game-design
Idahel Aug 27, 2025
88820a8
improved home
tildetilde Aug 27, 2025
5c2f8aa
Merge pull request #80 from tildetilde/tilde-improving-home
tildetilde Aug 27, 2025
38020fb
improved layout
tildetilde Aug 27, 2025
1649c8d
Merge pull request #81 from tildetilde/tilde-design-improvements
tildetilde Aug 27, 2025
1725628
connected font
tildetilde Aug 27, 2025
b5c0ec0
Merge pull request #82 from tildetilde/tilde-design-improvements
tildetilde Aug 27, 2025
ad76c6f
Improved feedback system and card logic
tildetilde Aug 27, 2025
fb66159
Merge pull request #83 from tildetilde/tilde-feedback-and-font-review
tildetilde Aug 27, 2025
0d651cf
inverted colors for game mode
Idahel Aug 27, 2025
5ba5e41
Merge branch 'main' into darkmode
Idahel Aug 27, 2025
814b7db
Merge pull request #84 from tildetilde/darkmode
Idahel Aug 27, 2025
32b2bed
fixed missed closing tag
Idahel Aug 27, 2025
c2bfd3c
small design changes
Idahel Aug 27, 2025
e11f9b9
Merge pull request #85 from tildetilde/remove-from-game-settings
Idahel Aug 27, 2025
730dc25
changed drag and drop to work better on mobile
Idahel Aug 28, 2025
15c9f0d
Merge pull request #86 from tildetilde/drag-and-drop-mobile
Idahel Aug 28, 2025
d843046
mobile view
Idahel Aug 28, 2025
25ee45d
Merge pull request #87 from tildetilde/game-board-mobile
Idahel Aug 28, 2025
8303f02
adjustments to fit mobile
Idahel Aug 28, 2025
e6a861f
addded spacing for lg team names
Idahel Aug 28, 2025
746f93f
Merge pull request #88 from tildetilde/mobile-adjustments
Idahel Aug 28, 2025
b1236f7
Merge pull request #89 from tildetilde/mobile-adjustments
Idahel Aug 28, 2025
3cee4c8
changed border color
Idahel Aug 28, 2025
49e2bb0
Merge pull request #90 from tildetilde/mobile-adjustments
Idahel Aug 28, 2025
b1d11b2
Accessibility 100
tildetilde Aug 28, 2025
5b34f46
Merge pull request #91 from tildetilde/tilde-checking-accessibility
tildetilde Aug 28, 2025
b5006f1
added more cateogires
tildetilde Aug 28, 2025
5461ff9
Merge pull request #92 from tildetilde/more-categories
tildetilde Aug 28, 2025
ae05181
Deleting redundant code
tildetilde Aug 29, 2025
072de80
Merge pull request #93 from tildetilde/tilde-cleaning-up-frontend
tildetilde Aug 29, 2025
6620b05
Cleaning up
tildetilde Aug 29, 2025
1905413
Merge pull request #94 from tildetilde/tilde-cleaning
tildetilde Aug 29, 2025
10bb70a
cleaning up
tildetilde Aug 29, 2025
cb0bec1
Merge pull request #95 from tildetilde/tilde-cleaning
tildetilde Aug 29, 2025
7265d65
align eslint deps (ts-eslint v7) + route prune via frontend
tildetilde Aug 29, 2025
80b3b03
Merge pull request #96 from tildetilde/tilde-production-mode
tildetilde Aug 29, 2025
3808421
Update README.md
tildetilde Aug 29, 2025
36dc76d
Update README.md
tildetilde Aug 29, 2025
6da77cc
production mode
Idahel Aug 29, 2025
b2293e4
Merge pull request #97 from tildetilde/production-mode
Idahel Aug 29, 2025
7585719
Move @types to dependencies for production build
Idahel Aug 29, 2025
11b8092
Merge pull request #98 from tildetilde/production-mode
Idahel Aug 29, 2025
05dd615
cleaned up backend, unnecessary complex
Idahel Oct 15, 2025
079299c
Merge pull request #99 from tildetilde/production-mode
Idahel Oct 15, 2025
652ac2a
removed duplicate shuffle logic (backend and frontend), changed front…
Idahel Oct 15, 2025
7e32deb
Merge pull request #100 from tildetilde/production-mode
Idahel Oct 15, 2025
4f9e2a0
removed unused interfaces from types.ts, removed import of logger.ts …
Idahel Oct 15, 2025
088b6ab
Merge pull request #101 from tildetilde/development
Idahel Oct 15, 2025
ad500c8
removed round from game mode, added a card count for current player
Idahel Oct 15, 2025
eee6725
Merge pull request #102 from tildetilde/development
Idahel Oct 15, 2025
d558672
changes styling for cardcount
Idahel Oct 15, 2025
a70f9f8
Merge pull request #103 from tildetilde/center-counter-text
Idahel Oct 15, 2025
deec89d
made game mode top content absolute for better experience on mobile
Idahel Oct 15, 2025
91ab37c
Merge pull request #104 from tildetilde/gamemode-sticy
Idahel Oct 15, 2025
d1d35d4
Update game data and enhance category API handling
tildetilde Oct 28, 2025
1dc72aa
Merge pull request #105 from tildetilde/tilde-checkout-project
tildetilde Oct 28, 2025
f850e63
Add game info modal to Home page
tildetilde Nov 25, 2025
7dc4e0f
Merge pull request #106 from tildetilde/tilde-checkout-project
tildetilde Nov 25, 2025
e0901dc
Add in-game info modal to GameMode page
tildetilde Nov 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
# Dependencies
node_modules
.DS_Store

# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

# Build outputs
build
dist

# Logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*

package-lock.json
# System files
.DS_Store
Thumbs.db
49 changes: 42 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,48 @@
# Final Project
# Banganza

Replace this readme with your own information about your project.
Banganza is a multiplayer quiz game where teams drag and drop cards on a timeline.
Built with **React, TypeScript, and Node.js**.

Start by briefly describing the assignment in a sentence or two. Keep it short and to the point.
---

## The problem
## Features
- Intro animation with video
- Category selector with icons
- Drag & drop timeline gameplay
- Admin panel to manage categories and items
- Fully responsive & accessible design

Describe how you approached to problem, and what tools and techniques you used to solve it. How did you plan? What technologies did you use? If you had more time, what would be next?
---

## View it live
## Example Data
Example of an item that can be added via the admin panel:

Every project should be deployed somewhere. Be sure to include the link to the deployed project so that the viewer can click around and see what it's all about.
```json
{
"id": "net-1",
"name": "Dancing Baby",
"label": "Year 1996",
"value": 1996,
"categoryId": "internet.phenomena.year"
}
```


## Tech Stack
**Frontend:** React 18, TypeScript, Tailwind, dnd-kit
**Backend:** Node.js, Express, MongoDB
**Other:** JWT auth, Netlify/Render deployment


## Run locally
```bash
git clone https://github.com/username/project-final.git
cd project-final
npm install
npm run dev
```


## Live Demo
👉 Play Banganza [here]([url](https://banganza.netlify.app/))
https://banganza.netlify.app/
25 changes: 25 additions & 0 deletions backend/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"root": true,
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"parserOptions": {
"ecmaVersion": 2022,
"sourceType": "module"
},
"rules": {
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/no-explicit-any": "warn",
"prefer-const": "error",
"no-console": "off"
},
"env": {
"node": true,
"es2022": true
}
}
150 changes: 145 additions & 5 deletions backend/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,148 @@
# Backend part of Final Project
# Backend API Server

This project includes the packages and babel setup for an express server, and is just meant to make things a little simpler to get up and running with.
A Node.js/Express/TypeScript backend server for the Banganza quiz application.

## Getting Started
## Architecture

1. Install the required dependencies using `npm install`.
2. Start the development server using `npm run dev`.
The backend follows a clean, layered architecture:

```
src/
├── config/ # Configuration files
├── controllers/ # Request handlers
├── middleware/ # Express middleware
├── models/ # Mongoose models
├── routes/ # API route definitions
├── services/ # Business logic services
├── types/ # TypeScript type definitions
```


## Installation

1. Install dependencies:
```bash
npm install
```

2. Create a `.env` file

3. Configure environment variables in `.env`:
```env
MONGODB_URI=mongodb://localhost:27017/your_database
PORT=8888
NODE_ENV=development
FRONTEND_URI=http://127.0.0.1:5173
JWT_SECRET=your_secure_jwt_secret
ADMIN_USERNAME=admin
ADMIN_PASSWORD=secure_password
ADMIN_EMAIL=admin@example.com
```

## Running the Server

### Development
```bash
npm run dev
```

### Production
```bash
npm run build
npm start
```

### Database Seeding
```bash
npm run seed
```

### Create Admin User
```bash
npm run create-admin
```

## 🔧 Available Scripts

- `npm run dev` - Start development server with hot reload
- `npm run build` - Build TypeScript to JavaScript
- `npm start` - Start production server
- `npm run lint` - Run ESLint
- `npm run lint:fix` - Fix ESLint issues
- `npm run type-check` - Type check without building
- `npm run seed` - Seed database with sample data
- `npm run create-admin` - Create initial admin user

## API Endpoints

### Public Endpoints
- `GET /` - Health check
- `GET /health` - Detailed health status
- `GET /api/quiz/categories` - Get all quiz categories
- `GET /api/quiz/category/:categoryId/items` - Get all items for a category
- `POST /api/quiz/check` - Check quiz answers

### Protected Endpoints (Admin)
- `POST /api/admin/login` - Admin authentication
- `GET /api/admin/profile` - Get admin profile
- `POST /api/admin/logout` - Admin logout
- `GET /api/admin/categories` - Get all categories
- `POST /api/admin/categories` - Create category
- `PUT /api/admin/categories/:id` - Update category
- `DELETE /api/admin/categories/:id` - Delete category
- `GET /api/admin/items` - Get all items
- `POST /api/admin/items` - Create item
- `PUT /api/admin/items/:id` - Update item
- `DELETE /api/admin/items/:id` - Delete item

## Authentication

Admin endpoints require JWT authentication. Include the token in the Authorization header:

```
Authorization: Bearer <your_jwt_token>
```

## Response Format

All API responses follow a consistent format:

### Success Response
```json
{
"success": true,
"data": { ... },
"meta": {
"timestamp": "2024-01-01T00:00:00.000Z",
"path": "/api/endpoint",
"method": "GET"
}
}
```

### Error Response
```json
{
"success": false,
"error": {
"message": "Error description",
"code": "ERROR_CODE",
"details": { ... }
},
"meta": { ... }
}
```

## Database Models

### Admin
- Username, password, email
- Active status and last login tracking

### Category
- ID, name, description, question
- Unit, sort order, source information

### Item
- ID, name, value, label
- Category reference and source
14 changes: 14 additions & 0 deletions backend/data/categories/animals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"id": "animals.weight",
"name": "Animals",
"description": "Quiz about animal weights in kilograms",
"question": "Which animal weighs the most?",
"unit": "kg",
"unitVisible": true,
"sort": "desc",
"source": {
"name": "Wikipedia (largest animals, species pages)",
"url": "https://en.wikipedia.org/wiki/List_of_largest_organisms"
},
"version": 1
}
14 changes: 14 additions & 0 deletions backend/data/categories/celebrities.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"id": "celebrities.age",
"name": "Celebrities",
"description": "Oldest to Youngest Celebrities",
"question": "What year was the celebrity born in?",
"unit": "year",
"unitVisible": false,
"sort": "desc",
"source": {
"name": "",
"url": ""
},
"version": 1
}
14 changes: 14 additions & 0 deletions backend/data/categories/countries.coastline.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"id": "countries.coastline",
"name": "Coastlines",
"description": "Quiz about coastline lengths (km) for sovereign countries (CIA World Factbook methodology)",
"question": "Which country has the longest coastline?",
"unit": "km",
"unitVisible": true,
"sort": "desc",
"source": {
"name": "CIA World Factbook (2023 archive)",
"url": "https://www.cia.gov/the-world-factbook/about/archives/2023/field/coastline"
},
"version": 1
}
14 changes: 14 additions & 0 deletions backend/data/categories/elements.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"id": "elements.atomicnumber",
"name": "Elements",
"description": "Quiz about chemical elements and their atomic numbers",
"question": "Which element has the lowest atomic number?",
"unit": "",
"unitVisible": false,
"sort": "asc",
"source": {
"name": "IUPAC, Periodic Table",
"url": "https://en.wikipedia.org/wiki/List_of_chemical_elements"
},
"version": 1
}
14 changes: 14 additions & 0 deletions backend/data/categories/games.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"id": "games.releaseyear",
"name": "Console Games",
"description": "Quiz about release years of popular console games",
"question": "What year was the game released?",
"unit": "year",
"unitVisible": false,
"sort": "desc",
"source": {
"name": "Wikipedia, IGN, GameSpot",
"url": "https://en.wikipedia.org/wiki/List_of_best-selling_video_games"
},
"version": 1
}
14 changes: 14 additions & 0 deletions backend/data/categories/internet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"id": "internet.phenomena.year",
"name": "Internet Phenomena",
"description": "Quiz about viral internet phenomena and the year they peaked",
"question": "Which internet phenomenon happened first?",
"unit": "year",
"unitVisible": false,
"sort": "asc",
"source": {
"name": "Wikipedia, Know Your Meme",
"url": "https://knowyourmeme.com/"
},
"version": 1
}
Loading