diff --git a/.dockerignore b/.dockerignore
deleted file mode 100644
index 4832d787d92fad663ef201dad1a64082abbd6289..0000000000000000000000000000000000000000
--- a/.dockerignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.github/
-.gitlab/
-.idea/
-.gitlab-ci.yml
-LICENSE.txt
-readme.md
diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml
deleted file mode 100644
index aaf407311910c0ba016005098199400718d7ff9b..0000000000000000000000000000000000000000
--- a/.github/workflows/docker-build.yml
+++ /dev/null
@@ -1,28 +0,0 @@
----
-name: Build to Docker Hub
-
-on:
-  push:
-    branches: [master]
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    steps:
-      - name: Checkout the repository
-        uses: actions/checkout@v4
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v3
-      - name: Login to Docker Hub
-        uses: docker/login-action@v3
-        with:
-          username: ${{ secrets.DOCKERHUB_USERNAME }}
-          password: ${{ secrets.DOCKERHUB_TOKEN }}
-      - name: Set up JDK 17
-        uses: actions/setup-java@v3
-        with:
-          java-version: '17'
-          distribution: 'temurin'
-          cache: maven
-      - name: Build & publish the project
-        run: mvn compile jib:build -X -DjibSerialize=true
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 40914893a4787d6e60f2bf3788d11c4f4de6c4a1..37d0199ee01c08b586ed61fecf9487dee12aa5cb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,17 +5,25 @@ variables:
   # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
   MAVEN_OPTS: >
     -Dhttps.protocols=TLSv1.2
-    -Dmaven.repo.local=${CI_PROJECT_DIR}/.m2/repository
+    -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository
     -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN
     -Dorg.slf4j.simpleLogger.showDateTime=true
     -Djava.awt.headless=true
+  # As of Maven 3.3.0 instead of this, you may define these options in `.mvn/maven.config` so the same config is used
+  # when running from the command line.
+  # `installAtEnd` and `deployAtEnd` are only effective with the recent version of the corresponding plugins.
+  MAVEN_CLI_OPTS: >
+    --batch-mode
+    --errors
+    --fail-at-end
+    --show-version
+    -DinstallAtEnd=true
+    -DdeployAtEnd=true
 
 # Check the list of available templates at https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates
 include:
   - template: Jobs/Secret-Detection.gitlab-ci.yml
-  - template: Jobs/Dependency-Scanning.latest.gitlab-ci.yml
   - template: Workflows/MergeRequest-Pipelines.gitlab-ci.yml
-  - local: .gitlab/ci/deploy-template.gitlab-ci.yml
   - local: .gitlab/ci/deploy-parallel-matrix.gitlab-ci.yml
 
 stages:
@@ -40,7 +48,7 @@ build:
     - pwd
   script:
     - mvn $MAVEN_CLI_OPTS -DskipTests
-      -Dmaven.repo.local=${CI_PROJECT_DIR}/.m2/repository package
+      -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository package
   cache:
     key:
       files:
@@ -80,32 +88,27 @@ test:
         - target/surefire-reports/TEST-*.xml
 
 deploy:
-  extends: .base-dokku-deploy
+  stage: deploy
+  image: docker.io/dokku/ci-docker-image:0.9.3
   rules: !reference [.upstream-deploy-production-rules, rules]
   variables:
-    DOKKU_APP_NAME: spring-petclinic-rest
-    DOKKU_SSH_REMOTE: "ssh://dokku@dokku-ppl.cs.ui.ac.id:22"
-    DOKKU_SSH_PRIVATE_KEY: $PRODUCTION_SSH_PRIVATE_KEY
+    APP_NAME: spring-petclinic-rest
+    GIT_DEPTH: "0"
+    SSH_REMOTE: "ssh://dokku@dokku-ppl.cs.ui.ac.id:22"
+    GIT_REMOTE_URL: "$SSH_REMOTE/$APP_NAME"
+    SSH_PRIVATE_KEY: $PRODUCTION_SSH_PRIVATE_KEY
+    BRANCH: $CI_DEFAULT_BRANCH
   script:
-    - dokku network:exists "${APP_NAME}-network"
-      || dokku network:create "${APP_NAME}-network"
-    - dokku postgres:exists "${APP_NAME}-database"
-      || dokku postgres:create "${APP_NAME}-database"
-         --image docker.io/library/postgres
-         --image-version 16.0-alpine
-         --post-create-network "${APP_NAME}-network"
-    - dokku apps:exists "$APP_NAME"
-      || dokku apps:create "$APP_NAME"
-    - dokku network:set "$APP_NAME" attach-post-create "${APP_NAME}-network"
-    - dokku postgres:link "${APP_NAME}-database" "$APP_NAME"
-    - dokku config:set "$APP_NAME" SPRING_PROFILES_ACTIVE="default,csui"
     - dokku-deploy
