EvoX Genesis
EvoX Genesis turns a high-level software objective into a persistent recursive software world: finite-lived agents recursively develop software, while only accepted consequences persist across develop
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Real-time quiz engine with WebSocket communication and server-authoritative timing
翻译准备中
正在加载完整 README。
查看完整 README ↗Real-time WebSocket quiz engine for educational assessments. Students connect, answer timed questions, and receive instant scored results — all powered by server-authoritative timing to prevent client-side cheating.
Part of AdaptiveTest developer API, built by Desert's Edge Solutions.
┌──────────────────┐ WebSocket ┌──────────────────┐
│ React Frontend │◄──────────────────────────►│ FastAPI Backend │
│ (Vite dev) │ JSON messages │ (Uvicorn) │
│ │ │ │
│ QuizLobby │ Client → Server: │ Session Manager │
│ QuizSession │ ├─ start_quiz │ Timer Task │
│ QuizResults │ ├─ answer │ Scoring Engine │
│ │ ├─ next/prev/go_to │ Database Layer │
└──────────────────┘ └─ submit_quiz └────────┬──────────┘
│
Server → Client: ▼
├─ connected ┌──────────────────┐
├─ question │ SQLite │
├─ timer_tick │ │
├─ answer_received │ quizzes │
└─ quiz_complete │ questions │
│ sessions │
│ responses │
└──────────────────┘
Session lifecycle: not_started → in_progress → completed
The server runs an async timer task per session. Each second it decrements the remaining time, persists it to the database, and pushes a timer_tick to the client. When time expires, the quiz auto-submits.
cd backend
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python -m uvicorn app.main:app --reload --port 8000
The server starts at http://localhost:8000 and seeds a sample quiz ("Python Fundamentals") on first run.
cd frontend
npm install
npm run dev
Open http://localhost:5173 in your browser.
| Method | Endpoint | Description |
|---|---|---|
GET | /api/quizzes | List all available quizzes |
GET | /api/quizzes/{id} | Get quiz details and question count |
POST | /api/sessions | Create a new session ({quiz_id, student_name}) |
GET | /api/sessions/{id} | Get session status and score |
WS | /ws/{session_id} | WebSocket connection for quiz play |
Client → Server:
| Type | Payload | Description |
|---|---|---|
start_quiz | {} | Begin the quiz and start the server timer |
answer | {question_id, answer} | Submit or update an answer |
next_question | {current} | Navigate to the next question |
prev_question | {current} | Navigate to the previous question |
go_to_question | {question_number} | Jump to a specific question |
submit_quiz | {} | End the quiz and receive results |
Server → Client:
| Type | Payload | Description |
|---|---|---|
connected | {quiz, session} | Connection established with quiz metadata and session state |
question | {question_number, total_questions, question, existing_answer?} | Question data with any previously saved answer |
timer_tick | {time_remaining} | Remaining seconds (sent every second) |
answer_received | {question_id, time_spent} | Confirmation that answer was recorded |
quiz_complete | {reason, score, results} | Final score, grade, and per-question breakdown |
Client Server
│ │
│──── WS connect ───────────────►│
│◄─── connected {quiz, session} ─│
│ │
│──── start_quiz ───────────────►│
│◄─── question {Q1} ────────────│
│◄─── timer_tick {299} ─────────│
│◄─── timer_tick {298} ─────────│
│ │
│──── answer {q1, "8"} ────────►│
│◄─── answer_received ──────────│
│ │
│──── next_question {1} ────────►│
│◄─── question {Q2} ────────────│
│ │
│──── submit_quiz ──────────────►│
│◄─── quiz_complete {score} ────│
│ │
Create a quiz programmatically using the database module:
from backend.app.database import create_quiz, add_question
create_quiz("my-quiz", "Geography Quiz", time_limit_seconds=180)
add_question("geo-1", "my-quiz", 1,
question_text="What is the capital of France?",
options=["London", "Berlin", "Paris", "Madrid"],
correct_answer="Paris")
add_question("geo-2", "my-quiz", 2,
question_text="Which ocean is the largest?",
options=["Atlantic", "Indian", "Arctic", "Pacific"],
correct_answer="Pacific")
Create a session via the API:
curl -X POST http://localhost:8000/api/sessions \
-H "Content-Type: application/json" \
-d '{"quiz_id": "my-quiz", "student_name": "Alice"}'
Connect via WebSocket at ws://localhost:8000/ws/{session_id} to begin the quiz.
simple-quiz-engine/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI server, WebSocket handler, session manager
│ │ └── database.py # SQLite schema, CRUD operations, seed data
│ ├── data/ # SQLite database (auto-created, gitignored)
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── QuizLobby.jsx # Quiz selection and name entry
│ │ │ ├── QuizSession.jsx # Live quiz interface with timer
│ │ │ └── QuizResults.jsx # Score display and question breakdown
│ │ ├── App.jsx # Root component, screen routing
│ │ ├── App.css # All component styles
│ │ └── main.jsx # React entry point
│ ├── vite.config.js
│ └── package.json
├── CLAUDE.md # Developer reference
└── README.md
57 backend tests (pytest, 92% coverage) and 22 frontend tests (Vitest).
# Backend
cd backend
pip install pytest httpx pytest-asyncio
pytest
# Frontend
cd frontend
npm test
git checkout -b feature/my-feature)git commit -m 'Add my feature')git push origin feature/my-feature)This is a building block for the Adaptive Synchronous Testing Platform:
| Component | Repository |
|---|---|
| Question Bank MCP | Question management via MCP |
| Student Progress Tracker | Performance analytics |
| Simple Quiz Engine | Real-time quiz delivery |
Built by Jim Williams | GitHub