diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9adc64f672889d0178b5e8d8c886892d168f8351..0054a049dae406e074e8134457c2bcfad9c276b7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,7 +5,7 @@ stages:
   - publish
 
 codestyle:
-  image: python:3.8-buster
+  image: python:3.11-bullseye
   stage: test
   needs: []
   script:
@@ -15,7 +15,7 @@ codestyle:
   allow_failure: true
 
 sanitycheck:
-  image: python:3.8-buster
+  image: python:3.11-bullseye
   services:
     - postgres:13.0
   stage: prepare
@@ -143,7 +143,7 @@ test_internals:
   stage: test
   needs:
     - build_test
-  image: python:3.8-buster
+  image: python:3.11-bullseye
   variables:
     FF_NETWORK_PER_BUILD: 1
     POSTGRES_DB: fnord
@@ -207,7 +207,7 @@ test_nginx_static:
   stage: test
   needs:
     - build_nginx
-  image: python:3.8-buster
+  image: python:3.11-bullseye
   variables:
     FF_NETWORK_PER_BUILD: 1
     BASE_URL: http://nginx
@@ -269,7 +269,7 @@ deploy_develop:
   stage: publish
   needs:
     - publish
-  image: python:3.8-buster
+  image: python:3.11-bullseye
   script:
     - 'curl -X POST "$DEPLOYMENT_SERVICEWEBHOOK_URL_DEVELOP"'
   rules:
@@ -292,7 +292,7 @@ deploy_production:
   stage: publish
   needs:
     - publish
-  image: python:3.8-buster
+  image: python:3.11-bullseye
   script:
     - 'curl -X POST "$DEPLOYMENT_SERVICEWEBHOOK_URL_PRODUCTION"'
   rules:
diff --git a/Dockerfile b/Dockerfile
index 199309182722eb9910d30581122af6272a25c9db..7a4129e4dfa41b3674cbc6bd231d34b40e7d0377 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.9-bullseye as base
+FROM python:3.11-bullseye as base
 
 ARG DEVELOPMENT=False
 
diff --git a/README.md b/README.md
index 623be37767249dd38fd84d13e0213bec69a8eb8f..cad9099d3c0a6a8d85740ad31f8147c3ea7123a7 100644
--- a/README.md
+++ b/README.md
@@ -60,7 +60,7 @@ Bietet eine von allen Seiten gemeinsam einbindbare Navigationsleiste im jeweilig
 
 # Lokale Entwicklung
 
-Dieses Projekt basiert auf Python 3.8+ und Django 3.1+.
+Dieses Projekt basiert auf Python 3.11+ und Django 4.2+.
 
 ## Initiale Einrichtung
 
@@ -79,7 +79,7 @@ Das Docker development image vereinfacht die initiale Einrichtung und sperrt all
 
 ### Lokale Einrichtung
 
-1. Installiere, falls noch nicht geschehen, Python in Version 3.8 (oder höher) und habe eine PostgreSQL-Datenbank zur Hand (geht potenziell auch mit sqlite aber das ist nicht getestet). Außerdem wird unter Umständen [GNU gettext](https://www.gnu.org/software/gettext/) benötigt, wenn man Übersetzungen kompilieren will. Alternativ kann auch das [docker dev image](#docker-dev-image) verwendet werden.
+1. Installiere, falls noch nicht geschehen, Python in Version 3.11 (oder höher) und habe eine PostgreSQL-Datenbank zur Hand (geht potenziell auch mit sqlite aber das ist nicht getestet). Außerdem wird unter Umständen [GNU gettext](https://www.gnu.org/software/gettext/) benötigt, wenn man Übersetzungen kompilieren will. Alternativ kann auch das [docker dev image](#docker-dev-image) verwendet werden.
    * Linux: Pakete `python3`, `postgresql` und `gettext`
    * Mac: `brew install python3 postgresql gettext` bzw. https://postgresapp.com/
    * Windows: [latest stable Python 3 release](https://www.python.org/downloads/windows/) und [PostgreSQL Installer](https://www.postgresql.org/download/windows/) und [gettext binaries](https://mlocati.github.io/articles/gettext-iconv-windows.html)
diff --git a/src/.envrc b/src/.envrc
index 5c5d3d60ba999d4a678b1faa6f27922fc315dd1e..99db30bebedc2cd6bb11e114e283f659482709e0 100644
--- a/src/.envrc
+++ b/src/.envrc
@@ -1,3 +1,4 @@
+layout pyenv 3.11.3
 layout python3
 export DJANGO_SETTINGS_MODULE=rc3platform.settings.dev
 export DJANGO_HOST=127.0.0.1