diff --git a/CMakeLists.txt b/CMakeLists.txt
index 157aec5d24c94ee1671cb4a0b1cbd61ea8ec460c..158309cfb0f00372a479dbff84c5262662767777 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,6 +40,7 @@ include(scripts/cmake/test/Test.cmake)
 if(OGS_COVERAGE AND NOT IS_SUBPROJECT)
     include(scripts/cmake/Coverage.cmake)
 endif()
+include(scripts/cmake/Web.cmake)
 
 ####################
 ### More Options ###
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index 5bf085d3ed8b0f9b937d94df66cf52a82240005e..8a59a261167a7b3b9a9263b49abaf7d81affee55 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -64,8 +64,14 @@ if(CCACHE_FOUND)
     endif()
 endif(CCACHE_FOUND)
 
+# Tools for web
 find_program(VTKJS_CONVERTER vtkDataConverter
-PATHS ${CMAKE_SOURCE_DIR}/web/node_modules/.bin)
+    PATHS ${CMAKE_SOURCE_DIR}/web/node_modules/.bin)
+find_program(HUGO hugo)
+find_program(NPM npm)
+find_program(YARN yarn)
+find_program(PIP pip)
+find_package(PythonInterp)
 
 ######################
 ### Find libraries ###
diff --git a/scripts/cmake/Web.cmake b/scripts/cmake/Web.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..a48200b63e1ec5e4c5073c7fe3225a6992c1f4e8
--- /dev/null
+++ b/scripts/cmake/Web.cmake
@@ -0,0 +1,28 @@
+if(NOT NPM OR NOT PIP OR NOT PYTHON_EXECUTABLE)
+    return()
+endif()
+
+if(YARN)
+    set(PACKAGE_MANAGER ${YARN})
+else()
+    set(PACKAGE_MANAGER "${NPM} install")
+endif()
+
+add_custom_target(web-install
+    COMMAND ${PACKAGE_MANAGER}
+    COMMAND ${PIP} install -r requirements.txt
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/web
+    BYPRODUCTS ${CMAKE_SOURCE_DIR}/web/node_modules
+)
+
+add_custom_target(web-import
+    COMMAND ${PYTHON_EXECUTABLE} import.py
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/web/import
+    DEPENDS web-install
+)
+
+add_custom_target(web
+    COMMAND ${NPM} run build
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/web
+    DEPENDS web-install web-import
+)
diff --git a/web/README.md b/web/README.md
index 9b142c1016deaebfa6f4189b64159263f19249f4..0b7a2979ae97834d432d2a0a0da9481ef61a548d 100644
--- a/web/README.md
+++ b/web/README.md
@@ -4,6 +4,8 @@
 - Install Node packages with `npm install` (or via `yarn`), *OPTIONAL* for SCSS and Javascript
 - Install Python packages with `pip install -r requirements.txt`, *OPTIONAL* for getting content from [Contentful](https://app.contentful.com/spaces/4nuqzxntzxks)
 
+Alternatively you can simply run `make web` inside your build directory to install everything and build the site (this requires that `python`, `pip` and `npm` was found by CMake).
+
 ## Start servers and watchers
 
     hugo server
@@ -14,7 +16,7 @@ If you want to modify css or javascript run `gulp` in another terminal:
 
 ## Build site
 
-    (cd import; python import.py) # Optional for fetching content from Contentful
+    (cd import; python import.py) # Optional for fetching content from Contentful, needs credentials setup, rename `secret_example.py` to `secret.py`
     npm run build
 
 Test by locally serving via [Caddy](https://caddyserver.com):