diff --git a/.woodpecker.yaml b/.woodpecker.yaml
new file mode 100644
index 0000000..d7434dd
--- /dev/null
+++ b/.woodpecker.yaml
@@ -0,0 +1,19 @@
+steps:
+  - name: deploy
+    image: node:current-alpine
+    commands:
+      - apk add --no-cache zip curl
+      - npm install vite -g
+      - vite build
+      - (cd dist && zip -r ../project.zip ./*)
+
+      - 'AUTH_HEADER="Authorization: Bearer $PAGES_API_KEY"'
+      - API_URL=https://pages.hadeedahmad.com/pages/$(basename "$PWD")
+      - curl -s -w "%{http_code}" -F "zipfile=@project.zip" -H "$AUTH_HEADER" "$API_URL" | grep -q 200
+
+    secrets: [ PAGES_API_KEY ]
+    when:
+      - event: manual
+      - event: push
+        branch: main
+