diff --git a/21-Server Reference/homelab/stacks/n8n/JW_Backup/Git_Sync.tsk.xml b/21-Server Reference/homelab/stacks/n8n/JW_Backup/Git_Sync.tsk.xml
new file mode 100644
index 0000000..19d4591
--- /dev/null
+++ b/21-Server Reference/homelab/stacks/n8n/JW_Backup/Git_Sync.tsk.xml
@@ -0,0 +1,71 @@
+
+
+ 1774931800563
+ 1774932946532
+ 9
+ Git Sync
+
+ 107361459
+
+
+ <null>
+ java.lang.String
+ <null>
+ java.lang.String
+ Actions To Perform: openApp(com.viscouspot.gitsync)
+
+click(text,SYNC CHANGES)
+
+backOutOfApp()
+Not In AutoInput: true
+Not In Tasker: true
+Separator: ,
+Check Millis: 1000
+ java.lang.String
+ parameters
+ java.lang.String
+ <StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%ailastbounds
+Last Bounds
+Bounds (left,top,right,bottom) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%ailastcoordinates
+Last Coordinates
+Center coordinates (x,y) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%err
+Error Code
+Only available if you select <b>Continue Task After Error</b> and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%errmsg
+Error Message
+Only available if you select <b>Continue Task After Error</b> and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3></StringArray>
+ [Ljava.lang.String;
+ parameters plugininstanceid plugintypeid
+ java.lang.String
+ true
+ java.lang.Boolean
+ {"_action":"openApp(com.viscouspot.gitsync)\n\nclick(text,SYNC CHANGES)\n\nbackOutOfApp()","_additionalOptions":{"checkMs":"1000","separator":",","withCoordinates":false},"_whenToPerformAction":{"notInAutoInput":true,"notInTasker":true},"generatedValues":{}}
+ java.lang.String
+ 5910f160-ad6a-4b47-ab40-810a62e77df1
+ java.lang.String
+ com.joaomgcd.autoinput.intent.IntentActionv2
+ java.lang.String
+
+
+ com.joaomgcd.autoinput
+ com.joaomgcd.autoinput.activity.ActivityConfigActionv2
+
+
+
+
+ 130
+ JWL_Merge
+
+ %priority
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/21-Server Reference/homelab/stacks/n8n/JW Backup.md b/21-Server Reference/homelab/stacks/n8n/JW_Backup/JW Backup.md
similarity index 100%
rename from 21-Server Reference/homelab/stacks/n8n/JW Backup.md
rename to 21-Server Reference/homelab/stacks/n8n/JW_Backup/JW Backup.md
diff --git a/21-Server Reference/homelab/stacks/n8n/JW_Backup/JWL_Merge.tsk.xml b/21-Server Reference/homelab/stacks/n8n/JW_Backup/JWL_Merge.tsk.xml
new file mode 100644
index 0000000..8cd7981
--- /dev/null
+++ b/21-Server Reference/homelab/stacks/n8n/JW_Backup/JWL_Merge.tsk.xml
@@ -0,0 +1,86 @@
+
+
+ 1774931254224
+ 1774932950369
+ 8
+ JWL_Merge
+
+ 339
+
+
+ <StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%http_cookies
+Cookies
+The cookies the server sent in the response in the Cookie:COOKIE_VALUE format. You can use this directly in the 'Headers' field of the HTTP Request action</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%http_data
+Data
+Data that the server responded from the HTTP request.</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%http_file_output
+File Output
+Will always contain the file's full path even if you specified a directory as the File to save.</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%http_response_code
+Response Code
+The HTTP Code the server responded</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4>%http_headers()
+Response Headers
+The HTTP Headers the server sent in the response. Each header is in the 'key:value' format</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5>%http_response_length
+Response Length
+The size of the response in bytes</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5></StringArray>
+ [Ljava.lang.String;
+
+
+
+
+
+
+ http://n8n.bunny-wyvern.ts.net:5678/webhook/sync-jw-backup
+
+
+ {"device": "Samsung-Tablet-S10+"}
+
+
+
+
+
+
+ 30
+
+
+
+
+
+
+
+ 37
+
+
+ %http_data
+ 2
+ *Successful*
+
+
+
+
+ 30
+
+
+
+
+
+
+
+ 130
+ JWL_Restore_From_Git
+
+ %priority+1
+
+
+
+
+
+
+
+
+
+
+
+
+ 38
+
+
+
diff --git a/21-Server Reference/homelab/stacks/n8n/JW_Backup/JWL_Restore_From_Git.tsk.xml b/21-Server Reference/homelab/stacks/n8n/JW_Backup/JWL_Restore_From_Git.tsk.xml
new file mode 100644
index 0000000..742b2c8
--- /dev/null
+++ b/21-Server Reference/homelab/stacks/n8n/JW_Backup/JWL_Restore_From_Git.tsk.xml
@@ -0,0 +1,146 @@
+
+
+ 1774912401659
+ 1774932910304
+ 5
+ JWL_Restore_From_Git
+ 100
+
+ 20
+
+ org.jw.jwlibrary.mobile.MainActivity
+ org.jw.jwlibrary.mobile
+
+
+
+
+
+
+
+ 30
+
+
+
+
+
+
+
+ 107361459
+
+
+ <null>
+ java.lang.String
+ <null>
+ java.lang.String
+ Actions To Perform: click(id,org.jw.jwlibrary.mobile:id/nav_personal_study)
+
+click(id,org.jw.jwlibrary.mobile:id/action_backup_restore)
+
+click(text,Restore Backup)
+Not In AutoInput: true
+Not In Tasker: true
+Separator: ,
+Check Millis: 1000
+ java.lang.String
+ parameters
+ java.lang.String
+ <StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%ailastbounds
+Last Bounds
+Bounds (left,top,right,bottom) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%ailastcoordinates
+Last Coordinates
+Center coordinates (x,y) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%err
+Error Code
+Only available if you select <b>Continue Task After Error</b> and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%errmsg
+Error Message
+Only available if you select <b>Continue Task After Error</b> and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3></StringArray>
+ [Ljava.lang.String;
+ parameters plugininstanceid plugintypeid
+ java.lang.String
+ true
+ java.lang.Boolean
+ {"_action":"click(id,org.jw.jwlibrary.mobile:id/nav_personal_study)\n\nclick(id,org.jw.jwlibrary.mobile:id/action_backup_restore)\n\nclick(text,Restore Backup)","_additionalOptions":{"checkMs":"1000","separator":",","withCoordinates":false},"_whenToPerformAction":{"notInAutoInput":true,"notInTasker":true},"generatedValues":{}}
+ java.lang.String
+ 4a568374-2445-46f3-be31-a879d2940e36
+ java.lang.String
+ com.joaomgcd.autoinput.intent.IntentActionv2
+ java.lang.String
+
+
+ com.joaomgcd.autoinput
+ com.joaomgcd.autoinput.activity.ActivityConfigActionv2
+
+
+
+
+ 30
+
+
+
+
+
+
+
+ 107361459
+
+
+ <null>
+ java.lang.String
+ <null>
+ java.lang.String
+ Actions To Perform: click(text,Show roots)
+
+click(text,Spencer's Tab S8+)
+
+click(text,Vault)
+
+click(text,JW_Backups)
+
+wait(500)
+
+click(id,com.google.android.documentsui:id/icon_thumb)
+
+wait(500)
+
+click(text,RESTORE)
+
+click(text,CLOSE)
+
+wait(500)
+
+backOutOfApp()
+Not In AutoInput: true
+Not In Tasker: true
+Separator: ,
+Check Millis: 1000
+ java.lang.String
+ parameters
+ java.lang.String
+ <StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%ailastbounds
+Last Bounds
+Bounds (left,top,right,bottom) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%ailastcoordinates
+Last Coordinates
+Center coordinates (x,y) of the item that the action last interacted with</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%err
+Error Code
+Only available if you select <b>Continue Task After Error</b> and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%errmsg
+Error Message
+Only available if you select <b>Continue Task After Error</b> and the action ends in error</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3></StringArray>
+ [Ljava.lang.String;
+ parameters plugininstanceid plugintypeid
+ java.lang.String
+ true
+ java.lang.Boolean
+ {"_action":"click(text,Show roots)\n\nclick(text,Spencer's Tab S8+)\n\nclick(text,Vault)\n\nclick(text,JW_Backups)\n\nwait(500)\n\nclick(id,com.google.android.documentsui:id/icon_thumb)\n\nwait(500)\n\nclick(text,RESTORE)\n\nclick(text,CLOSE)\n\nwait(500)\n\nbackOutOfApp()","_additionalOptions":{"checkMs":"1000","separator":",","withCoordinates":false},"_whenToPerformAction":{"notInAutoInput":true,"notInTasker":true},"generatedValues":{}}
+ java.lang.String
+ b68fb928-2b48-41e9-b01f-359d4826b699
+ java.lang.String
+ com.joaomgcd.autoinput.intent.IntentActionv2
+ java.lang.String
+
+
+ com.joaomgcd.autoinput
+ com.joaomgcd.autoinput.activity.ActivityConfigActionv2
+
+
+
+
+