A modern, secure web application for managing demoscene parties, competitions, productions, voting systems, and live event presentation (StageRunner).
DPMS is designed as a more secure and internet-ready alternative to existing party management systems like wuhu. While traditional PMS solutions work well as intranet applications during events, DPMS focuses on security, user management, and the ability to run online before, during, and after the party.
I'm computing passionated since 1984. I organized RadyKal Party at Granada, Spain in 1998 and I visit every years another Amiga Parties around Spain. The last years I've collaborated with Posadas Party and Capacitor Party. I began to develop a web application to manage the next Capacitor Amiga Party but the pandemic cancelled the project. Last summer (2022), Posadas Party celebrated a new edition and we needed a tool for the people to vote the competitions. We used wuhu, a well known Party Management System (PMS) written in PHP programing language. I liked its functions and how manages the data to the competitions and its "beamer" system. But its register system it's too simple and insecure. Wuhu it's though more like a intranet application used only for the event day. But I would want something more secure to keep online on internet.
- User Management: Secure registration and authentication system with email verification
- Edition Management: Create party editions with custom logo, poster, and configurable glow effects
- Competition Management (Compos): Create and manage different competition categories
- Production Submissions: Allow sceners to submit their productions (demos, music, graphics, etc.)
- Voting System: Enable attendees to vote on competition entries
- StageRunner: Fullscreen presentation system for displaying productions on projector/big screen during events
- Role-based Access: Different permissions for Admins, Organizers, and Sceners
- Multi-language Support: Built with i18n support (currently Spanish/English)
- Animated 3D Backgrounds: Multiple WebGL effects (Hyperspace, Wave, Energy Grid, TRON Grid) with automatic rotation
- Dynamic Branding: Edition logo with configurable glow effect displayed across login, signup, and main application
- SEO-friendly Landing Page: Public-facing page with event information, countdown timer, and animated backgrounds
- Admin Dashboard: Full-featured administration panel for managing editions, competitions, productions, and users
- REST API: Full-featured API with Swagger documentation
- Backend: Django 4.x + Django REST Framework + PostgreSQL
- Frontend: React 18 + Material-UI + React Router v6
- 3D Graphics: Three.js for WebGL background effects
- Containerization: Docker & Docker Compose
- Authentication: Token-based authentication (DRF Token + JWT)
- Docker and Docker Compose
- Node.js 18+ and Yarn (for frontend development)
- Python 3.9+ (for backend development without Docker)
git clone https://github.com/yourusername/DPMS.git
cd DPMSCreate the environment files in .envs/ directory:
.envs/.django
# Django
DJANGO_SECRET_KEY=your-secret-key-here-change-in-production
# SceneID OAuth (optional, for SceneID login)
SCENE_CLIENT_ID=your-sceneid-client-id
SCENEID_CLIENT_SECRET=your-sceneid-client-secret.envs/.postgres
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=dpms
POSTGRES_USER=dpms_user
POSTGRES_PASSWORD=dpms_passwordfrontend/.env (optional, for development)
REACT_APP_BACKEND_ADDRESS=http://localhost:8000docker compose -f local.yml up -dThis will start:
- PostgreSQL database
- Django backend API on http://localhost:8000
cd frontend
yarn install
yarn startFrontend will be available at http://localhost:3000
docker compose -f local.yml exec backend_party python manage.py createsuperuserAccess Django admin panel:
http://localhost:8000/admin/
View API documentation (Swagger):
http://localhost:8000/docs/
Run migrations:
docker compose -f local.yml exec backend_party python manage.py migrateCreate new migrations:
docker compose -f local.yml exec backend_party python manage.py makemigrationsRun backend tests:
docker compose -f local.yml exec backend_party pytestAccess Django shell:
docker compose -f local.yml exec backend_party python manage.py shellRun tests:
cd frontend
yarn testBuild for production:
cd frontend
yarn buildConfigure backend URL:
Create a .env file in the frontend/ directory:
REACT_APP_BACKEND_ADDRESS=http://localhost:8000Stop all services:
docker compose -f local.yml downStop frontend:
Press Ctrl+C in the terminal running yarn start
For production deployment, use the production Docker Compose file:
docker compose -f production.yml up -dImportant security considerations:
- Change
DJANGO_SECRET_KEYto a strong random value - Set
DJANGO_DEBUG=False - Configure proper
DJANGO_ALLOWED_HOSTS - Use strong database passwords
- Set up HTTPS/SSL certificates
- Configure proper CORS settings
Additional production environment variables (.envs/.django):
# Email configuration (required for user verification)
EMAIL_HOST=smtp.your-provider.com
EMAIL_HOST_USER=your-email@domain.com
EMAIL_HOST_PASSWORD=your-email-password
EMAIL_PORT=587
# Frontend URL (for email links)
FRONTEND_URL=https://your-domain.com/appDPMS/
├── backend/ # Django REST API
│ ├── config/ # Django settings and main URLs
│ ├── dpms/ # Main Django apps
│ │ ├── users/ # User authentication and management
│ │ ├── compos/ # Competitions and productions
│ │ ├── website/ # Landing page (SSR)
│ │ └── utils/ # Shared utilities
│ └── requirements/ # Python dependencies
├── frontend/ # React application (SPA)
│ ├── src/
│ │ ├── @dpms-freemem/ # Core UI components (MainBar, Content)
│ │ ├── components/ # React components
│ │ │ ├── admin/ # Admin panel components
│ │ │ │ └── common/ # Shared admin components (LoadingSpinner, StatusChip, etc.)
│ │ │ ├── common/ # Shared components (ThreeBackground, backgroundEffects)
│ │ │ ├── user/ # Auth components (Login, Signup)
│ │ │ └── productions/ # Production management
│ │ ├── pages/ # Page components
│ │ │ └── admin/ # Admin pages (Editions, Compos, Productions)
│ │ ├── effects/ # Visual effects (ParticleEffects)
│ │ ├── utils/ # Frontend utilities (AxiosWrapper, dateFormatting)
│ │ └── routes.js # Application routing
│ └── package.json
├── stagerunner/ # StageRunner presentation app (separate React app)
│ ├── src/
│ │ ├── components/ # Presentation components
│ │ ├── screens/ # Display screens
│ │ ├── services/ # API client with caching
│ │ └── hooks/ # Custom hooks (keyboard, slideshow)
│ └── package.json
├── docker/ # Docker configurations
├── .envs/ # Environment variables (gitignored)
├── local.yml # Local development Docker Compose
├── production.yml # Production Docker Compose
├── TECHNICAL_SPEC.md # Complete technical specification
├── STAGERUNNER_SPEC.md # StageRunner detailed specification
└── CLAUDE.md # Development guidelines
- Landing Page:
http://localhost:8000/(Django SSR) - User Application:
http://localhost:3000/app/(React SPA - development) - Admin Panel:
http://localhost:8000/admin/(Django admin) - API Documentation:
http://localhost:8000/docs/(Swagger) - StageRunner:
http://localhost:3001/(React - when implemented)
Main API endpoints:
POST /api/users/signup/- User registrationPOST /api/users/login/- User authenticationGET /api/users/verify?token=<token>- Email verificationGET /api/editions/- List editionsGET /api/compos/- List competitionsGET /api/productions/- List productionsGET /api/productions/my_productions/- User's productions (authenticated)GET /api/files/- List filesPOST /api/files/- Upload file (multipart, authenticated)GET /api/files/{id}/download/- Download fileGET /docs/- Full Swagger API documentation
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
FreeMem - Demoscene enthusiast and party organizer since 1984
- Wuhu Team: Special thanks to the wuhu Party Management System development team for their excellent work. Wuhu has been an inspiration and a reference for this project, showing me what a party management system should be. I hope to contribute to the demoscene with new technologies while building upon the solid foundation they established.
- Built with love for the demoscene community
- Special thanks to Posadas Party and Capacitor Party organizers for their support and feedback