Skip to content

xpoes123/scibowl-org

Repository files navigation

πŸ§ͺ Scibowl Org (NSB Arena)

A Modern Science Bowl Practice & Competition Platform β€” React + TypeScript + Django

Scibowl Org is a full-stack platform designed for National Science Bowl (NSB) students, teams, coaches, and tournament organizers.

The mission:

Build the most complete, modern, competitive, and community-driven Science Bowl platform online.

Scibowl Org offers solo practice tools, tournament organization features, live scorekeeping, and powerful analytics. With planned features for multiplayer buzzing, coaching dashboards, and social leaderboards, the platform aims to replace Google Sheets for tournament management while providing students with modern practice tools.

The project is in active MVP development with a React + TypeScript frontend and Django REST backend fully integrated.


πŸš€ Development Roadmap

Scibowl Org is built in five major phases:


Phase 1 β€” Core Functions (βœ… Complete)

Build the foundational practice experience:

  • βœ… Full question database with comprehensive filtering
  • βœ… Search engine (text, category, type, style, source filters)
  • βœ… Multiple question types: Short Answer, Multiple Choice, Identify All, Rank
  • βœ… Practice modes: Flashcard system with reveal mechanics, Reading mode
  • βœ… Session stats (accuracy, history tracking via backend)
  • βœ… Hotkey-driven UX (Enter/Skip/Next)
  • βœ… User authentication and profiles
  • βœ… Question bookmarking and answer history

Phase 2 β€” Multiplayer

Introduce competitive play:

  • 1v1 buzzing matches (polling β†’ WebSockets later)
  • Question lockout + judging/override flow
  • Match results + basic rating system
  • Rooms and simple invites
  • Adjustable match settings (categories, difficulty, modes)

Phase 3 β€” Tournament Organizer (TO) Tools (πŸ”¨ In Progress)

Support real events and scrimmages:

  • βœ… Tournament creation and management (name, division, format, dates, location)
  • βœ… Team and player management
  • βœ… Room assignment system
  • βœ… Round scheduling with packet assignments
  • βœ… Live tournament dashboard with room status
  • βœ… MODAQ integration (read-only API for game result ingestion)
  • βœ… Player stats tracking (points, buzzes, accuracy)
  • βœ… Game state tracking (current tossup, team scores)
  • πŸ”¨ PDF packet upload and parsing
  • πŸ”¨ Reader/Moderator UI for live games
  • πŸ”¨ Results export and detailed statistics
  • πŸ”¨ Pool play and bracket generation

Phase 4 β€” Social & Community (πŸ“‹ Planned)

Make the platform engaging and persistent:

  • βœ… User accounts and profiles (basic implementation)
  • πŸ“‹ Leaderboards (weekly/monthly/all-time)
  • πŸ“‹ Achievements & streaks
  • πŸ“‹ Commenting + discussions on questions
  • πŸ“‹ Submission leaderboards
  • πŸ“‹ Enhanced study lists and bookmarking features

Phase 5 β€” Coaching & Team Tools (πŸ“‹ Planned)

Empower teams and coaches:

  • πŸ“‹ Team creation + roles
  • πŸ“‹ Coach dashboard with assignments
  • πŸ“‹ Player analytics (category weakness, accuracy trends)
  • πŸ“‹ Team scrimmage tools
  • πŸ“‹ Saved sessions + review pages
  • πŸ“‹ Heatmaps, buzzpoint patterns, growth tracking

🧰 Tech Stack

Frontend

  • React 19.2 (Vite 7.2)
  • TypeScript 5.9
  • TailwindCSS 3.4
  • React Router 7.9
  • Hotkey-driven UX
  • Feature-based architecture

Backend

  • Django 5.1.4 + Django REST Framework 3.15
  • PostgreSQL 16
  • JWT Authentication (djangorestframework-simplejwt)
  • PDF Processing (pdfplumber)
  • CORS enabled for cross-origin requests

