Internal tool for managing colleague placements within the Dutch government. Wies provides an overview of who is working where, on what, and when.
- Backend: Django 6 with SQLite
- Templates: Jinja2 with jinja-roos-components
- Styling: RVO Design System (Dutch government design system)
- Interactivity: HTMX
- Authentication: OIDC via Keycloak
- Package management: uv
Installs dependencies, sets up database with dummy data, creates .env:
just setupThen update .env:
- Fill in OIDC credentials
- Set DEV firstname, lastname and email (yourself)
just upwies/
├── core/
│ ├── models.py # All models
│ ├── views.py # View functions
│ ├── forms.py # Django forms with RVOMixin
│ ├── urls.py # URL routing
│ ├── roles.py # Roles and permissions
│ ├── querysets.py # Custom querysets
│ └── jinja2/ # Jinja2 templates
│ └── parts/ # Reusable template partials
├── config/
│ └── settings/ # Django settings per environment
└── dummy_data.json # Test data for development
just setup # Set up fresh environment
just up # Start application
just down # Stop containers
just test # Run tests
just manage [...] # Django manage.py commands
just update-vendor # Update vendor assets (htmx, RVO CSS)This project vendors external JavaScript and CSS dependencies instead of using a CDN. This ensures the application works without external network dependencies and improves security (no CDN in CSP).
Vendored packages:
- htmx - JavaScript library for AJAX/HTML
- @nl-rvo/design-tokens - RVO design tokens
- @nl-rvo/component-library-css - RVO component styles
To update vendor dependencies:
-
Edit the version numbers in
justfile:HTMX_VERSION := "2.0.6" RVO_DESIGN_TOKENS_VERSION := "1.11.0" RVO_COMPONENT_LIBRARY_VERSION := "4.11.1" -
Run the update command:
just update-vendor
-
Test the application to verify everything works with the new versions.
-
Commit the updated files in
wies/core/static/vendor/.
Run all tests:
just testRun specific tests:
just manage test wies.core.tests.test_rolesNot linked in the UI:
/djadmin/- Django admin/djadmin/db/- Drop database and load dummy data/plaatsingen/import/- Import placements from CSV
| Role | Description | Permissions |
|---|---|---|
| Beheerder | Administrator | User and label management |
| Consultant | Employee | View-only access |
| BDM | Business Development Manager | Create and manage assignments |
| Term | Description |
|---|---|
| Plaatsing | Placement of a colleague on a service |
| Opdracht | Assignment/project for a ministry |
| Dienst | Service/work needed for an assignment |
| Collega | Colleague with skills who can be placed |
| Ministerie | Government organization that issues assignments |
- Everything in
mainbranch - Change "unreleased" in CHANGES to date
- Commit and push
- Tag with date:
git tag -a 2026-01-19 -m "2026-01-19" - Push tag:
git push --tags - CI produces image
This project has configuration for Claude Code in .claude/:
.claude/
├── CLAUDE.md # Project instructions and context
├── rules/ # Code style, testing, security guidelines
├── skills/ # Domain knowledge, Django patterns, UI components
└── agents/ # Specialized agents for UI development
Start a Claude Code session in the project root for AI-assisted development with project context.