-    - sh .gitlab/bin/dokku-ci-post-deploy.sh
-  needs:
-    - test
+    - sh .gitlab/dokku-ci-post-deploy.sh
+  after_script:
+    - dokku-unlock
   environment:
     name: production
-    url: "https://${APP_NAME}.dokku-ppl.cs.ui.ac.id"
+    url: "https://$APP_NAME.dokku-ppl.cs.ui.ac.id"
+  needs:
+    - test
+  dependencies: []
 
 visualize-coverage:
   stage: report
@@ -133,6 +136,6 @@ sonarqube-check:
   script:
     - mvn -DskipTests verify sonar:sonar
   cache:
-    key: "$CI_JOB_NAME"
+    key: "${CI_JOB_NAME}"
     paths:
       - .sonar/cache
diff --git a/.gitlab/bin/dokku-ci-post-deploy.sh b/.gitlab/bin/dokku-ci-post-deploy.sh
deleted file mode 100644
index 91e90a8a148ee22501f55cb4281db4ebf96b0cd8..0000000000000000000000000000000000000000
--- a/.gitlab/bin/dokku-ci-post-deploy.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh -l
-set -e
-
-CERT_PATH="${CERT_PATH:-/home/dokku/.local/share/certs/cert.pem}"
-PRIVKEY_PATH="${PRIVKEY_PATH:-/home/dokku/.local/share/certs/privkey.pem}"
-
-if [ -z "$APP_NAME" ]; then
-  echo "Error: APP_NAME is not set. Ensure the script is executed in the dokku/ci-docker-image environment." >&2
-  exit 1
-fi
-
-if [ -z "$SSH_REMOTE" ]; then
-  echo "Error: SSH_REMOTE is not set. Ensure the script is executed in the dokku/ci-docker-image environment." >&2
-  exit 1
-fi
-
-dokku_cert_add() {
-  echo "⚙ Assigning certs at $CERT_PATH and $PRIVKEY_PATH to $APP_NAME ..."
-  ssh "$SSH_REMOTE" -- certs:add "$APP_NAME" "$CERT_PATH" "$PRIVKEY_PATH" || echo "Failed to assign certs" >&2
-}
-
-dokku_map_port_to_https() {
-  port="$1"
-  echo "⚙ Mapping $APP_NAME container port $port to HTTPS ..."
-  ssh "$SSH_REMOTE" -- ports:add "$APP_NAME" "https:443:$port" || echo "Failed to map container port $port to HTTPS" >&2
-}
-
-dokku_cert_add
-dokku_map_port_to_https 9966
-
-echo "✅ Post-deployment configuration completed"
diff --git a/.gitlab/bin/dokku.sh b/.gitlab/bin/dokku.sh
deleted file mode 100755
index 722ce87258c549219caa8823f4a78d90798d1cf9..0000000000000000000000000000000000000000
--- a/.gitlab/bin/dokku.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh -l
-# Dokku wrapper script, based from https://github.com/dokku/ci-docker-image/issues/24#issuecomment-1211264189
-# by @mcgaw on GitHub
-set -e
-
-check_command() {
-  if ! command -v "$1" >/dev/null 2>&1; then
-    echo "Error: '$1' not found. Ensure the script is executed in the dokku/ci-docker-image environment." >&2
-    exit 1
-  fi
-}
-
-check_command setup-ssh
-check_command parse-ci-commit
-check_command parse-app-name
-check_command parse-ssh-host
-check_command parse-ssh-port
-check_command ssh
-
-setup-ssh
-
-commit_sha="$(parse-ci-commit)"
-app_name="$(parse-app-name)"
-
-if [ -z "$SSH_REMOTE" ]; then
-  ssh_remote="ssh://dokku@$(parse-ssh-host):$(parse-ssh-port)"
-else
-  ssh_remote="$SSH_REMOTE"
-fi
-
-ssh "$ssh_remote" -- "#@"
diff --git a/.gitlab/ci/deploy-parallel-matrix.gitlab-ci.yml b/.gitlab/ci/deploy-parallel-matrix.gitlab-ci.yml
index 8577e0970e65382b49b3d07d89ff2c0fc84776d3..ab3b799d4ab29cf7edef3ae489e1c2dd12a56ec2 100644
--- a/.gitlab/ci/deploy-parallel-matrix.gitlab-ci.yml
+++ b/.gitlab/ci/deploy-parallel-matrix.gitlab-ci.yml
@@ -1,5 +1,20 @@
 ---
-.participants: &parallel-by-participants
+deploy-workshop:
+  stage: deploy
+  image: docker.io/dokku/ci-docker-image:0.9.3
+  rules: !reference [.upstream-deploy-production-rules, rules]
+  variables:
+    APP_NAME: "spring-petclinic-rest-$PARTICIPANT_NAME"
+    GIT_DEPTH: "0"
+    SSH_REMOTE: "ssh://dokku@dokku-ppl.cs.ui.ac.id:22"
+    GIT_REMOTE_URL: "$SSH_REMOTE/$APP_NAME"
+    SSH_PRIVATE_KEY: $WORKSHOP_SSH_PRIVATE_KEY
+    BRANCH: $CI_DEFAULT_BRANCH
+  script:
+    - dokku-deploy
+    - sh .gitlab/dokku-ci-post-deploy.sh
+  after_script:
+    - dokku-unlock
   parallel:
     matrix:
       - PARTICIPANT_NAME:
@@ -20,21 +35,9 @@
           - sonya
           - kamrozi
           - agra
-
-deploy-workshop:
-  extends: .base-dokku-deploy
-  rules: !reference [ .upstream-deploy-production-rules, rules ]
-  variables:
-    DOKKU_APP_NAME: "spring-petclinic-rest-$PARTICIPANT_NAME"
-    DOKKU_SSH_REMOTE: "ssh://dokku@dokku-ppl.cs.ui.ac.id:22"
-    DOKKU_SSH_PRIVATE_KEY: $WORKSHOP_SSH_PRIVATE_KEY
-  <<: *parallel-by-participants
-  script:
-    - dokku-deploy
-    - sh .gitlab/dokku-ci-post-deploy.sh
-  needs:
-    - test
   environment:
     name: workshop/$PARTICIPANT_NAME
     url: "https://$APP_NAME.dokku-ppl.cs.ui.ac.id"
-  resource_group: workshop
+  needs:
+    - test
+  dependencies: []
diff --git a/.gitlab/ci/deploy-template.gitlab-ci.yml b/.gitlab/ci/deploy-template.gitlab-ci.yml
deleted file mode 100644
index f59611eec745efe2f50b903c1199b9b4de848c3e..0000000000000000000000000000000000000000
--- a/.gitlab/ci/deploy-template.gitlab-ci.yml
+++ /dev/null
@@ -1,15 +0,0 @@
----
-.base-dokku-deploy:
-  stage: deploy
-  image: docker.io/dokku/ci-docker-image:0.9.3
-  variables:
-    APP_NAME: "${DOKKU_APP_NAME:-$CI_PROJECT_PATH_SLUG}"
-    SSH_REMOTE: "${DOKKU_SSH_REMOTE:-ssh://dokku@dokku-ppl.cs.ui.ac.id:22}"
-    SSH_PRIVATE_KEY: "${DOKKU_SSH_PRIVATE_KEY:-}"
-    BRANCH: $CI_DEFAULT_BRANCH
-    GIT_DEPTH: 0
-  before_script: >
-    [ -f .gitlab/bin/dokku.sh ] \
-    && chmod +x .gitlab/bin/dokku.sh \
-    && cp .gitlab/bin/dokku.sh /bin/dokku
-  dependencies: []
diff --git a/.gitlab/dokku-ci-post-deploy.sh b/.gitlab/dokku-ci-post-deploy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2b776b01996b06a08f573b586d46428decab8973
--- /dev/null
+++ b/.gitlab/dokku-ci-post-deploy.sh
@@ -0,0 +1,11 @@
+#!/bin/sh -l
+export CERT_PATH="/home/dokku/.local/share/certs/cert.pem"
+export PRIVKEY_PATH="/home/dokku/.local/share/certs/privkey.pem"
+
+echo "⚙ Assigning certs at $CERT_PATH and $PRIVKEY_PATH to $APP_NAME ..."
+ssh "$SSH_REMOTE" -- certs:add "$APP_NAME" "$CERT_PATH" "$PRIVKEY_PATH" || echo "Failed to assign certs"
+
+echo "⚙ Mapping $APP_NAME container port 9966 to HTTPS ..."
+ssh "$SSH_REMOTE" -- ports:add "$APP_NAME" https:443:9966 || echo "Failed to map container port to HTTPS"
+
+echo "✅ Post-deploy configuration completed"
diff --git a/Dockerfile b/Dockerfile
index 024acc0177c738e0b659ecf4632845224f854f6e..148295997e900da32b6d96051b059c345787636d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
 # Use JDK & Maven image to build the application
-FROM docker.io/library/maven:3.9.5-eclipse-temurin-17-alpine AS builder
+FROM docker.io/library/maven:3.9.4-eclipse-temurin-17-alpine AS builder
 
 # Set the working directory inside the container
 WORKDIR /src
@@ -11,7 +11,7 @@ COPY . .
 RUN mvn -DskipTests package
 
 # Use JRE image for running the application
-FROM docker.io/library/eclipse-temurin:17.0.9_9-jre-alpine
+FROM docker.io/library/eclipse-temurin:17.0.8.1_1-jre-alpine
 
 # Create a non-root user named "app" to own and run the application
 RUN addgroup app \
@@ -29,12 +29,5 @@ COPY --chown=app:app --from=builder /src/target/spring-petclinic-rest-*.jar .
 # Expose port 9966
 EXPOSE 9966
 
-# Configure Spring Boot application profile via environment variable
-ENV SPRING_PROFILES_ACTIVE="default"
-
 # Run the application JAR file
 CMD ["/bin/sh", "-c", "java -jar spring-petclinic-rest-*.jar"]
-
-# Add container healthcheck
-HEALTHCHECK CMD curl -f http://localhost:9966/petclinic/actuator/health \
-    | grep --quiet '"status":"UP"' || exit 1
diff --git a/readme.md b/readme.md
index 0499c6eb08e17721309e5432c322013d997cda98..790ed840676ef7480dd64bb65bff03e8fa7913c4 100644
--- a/readme.md
+++ b/readme.md
@@ -1,7 +1,6 @@
 # REST version of Spring PetClinic Sample Application (spring-framework-petclinic extend ) 
 
-[![pipeline status](https://gitlab.cs.ui.ac.id/pmpl/examples/spring-petclinic-rest/badges/csui/pipeline.svg)](https://gitlab.cs.ui.ac.id/pmpl/examples/spring-petclinic-rest/-/commits/csui)
-[![coverage report](https://gitlab.cs.ui.ac.id/pmpl/examples/spring-petclinic-rest/badges/csui/coverage.svg)](https://gitlab.cs.ui.ac.id/pmpl/examples/spring-petclinic-rest/-/commits/csui)
+[![Build Status](https://github.com/spring-petclinic/spring-petclinic-rest/actions/workflows/maven-build.yml/badge.svg)](https://github.com/spring-petclinic/spring-petclinic-rest/actions/workflows/maven-build.yml)
 
 This backend version of the Spring Petclinic application only provides a REST API. **There is no UI**.
 The [spring-petclinic-angular project](https://github.com/spring-petclinic/spring-petclinic-angular) is a Angular front-end application which consumes the REST API.
@@ -17,7 +16,6 @@ The [spring-petclinic-angular project](https://github.com/spring-petclinic/sprin
 ## Running petclinic locally
 
 ### With maven command line
-
 ```
 git clone https://github.com/spring-petclinic/spring-petclinic-rest.git
 cd spring-petclinic-rest
@@ -25,7 +23,6 @@ cd spring-petclinic-rest
 ```
 
 ### With Docker
-
 ```
 docker run -p 9966:9966 springcommunity/spring-petclinic-rest
 ```
@@ -139,7 +136,6 @@ mvn clean install
 ```
 
 ## Security configuration
-
 In its default configuration, Petclinic doesn't have authentication and authorization enabled.
 
 ### Basic Authentication
@@ -191,6 +187,7 @@ git clone https://github.com/spring-petclinic/spring-petclinic-rest.git
 File -> Import -> Maven -> Existing Maven project
 ```
 
+
 ## Looking for something in particular?
 
 | Layer | Source |
@@ -225,8 +222,13 @@ hosted in a special GitHub org: [spring-petclinic](https://github.com/spring-pet
 If you have a special interest in a different technology stack
 that could be used to implement the Pet Clinic then please join the community there.
 
+
 # Contributing
 
 The [issue tracker](https://github.com/spring-petclinic/spring-petclinic-rest/issues) is the preferred channel for bug reports, features requests and submitting pull requests.
 
 For pull requests, editor preferences are available in the [editor config](https://github.com/spring-petclinic/spring-petclinic-rest/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.
+
+
+
+
diff --git a/src/main/resources/application-csui.properties b/src/main/resources/application-csui.properties
deleted file mode 100644
index 353f5756f8294c9010c6122ad4c9bea891846a01..0000000000000000000000000000000000000000
--- a/src/main/resources/application-csui.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Application configuration
-petclinic.security.enable=true
-
-# Database configuration
-spring.sql.init.mode=always
-spring.sql.init.schema-locations=classpath*:db/postgresql/initDB.sql
-spring.sql.init.data-locations=classpath*:db/postgresql/populateDB.sql
-
-# PostgreSQL config start
-#----------------------------------------------------------------
-spring.datasource.url=${DATABASE_URL:jdbc:postgresql://localhost:5432/petclinic}
-spring.datasource.driver-class-name=org.postgresql.Driver
-spring.jpa.database=POSTGRESQL
-spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
-spring.jpa.hibernate.ddl-auto=none
-#----------------------------------------------------------------
-# PostgreSQL config end