TIP helps users inspect, modify, and analyze energy system scenarios with immediate visualization of impacts on energy balance and grid infrastructure.
It is in essence a spatially explicit representation of Energy Transition Model scenarios.
- 🤝 Supports collaborative decision-making between municipalities, grid operators, and stakeholders
- 📊 Real-time calculations based on the Energy Transition Model (ETM)
- 🔧 Simple parameter adjustment interface
- 📈 Detailed energy balance analysis
- 🔄 Side-by-side comparison of multiple energy scenarios
- 🗺️ Interactive map visualization of energy impact
- 🌐 Originally designed for PMIEK process, but applicable to any spatial energy planning challenge
For a new deployment of this tool follow the instructions to start a new project as outlined in 'start a new project'.
For local development; follow these steps:
- Configure and run the scripts in the
/pipelines - Use VScode to open dev containers for both the
/appas the/hailfolders - In the
/appdev container, start the client and backend with 2 terminals:cd frontend && npm run devcd src && python manage.py runserver
- Navigate to;
- https://localhost:3000 for the client
- https://localhost:8000 for the backend
- https://localhost:7000/docs for the Hail microservice
- Redis, Postgres and PGadmin will be running as supporting services
- Refer to the README files in each of the folders for more detailed information.
TIP uses main as the single source of truth for the latest code. Client-specific
deployment branches are named with the following convention:
accept-<client> # acceptance deployment for a client
prod-<client> # production deployment for the same client
For example, the branches for the PNH and GR projects are accept-pnh,
prod-pnh, accept-gr, and prod-gr.
Feature branches should have a meaningful name that describes the work they contain.
Important: Feature branches must not start with
accept-orprod-, as those prefixes are reserved for deployment branches.
<client>/<feature-ID-OR-issue-ID>-<define your feature> # client name (optional) followed by "/" then feature Id
# and precise feature detail
# client name can be used if adding a feature specifically for a client
For example, pnh/feature-8-add-geojson-data this is a client specific update and
feature-5-add-copy-button-to-scenario is a general update.
- Create a feature branch from
main. - Review and merge the completed feature branch into
main. - Merge the changes into the relevant
accept-<client>branch. - Test and validate the acceptance deployment.
- Promote the accepted changes to the matching
prod-<client>branch. - Merge
mainto other clients.
For instance:
- Create
feature-5-add-copy-button-to-scenariofrommain. - Review and merge
feature-5-add-copy-button-to-scenariointomain. - Merge the changes into the
accept-pnhbranch. - Test and validate the acceptance deployment.
- Merge
accept-pnhintoprod-pnhbranch. - Merge
maintoaccept-grintoprod-grbranch.
- Create a feature branch from
accept-<client>. - Review and merge the completed feature branch into
accept-<client>. - Test and validate the acceptance deployment.
- Promote the accepted changes to the matching
prod-<client>branch.
For instance:
- Create
pnh/feature-8-add-geojson-datafromaccept-pnh. - Review and merge
pnh/feature-8-add-geojson-dataintoaccept-pnh. - Test and validate the acceptance deployment.
- Merge
accept-pnhintoprod-pnhbranch.
The deployment workflow in .github/workflows/deploy.yml runs automatically when
changes to accept-* or prod-* branches are pushed (only allowed via a merge request).
Important: The GitHub Environment name must be exactly the complete branch name. For example, the
accept-pnhbranch uses theaccept-pnhGitHub Environment, and theprod-pnhbranch uses theprod-pnhGitHub Environment. Configure the client- and stage-specific variables and secrets in that exact GitHub Environment; the workflow reads them from there.
Docker images are tagged with the complete branch name as well, for example
backend:accept-pnh and backend:prod-pnh.
# Repo stucture
TIP
├── app
├── docs
├── hail
└── pipelinesThe full stack client application is found in the /app folder. Refer to app/frontend for the code of the NextJS frontend application. Python Django backend is located in the app/src folder.
The client stores the intermediate and unsaved data in session storage. The backend is used to make this app stateful over sessions by allowing users to submit their unsaved data to a database. Lastly, this backend serves static assets such as images and shape objects (GeoJSON).
Refer to the README for installation and getting started.
Plain .md documentation. Documentation is scarce and under development. Please refer to the /docs folder.
The TIP calculation core. This stateless microservice has three core functionalities:
- Orchestrate API calls to the ETM based on 'meta-programming' done in
/hail/config; - Handle the dataflows to and from the ETM and client, translating and manipulating data where required;
- Cache unchanged results using Redis to alleviate the ETM engine and majorly boost performance.
Hail also introduces a convenient syntax in plain Python code that allows energy modelers to focus on computation logic. Hail handles all the API calls - copying and updating ETM scenarios, data validation, caching, arbitrary width logic, interfacing and context management.
Refer to the README for installation and getting started.
Collection of scripts to load and transform the data required to start an instance of TIP for a new project. Refer to 'start a new project' to use the pipelines to populate the /app and /hail with the right data and configuration.
- TIP is licensed under GPL-3.0, see LICENSE.
- Copyright is held by the Ministry of Climate Policy and Green Growth and the Province of Zuid-Holland, see the LICENSE header.
- Any content (figures and texts) on the client application are licensed under CC-BY-SA (link)
- All data produced by TIP is public domain (CC0, link) and can be used without any restrictions
This product was developed by Witteveen+Bos and is a result of a development project ordered by the Province of Zuid-Holland and the Ministry of Climate Policy and Green Growth.



