diff --git a/src/makefile b/src/makefile
deleted file mode 100644
index 41104ef17bbe49ca94b9b17a89739733c9844306..0000000000000000000000000000000000000000
--- a/src/makefile
+++ /dev/null
@@ -1,30 +0,0 @@
-# Server Setup
-SERVER_USER := user
-SERVER_HOST := host
-CONDA_PATH := /opt/conda
-CONDA_ENV := base
-
-# Project Directories
-REMOTE_PATH := /path/to/server/code
-LOCAL_PATH := /path/to/client/code
-
-# Output Directory
-OUTPUT_DIR := output
-
-# Files
-MAIN_SCRIPT := main.py
-LOG_FILE := logfile.log
-
-.PHONY: push exec status pull
-
-push:
-	rsync -a $(LOCAL_PATH) $(SERVER_USER)@$(SERVER_HOST):$(REMOTE_PATH)
-
-exec:
-	ssh $(SERVER_USER)@$(SERVER_HOST) 'cd $(REMOTE_PATH) && conda run -n $(CONDA_ENV) python $(MAIN_SCRIPT)'
-
-status:
-	ssh $(SERVER_USER)@$(SERVER_HOST) 'cd $(REMOTE_PATH) && tail -n 10 $(LOG_FILE)'
-
-pull:
-	rsync -a $(SERVER_USER)@$(SERVER_HOST):$(REMOTE_PATH)/$(OUTPUT_DIR) $(LOCAL_PATH)
diff --git a/src/makefile/makefile b/src/makefile/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..9c61df6794add33b87fde5177885acdddd485960
--- /dev/null
+++ b/src/makefile/makefile
@@ -0,0 +1,62 @@
+# Configuration
+
+## Server
+SERVER_USER := mmustermann
+SERVER_HOST := hyrican-1-extern
+
+## Python Environment
+CONDA_PATH := /home/$(SERVER_USER)/.local/opt/conda
+CONDA_ENV := ml
+PYTHON_VERSION := 3.10
+PYTHON_PACKAGES := tensorflow-cpu ipympl mypy jupyter pystan \
+	matplotlib seaborn scikit-learn openpyxl odfpy pyarrow \
+	geopandas descartes pyogrio optuna plotly tqdm spyder \
+	jax-jumpy moviepy shimmy-atari gymnasium-box2d \
+	ipywidgets notebook lxml fastparquet zstandard \
+	contextily networkx pyvis netgraph pip
+
+## Project Files
+MAIN_SCRIPT := main.py
+LOG_FILE := progress.log
+
+## Local Project Paths
+LOCAL_PROJECT_DIR := .
+LOCAL_OUTPUT_DIR := output
+
+## Remote Project Paths
+REMOTE_PROJECT_DIR := /home/$(SERVER_USER)/my_project
+REMOTE_OUTPUT_FILES := output/*
+
+# ---
+
+LOGIN := $(SERVER_USER)@$(SERVER_HOST)
+SSH := ssh $(LOGIN)
+RSYNC := rsync --archive --compress --progress
+CONDA := source $(CONDA_PATH)/etc/profile.d/conda.sh && conda
+
+.PHONY: install upload run kill log download delete
+
+help: # list targets and usage
+	@awk '/^[a-zA-Z0-9_-]+:/{print $1}' makefile
+
+install: # install conda environment
+	$(SSH) '$(CONDA) create -n $(CONDA_ENV) python=$(PYTHON_VERSION) $(PYTHON_PACKAGES)'
+
+upload: # upload project files from client to server
+	$(SSH) 'mkdir -p $(REMOTE_PROJECT_DIR)'
+	$(RSYNC) $(LOCAL_PROJECT_DIR)/ $(LOGIN):$(REMOTE_PROJECT_DIR)
+
+run: # execute main script on server
+	$(SSH) 'cd $(REMOTE_PROJECT_DIR) && $(CONDA) run -n $(CONDA_ENV) python $(MAIN_SCRIPT)'
+
+kill: # terminate the running script on the server
+	$(SSH) 'pkill -f $(MAIN_SCRIPT)'
+
+log: # show the last lines of the log file
+	$(SSH) 'cd $(REMOTE_PROJECT_DIR) && less $(LOG_FILE)'
+
+download: # download output files from server to client
+	$(RSYNC) $(LOGIN):$(REMOTE_PROJECT_DIR)/$(REMOTE_OUTPUT_FILES) $(LOCAL_PROJECT_DIR)/$(LOCAL_OUTPUT_DIR)
+
+delete: # remove/delete all project files on server
+	$(SSH) 'rm -rf $(REMOTE_PROJECT_DIR)'