Repository for information for RP games
Current Version: 0.70.0
Next Release: 0.70.1
Majora is an RPG campaign management system for tabletop roleplaying games. It allows users to organise campaigns by registering games and their associated content: player characters (PCs), non-player characters (NPCs), locations, quests, diary entries, links, and images.
The application is structured as a Django REST API backend and a React single-page application frontend, served together through the Tent reverse proxy.
Backend
- Python 3.11 / Django 5 — Application framework
- Django REST Framework — API layer
- MySQL 8 — Relational database
- Gunicorn — Production WSGI server
- Poetry — Dependency management
- pytest + pytest-django — Test suite
- ruff — Linting (max line length: 100)
Frontend
- React 19 + React Bootstrap 5 — UI framework
- Vite — Build tool and dev server
- Jasmine + c8 — Tests and coverage
- ESLint — Linting
- Yarn — Package manager
Infrastructure
- Docker & Docker Compose — Containerisation and orchestration
- darthjee/tent — Reverse proxy (port 3000)
majora/
├── backend/ # Django backend (Python)
├── frontend/ # React + Vite frontend
├── proxy/ # PHP proxy (dartjee/tent) configuration and extensions
├── crawler/ # STL-site crawler client (Node.js scaffold)
├── dockerfiles/ # Dockerfiles for each service
├── docker_volumes/ # Bind-mounted volumes (static assets, proxy config)
├── docs/ # Project documentation
└── docker-compose.yml # Full stack service definitions
- Docker and Docker Compose installed
-
Clone the repository:
git clone https://github.com/darthjee/majora.git cd majora -
Create the
.envfile and run database migrations:make setup
-
Review and adjust
.envvalues if needed.
# Start the full stack (proxy + backend + frontend dev server)
make dev-upThe application will be available at:
- Full stack (proxy): http://localhost:3000
- Backend API: http://localhost:3030
- Frontend dev server: http://localhost:3010
# Open a backend shell
make dev
# Open a test shell
make testsInside the backend shell (make dev):
poetry run pytestInside the test shell (make tests):
poetry run pytestFrontend tests (from frontend/):
yarn test # run Jasmine specs
yarn coverage # generate coverage with c8
yarn lint # lint source and specs