A database-backed web application for managing devopsdays.org event pages. Replaces the Hugo static site generator workflow with a browser-based UI that city organizers can use without git, YAML, or a command line.
Proof of Concept — this is a POC to demonstrate the approach. Not production-ready.
- Backend: Django 5.x + PostgreSQL
- Public site: Server-rendered Django templates + Tailwind CSS
- Editing UI: Vue 3 + Inertia.js (SPA experience, no separate API)
- Admin: Django admin (for core team)
- Auth: GitHub OAuth via django-allauth
See the full PRD for the complete technical specification.
- Docker and Docker Compose
- That's it. No Python, no Node.js, no PostgreSQL to install.
# 1. Clone the repo
git clone https://github.com/devopsdays/devopsdays-web-app.git
cd devopsdays-web-app
# 2. Create your .env file from the template
cp env.template .env
# 3. Start everything
docker compose up
# 4. In another terminal, run migrations and seed data
docker compose exec web python manage.py migrate
docker compose exec web python manage.py shell < scripts/seed_data.pyThe seed script pulls real event data from the Hugo repo (expects it as a sibling directory at ../devopsdays-web).
| URL | What |
|---|---|
| http://localhost:8000 | Public site (homepage, event pages) |
| http://localhost:8000/admin/ | Django admin (core team view) |
| http://localhost:8000/manage/ | Organizer editing UI (Vue SPA) |
| http://localhost:8000/accounts/login/ | Login page |
| http://localhost:5173 | Vite dev server (HMR for Vue) |
| http://localhost:8025 | Mailpit (catches outgoing emails) |
After running the seed script:
- Email: admin@devopsdays.org
- Password: admin
To test the real login flow:
- Go to GitHub → Settings → Developer Settings → OAuth Apps → New OAuth App
- Set these values:
- Application name: devopsdays-web-app (dev)
- Homepage URL:
http://localhost:8000 - Authorization callback URL:
http://localhost:8000/accounts/github/login/callback/
- Copy the Client ID and Client Secret into your
.envfile:GITHUB_CLIENT_ID=your_client_id_here GITHUB_CLIENT_SECRET=your_client_secret_here - Restart the web container:
docker compose restart web - Go to Django Admin → Sites → change
example.comtolocalhost:8000 - Go to Django Admin → Social Applications → Add → GitHub, paste credentials, assign to the
localhost:8000site
devopsdays-web-app/
├── config/ # Django project settings
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── apps/
│ ├── events/ # Event, City, EventPage, TeamMember, ProgramEntry
│ ├── sponsors/ # Sponsor, SponsorLevel, EventSponsor
│ ├── people/ # Speaker, Talk
│ ├── users/ # User, EventPermission
│ └── pages/ # BlogPost, StaticPage
├── templates/ # Django templates (public site)
│ └── public/
├── frontend/ # Vue 3 app (editing UI)
│ └── src/
│ ├── pages/ # Inertia page components
│ ├── layouts/ # Layout components
│ └── components/ # Reusable Vue components
├── scripts/
│ └── seed_data.py # Import data from Hugo repo
├── docker-compose.yml
├── Dockerfile
└── requirements.txt
This is a volunteer project. The codebase is designed to be approachable:
- Backend contributors: Django views and templates. No JS knowledge needed for the public site.
- Frontend contributors: Vue 3 components in
frontend/src/. Inertia handles the Django integration. - Both: The Docker Compose setup means
docker compose upand you're running.