DevOps

  • Docker & Docker Compose
  • Multi-container orchestration (frontend, backend, database)
  • Environment-based configuration

πŸ“˜ Current MVP Features

Question Database & Practice

  • Comprehensive Filtering: Category (Physics, Chemistry, Biology, Math, Energy, ESS), question type (Tossup/Bonus), style (Short Answer, Multiple Choice, Identify All, Rank), source (MIT, Regionals, Nationals)
  • Text Search: Full-text search across questions and answers
  • Practice Modes:
    • Flashcard system with progressive reveal
    • Reading mode with text disclosure
    • Multiple choice practice
    • Support for Identify-All and Rank questions
  • Session Management: Accuracy tracking, answer history, unseen question tracking
  • Hotkey-Driven UX: Enter to submit, keyboard shortcuts for navigation
  • User Features: Authentication, profiles, bookmarking, answer history

Tournament Management

  • Tournament Creation: Name, division (MS/HS), format, dates, location, organizer info
  • Team & Player Management: Team registration, player rosters with grade levels
  • Room Assignment: Physical/virtual room allocation with status tracking
  • Round Scheduling: Multiple rounds with packet assignments
  • Live Dashboard: Real-time tournament status, room progress monitoring
  • MODAQ Integration: Read-only API for external game result ingestion
  • Player Statistics: Points, buzzes, accuracy tracking from live games
  • Game Tracking: Current tossup number, team scores, completion status

▢️ Getting Started

Monorepo Structure

nsb-arena/
β”œβ”€β”€ frontend/         # React + TypeScript + Vite
β”œβ”€β”€ backend/          # Django + PostgreSQL API
β”œβ”€β”€ docker-compose.yml
└── README.md

Quick Start with Docker (Recommended)

# Start everything (frontend + backend + database)
docker-compose up

# Frontend: http://localhost:5173
# Backend API: http://localhost:8000
# Admin Panel: http://localhost:8000/admin

Manual Setup

Frontend:

cd frontend
npm install
npm run dev
# Runs on http://localhost:5173

Backend:

cd backend

# Create virtual environment
python -m venv venv
venv\Scripts\activate  # Windows
# source venv/bin/activate  # Mac/Linux

# Install dependencies
pip install -r requirements.txt

# Set up database (requires PostgreSQL running)
python manage.py migrate
python manage.py createsuperuser

# Run server
python manage.py runserver
# Runs on http://localhost:8000

πŸ”§ Development Commands

Docker Commands

# Start all services
docker-compose up

# Start in background
docker-compose up -d

# View logs
docker-compose logs -f

# Stop all services
docker-compose down

# Rebuild after code changes
docker-compose up --build

# Run Django commands
docker-compose exec backend python manage.py <command>

Backend Commands

# Create migrations
docker-compose exec backend python manage.py makemigrations

# Apply migrations
docker-compose exec backend python manage.py migrate

# Create superuser
docker-compose exec backend python manage.py createsuperuser

# Access Django shell
docker-compose exec backend python manage.py shell

πŸ“‚ Project Structure

