diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 1c90459..6684257 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -1,19 +1,17 @@
 # This is a basic workflow to help you get started with Actions
 
-name: deploy
+name: build and deploy main
 
 # Controls when the action will run. Triggers the workflow on push or pull request
 # events but only for the master branch
 on:
   push:
     branches: [master]
-  pull_request:
-    branches: [master]
 
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
   # This workflow contains a single job called "build"
-  deploy:
+  build-and-deploy:
     # The type of runner that the job will run on
     runs-on: ubuntu-latest
     # Steps represent a sequence of tasks that will be executed as part of the job
diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml
new file mode 100644
index 0000000..07a2f0d
--- /dev/null
+++ b/.github/workflows/staging.yml
@@ -0,0 +1,47 @@
+# This is a basic workflow to help you get started with Actions
+
+name: build and deploy staging
+
+# Controls when the action will run. Triggers the workflow on push or pull request
+# events but only for the master branch
+on:
+  push:
+    branches: [staging]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "build"
+  build-and-deploy:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - uses: actions/checkout@v2
+      - name: Set Node.js
+        uses: actions/setup-node@master
+        with:
+          node-version: 16.x
+          cache: yarn
+      - name: Install dependencies
+        run: yarn install --prod --pure-lockfile
+      - name: Gatsby cache
+        uses: actions/cache@v2
+        with:
+          key: ${{ runner.os }}-gatsby-build-${{ github.run_id }}
+          restore-keys: |
+            ${{ runner.os }}-gatsby-build-
+          path: |
+            public
+            .cache
+      - name: Build
+        run: yarn run build
+      - name: upload
+        uses: burnett01/rsync-deployments@4.1
+        with:
+          switches: -zr --delete --exclude node_modules --exclude '.git*'
+          path: ./public/
+          remote_path: www/personal-website-staging
+          remote_host: droplet.chuckdries.com
+          remote_user: ${{ secrets.CI_USER }}
+          remote_key: ${{ secrets.CI_SSH_KEY }}