diff --git a/.gitignore b/.gitignore
index 2cfc200..a4730c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1 @@
-checksums
 ods
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index 990daf0..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-##### Build ####################################################################
-FROM docker.io/library/golang:1.23-alpine
-
-WORKDIR /usr/src/app
-
-COPY checksums /
-RUN CGO_ENABLED=0 go build -o /usr/local/bin/ods ./
-
-##### Run ######################################################################
-FROM alpine:3.20
-
-ENV LANG en_US.utf8
-
-RUN apk upgrade --no-cache
-
-COPY --from=0 /usr/local/bin/ods /usr/local/bin/
-
-ENTRYPOINT ["/usr/local/bin/ods"]
diff --git a/GNUmakefile b/GNUmakefile
index c86fa6b..d4b71b2 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -5,12 +5,40 @@ SHELL := bash
 MAKEFLAGS += --warn-undefined-variables
 MAKEFLAGS += --no-builtin-rules
 .DEFAULT_GOAL := help
-OUTDIR := "."
 
-CONTAINER_REGISTRY ?= localhost
-CONTAINER_TAG ?= latest
+##### Quality ##################################################################
+.PHONY: check
+check: ## run all code checks
+	go mod verify
+	go vet ./...
 
-DEPS := Dockerfile GNUmakefile go.mod go.sum index.html main.go ods.txt
+.PHONY: tidy
+tidy: ## tidy up the code
+	go fmt ./...
+	go mod tidy -v
+
+##### Development ##############################################################
+.PHONY: build
+build: git-crypt-unlocked ## build the code
+	CGO_ENABLED=0 go build -o ./ods ./
+
+.PHONY: clean
+clean: ## clean the code
+	rm -f ./ods
+
+.PHONY: run
+run: git-crypt-unlocked ## run the code
+	go run ./
+
+##### Operations ###############################################################
+.PHONY: push
+push: tidy no-dirty check ## push changes to git remote
+	git push git main
+
+.PHONY: deploy
+deploy: build confirm ## deploy changes to the production server
+	rsync ./ods root@ods.adyxax.org:/usr/local/bin/
+	ssh root@ods.adyxax.org "systemctl restart ods"
 
 ##### Utils ####################################################################
 .PHONY: confirm
@@ -34,59 +62,3 @@ help:
 .PHONY: no-dirty
 no-dirty:
 	git diff --exit-code
-
-##### Quality ##################################################################
-.PHONY: check
-check: ## run all code checks
-	go mod verify
-	go vet ./...
-
-.PHONY: tidy
-tidy: ## tidy up the code
-	go fmt ./...
-	go mod tidy -v
-
-##### Development ##############################################################
-.PHONY: build
-build: ods ## build the code
-
-.PHONY: clean
-clean: ## clean the code
-	rm -f $(OUTDIR)/ods
-
-ods: git-crypt-unlocked $(DEPS)
-	CGO_ENABLED=0 go build -o $(OUTDIR)/ods ./
-
-.PHONY: git-crypt-unlocked ## run
-run: ## run the code
-	go run ./
-
-##### Containers ###############################################################
-.PHONY: container-build
-container-build: git-crypt-unlocked ## build the container image
-	@printf $(DEPS) | xargs shasum >checksums
-	podman build \
-	    -v $$PWD:/usr/src/app \
-	    -t $(CONTAINER_REGISTRY)/ods:$(CONTAINER_TAG) \
-	    .
-
-.PHONY: container-push
-container-push: ## push the container image to the container registry
-	podman push \
-            $(CONTAINER_REGISTRY)/ods:$(CONTAINER_TAG)
-
-.PHONY: container-run
-container-run: ## run the code inside podman
-	podman run --rm -ti \
-	    -p 8090:8090 \
-	    $(CONTAINER_REGISTRY)/ods:$(CONTAINER_TAG)
-
-##### Operations ###############################################################
-.PHONY: push
-push: tidy no-dirty check ## push changes to git remote
-	git push git master
-
-.PHONY: deploy
-deploy: ods ## deploy changes to the production server
-	rsync $(OUTDIR)/ods root@ods.adyxax.org:/usr/local/bin/
-	ssh root@ods.adyxax.org "systemctl restart ods"