Skip to content

wooley/EJUVault

Repository files navigation

EJU Math Vault

EJU Math Vault is a Node.js + Express web app for EJU math training and content management. It delivers timed practice sessions, strict per-blank grading, and an admin editor for questions, answers, and images.

Highlights

  • Email login with 6-digit verification code (JWT-based).
  • Timed training sessions with per-blank feedback.
  • Admin tooling for question/answer edits and content integrity checks.
  • Content indexers for questions, tags, patterns, and HTML rendering.

Project Layout

  • src/ Express API (auth, attempts, grading, sessions)
  • public/ Frontend pages (training, login, admin)
  • content/ Questions, answers, solutions, assets, specs
  • content/index/ Generated indexes
  • schemas/ JSON schema definitions
  • scripts/ Indexers and build-time tools

Setup

nvm use 20
npm install

Generate content indexes:

node scripts/content_indexer.js

Start the API server:

JWT_SECRET=devsecret npm run dev

Optional: bind to all interfaces for LAN access:

HOST=0.0.0.0 JWT_SECRET=devsecret npm run dev

Docker

Build and run with Docker Compose:

JWT_SECRET=devsecret docker compose up --build

Data and content are mounted for persistence:

  • ./data -> /app/data
  • ./content -> /app/content The container will generate content/index/question_index.json on first start if missing.

Auth Flow (Email + Code)

Request a verification code:

curl -s -X POST http://localhost:3000/auth/request-code \
  -H 'Content-Type: application/json' \
  -d '{"email":"test@example.com"}'

Verify the code and receive a JWT:

curl -s -X POST http://localhost:3000/auth/verify-code \
  -H 'Content-Type: application/json' \
  -d '{"email":"test@example.com","code":"123456"}'

Admin Pages

  • /admin dashboard
  • /admin/exams exam browser
  • /admin/question/<question_id>/edit question editor

Environment Variables

  • JWT_SECRET (required)
  • HOST (optional bind address)
  • PORT (default: 3000)
  • ADMIN_TOKEN (optional admin protection)
  • DB_PATH (optional data storage path)

Notes

  • Generated files under content/index/ are not committed.
  • content/answers/normalized.json is generated by admin edits.
  • Optional: npm run translate:exercise-md-cn generates content/exercise_cn/ from content/exercise/ (requires OPENAI_API_KEY).

About

EJUMathVault is a structured question and answer bank system for **EJU Mathematics** (Examination for Japanese University Admission for International Students). This project focuses on **official past exam questions**, with a strong emphasis on: - Exact reproduction of original questions - Character-level fill-in grading (as used in EJU)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages