diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e8f206310c5219e18aaead92ca98833d6a42f1d9..786ffee7a965d243b344d56f1278a8c21398d05e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,7 +13,7 @@ variables:
 
 .deploy:
   image: 
-    name: 'hashicorp/terraform:1.6.1'
+    name: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/hashicorp/terraform:1.6.1'
     # default entrypoint is terraform command, but we want to run shell scripts
     entrypoint: ["/bin/sh", "-c"]
   variables:
@@ -27,14 +27,13 @@ variables:
     #when: on_failure
     expire_in: 1 week
   script:
-    - export GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_CLOUD_SERVICE_ACCOUNT}
     - terraform/environments/scripts/create-or-update-env.sh $ENVIRONMENT_ID $CI_COMMIT_SHA
     - echo "$(terraform/environments/scripts/get-output.sh api_domain)" > $API_DOMAIN_PATH
   resource_group: $ENVIRONMENT_ID # never execute terraform in parallel on the same environment
   interruptible: false
 
 .e2e:
-  image: 'archlinux:latest'
+  image: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/archlinux:latest'
   script:
     - API_DOMAIN=`cat $API_DOMAIN_PATH`
     - echo "e2e tests against $CI_ENVIRONMENT_SLUG environment go here and against $API_DOMAIN"
@@ -47,7 +46,7 @@ variables:
 ## common steps
 
 cache_lint_test:
-  image: 'denoland/deno:alpine-1.40.1'
+  image: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/denoland/deno:alpine-1.40.1'
   stage: 'test'
   script:
     - deno cache --lock=deno.lock app/deps.ts app/dev_deps.ts
@@ -70,14 +69,12 @@ include:
 
 build_docker:
   needs: ['cache_lint_test']
-  image: docker:20.10
+  image: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/docker:20.10'
   services:
     - docker:20.10-dind
   variables:
     # this could be fetched via terraform output ("gcr_location" in infra project), but then we would need an extra job for terraform
     GCR_IMAGE: europe-north1-docker.pkg.dev/holi-shared/docker/holi-donations-api
-  before_script:
-    - cat $GOOGLE_CLOUD_SERVICE_ACCOUNT | docker login -u _json_key --password-stdin https://europe-north1-docker.pkg.dev
   script:
     - docker pull $GCR_IMAGE || true # Allows us to use --cache-from, we need to tag with latest in the next command for this to work
     - docker build --cache-from $GCR_IMAGE -t $GCR_IMAGE:latest -t $GCR_IMAGE:$CI_COMMIT_SHA -t $GCR_IMAGE:$CI_COMMIT_REF_SLUG .
@@ -110,7 +107,7 @@ review_e2e:
 review_destroy:
   needs: ['review_deploy']
   image:
-    name: 'hashicorp/terraform:1.6.1'
+    name: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/hashicorp/terraform:1.6.1'
     # default entrypoint is terraform command, but we want to run shell scripts
     entrypoint: ["/bin/sh", "-c"]
   variables:
@@ -122,7 +119,6 @@ review_destroy:
     action: stop
   dependencies: [] # explicitly disable artifact usage
   script:
-    - export GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_CLOUD_SERVICE_ACCOUNT}
     # branch may have been deleted, so we clone and checkout main
     - git clone $CI_REPOSITORY_URL main-clone
     - cd main-clone
diff --git a/Dockerfile b/Dockerfile
index 2723f8b15896a0f91be74db8072e8e943703f8a9..5129e4d336b6d1e0f76c6d48384ded87a73f7aa7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM denoland/deno:alpine-1.40.1
+FROM europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/denoland/deno:alpine-1.40.1
 
 # The port that your application listens to.
 EXPOSE 8001
diff --git a/app/betterplace.ts b/app/betterplace.ts
index c76686e6451e6055faa92d1f2ae2b08f5986ad6b..a3ce666c747a5432a1c45b1d83e3bd6c608ad1a7 100644
--- a/app/betterplace.ts
+++ b/app/betterplace.ts
@@ -29,6 +29,7 @@ export const SUPPORTED_LANGUAGES = ["en", "de"];
 export const DEFAULT_LANGUAGE: BetterPlaceLanguage = "en";
 const DEFAULT_PAGE_SIZE = 10;
 const MAX_PAGE_FOR_RANDOMIZATION = 10;
+const ERROR_CODE_NOT_FOUND = "NOT_FOUND";
 
 const cleanUpHtml = (html: string): string => {
   let result = "";
@@ -293,15 +294,17 @@ export const fetchProject = async (
     const response = await fetch(url);
     if (response.status === 404) {
       throw new GraphQLError("Not found", {
-        extensions: { "code": "NOT_FOUND" },
+        extensions: { "code": ERROR_CODE_NOT_FOUND },
       });
     }
     const json = await response.json();
     return transformProject(json);
   } catch (e) {
-    logger.error(
-      `Error performing request to ${url}: ${e.message}`,
-    );
+    if (e.extensions?.code !== ERROR_CODE_NOT_FOUND) {
+      logger.error(
+        `Error performing request to ${url}: ${e.message}`,
+      );
+    }
     throw e;
   } finally {
     const duration = Date.now() - start;