MCPcopy Index your code
hub / github.com/asynchronous-x/orbital-ctf

github.com/asynchronous-x/orbital-ctf @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
288 symbols 638 edges 88 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🚀 Orbital CTF Platform

GitHub License Made with Next.js Powered by Prisma Styled with Tailwind

Orbital CTF Logo

A retro space-themed Capture The Flag platform built with modern tech stack that actually Just Works™️

Experience a CTF in a sleek, dark-themed environment with real-time scoring and team collaboration.

Static Demo Site · Report Bug · Request Feature

Watch the demo

✨ Features

  • 🔐 User Authentication - Individual and team registration system
  • 🎯 Challenge Management - Create, edit, import/export and manage CTF challenges
  • 📊 Real-time Scoring - Live leaderboard updates
  • 🌙 Retro UI Theme - Space-inspired design with stunning visuals for both the categories and challenge selection screens
  • 📱 Responsive Design - Works on both desktop and mobile
  • 🚀 Modern Stack - Built with Next.js 15, Prisma, and Tailwind CSS
  • 🏁 Multi-Flag Challenges - Supports problems with multiple flags for partial credit
  • 📈 Scoreboard History - Visualize team progress with a dynamic chart
  • 🔓 Unlock Conditions - Time-based and prerequisite challenge gates

🛠️ Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js 20.x or later
  • npm or yarn
  • SQLite (included with Prisma)

🚀 Quick Start

  1. Clone the repository bash git clone https://github.com/asynchronous-x/orbital-ctf.git cd orbital-ctf

  2. Install dependencies bash npm install # or yarn install

  3. Create a .env file bash cp .env.example .env

  4. Set up the database bash npx prisma migrate reset

  5. Seed initial challenges bash npm run prisma:seed # or yarn prisma:seed

  6. Start development server bash npm run dev # or yarn dev

Open http://localhost:3000 to launch the platform.

📁 Project Structure

orbital-ctf/
├── src/
│   ├── app/            # Next.js app router pages
│   ├── components/     # React components
│   ├── lib/            # Server-side helpers
│   ├── utils/          # Client-side utilities
│   ├── types/          # Shared TypeScript types
│   ├── middleware.ts   # Next.js middleware
│   └── instrumentation.ts # Startup tasks (challenge import)
├── prisma/
│   ├── schema.prisma # Database schema
│   └── migrations/   # Database migrations
└── public/           # Static assets
    └── uploads/      # Challenge file uploads

💾 Database Schema

The platform is built on these core models:

Model Description
User User accounts with authentication and team membership
Team Team information, scoring, and member management
Challenge CTF challenges with points and locking rules
UnlockCondition Challenge unlock requirements
ChallengeFlag Supports multi-flag scoring
Submission Challenge submission tracking and validation
Announcement Platform-wide announcements
ActivityLog Team activity tracking
GameConfig CTF game timing and state configuration
ChallengeFile Challenge attachment management
Hint Challenge hints with point costs
TeamHint Tracks which teams have purchased hints
SiteConfig Platform configuration settings
Score Detailed scoring history for teams and users
TeamPointHistory Chronological log of team score changes

🔧 Configuration

The platform can be configured through environment variables:

DATABASE_URL="file:./dev.db"
NEXTAUTH_SECRET="your-secret-here"
NEXTAUTH_URL="http://localhost:3000"
INGEST_CHALLENGES_AT_STARTUP=true
CHALLENGES_DIR="./challenges"

Set INGEST_CHALLENGES_AT_STARTUP to true if you want challenges in CHALLENGES_DIR automatically imported when the server starts.

📝 License

This project is licensed under the GPL-3.0 License. See the LICENSE file for details.

🌟 Acknowledgments


Made with 💯 by Asynchronous-X

Extension points exported contracts — how you extend this code

User (Interface)
(no doc)
src/types/next-auth.d.ts
DetailedCategoryViewProps (Interface)
(no doc)
src/components/DetailedCategoryView.tsx
EvaluationResult (Interface)
(no doc)
src/lib/challenges.ts
SolutionModalProps (Interface)
(no doc)
src/app/challenges/[challengeId]/page.tsx
SubmissionData (Interface)
(no doc)
prisma/seed-example.ts
Session (Interface)
(no doc)
src/types/next-auth.d.ts
CategorySatellite (Interface)
(no doc)
src/components/SpaceScene.tsx
FileInput (Interface)
(no doc)
src/lib/challenge-ingestion.ts

Core symbols most depended-on inside this repo

padNumber
called by 12
src/components/dashboard/GameClock.tsx
toggleEffect
called by 10
src/components/Navbar.tsx
fetchGameConfig
called by 4
src/utils/api.ts
isAdmin
called by 4
src/app/api/admin/challenges/route.ts
fetchData
called by 4
src/app/scoreboard/page.tsx
fetchSiteConfigurations
called by 3
src/utils/api.ts
fetchAdminTeams
called by 3
src/utils/api.ts
isAdmin
called by 3
src/app/api/hints/route.ts

Shape

Function 212
Interface 69
Method 5
Class 2

Languages

TypeScript100%

Modules by API surface

src/utils/api.ts41 symbols
src/types/index.d.ts34 symbols
src/app/challenges/[challengeId]/page.tsx11 symbols
src/lib/challenge-ingestion.ts8 symbols
src/components/SpaceScene.tsx8 symbols
src/components/admin/ConfigurationTab.tsx7 symbols
src/components/dashboard/GameClock.tsx6 symbols
src/components/admin/SiteConfigurationTab.tsx5 symbols
src/components/admin/GameConfigurationTab.tsx5 symbols
src/components/admin/ChallengesTab.tsx5 symbols
src/components/Navbar.tsx5 symbols
src/components/DetailedCategoryView.tsx5 symbols

For agents

$ claude mcp add orbital-ctf \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page