nsb-arena/
β”œβ”€β”€ frontend/                 # React + TypeScript + Vite
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ features/        # Feature modules
β”‚   β”‚   β”‚   β”œβ”€β”€ auth/        # Authentication (login/signup)
β”‚   β”‚   β”‚   β”œβ”€β”€ questions/   # Question database UI
β”‚   β”‚   β”‚   β”œβ”€β”€ study/       # Practice modes (flashcard, reading)
β”‚   β”‚   β”‚   β”œβ”€β”€ tournaments/ # Tournament browsing & management
β”‚   β”‚   β”‚   β”œβ”€β”€ profile/     # User profile management
β”‚   β”‚   β”‚   └── [multiplayer, social, coaching]/  # Future features
β”‚   β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”‚   └── api/         # API client for backend communication
β”‚   β”‚   β”œβ”€β”€ shared/
β”‚   β”‚   β”‚   β”œβ”€β”€ types/       # TypeScript type definitions
β”‚   β”‚   β”‚   └── utils/       # Shared utilities
β”‚   β”‚   β”œβ”€β”€ pages/           # Top-level pages
β”‚   β”‚   β”œβ”€β”€ App.tsx          # Main app router and layout
β”‚   β”‚   └── main.tsx         # Entry point
β”‚   └── package.json
β”‚
β”œβ”€β”€ backend/                  # Django + PostgreSQL API
β”‚   β”œβ”€β”€ backend/             # Django project config
β”‚   β”œβ”€β”€ questions/           # Questions app (models, API, tests)
β”‚   β”œβ”€β”€ tournaments/         # Tournament management app
β”‚   β”œβ”€β”€ users/               # User management (custom User model)
β”‚   β”œβ”€β”€ manage.py
β”‚   β”œβ”€β”€ requirements.txt
β”‚   └── Dockerfile
β”‚
β”œβ”€β”€ docker-compose.yml       # Multi-container orchestration
β”œβ”€β”€ README.md
β”œβ”€β”€ TOURNAMENT.md            # Tournament system architecture docs
└── TESTING_SETUP.md         # Testing guide

πŸ“‘ API Endpoints

Authentication (/api/)

  • POST /auth/register/ - Register new user
  • POST /auth/login/ - Login (get JWT tokens)
  • POST /auth/refresh/ - Refresh access token
  • GET /profile/ - Get current user profile
  • PUT /profile/ - Update profile

Questions (/api/questions/)

  • GET / - List questions (supports filtering by category, type, style, source)
  • GET /<id>/ - Get question details
  • POST /history/ - Submit answer
  • GET /history/ - Get answer history
  • POST /bookmarks/ - Bookmark question
  • GET /bookmarks/ - List bookmarks

Tournaments (/api/)

  • GET /tournaments/ - List tournaments (filterable by status, division)
  • GET /tournaments/<id>/ - Tournament details
  • GET /tournaments/<id>/teams/ - Tournament teams
  • GET /tournaments/<id>/rooms/ - Tournament rooms
  • GET /tournaments/<id>/rounds/ - Tournament rounds
  • GET /tournaments/<id>/games/ - Tournament games
  • GET /teams/ - Teams (with filtering)
  • GET /rooms/ - Rooms (with filtering)
  • GET /games/ - Games (with filtering)

Note: Tournament endpoints are read-only in the MVP. Write operations are reserved for MODAQ integration.


πŸ—οΈ Key Architectural Decisions

  1. Monorepo Structure: Frontend and backend in a single repository for tight integration and easier development
  2. MODAQ Integration: External buzzing/scoring system writes game results β†’ Arena reads and displays (no score recalculation in Arena)
  3. Read-Heavy MVP: All tournament endpoints are read-only; write operations reserved for MODAQ
  4. Feature-Based Frontend: Modular folder structure organized by features for better scalability
  5. JWT Authentication: Stateless token-based authentication for API security
  6. Docker-First Development: Containerized environment ensures consistency across development and deployment
  7. TypeScript Throughout: Strong typing on frontend for better developer experience and fewer runtime errors

🎯 Notable Features

  • Hotkey-Driven UX: Keyboard shortcuts for fast navigation (Enter to submit, Skip questions, Next)
  • Multiple Question Types: Support for Short Answer, Multiple Choice, Identify-All, and Rank questions
  • Progressive Text Reveal: Reading mode with controlled text disclosure for practice
  • Question Randomization: Smart selection with history tracking to avoid repeats
  • MODAQ Integration: Designed for seamless data ingestion from external buzzing systems
  • Tournament Dashboard: Real-time monitoring of tournament progress across multiple rooms
  • Player Analytics: Track performance metrics including points, buzzes, and accuracy

πŸ“š Additional Documentation


🀝 Contributing

This project is in active development. The current focus is on completing Phase 3 (Tournament Organizer tools) and refining the MVP experience.


πŸ“„ License

This project is being developed for the National Science Bowl community.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •