No description
  • HTML 49.6%
  • Python 44.8%
  • CSS 3%
  • JavaScript 2.5%
Find a file
Kevin Heyer 16fe2367f9 Ask before removing a companion
A companion is a whole small sheet with values, notes and possibly an
image, so a single misclick on "Entfernen" should not throw it away.
The button now behaves like deleting a note page: companions.js asks
with confirm() (naming the companion, or a generic question while the
name is still empty) and only then sets DELETE and hides the card;
the row is deleted on the next save as before.

The button gets its own class .companion-delete instead of .row-remove,
so the generic remove handler in formsets.js no longer acts on it. It
keeps the look of the old button and is hidden in print.

A browser test covers both answers: cancelling keeps the companion,
confirming and saving removes it. Docs and the changelog are updated.
2026-10-07 13:46:15 +02:00
.claude Add agent skills and helper scripts, slim down AGENTS.md 2026-09-27 13:29:12 +02:00
browser_tests Ask before removing a companion 2026-10-07 13:46:15 +02:00
characters Ask before removing a companion 2026-10-07 13:46:15 +02:00
config Add start page, mobile menu, co-GMs, elemental shapes and a UI refresh 2026-09-29 19:03:06 +02:00
docker Protect edited reference data from the startup import and add a sync API 2026-10-02 13:29:52 +02:00
docs Ask before removing a companion 2026-10-07 13:46:15 +02:00
imports Give every shop special items and add a Deck of Many Things generator 2026-10-05 20:01:01 +02:00
skills Tell guided character creation as a story with a room that furnishes itself 2026-10-05 20:42:11 +02:00
static Ask before removing a companion 2026-10-07 13:46:15 +02:00
templates Ask before removing a companion 2026-10-07 13:46:15 +02:00
.dockerignore Add Docker Configuration 2026-09-23 11:38:08 +02:00
.env.example Protect edited reference data from the startup import and add a sync API 2026-10-02 13:29:52 +02:00
.gitignore Show campaign locations as a collapsible tree with type icons 2026-10-03 11:31:36 +02:00
AGENTS.md Tell guided character creation as a story with a room that furnishes itself 2026-10-05 20:42:11 +02:00
CLAUDE.md Add agent instructions and commit-push skill 2026-09-23 12:30:29 +02:00
docker-compose.test.yml Add autosave, live HP from the combat tracker, browser tests and ES modules 2026-09-27 19:26:55 +02:00
docker-compose.yml Add autosave, live HP from the combat tracker, browser tests and ES modules 2026-09-27 19:26:55 +02:00
Dockerfile Add autosave, live HP from the combat tracker, browser tests and ES modules 2026-09-27 19:26:55 +02:00
manage.py first commit 2026-09-23 11:22:46 +02:00
README.md Save generator results to campaigns, add place tabs and drop the wiki 2026-10-02 14:42:16 +02:00
requirements-browser.txt Add autosave, live HP from the combat tracker, browser tests and ES modules 2026-09-27 19:26:55 +02:00
requirements.txt Add spell database with Excel export and import 2026-09-23 13:39:50 +02:00

DnD20

D&D-5e-Plattform auf Basis von Django: begonnen als Onlineversion des deutschen Charakterbogens (v1.2, André Taendler / dnddeutsch.de), wächst schrittweise zur kompletten D&D-Verwaltung und -Einsicht – aktueller Stand und nächste Schritte in docs/roadmap.md. Produktiv unter https://dnd20.de (weiterhin auch unter https://sheets.dnd20.de).

Starten

python3 -m venv .venv            # oder: python3 -m venv --without-pip .venv (siehe unten)
.venv/bin/pip install -r requirements.txt
.venv/bin/python manage.py migrate
.venv/bin/python manage.py createsuperuser   # optional, für /admin
.venv/bin/python manage.py runserver

Dann http://127.0.0.1:8000 öffnen, registrieren und Charaktere anlegen.

Ausführliche Entwicklerdokumentation: docs/

Mit Docker

cp .env.example .env      # DJANGO_SECRET_KEY und POSTGRES_PASSWORD setzen
docker compose up -d --build

Läuft dann unter http://localhost:8000 (PostgreSQL, gunicorn, statische Dateien über WhiteNoise). Migrationen laufen beim Start automatisch. Daten liegen in den Volumes db-data und media. Bei eigener Domain DJANGO_ALLOWED_HOSTS und DJANGO_CSRF_TRUSTED_ORIGINS anpassen, hinter einem HTTPS-Reverse-Proxy zusätzlich DJANGO_BEHIND_HTTPS_PROXY=1.

Aufbau

Pfad Inhalt
characters/rules.py Alle Regelberechnungen (Modifikatoren, Übungsbonus, Fertigkeiten, Zauberplätze inkl. Multiklassen & Paktmagie). Die einzige Stelle, an der gerechnet wird.
characters/models.py Character, ClassLevel (Multiklassen), Attack, CharacterSpell, Stammdaten CharacterClass / Subclass
characters/migrations/0002_seed_classes.py Klassen und Unterklassen aus dem Spielerhandbuch
characters/views.py Bogen (anlegen/bearbeiten), Liste, Löschen, Duplizieren, compute (JSON für Live-Berechnung)
templates/characters/sheet.html Die drei Seiten des Bogens
static/js/sheet/ Bogen als ES-Module (main.js): Seitenwechsel, dynamische Zeilen, Live-Berechnung über /berechnen/, Autosave

Die Live-Werte im Browser kommen vom Server (POST /berechnen/ mit den ungespeicherten Formulardaten), es gibt also keine doppelte Regel-Logik in JavaScript.

Was schon berechnet wird

  • Attributsmodifikatoren, Übungsbonus (aus der Gesamtstufe)
  • Rettungswürfe und Fertigkeiten (geübt / Expertise; Alleskönner beim Barden ab Stufe 2)
  • Passive Wahrnehmung, Initiative
  • Trefferwürfel gesamt, Vorschlag für TP-Maximum (Durchschnitt)
  • Zauberwirken je Klasse: Attribut, Rettungswurf-SG, Angriffsbonus
  • Zauberplätze pro Grad (Einzelklasse und Multiklassen-Tabelle), Paktmagie getrennt

Inzwischen dazugekommen, hier nur in Stichworten (Details in docs/): Hintergründe, Rüstungsklasse, Waffenübungen, Nachschlagewerke mit Regeltexten aus dem SRD 5.1, Questbuch & NPC-Buch, KI-Porträts, Dark Mode.

Nächste Schritte

Siehe docs/roadmap.md für den aktuellen Stand – als Nächstes geplant ist ein durchsuchbares Bestiarium (Monster-Nachschlagewerk), analog zu den bestehenden Zauber-/Rüstungs-/ Waffenübersichten.

Quellen und Lizenz der Regeldaten

Regelwerte wie Materialkomponenten, Reichweiten und Wirkungsdauern der Zauber stammen zum Teil aus dem System Reference Document 5.1 (SRD 5.1) von Wizards of the Coast LLC, lizenziert unter CC-BY-4.0, und wurden für dieses Projekt ins Deutsche übersetzt. Die englischen Daten wurden über die Zaubertabelle von Mythical Ink bezogen. Buch und Seite der deutschen Ausgaben wurden mit der Zauberliste von dnddeutsch.de abgeglichen. Beschreibungstexte aus Regelbüchern werden nicht gespeichert.