Strafrecht Online is a comprehensive digital learning platform for criminal law education, developed by the Institute for Criminology and Economic Criminal Law at the University of Freiburg. The platform serves as an integrated educational ecosystem combining content management, interactive learning tools, and community features for law students and educators.
- Problem Field Wiki: Comprehensive knowledge base with structured legal concepts
- Interactive Case Training: Step-by-step legal case analysis with guided solutions
- Multiple Choice Tests (MCT): Adaptive quiz system with performance tracking
- Tandem Exams: Collaborative examination preparation tools
- Exam Database: Searchable repository of past examinations and solutions
- Flashcard System (JAK): Anki-compatible digital flashcards for spaced repetition
- User Profiles: Personalized learning environments with progress tracking and rewards
- News & Articles: Dynamic content publishing with commenting system
- Newsletter System: MJML-powered email campaigns via wagtail-birdsong
- Event Management: Academic events, lectures, and workshop coordination
- Course Management: Semester-based course organization and materials
- Document Library: Centralized repository for academic resources
- People Directory: Faculty and staff profiles with role management
- Institute Information: Comprehensive institutional representation
- Project Showcase: Research projects including Mรผnchener Kommentar, ZIS, JUKOL
- Library Integration: Digital access to institutional resources
- Polling System: Interactive surveys and opinion gathering
- Comment System: Threaded discussions on articles and content
- Feedback System: User suggestions and improvement tracking
- Social Features: User bookmarks, submissions, and collaborative tools
- Progressive Web App (PWA): Offline-capable mobile experience
- Multi-language Support: German primary with internationalization framework
- Advanced Search: Full-text search across all content types
- Real-time Features: WebSocket support via Django Channels
- API Integration: RESTful APIs for frontend interactions
- Framework: Django 5.2.4 with Wagtail 6.4.2 CMS
- Database: PostgreSQL with advanced indexing
- Cache: Redis for session management and caching
- Task Queue: Celery for background processing
- WebSockets: Django Channels for real-time features
- Search: Wagtail's integrated search with PostgreSQL full-text search
- Framework: Vue.js 2.6.12 with Vuetify UI components
- Build System: Webpack 5 with modern JavaScript transpilation
- Styling: Bootstrap 4.6 + SCSS with custom theming
- Icons: FontAwesome SVG icons and Bootstrap Icons
- Charts: Chartist.js for data visualization
core- Core functionality and base modelspages- Wagtail page models (news, events, sessions, people)quiz- Multiple choice test system with versioningcasetraining- Interactive legal case analysis toolstandem_exams- Collaborative examination systemprofiles- User management and personalizationemails- Newsletter and email campaign managementfeedback- User feedback and suggestion systemflashcards- Digital flashcard managementdashboard- Administrative dashboard and analytics
- wagtail-birdsong (forked): Email newsletter campaigns with MJML templates
- django-wiki: Collaborative wiki system for knowledge base
- django-comments-xtd: Advanced commenting system with threading
- wagtail-modeladmin: Enhanced admin interface for content management
- wagtail-treemodeladmin: Hierarchical content organization
- Python 3.10+
- Node.js 16+ and npm/yarn
- PostgreSQL 12+
- Redis 6+
-
Clone the repository
git clone https://github.com/strafrecht-admin/strafrecht-online.git cd strafrecht-online -
Initialize git submodules (for forked dependencies)
git submodule update --init --recursive
-
Set up Python environment
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements/dev.txt
-
Install forked dependencies
pip install -e ./wagtail-birdsong-fork pip install -e ./strafrecht-wagtailcomments-xtd-fork
-
Set up frontend dependencies
cd frontend npm install npm run build cd ..
-
Configure environment variables
cp app/vars.py.tpl app/vars.py # Edit app/vars.py with your local settings -
Set up database
python manage.py migrate python manage.py createsuperuser python manage.py collectstatic
-
Run development servers
# Backend (Django) python manage.py runserver # Frontend (in separate terminal) cd frontend && npm run start
This repo includes a dev Docker stack that runs Postgres/Redis/Mailpit, plus Django + the frontend build watcher. Code changes on your Mac reflect immediately in the containers via bind mounts (no image rebuild for code edits).
-
Start Docker Desktop (Docker daemon must be running)
-
Bring up the stack
docker compose up -d --build
-
Run migrations + create an admin user
docker compose exec web python manage.py migrate docker compose exec web python manage.py createsuperuser
-
Open the app
- Backend: http://localhost:8000/
- Wagtail admin: http://localhost:8000/cms/
- Django admin: http://localhost:8000/admin/
- Mailpit (SMTP UI): http://localhost:8025/
Notes:
- Docker uses app/vars.docker.py mounted as
app/vars.pyinside thewebcontainer. - The frontend container runs
npm run start(webpack watch to disk) so Django can serve/assets/fromfrontend/build.
The application is designed for containerized deployment with:
- Docker/Docker Compose support
- Environment-specific requirements files
- Static file optimization
- Database connection pooling
- Redis session management
- Backend: Django apps follow standard structure with models, views, templates
- Frontend: Vue.js components in
frontend/src/with Webpack build system - Templates: Wagtail templates in
templates/with inheritance hierarchy - Static Assets: Compiled to
static/directory for production
# Run tests
python manage.py test
# Create migrations
python manage.py makemigrations
# Frontend development
cd frontend && npm run start
# Code quality
python manage.py check --deployThe project follows systematic upgrade procedures documented in dev-upgrade/:
- Incremental version upgrades (never skip major versions)
- Comprehensive testing at each step
- Database backup procedures
- Dependency compatibility matrices
- Rollback procedures for failed upgrades
This project primarily uses a Python dict in app/vars.py (see app/vars.py.tpl) rather than .env variables.
SECRET_KEY: Django secret keyDEBUG: Development mode flagALLOWED_HOSTS: Permitted hostnamesDATABASES: Database configuration dict
- Language: German (de) with internationalization support
- Time Zone: CET (Central European Time)
- Media Handling: Local filesystem with Pillow image processing
- Email: MJML template support via django-mjml
- Follow Django best practices and PEP 8 style guidelines
- Write comprehensive tests for new features
- Update documentation for significant changes
- Use semantic commit messages
- Test across supported Python/Django versions
The project maintains forks of several dependencies for compatibility:
- wagtail-birdsong-fork: Newsletter system with Wagtail 6.x support
- strafrecht-wagtailcomments-xtd-fork: Enhanced commenting system
When contributing to forked dependencies, submit changes to the upstream repositories when possible.
Institution: University of Freiburg - Faculty of Law Institute: Institute for Criminology and Economic Criminal Law Website: strafrecht-online.org
This project represents a collaborative effort to modernize legal education through digital innovation, combining traditional academic rigor with contemporary web technologies.
- Mรผnchener Kommentar: Comprehensive legal commentary project
- ZIS (Zeitschrift fรผr Internationale Strafrechtsdogmatik): International criminal law journal
- JUKOL: Legal education collaboration project
- Aktienstrafrecht: Corporate criminal law research initiative
For technical support or academic inquiries, please visit strafrecht-online.org or contact the Institute for Criminology and Economic Criminal Law at the University of Freiburg.