diff --git a/backend b/backend
index a52272528f99e0a13baa6155bf826b0ae4b153a4..f180f73e7fd172869ea309a68b9792389872c20d 160000
--- a/backend
+++ b/backend
@@ -1 +1 @@
-Subproject commit a52272528f99e0a13baa6155bf826b0ae4b153a4
+Subproject commit f180f73e7fd172869ea309a68b9792389872c20d
diff --git a/docker-compose.base.yaml b/docker-compose.base.yaml
index 1cd554b69f623ae97b76efb342bcf4408f5b68a0..df60440d4c04f63337dbba576ed930160a7d0fa6 100644
--- a/docker-compose.base.yaml
+++ b/docker-compose.base.yaml
@@ -13,6 +13,7 @@ services:
       NEXT_PUBLIC_OAUTH_AUTHORITY: ${OAUTH_AUTHORITY}
       NEXT_PUBLIC_OIDC_REDIRECT_HOST: ${FRONTEND_REDIRECT_HOST}
       NEXT_PUBLIC_OIDC_CLIENT_ID: ${FRONTEND_OIDC_CLIENT_ID}
+      NEXT_PUBLIC_TEMPLATE_REPOSITORY: ${REPOSITORY_URL}
     labels:
       traefik.http.routers.webapp.rule: Host(`${DOMAIN}`)
 
diff --git a/docker-compose.prod.yaml b/docker-compose.prod.yaml
index dec866b9c330d2f5f35e364d064abefd13ef8e72..9cd373731d74e8423a7c0e5fe38cb1d8b7cd134e 100644
--- a/docker-compose.prod.yaml
+++ b/docker-compose.prod.yaml
@@ -7,6 +7,7 @@ services:
         OAUTH_AUTHORITY: ${OAUTH_AUTHORITY}
         OIDC_REDIRECT_HOST: ${FRONTEND_REDIRECT_HOST}
         OIDC_CLIENT_ID: ${FRONTEND_OIDC_CLIENT_ID}
+        REPOSITORY_URL: ${REPOSITORY_URL}
     labels:
       traefik.http.routers.webapp.tls: true
       traefik.http.routers.webapp.tls.certResolver: letsEncrypt
diff --git a/frontend/Dockerfile b/frontend/Dockerfile
index 29d78da3627cc3740cc3fb740d7094cb16458ee8..563ceb40588823575f5e42f93b4c70283398f71d 100644
--- a/frontend/Dockerfile
+++ b/frontend/Dockerfile
@@ -36,6 +36,8 @@ ARG OIDC_REDIRECT_HOST
 ENV FRONTEND_REDIRECT_HOST=${OIDC_REDIRECT_HOST}
 ARG OIDC_CLIENT_ID
 ENV FRONTEND_OIDC_CLIENT_ID=${OIDC_CLIENT_ID}
+ARG REPOSITORY_URL
+ENV NEXT_PUBLIC_TEMPLATE_REPOSITORY=${REPOSITORY_URL}
 
 RUN yarn build
 
diff --git a/frontend/components/templates/Template.tsx b/frontend/components/templates/Template.tsx
index e07f068fb996639d6c099c410adc33d255a1570c..3cc7e61efcd0b5bb50368e9d7365b94bceaf2e65 100644
--- a/frontend/components/templates/Template.tsx
+++ b/frontend/components/templates/Template.tsx
@@ -5,6 +5,7 @@ import { Template as TemplateDto } from 'lib/client/models/template';
 import Link from 'next/link';
 import Badge from 'components/Badge';
 import Rating from 'components/Rating';
+import resolveImage from 'lib/resolveImage';
 
 type TemplateProps = {
     template: TemplateDto;
@@ -30,7 +31,11 @@ const Template: FC<TemplateProps> = ({ template }) => {
                 </div>
                 {template.picture && (
                     <div className="flex-grow-0 flex justify-center items-center">
-                        <img src={template.picture} alt="" className="max-w-[100px]" />
+                        <img
+                            src={resolveImage(template.picture)}
+                            alt=""
+                            className="max-w-[100px]"
+                        />
                     </div>
                 )}
             </div>
diff --git a/frontend/lib/resolveImage.ts b/frontend/lib/resolveImage.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1001bd5cb24e7bbf845e79292a8e1cf9775f5535
--- /dev/null
+++ b/frontend/lib/resolveImage.ts
@@ -0,0 +1,9 @@
+// TODO: only works with github repos, maybe gitlab
+const resolveImage = (relativeUrl: string) => {
+    return `${
+        process.env['NEXT_PUBLIC_TEMPLATE_REPOSITORY']?.replace('.git', '') ??
+        'https://github.com/m-team-kit/templates-hub.git'
+    }/raw/main/${relativeUrl}`;
+};
+
+export default resolveImage;
diff --git a/frontend/pages/template/[id].tsx b/frontend/pages/template/[id].tsx
index 0907ec002b6b61541e44b7067d6fa635b99d72f9..d0aa4c4517f838fdb0d91ff01955e0efc43c7889 100644
--- a/frontend/pages/template/[id].tsx
+++ b/frontend/pages/template/[id].tsx
@@ -13,6 +13,7 @@ import TemplateForm from 'components/TemplateForm';
 import Rating from 'components/Rating';
 import { Code2 } from 'lucide-react';
 import ErrorBox from 'components/ErrorBox';
+import resolveImage from 'lib/resolveImage';
 
 // TODO: SSR?
 const Template: NextPage = () => {
@@ -89,7 +90,10 @@ const Template: NextPage = () => {
                 </div>
                 <div className="flex-grow-0">
                     {template.data.data.picture && (
-                        <img src={template.data.data.picture} alt="template picture" />
+                        <img
+                            src={resolveImage(template.data.data.picture)}
+                            alt="template picture"
+                        />
                     )}
                 </div>
             </div>