Since August 2023 I do a project at the city of The Hague, to rebuild their portal for their citizens. They use modules from the NL Portal open source project in their the new portal and custom integrations. In the future this custom integrations should apply to the general structure based on NL Portal.
NL Portal overview
NL Portal project can be found on Github and is open source maintained by Ritense. The NL Portal is an initiative of the VNG, The Association of Netherlands Municipalities. It is based on the Common Ground principle
Common ground principle
The Common ground principle consist of 5 layer principle.
- Layer 1: Storage
- Layer 2: Service, api’s
- Layer 3: Integration
- Layer 4: Business prosesses, like BPMN
- Layer 5: Interaction
NL Portal structure
On Github of NL Portal you can see a list of repositories
- nl-portal-frontend-libraries: the frontend with React components.
- nl-portal-backend-libraries: set of backend Kotlin components, based on Spring auto configuration, which expose data to the frontend with GraphQL.
- nl-portal-frontend-template: template repository which used the nl portal frontend libraries and can be used for your own code/portal
- nl-portal-backend-template: template repository which used the nl portal backend libraries and can be used for your own code/portal
- helm-charts: to deploy the applications to Kubernetes
- nl-portal-docker-compose: set of docker compose and test data to set up all the other backend services, for local development
NL Portal Backend Libraries
I am contributing mainly to the NL Portal Backend libraries, which is written in Kotlin and used Spring and GraphQL, based on the Spring auto configuration. When using the library you can choose only the modules necessary for your own project.
Here a list of modules in the backend library
- Authentication: use the Spring security oAuth with Keycloack, but can be used with any oAuth provider
- Cases API (OpenZaak): cases for citizens
- Tasks: tasks for the citizen, based on objects API,
- Objects API: for generic objects based on jsonschema
- Documenten API
- Payment
- Open Klant: user registration with communication preferences and contact moments
- BRP API: personal information from central registry
- KVK API: company information from chamber of commerce registry
My personal experience
I am really happy to work with Kotlin. It is Java on steriods, so much nice features to write less code. Learning a lot about open source projects and how to maintain it. For every new feature you need to keep in mind that it should be as generic as possible. Spring is a great help with all the configuration properties.