diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 58a2f4b..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,189 +0,0 @@
-import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
-import com.bmuschko.gradle.docker.tasks.image.DockerPushImage
-
-plugins {
-    id 'java'
-    id 'io.quarkus'
-    id "com.bmuschko.docker-remote-api" version "${dockerPluginVersion}"
-    id "com.diffplug.gradle.spotless" version "${spotlessPluginVersion}"
-    id "com.github.ben-manes.versions" version "${versionsPluginVersion}"
-    id "se.patrikerdes.use-latest-versions" version "${useLatestVersionsPluginVersion}"
-}
-
-sourceCompatibility = 11
-targetCompatibility = 11
-
-repositories {
-     mavenLocal()
-     mavenCentral()
-}
-
-tasks {
-    dependencyUpdates {
-        checkConstraints = true
-        gradleReleaseChannel = "current"
-        revision = "release"
-    }
-}
-
-dependencies {
-    implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
-
-    implementation 'io.quarkus:quarkus-agroal'
-    implementation 'io.quarkus:quarkus-elytron-security-properties-file'
-    implementation 'io.quarkus:quarkus-flyway'
-    implementation 'io.quarkus:quarkus-hibernate-orm-panache'
-    implementation 'io.quarkus:quarkus-hibernate-validator'
-    implementation 'io.quarkus:quarkus-jdbc-postgresql'
-    //implementation 'io.quarkus:quarkus-kubernetes'
-    implementation 'io.quarkus:quarkus-mailer'
-    implementation 'io.quarkus:quarkus-oidc'
-    implementation 'io.quarkus:quarkus-resteasy'
-    implementation 'io.quarkus:quarkus-resteasy-jsonb'
-    implementation 'io.quarkus:quarkus-resteasy-qute'
-    implementation 'io.quarkus:quarkus-scheduler'
-    implementation 'io.quarkus:quarkus-smallrye-jwt'
-
-    //implementation 'io.quarkus:quarkus-elytron-security'
-    //implementation 'io.quarkus:quarkus-elytron-security-jdbc'
-    //implementation 'io.quarkus:quarkus-elytron-security-oauth2'
-    //implementation 'io.quarkus:quarkus-keycloak-authorization'
-    //implementation 'io.quarkus:quarkus-quartz'
-    //implementation 'io.quarkus:quarkus-smallrye-fault-tolerance'
-    //implementation 'io.quarkus:quarkus-smallrye-health'
-    //implementation 'io.quarkus:quarkus-smallrye-metrics'
-    //implementation 'io.quarkus:quarkus-smallrye-openapi'
-
-    //implementation 'jakarta.transaction:jakarta.transaction-api'
-    //implementation 'org.jboss.spec.javax.xml.bind:jboss-jaxb-api_2.3_spec'
-    //implementation 'jakarta.persistence:jakarta.persistence-api'
-
-    implementation "org.bitbucket.b_c:jose4j"
-
-    implementation 'org.mapstruct:mapstruct'
-    compileOnly 'org.mapstruct:mapstruct-processor'
-
-    compileOnly 'com.google.code.findbugs:jsr305'
-
-    implementation 'com.vladmihalcea:hibernate-types-52'
-
-    implementation "jakarta.security.jacc:jakarta.security.jacc-api"
-    implementation "net.java.dev.jna:jna"
-
-    testImplementation 'io.quarkus:quarkus-junit5'
-    testImplementation 'io.rest-assured:rest-assured'
-
-    implementation "com.rometools:rome"
-    implementation "com.vladsch.flexmark:flexmark-all"
-    implementation "org.jsoup:jsoup"
-
-    annotationProcessor "org.hibernate:hibernate-jpamodelgen"
-
-    constraints {
-        implementation "com.vladmihalcea:hibernate-types-52:${hibernateTypesVersion}"
-        implementation "org.mapstruct:mapstruct:${mapstructVersion}"
-        compileOnly "org.mapstruct:mapstruct-processor:${mapstructVersion}"
-        compileOnly "com.google.code.findbugs:jsr305:${findbugsJsr305Version}"
-        implementation "jakarta.security.jacc:jakarta.security.jacc-api:${jakartaJaccVersion}"
-        implementation "net.java.dev.jna:jna:${jnaVersion}"
-        implementation "org.bitbucket.b_c:jose4j:${jose4jVersion}"
-        implementation "com.vladsch.flexmark:flexmark-all:${flexmarkVersion}"
-        implementation "org.jsoup:jsoup:${jsoupVersion}"
-        implementation "com.rometools:rome:${romeVersion}"
-        annotationProcessor "org.hibernate:hibernate-jpamodelgen:${hibernateVersion}"
-    }
-}
-
-spotless {
-  java {
-    googleJavaFormat()
-    removeUnusedImports()
-  }
-}
-
-group "eu.mulk"
-version "${projectVersion}"
-
-task yarnInstall(type:Exec) {
-  def resourceDir = "src/main/resources/META-INF/resources"
-
-  onlyIf { !project.hasProperty('skipWeb') }
-
-  inputs.file "${resourceDir}/package.json"
-  outputs.dir "${resourceDir}/node_modules"
-  outputs.file "${resourceDir}/yarn.lock"
-
-  workingDir resourceDir
-  commandLine "yarn", "install"
-}
-
-task snowpack(type:Exec) {
-  def resourceDir = "src/main/resources/META-INF/resources"
-
-  onlyIf { !project.hasProperty('skipWeb') }
-
-  dependsOn yarnInstall
-
-  inputs.dir "${resourceDir}/node_modules"
-  inputs.file "${resourceDir}/yarn.lock"
-  inputs.file "${resourceDir}/package.json"
-  outputs.dir "${resourceDir}/web_modules"
-
-  workingDir resourceDir
-  commandLine "yarn", "run", "snowpack", "--optimize"
-}
-
-task flow(type:Exec) {
-  def resourceDir = "src/main/resources/META-INF/resources"
-
-  onlyIf { !project.hasProperty('skipWeb') }
-
-  dependsOn snowpack
-
-  workingDir resourceDir
-  commandLine "yarn", "run", "flow", "--color=always"
-}
-
-task eslint(type:Exec) {
-  def resourceDir = "src/main/resources/META-INF/resources"
-
-  onlyIf { !project.hasProperty('skipWeb') }
-
-  dependsOn snowpack
-
-  workingDir resourceDir
-  commandLine "yarn", "run", "eslint", "cms2", "bookmarks", "--color"
-}
-
-task compileWeb {
-  dependsOn snowpack
-  dependsOn flow
-  dependsOn eslint
-
-  doLast {}
-}
-
-processResources {
-    exclude("META-INF/resources/node_modules/**/*")
-    exclude("META-INF/resources/package.json")
-    exclude("META-INF/resources/yarn.lock")
-}
-
-quarkusBuild.dependsOn compileWeb
-
-task buildDocker(type: DockerBuildImage) {
-    onlyIf { !project.hasProperty('skipDocker') }
-
-    inputDir = file(".")
-    dockerFile = file("src/main/docker/Dockerfile.jvm")
-    images.add("docker.benkard.de/mulk/mulkcms2:${projectVersion}")
-}
-
-buildDocker.dependsOn quarkusBuild
-assemble.dependsOn buildDocker
-
-task pushDocker(type: DockerPushImage) {
-    images.add("docker.benkard.de/mulk/mulkcms2:${projectVersion}")
-}
-
-pushDocker.dependsOn buildDocker
diff --git a/gradle.properties b/gradle.properties
deleted file mode 100644
index 7efff61..0000000
--- a/gradle.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-projectVersion = 0.1.0-SNAPSHOT
-
-quarkusPlatformGroupId = io.quarkus
-
-#quarkusPlatformArtifactId = quarkus-universe-bom
-quarkusPlatformArtifactId = quarkus-bom
-quarkusPlatformVersion = 1.3.1.Final
-quarkusPluginVersion = 1.3.1.Final
-
-#quarkusPlatformArtifactId = quarkus-bom
-#quarkusPlatformVersion = 999-SNAPSHOT
-#quarkusPluginVersion = 999-SNAPSHOT
-
-dockerPluginVersion = 6.4.0
-spotlessPluginVersion = 3.28.1
-versionsPluginVersion = 0.28.0
-useLatestVersionsPluginVersion = 0.2.13
-
-findbugsJsr305Version = 3.0.2
-flexmarkVersion = 0.61.2
-hibernateVersion = 5.4.14.Final
-hibernateTypesVersion = 2.9.8
-jakartaJaccVersion = 1.6.1
-jnaVersion = 5.5.0
-jose4jVersion = 0.7.0
-jsoupVersion = 1.13.1
-mapstructVersion = 1.3.1.Final
-romeVersion = 1.12.2
-scalaVersion = 2.13.1
-testcontainersVersion = 1.12.4
-
-org.gradle.parallel = true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index f3d88b1..0000000
--- a/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 3724ca3..0000000
--- a/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-rc-4-all.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
deleted file mode 100755
index 2fe81a7..0000000
--- a/gradlew
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
-    echo "$*"
-}
-
-die () {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=`expr $i + 1`
-    done
-    case $i in
-        0) set -- ;;
-        1) set -- "$args0" ;;
-        2) set -- "$args0" "$args1" ;;
-        3) set -- "$args0" "$args1" "$args2" ;;
-        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Escape application args
-save () {
-    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
-    echo " "
-}
-APP_ARGS=`save "$@"`
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100755
index 9109989..0000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,103 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem      https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index d83770f..0000000
--- a/settings.gradle
+++ /dev/null
@@ -1,12 +0,0 @@
-pluginManagement {
-    repositories {
-        mavenLocal()
-        mavenCentral()
-        gradlePluginPortal()
-    }
-    plugins {
-      id 'io.quarkus' version "${quarkusPluginVersion}"
-    }
-}
-
-rootProject.name = 'mulkcms2'
