diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml
new file mode 100644
index 0000000..4fb483f
--- /dev/null
+++ b/.forgejo/workflows/build.yaml
@@ -0,0 +1,12 @@
+on:
+  push:
+  schedule:
+    - cron: '0 0 * * *'
+jobs:
+  build:
+    runs-on: gitea-container-builder
+    steps:
+      - run: buildah login --username ${{ secrets.username }} --password ${{ secrets.password }} ${GITHUB_SERVER_URL}
+      - run: wget ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/raw/branch/${GITHUB_REF_NAME}/Dockerfile
+      - run: buildah build --isolation=chroot | tee container_id
+      - run: buildah push $(tail -n 1 container_id) ${GITHUB_SERVER_URL/https:\/\//}/${GITHUB_REPOSITORY,,}:latest
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..0c1dd61
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,6 @@
+# hadolint ignore=DL3006
+FROM alpine:latest
+RUN apk add curl python3 py3-pip
+RUN rm -f /usr/lib/*/EXTERNALLY-MANAGED
+RUN pip install esphome
+RUN pip install -r <(curl -s https://raw.githubusercontent.com/esphome/esphome/main/requirements_optional.txt)