diff --git a/README.md b/README.md
index 319525567cbba3fe757268ae104f6ad344b61245..3674f7b1eab6700b20fd9ac8543065a26cd8e2bb 100644
--- a/README.md
+++ b/README.md
@@ -35,3 +35,7 @@ Join us on this journey, whether you are a contributor, user or just a spectator
 The project and all participants are looking forward to your feedback, as we are continuously working to improve
 HARMONY and EIFFEL. The project is in active development.
 
+---
+
+For a simple development environment, consult [docker/dev](docker/dev/README.md).
+
diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..7bd9a8702c0b0958820528fa797f43c8d1e10b9d
--- /dev/null
+++ b/docker/dev/Dockerfile
@@ -0,0 +1,10 @@
+FROM golang:latest
+
+RUN curl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
+
+WORKDIR /app
+
+COPY ./entrypoint.sh /entrypoint.sh
+RUN chmod +x /entrypoint.sh
+
+ENTRYPOINT ["/entrypoint.sh"]
\ No newline at end of file
diff --git a/docker/dev/README.md b/docker/dev/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..60d666a99951b5f5f59c4c706020a87fe10a6fd6
--- /dev/null
+++ b/docker/dev/README.md
@@ -0,0 +1,78 @@
+# HARMONY Development Environment Guide
+
+## Getting Started
+
+The development environment runs in Docker containers and features hot-reload capabilities for Go code, and the project's dependencies (e.g. templates, translations, ...) using Air.
+
+### Prerequisites
+
+- Docker and Docker Compose installed (should come with Docker Desktop for Windows pre-installed!)
+- Git (for cloning the repository)
+
+### Starting the Development Environment
+
+1. Navigate to the development docker directory:
+
+```bash
+cd docker/dev
+```
+
+2. Start the environment:
+
+```bash
+docker compose up --build
+```
+
+The application will be available at `http://localhost:8080`. However, you'll still need DB migrations.
+
+You'll also have to set up your authorization provider of choice, consult the `config/auth.toml` for this. Consider putting your overwrite in `config/local/auth.toml` so that it's not commited to the VCS by accident.
+
+### Database Migrations
+
+Migrations can be controlled via the `RUN_MIGRATIONS` environment variable in `docker-compose.yml`:
+
+```yaml
+environment:
+  RUN_MIGRATIONS: true  # or false
+```
+
+**Important Notes:**
+
+- This setting can only be changed in the `docker-compose.yml` file
+- Setting it to `true` will run migrations on container startup
+- While migrations are versioned, keeping this enabled could lead to unexpected database changes when pulling new
+  migrations from remote
+- For controlled database updates, it's recommended to keep this `false` and run migrations manually when needed
+
+### Useful Docker Compose Commands
+
+```bash
+# Start in detached mode (run in background)
+docker compose up -d
+
+# Force recreation of containers
+docker compose up --force-recreate
+
+# Rebuild containers and start
+docker compose up --build
+
+# Stop and remove containers
+docker compose down
+
+# View logs when running in detached mode
+docker compose logs -f
+
+# Common combinations
+docker compose up -d --build  # Rebuild and start in background
+docker compose up --force-recreate --build  # Full rebuild and restart
+```
+
+### Development Workflow
+
+1. The entire project directory is mounted into the container
+2. Changes to Go files trigger automatic rebuilds via Air
+3. Application logs are visible in the Docker Compose output
+4. Database data persists across container restarts via Docker volumes
+
+Remember to rebuild the containers (`--build`) when making changes to the Docker configuration files or when new
+dependencies are added to the project.
\ No newline at end of file
diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..01e088fa7f6b0da419316599e1ef8bf43133a1b2
--- /dev/null
+++ b/docker/dev/docker-compose.yml
@@ -0,0 +1,42 @@
+services:
+  dev-pg:
+    image: postgres:latest
+    container_name: harmony-dev-pg
+    environment:
+      POSTGRES_USER: harmony
+      POSTGRES_PASSWORD: devpassword
+      POSTGRES_DB: harmony
+      PGDATA: /var/lib/postgresql/data/pgdata
+    volumes:
+      - harmony-dev-pg-data:/var/lib/postgresql/data
+    expose:
+      - "5432"
+    healthcheck:
+      test: ["CMD-SHELL", "pg_isready -U harmony"]
+      interval: 1s
+      timeout: 1s
+      retries: 15
+
+  dev-app:
+    build:
+      context: .
+    container_name: harmony-dev-app
+    volumes:
+      - ../..:/app
+    environment:
+      DB_HOST: dev-pg
+      DB_PORT: 5432
+      DB_USER: harmony
+      DB_PASS: devpassword
+      DB_NAME: harmony
+      PORT: 8080
+      RUN_MIGRATIONS: true
+    ports:
+      - "8080:8080"
+    depends_on:
+      dev-pg:
+        condition: service_healthy
+
+volumes:
+  harmony-dev-pg-data:
+    name: harmony-dev-pg-data
\ No newline at end of file
diff --git a/docker/dev/entrypoint.sh b/docker/dev/entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..6eb2eb481df23ab8dbe841ff96a1c82702200206
--- /dev/null
+++ b/docker/dev/entrypoint.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+set -e
+
+if [ "$RUN_MIGRATIONS" = "true" ]; then
+    # TODO simplify, to speed up
+    echo "Building migration tool..."
+    go build -o migrate src/cmd/migrate/*.go
+
+    echo "Running migrations..."
+    ./migrate up
+
+    echo "Removing migration tool..."
+    rm ./migrate
+fi
+
+echo "Starting development server..."
+exec air
\ No newline at end of file