summaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorrepliqa <sarzilhossain@proton.me>2025-07-23 14:06:15 +0600
committerrepliqa <sarzilhossain@proton.me>2025-07-23 14:06:15 +0600
commit69acb7a82a68eeb439e55b994281056df52c81b1 (patch)
tree7c6a53694e11511a3014470c213255a503f9c95e /web
v0.0.1alphaHEADmain
Diffstat (limited to 'web')
-rw-r--r--web/archetypes/default.md6
-rw-r--r--web/content.en/_index.md27
-rw-r--r--web/content.en/docs/_index.md5
-rw-r--r--web/content.en/docs/android/_index.md5
-rw-r--r--web/content.en/docs/android/anyconnect.md.j297
-rw-r--r--web/content.en/docs/android/nekobox.md.j290
-rw-r--r--web/content.en/docs/android/nekossh.md.j296
-rw-r--r--web/content.en/docs/windows/_index.md5
-rw-r--r--web/content.en/docs/windows/nekoray.md.j288
-rw-r--r--web/content.en/docs/windows/openconnect.md.j253
-rw-r--r--web/content.fa/_index.md25
-rw-r--r--web/content.fa/docs/_index.md5
-rw-r--r--web/content.fa/docs/android/_index.md5
-rw-r--r--web/content.fa/docs/android/anyconnect.md.j297
-rw-r--r--web/content.fa/docs/android/nekobox.md.j290
-rw-r--r--web/content.fa/docs/android/nekossh.md.j296
-rw-r--r--web/content.fa/docs/windows/_index.md5
-rw-r--r--web/content.fa/docs/windows/nekoray.md.j288
-rw-r--r--web/content.fa/docs/windows/openconnect.md.j253
-rw-r--r--web/hugo.toml.j229
-rw-r--r--web/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content1
-rw-r--r--web/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json1
-rw-r--r--web/static/fonts/BNazanin.eotbin0 -> 57856 bytes
-rw-r--r--web/static/fonts/BNazanin.ttfbin0 -> 57656 bytes
-rw-r--r--web/static/fonts/BNazanin.woffbin0 -> 25692 bytes
-rwxr-xr-xweb/static/images/anyconnect-01.pngbin0 -> 83290 bytes
-rwxr-xr-xweb/static/images/anyconnect-02.pngbin0 -> 38121 bytes
-rwxr-xr-xweb/static/images/anyconnect-03.pngbin0 -> 33454 bytes
-rwxr-xr-xweb/static/images/anyconnect-04.pngbin0 -> 100573 bytes
-rwxr-xr-xweb/static/images/anyconnect-05.pngbin0 -> 35508 bytes
-rwxr-xr-xweb/static/images/anyconnect-06.pngbin0 -> 41196 bytes
-rwxr-xr-xweb/static/images/anyconnect-07.pngbin0 -> 38017 bytes
-rwxr-xr-xweb/static/images/anyconnect-08.pngbin0 -> 52350 bytes
-rwxr-xr-xweb/static/images/anyconnect-09.pngbin0 -> 16228 bytes
-rwxr-xr-xweb/static/images/anyconnect-10.pngbin0 -> 22772 bytes
-rwxr-xr-xweb/static/images/anyconnect-11.pngbin0 -> 56838 bytes
-rwxr-xr-xweb/static/images/anyconnect-12.pngbin0 -> 27932 bytes
-rwxr-xr-xweb/static/images/anyconnect-13.pngbin0 -> 22172 bytes
-rwxr-xr-xweb/static/images/anyconnect-14.pngbin0 -> 50920 bytes
-rwxr-xr-xweb/static/images/anyconnect-15.pngbin0 -> 31684 bytes
-rwxr-xr-xweb/static/images/anyconnect-16.pngbin0 -> 14556 bytes
-rwxr-xr-xweb/static/images/anyconnect-17.pngbin0 -> 57558 bytes
-rwxr-xr-xweb/static/images/anyconnect-18.pngbin0 -> 34543 bytes
-rwxr-xr-xweb/static/images/anyconnect-19.pngbin0 -> 36856 bytes
-rwxr-xr-xweb/static/images/nekobox-01.pngbin0 -> 28819 bytes
-rwxr-xr-xweb/static/images/nekobox-02.pngbin0 -> 24957 bytes
-rwxr-xr-xweb/static/images/nekobox-03.pngbin0 -> 20843 bytes
-rwxr-xr-xweb/static/images/nekobox-04.pngbin0 -> 33699 bytes
-rwxr-xr-xweb/static/images/nekobox-05.pngbin0 -> 30678 bytes
-rwxr-xr-xweb/static/images/nekobox-06.pngbin0 -> 34139 bytes
-rwxr-xr-xweb/static/images/nekobox-07.pngbin0 -> 11749 bytes
-rwxr-xr-xweb/static/images/nekobox-08.pngbin0 -> 23623 bytes
-rwxr-xr-xweb/static/images/nekobox-09.pngbin0 -> 18134 bytes
-rwxr-xr-xweb/static/images/nekobox-10.pngbin0 -> 17034 bytes
-rwxr-xr-xweb/static/images/nekobox-12.pngbin0 -> 160376 bytes
-rwxr-xr-xweb/static/images/nekoray-1.pngbin0 -> 9368 bytes
-rwxr-xr-xweb/static/images/nekoray-10.pngbin0 -> 10286 bytes
-rwxr-xr-xweb/static/images/nekoray-11.pngbin0 -> 10280 bytes
-rwxr-xr-xweb/static/images/nekoray-12.pngbin0 -> 67684 bytes
-rwxr-xr-xweb/static/images/nekoray-13.pngbin0 -> 41102 bytes
-rwxr-xr-xweb/static/images/nekoray-2.pngbin0 -> 29204 bytes
-rwxr-xr-xweb/static/images/nekoray-3.pngbin0 -> 39641 bytes
-rwxr-xr-xweb/static/images/nekoray-4.pngbin0 -> 39791 bytes
-rwxr-xr-xweb/static/images/nekoray-5.pngbin0 -> 31338 bytes
-rwxr-xr-xweb/static/images/nekoray-6.pngbin0 -> 40105 bytes
-rwxr-xr-xweb/static/images/nekoray-7.pngbin0 -> 46154 bytes
-rwxr-xr-xweb/static/images/nekoray-8.pngbin0 -> 29514 bytes
-rwxr-xr-xweb/static/images/nekoray-9.pngbin0 -> 10282 bytes
-rwxr-xr-xweb/static/images/nekossh-01.pngbin0 -> 21058 bytes
-rwxr-xr-xweb/static/images/nekossh-02.pngbin0 -> 37307 bytes
-rwxr-xr-xweb/static/images/nekossh-03.pngbin0 -> 39504 bytes
-rwxr-xr-xweb/static/images/nekossh-04.pngbin0 -> 38363 bytes
-rwxr-xr-xweb/static/images/nekossh-05.pngbin0 -> 39561 bytes
-rwxr-xr-xweb/static/images/nekossh-06.pngbin0 -> 17785 bytes
-rwxr-xr-xweb/static/images/windows-oc-01.pngbin0 -> 36798 bytes
-rwxr-xr-xweb/static/images/windows-oc-02.pngbin0 -> 21108 bytes
-rwxr-xr-xweb/static/images/windows-oc-03.pngbin0 -> 26363 bytes
-rwxr-xr-xweb/static/images/windows-oc-04.pngbin0 -> 6582 bytes
-rwxr-xr-xweb/static/images/windows-oc-05.pngbin0 -> 10510 bytes
-rwxr-xr-xweb/static/images/windows-oc-06.pngbin0 -> 11782 bytes
-rwxr-xr-xweb/static/images/windows-oc-08.pngbin0 -> 10988 bytes
-rwxr-xr-xweb/static/nekoboxsetting/Nekobox-Settings.json48
-rw-r--r--web/themes/README.md2
83 files changed, 1017 insertions, 0 deletions
diff --git a/web/archetypes/default.md b/web/archetypes/default.md
new file mode 100644
index 00000000..00e77bd7
--- /dev/null
+++ b/web/archetypes/default.md
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+
diff --git a/web/content.en/_index.md b/web/content.en/_index.md
new file mode 100644
index 00000000..39d79381
--- /dev/null
+++ b/web/content.en/_index.md
@@ -0,0 +1,27 @@
+---
+title: Introduction
+type: docs
+---
+
+# Reactance
+
+## Motivation
+{{< hint info >}}
+In psychology, reactance is an unpleasant motivational reaction to offers, persons, rules, or regulations that threaten or eliminate specific behavioral freedoms.
+{{< /hint >}}
+
+Reactance helps you bypass government's internet censorships. It itself is not a VPN or proxy protocol but it's an automation that sets up finely selected proxy and VPN servers that can bypass these restrictions.
+
+## Getting Started
+
+Reactance doesn't have a client of its own. Instead, we provide documentations and credentials for you to know how to connect to the proxy and VPN servers through specific clients. The clients are organized based on OSes. Simply click on the client names on the left navigation bar based on your Operating System to know how to connect to the servers.
+
+{{< hint warning >}}
+**Note:** Please setup the VPN connections within 24 hour period because the website will be deleted after 24 hours and you wouldn't be able to access it.
+{{< /hint >}}
+
+{{< hint danger >}}
+A VPN is not a ticket to freedom!
+All it does is exchange one country's censorship policies for another one's.
+Please refrain from criminal activities, whether they be western-ideological or real like torrenting and piracy, to ensure the service's continued existence free from trouble.
+{{< /hint >}} \ No newline at end of file
diff --git a/web/content.en/docs/_index.md b/web/content.en/docs/_index.md
new file mode 100644
index 00000000..dfd18748
--- /dev/null
+++ b/web/content.en/docs/_index.md
@@ -0,0 +1,5 @@
+---
+bookFlatsection: true
+title: Introduction
+type: docs
+---
diff --git a/web/content.en/docs/android/_index.md b/web/content.en/docs/android/_index.md
new file mode 100644
index 00000000..669d6c8b
--- /dev/null
+++ b/web/content.en/docs/android/_index.md
@@ -0,0 +1,5 @@
+---
+bookFlatSection: true
+title: Android Clients
+weight: 2
+---
diff --git a/web/content.en/docs/android/anyconnect.md.j2 b/web/content.en/docs/android/anyconnect.md.j2
new file mode 100644
index 00000000..c3a97a6e
--- /dev/null
+++ b/web/content.en/docs/android/anyconnect.md.j2
@@ -0,0 +1,97 @@
+---
+title: AnyConnect
+type: docs
+---
+
+# AnyConnect
+
+1. Install the android **Cisco AnyConnect** app from Google PlayStore. Click on the button below and it will take you to its Google Play Store page.
+
+{{ '{{<' }} button href="https://play.google.com/store/apps/details?id=com.cisco.anyconnect.vpn.android.avf&hl=en&gl=US" {{ '>}}' }}**Download Cisco AnyConnect from Google Play Store**{{ '{{<' }} /button {{ '>}}' }}
+
+2. Download your certificate file by clicking the button below:
+
+{{ '{{<' }} button href="/{{item}}/{{item}}-Certificate-Android.p12" {{ '>}}' }}**Download client .P12 certificate file**{{ '{{<' }} /button {{ '>}}' }}
+
+3. Launch the app.
+
+4. Click on **OK** to close the intial terms of service notice.
+
+![AnyConnect-01](/images/anyconnect-01.png)
+
+5. Grant it the relevant permissions (Access to your **notifications**, in this case).
+
+![AnyConnect-02](/images/anyconnect-02.png)
+
+6. Click on the menu button on top right corner and go to **“Settings”**.
+
+![AnyConnect-03](/images/anyconnect-03.png)
+
+7. Uncheck the second option that says **“Block Untrusted Servers”**.
+
+![AnyConnect-04](/images/anyconnect-04.png)
+
+8. Click on the arrow icon on top left corner to go back to the home menu of the app.
+
+9. In the middle of the screen, click on **“Connections”**.
+
+![AnyConnect-05](/images/anyconnect-05.png)
+
+10. Click on the + icon at the bottom of the screen.
+
+![AnyConnect-06](/images/anyconnect-06.png)
+
+11. In the next window:
+
+ 1. Enter any name you want.
+
+ 2. Enter the following server address and port: **{{ ansible_all_ipv4_addresses[0] }}:{{ ocserv_port | default(4430) }}**
+
+ 3. Once you entered the server address, click on **“Advanced Preferences”**.
+
+![AnyConnect-07](/images/anyconnect-07.png)
+
+12. Click on the first option that says **“Certificate”**.
+
+![AnyConnect-08](/images/anyconnect-08.png)
+
+13. Click on the **“Import”** button at the bottom of the screeen.
+
+![AnyConnect-09](/images/anyconnect-09.png)
+
+14. Click on **“File System”**. It should open your file browser app.
+
+![AnyConnect-10](/images/anyconnect-10.png)
+
+15. Find the **.p12 certificate** file that you downloaded in step 2.
+
+![AnyConnect-11](/images/anyconnect-11.png)
+
+16. It will ask for a password. The password is: **{{ item }}**
+
+![AnyConnect-12](/images/anyconnect-12.png)
+
+17. Once the certificate is imported, click on it.
+
+![AnyConnect-13](/images/anyconnect-13.png)
+
+18. Click on **“Done”** at the bottom of the screen, and click on **“Done”** again.
+
+![AnyConnect-14](/images/anyconnect-14.png)
+![AnyConnect-15](/images/anyconnect-15.png)
+
+19. Click on the arrow icon at the top left corner.
+
+![AnyConnect-16](/images/anyconnect-16.png)
+
+20. **Turn on** the VPN by clicking on the VPN toggle.
+
+![AnyConnect-17](/images/anyconnect-18.png)
+
+21. Click on **“Continue”**.
+
+![AnyConnect-18](/images/anyconnect-17.png)
+
+22. And that's it! You can check your IP location to ensure that you are connected to the VPN and it's working properly.
+
+![AnyConnect-19](/images/anyconnect-19.png) \ No newline at end of file
diff --git a/web/content.en/docs/android/nekobox.md.j2 b/web/content.en/docs/android/nekobox.md.j2
new file mode 100644
index 00000000..450635c9
--- /dev/null
+++ b/web/content.en/docs/android/nekobox.md.j2
@@ -0,0 +1,90 @@
+---
+title: NekoBox (V2Ray)
+type: docs
+weight: 1
+---
+
+# NekoBox
+
+In this tutorial you will learn how to use NekoBox VPN client on android devices.
+
+NekoBox is a VPN client supporting a variety of VPN protocols, and we will be using this handy client to use our main VPN protocols on android devices, including VLess, VMess, and Trojan.
+
+## How to install and use NekoBox:
+
+1. Go to NekoBox's GitHub page by clicking the button below. Download the APK that is compatible with your device. (In most cases, arm64-v8a version is compatible unless you have an old smartphone.)
+
+{{ '{{<' }} button href="https://github.com/MatsuriDayo/NekoBoxForAndroid/releases/tag/1.2.9" {{ '>}}' }}**NekoBox's GitHub Page**{{ '{{<' }} /button {{ '>}}' }}
+
+![Nekobox-01](/images/nekobox-12.png)
+
+{{ '{{<' }} hint danger {{ '>}}' }}
+**Warning**
+The version of Nekobox that you can download from Google Play Store is not developed by the official developer of NekoBox, **please do not use that application.**
+{{ '{{<' }} /hint {{ '>}}' }}
+
+2. Install the application and open it.
+
+3. Grant it the permission to send you notifications (if asked).
+
+![Nekobox-02](/images/nekobox-01.png)
+
+4. In the **“VpnService Policy”**, click on YES.
+
+![Nekobox-03](/images/nekobox-02.png)
+
+5. Download the NekoBox Settings file by clicking on the button below.
+
+{{ '{{<' }} button href="/nekoboxsetting/Nekobox-Settings.json" {{ '>}}' }}**Download NekoBox Settings**{{ '{{<' }} /button {{ '>}}' }}
+
+6. Open the **dashboard** by clicking on the menu icon on the top left corner of the interface and **“Tools”**.
+
+![Nekobox-04](/images/nekobox-03.png)
+
+7. Go to the **“Backup”** tab and click on **“Import from file”** button.
+
+![Nekobox-05](/images/nekobox-04.png)
+
+8. Select the setting file that you downloaded from **step 5**, then click on **“IMPORT”**.
+
+![Nekobox-06](/images/nekobox-05.png)
+![Nekobox-07](/images/nekobox-06.png)
+
+9. If done **properly**, the UI should then turn **blue** and you should be brought back to the main screen of the app.
+
+10. Copy the VPN URL of your of the protocol of your choice (**VMess**, **VLess** and/or **Trojan**) from below:
+
+{% if users[item].vless is defined %}
+```
+{{ users[item].vless }}
+```
+{% endif %}
+
+{% if users[item].vmess is defined %}
+```
+{{ users[item].vmess }}
+```
+{% endif %}
+
+{% if users[item].trojan is defined %}
+```
+{{ users[item].trojan }}
+```
+{% endif %}
+
+11. In the app, click on the + icon on at the top of the interface, and select **“Import from Clipboard”**. (Note: If it's imported successfully but the VPN profle doesn't appear in the list of your VPN profiles, close the app and open it again, and it will appear in the list.)
+
+![Nekobox-08](/images/nekobox-07.png)
+![Nekobox-09](/images/nekobox-08.png)
+
+12. Click on the VPN profile that was just added to select it. If you have multiple VPN profiles, the one that has a **highlight** on its left side is the one that is selected.
+
+13. Click on the **button** at the bottom of the screen to connect to the VPN profile.
+
+![Nekobox-10](/images/nekobox-09.png)
+
+14. To check the latency of the VPN profile, click on the tab that says **“Connected, tap to check connection”**. It will tell you the latency in milliseconds.
+
+![Nekobox-11](/images/nekobox-10.png)
+
+15. And that's it! You can check your IP location to ensure that you are connected to the VPN and it's working properly.
diff --git a/web/content.en/docs/android/nekossh.md.j2 b/web/content.en/docs/android/nekossh.md.j2
new file mode 100644
index 00000000..181b0520
--- /dev/null
+++ b/web/content.en/docs/android/nekossh.md.j2
@@ -0,0 +1,96 @@
+---
+title: SecureShell (SSH)
+type: docs
+weight: 1
+---
+
+# SecureShell (SSH) on NekoBox
+
+In this tutorial you will learn how to make use of the SSH VPN service using NekoBox.
+
+NekoBox is a VPN client supporting a variety of VPN protocols, and we will be using this handy client to use SecureShell (SSH) VPN protocol.
+
+**Please note that SSH is meant to be used as a last resort option in case the other methods don't work.**
+
+## How to install and use NekoBox for SSH VPN:
+
+1. Go to NekoBox's GitHub page by clicking the link below. Download the APK that is compatible with your device. (In most cases, arm64-v8a version is compatible unless you have an old smartphone.)
+
+{{ '{{<' }} button href="https://github.com/MatsuriDayo/NekoBoxForAndroid/releases/tag/1.2.9" {{ '>}}' }}**NekoBox's GitHub Page**{{ '{{<' }} /button {{ '>}}' }}
+
+![NekoSSH-01](/images/nekobox-12.png)
+
+{{ '{{<' }} hint danger {{ '>}}' }}
+**Warning**
+The version of Nekobox that you can download from Google Play Store is not developed by the official developer of NekoBox, **please do not use that application.**
+{{ '{{<' }} /hint {{ '>}}' }}
+
+2. Install the application and open it.
+
+3. Grant it the permission to send you notifications (if asked).
+
+![NekoSSH-02](/images/nekobox-01.png)
+
+4. In the **“VpnService Policy”**, click on YES.
+
+![NekoSSH-03](/images/nekobox-02.png)
+
+5. Download the NekoBox Settings file by clicking on the link below.
+
+[**Download NekoBox Settings**](/nekoboxsettings/Nekobox-Settings.json)
+
+6. Open the **dashboard** by clicking on the menu icon on the top left corner of the interface and **“Tools”**.
+
+![NekoSSH-04](/images/nekobox-03.png)
+
+7. Go to the **“Backup”** tab and click on **“Import from file”** button.
+
+![NekoSSH-05](/images/nekobox-04.png)
+
+8. Select the setting file that you downloaded from **step 5**, then click on **“IMPORT”**.
+
+![NekoSSH-06](/images/nekobox-05.png)
+![NekoSSH-07](/images/nekobox-06.png)
+
+9. If done **properly**, the UI should then turn **blue** and you should be brought back to the main screen of the app.
+
+10. In the app, click on the + icon on at the top of the interface, and select **"Manual"**, then click on **"SSH"**
+
+![NekoSSH-08](/images/nekobox-07.png)
+![NekoSSH-09](/images/nekossh-01.png)
+![NekoSSH-10](/images/nekossh-02.png)
+
+11. In the next menu, click on the option that says **"Authentication Type"** and change it to **"Public Key".**
+
+![NekoSSH-11](/images/nekossh-03.png)
+![NekoSSH-12](/images/nekossh-04.png)
+
+12. Once you've done the preivous step, **copy** and **paste** the following values in their respective fields.
+
+ 1. Any name that you want.
+
+ 2. {{ ansible_all_ipv4_addresses[0] }}
+
+ 3. **sshvpn**
+
+ 4. Copy and paste the entire box below and paste it in field **#4**.
+
+```bash
+{{ users[item].sshvpn }}
+```
+
+![NekoSSH-13](/images/nekossh-05.png)
+
+13. Once done, click on the checkmark button at top right corner. (Note: If it's imported successfully but the VPN profle doesn't appear in the list of your VPN profiles, close the app and open it again, and it will appear in the list.)
+
+14. Click on the VPN profile that was just added to select it. If you have multiple VPN profiles, the one that has a **highlight** on its left side is the one that is selected.
+
+13. Click on the **button** at the bottom of the screen to connect to the VPN profile.
+
+![NekoSSH-14](/images/nekossh-06.png)
+
+14. To check the latency of the VPN profile, click on the tab that says **“Connected, tap to check connection”**. It will tell you the latency in milliseconds.
+
+![NekoSSH-15](/images/nekobox-10.png)
+
+15. And that's it! You can check your IP location to ensure that you are connected to the VPN and it's working properly.
diff --git a/web/content.en/docs/windows/_index.md b/web/content.en/docs/windows/_index.md
new file mode 100644
index 00000000..fa3a83c1
--- /dev/null
+++ b/web/content.en/docs/windows/_index.md
@@ -0,0 +1,5 @@
+---
+bookFlatSection: true
+title: Windows Clients
+weight: 1
+---
diff --git a/web/content.en/docs/windows/nekoray.md.j2 b/web/content.en/docs/windows/nekoray.md.j2
new file mode 100644
index 00000000..a9f533cf
--- /dev/null
+++ b/web/content.en/docs/windows/nekoray.md.j2
@@ -0,0 +1,88 @@
+---
+title: NekoRay (V2Ray)
+type: docs
+---
+
+# NekoRay
+
+In this tutorial you will learn how to use NekoRay VPN client on Windows devices.
+
+NekoRay is a VPN client supporting a variety of VPN protocols, and we will be using this handy client to use our main VPN protocols on desktop computers, including VLess, VMess, and Trojan.
+
+## How to use NekoRay:
+
+1. Go to NekoRay's GitHub page by clicking the button below. Click on the link that is highlighted in the screenshot below and download NekoRay. It doesn't need installation, just extract it somewhere in your computer (it doesn't matter where but preferably somewhere easy to find).
+
+{{ '{{<' }} button href="https://github.com/MatsuriDayo/nekoray/releases" {{ '>}}' }}**NekoRay's GitHub Page**{{ '{{<' }} /button {{ '>}}' }}
+
+![Nekoray-01](/images/nekoray-12.png)
+
+2. Go to the folder where you extracted NekoRay and launch “nekoray” **as administrator**.
+
+![Nekoray-02](/images/nekoray-13.png)
+
+3. Click on the button that says “sing-box”
+
+![Nekoray-03](/images/nekoray-1.png)
+
+4. You will see the interface of the program in front of you. Click on the “Program” button at the top left corner.
+
+![Nekoray-04](/images/nekoray-2.png)
+
+5. Click on “Remember last profile”.
+
+![Nekoray-05](/images/nekoray-3.png)
+
+6. Copy the VPN URL of your of the protocol of your choice (VMess, VLess and/or Trojan) from below and then click on the “Program” button. This time, click on “Add profile from clipboard”.
+
+{% if users[item].vless is defined %}
+```
+{{ users[item].vless }}
+```
+{% endif %}
+
+{% if users[item].vmess is defined %}
+```
+{{ users[item].vmess }}
+```
+{% endif %}
+
+{% if users[item].trojan is defined %}
+```
+{{ users[item].trojan }}
+```
+{% endif %}
+
+![Nekoray-06](/images/nekoray-4.png)
+
+7. You will see that the VPN profile will appear in the middle. Right click on the VPN profile and choose “Start” (or click on the VPN profile and press Enter)
+
+![Nekoray-07](/images/nekoray-6.png)
+
+8. You will see a checkmark appear next to the VPN profile and the text turns blue. This happens when a VPN profile is selected. To select another profile, repeat the previous step (Step 5) on another profile.
+
+9. In order to turn on the VPN and access the internet, you will need to click on either of the two VPN modes: “System Proxy” and “Tun Mode”. Click on “Tun Mode”. This will tunnel all of your computer's internet traffic through the VPN, this includes all the programs. (You need to run the program as Administrator in order to use “Tun Mode”. If you haven't done so, you will be asked whether or not you want to run the program as Administrator.).
+
+![Nekoray-08](/images/nekoray-7.png)
+
+10. After clicking on “Tun Mode”, you will notice that a red dot appears on the system tray icon of NekoRay. This is to indicate that “Tun Mode” is on.
+
+![Nekoray-09](/images/nekoray-11.png)
+
+11. To turn the VPN off, simply click on the “Tun Mode” checkbox again. Do remember to turn off the VPN when you're done using it. Do not turn your PC off or close the program while the VPN is connected.
+
+12. And that's it! You can check your IP location to ensure that you are connected to the VPN and it's working properly.
+
+## Other notes
+
+1. You can turn the VPN on or off via the system tray icon. Right click on the system tray icon and go to system proxy and then choose either mode.
+
+![Nekoray-10](/images/nekoray-8.png)
+
+2. “System Proxy” mode activates the VPN via a proxy. This mode only works for browsers or web-clients (such as Discord's desktop app) and it will not work on any software is not browser-based (such as online games).
+
+3. In case you forget to turn the VPN off before turning off your PC or closing the program, you might run into some connection issues. This can be solved by launching NekoRay and turning off the VPN mode that you previously selected.
+
+4. In case you decide to change the program's settings and the client stops working, delete NekoRay's folder and download it again, and repeat the steps at the beginning of this tutorial.
+
+5. If you wish to test the latency of the VPN profile, right click on the profile you want, go to “Current Select” and click on “Url Test”. The number that appears under “Test results” column is the latency. Alternatively, you can click on the bottom left of the program where the name of the selected profile is displayed and it will also tell you what the latency is.
diff --git a/web/content.en/docs/windows/openconnect.md.j2 b/web/content.en/docs/windows/openconnect.md.j2
new file mode 100644
index 00000000..a63e3f70
--- /dev/null
+++ b/web/content.en/docs/windows/openconnect.md.j2
@@ -0,0 +1,53 @@
+---
+title: OpenConnect
+type: docs
+---
+
+# OpenConnect
+
+## How to install and use OpenConnect client on Windows devices:
+
+1. Go to the OpenConnect client's GitLab page by clicking the button below. Click on the link that is marked in the screenshot below. Installation is straightforward and very easy.
+
+{{ '{{<' }} button href="https://gitlab.com/openconnect/openconnect-gui/-/releases" {{ '>}}' }}**OpenConnect client GitLab Page**{{ '{{<' }} /button {{ '>}}' }}
+
+![Openconnect-01](/images/windows-oc-01.png)
+
+2. It should prompt you to install a distributable and a network adapter, give it permission to do so.
+
+3. Open the client, click on the gear icon in the middle, then click on **“New profile (Advanced)”**
+
+![Openconnect-02](/images/windows-oc-02.png)
+
+4. Download the two files that are provided below:
+
+ 1. **User Certificate:** [Click to download User Certificate](/{{item}}/{{item}}-User-Certificate.pem)
+
+ 2. **User Key:** [Click to download User Key](/{{item}}/{{item}}-User-Key.pem)
+
+5. Do the following in the given order:
+
+ 1. Enter a **name** (any name you want)
+
+ 2. Copy the following and paste it in the server address field: **{{ ansible_all_ipv4_addresses[0] }}:{{ ocserv_port | default(4430) }}**
+
+ 3. Click on the button next to the **“User Certificated”** field, and choose the User Certificate file that you downloaded from **step 4**.
+
+ 4. Click on the button next to the **“User Key”** field, and choose the User Key file that you downloaded from **step 4**.
+
+![Openconnect-03](/images/windows-oc-03.png)
+![Openconnect-04](/images/windows-oc-04.png)
+
+6. Click save, then click on the big button in the middle saying **"connect"**.
+
+![Openconnect-05](/images/windows-oc-05.png)
+
+7. You'll be prompted to confirm the information regarding the destination address. Click on **“Accurate information”**.
+
+![Openconnect-06](/images/windows-oc-06.png)
+
+8. To disconnect the VPN, simply click on the **Disconnect** button in the main interface.
+
+![Openconnect-07](/images/windows-oc-08.png)
+
+9. And that's it! You can check your IP location to ensure that you are connected to the VPN and it's working properly.
diff --git a/web/content.fa/_index.md b/web/content.fa/_index.md
new file mode 100644
index 00000000..c105868a
--- /dev/null
+++ b/web/content.fa/_index.md
@@ -0,0 +1,25 @@
+---
+title: معرفی
+type: docs
+---
+# راکتانس
+
+## درباره سرویس
+{{< hint info >}}
+واژه راکتانس (Reactance) در روانشناسی به معنای هرگونه واکنش ناخوشایند به پیشنهادات، افراد، قوانین و مقرراتی است که آزادی‌های فردی و رفتاری را تهدید یا سلب می‌کند.
+{{< /hint >}}
+راکتانس به شما کمک خواهد کرد سانسور اینترنتی که توسط دولت‌ها تحمیل می‌شود را دور بزنید. راکتانس خود پروتکل وی پی ان نیست، در واقع یک سیستم اتوماسیون شده از سرورها و پروتکل‌های دست‌چین شده است که به شما کمک خواهد کرد محدودیت‌های اینترنت را دور بزنید.
+
+## راه اندازی
+
+راکتانس، نرم افزار و کلاینت وی پی ان خود را ندارد. در عوض، برای شما آموزش و سایر موارد مورد نیاز برای اتصال به نرم افزارهای موجود را فراهم می‌کند. دسته بندی نرم افزارها بر اساس سیستم عامل است. در سمت راست صفحه، روی نام نرم افزار یا اپلیکیشن مد نظر کلیک کنید تا آموزش اتصال به وی پی ان از طریق آن برای شما نمایش داده شود.
+
+{{< hint warning >}}
+**نکته مهم:** لطفاً تا ۲۴ ساعت بعد از دسترسی به این سایت، وی پی ان را طبق آموزش‌های ارائه شده راه اندازی کنید. این سایت موقت است و به صورت خودکار بعد از ۲۴ ساعت حذف خواهد شد و دسترسی شما به آن قطع خواهد شد.
+{{< /hint >}}
+
+{{< hint danger >}}
+استفاده از وی پی ان، بلیط یک طرفه به آزادی نیست!
+تنها کار یک وی پی ان، معاوضه یک سانسور با سانسور دیگر است.
+لطفاً از جستجو و انجام فعالیت‌های غیرقانونی، مانند دانلود کردن تورنت یا جستجو کردن محتوای غیرقانونی خودداری کنید تا این سرویس بدون مشکل و اختلال برقرار بماند.
+{{< /hint >}}
diff --git a/web/content.fa/docs/_index.md b/web/content.fa/docs/_index.md
new file mode 100644
index 00000000..dfd18748
--- /dev/null
+++ b/web/content.fa/docs/_index.md
@@ -0,0 +1,5 @@
+---
+bookFlatsection: true
+title: Introduction
+type: docs
+---
diff --git a/web/content.fa/docs/android/_index.md b/web/content.fa/docs/android/_index.md
new file mode 100644
index 00000000..310fbdd8
--- /dev/null
+++ b/web/content.fa/docs/android/_index.md
@@ -0,0 +1,5 @@
+---
+bookFlatSection: true
+title: اندروید
+weight: 2
+---
diff --git a/web/content.fa/docs/android/anyconnect.md.j2 b/web/content.fa/docs/android/anyconnect.md.j2
new file mode 100644
index 00000000..97e9e426
--- /dev/null
+++ b/web/content.fa/docs/android/anyconnect.md.j2
@@ -0,0 +1,97 @@
+---
+title: AnyConnect
+type: docs
+---
+
+# انی کانکت (AnyConnect)
+
+۱. برای استفاده از پروتکل AnyConnect، نیاز است که اپلیکیشن **Cisco AnyConnect** از گوگل پلی استور دانلود شود. روی دکمه زیر کلیک کنید تا به صفحه گوگل پلی استور اپلیکیشن بروید.
+
+{{ '{{<' }} button href="https://play.google.com/store/apps/details?id=com.cisco.anyconnect.vpn.android.avf&hl=en&gl=US" {{ '>}}' }}**دانلود اپلیکیشن Cisco AnyConnect از گوگل پلی استور**{{ '{{<' }} /button {{ '>}}' }}
+
+۲. برای دانلود فایل Certificate روی دکمه زیر کلیک کنید:
+
+{{ '{{<' }} button href="/{{item}}/{{item}}-Certificate-Android.p12" {{ '>}}' }}**دانلود فایل Certificate با پسوند .P12**{{ '{{<' }} /button {{ '>}}' }}
+
+۳. اپلیکیشن را اجرا کنید.
+
+۴. روی **OK** کلیک کنید تا پیام اولیه اپلیکیشن بسته شود.
+
+![AnyConnect-01](/images/anyconnect-01.png)
+
+۵. دسترسی‌های مورد نیاز را به اپلیکیشن بدهید. (در این مورد، تنها دسترسی به **اعلان‌ها** نیاز است.)
+
+![AnyConnect-02](/images/anyconnect-02.png)
+
+۶. در بالا سمت راست صفحه، روی سه نقطه بزنید و سپس **Settings** را انتخاب کنید.
+
+![AnyConnect-03](/images/anyconnect-03.png)
+
+۷. تیک گزینه دوم که می‌گوید **Block Untrusted Servers** را حذف کنید.
+
+![AnyConnect-04](/images/anyconnect-04.png)
+
+۸. روی علامت فلش در بالا سمت راست صفحه بزنید تا به منوی اصلی برنامه برگردید.
+
+۹. در وسط صفحه، روی گزینه **Connections** بزنید.
+
+![AnyConnect-05](/images/anyconnect-05.png)
+
+۱۰. در پایین صفحه، روی علامت مثبت بزنید.
+
+![AnyConnect-06](/images/anyconnect-06.png)
+
+۱۱. در صفحه بعدی، موارد زیر را طبق عکس به ترتیب انجام دهید:
+
+1. اسم دلخواه خودتان
+
+2. آدرس سرور و پورت رو به رو: **{{ ansible_all_ipv4_addresses[0] }}:{{ ocserv_port | default(4430) }}**
+
+3. سپس، روی گزینه **Advanced Preferences** بزنید.
+
+![AnyConnect-07](/images/anyconnect-07.png)
+
+۱۲. روی گزینه اول که **Certificate** نام دارد بزنید.
+
+![AnyConnect-08](/images/anyconnect-08.png)
+
+۱۳. روی گزینه **Import** در پایین صفحه بزنید.
+
+![AnyConnect-09](/images/anyconnect-09.png)
+
+۱۴. روی گزینه **File System** بزنید. پس از آن، اپلیکیشن مدیریت فایل‌های گوشی شما باز می‌شود.
+
+![AnyConnect-10](/images/anyconnect-10.png)
+
+۱۵. فایلی که در قدم دوم دانلود کردید (با پسوند .p12) را انتخاب کنید.
+
+![AnyConnect-11](/images/anyconnect-11.png)
+
+۱۶. پس از انتخاب کردن فایل، از شما می‌خواهد که پسورد وارد کنید. عبارت رو به رو را وارد کنید: **{{ item }}**
+
+![AnyConnect-12](/images/anyconnect-12.png)
+
+۱۷. پس از وارد کردن فایل Certificate، آن را انتخاب کنید.
+
+![AnyConnect-13](/images/anyconnect-13.png)
+
+۱۸. در پایین صفحه، روی گزینه **Done** بزنید و پس از آن بار دیگر **Done** را بزنید.
+
+![AnyConnect-14](/images/anyconnect-14.png)
+![AnyConnect-15](/images/anyconnect-15.png)
+
+۱۹. روی علامت فلش در بالا سمت چپ صفحه بزنید.
+
+![AnyConnect-16](/images/anyconnect-16.png)
+
+۲۰. در صفحه اصلی، روی **دکمه روشن کردن** بزنید.
+
+![AnyConnect-17](/images/anyconnect-18.png)
+
+۲۱. گزینه **Continue** را انتخاب کنید.
+
+![AnyConnect-18](/images/anyconnect-17.png)
+
+۲۲. تمام! حال به VPN وصل شده‌اید. می‌توانید با استفاده از سایت‌های بررسی IP، لوکیشن خود را بررسی و از اتصال به VPN اطمینان حاصل کنید.
+
+![AnyConnect-19](/images/anyconnect-19.png)
diff --git a/web/content.fa/docs/android/nekobox.md.j2 b/web/content.fa/docs/android/nekobox.md.j2
new file mode 100644
index 00000000..ab275ec9
--- /dev/null
+++ b/web/content.fa/docs/android/nekobox.md.j2
@@ -0,0 +1,90 @@
+---
+title: NekoBox (V2Ray)
+type: docs
+weight: 1
+---
+
+# نِکوباکس (NekoBox)
+
+در این آموزش یاد خواهید گرفت که چگونه از اپلیکیشن نِکوباکس روی دستگاه‌های اندرویدی استفاده کنید.
+
+اپلیکیشن نِکوباکس از پروتکل‌های زیادی پشتیبانی می‌کند، و از این اپلیکیشن برای اتصال به پروتکل‌های اصلی‌مان روی دستگاه‌های اندرویدی استفاده خواهیم کرد. پروتکل‌هایی که مورد استفاده قرار خواهند گرفت عبارتند از: VLess، VMess و Trojan.
+
+## نحوه نصب و استفاده از نِکوباکس:
+
+۱. روی دکمه زیر کلیک کنید تا به صفحه گیت‌هاب نِکوباکس بروید. فایل APK که با گوشی شما سازگار است را دانلود کنید. (در اکثر موارد، نسخه **arm64-v8a** با گوشی‌تان سازگار است، مگر این که دستگاه شما قدیمی باشد که در آن صورت نسخه **armeabi-v7a** را نصب کنید.)
+
+{{ '{{<' }} button href="https://github.com/MatsuriDayo/NekoBoxForAndroid/releases/tag/1.2.9" {{ '>}}' }}**صفحه گیت‌هاب نِکوباکس**{{ '{{<' }} /button {{ '>}}' }}
+
+![Nekobox-01](/images/nekobox-12.png)
+
+{{ '{{<' }} hint danger {{ '>}}' }}
+**اخطار**
+اپلیکیشن نِکوباکس که در گوگل پلی استور است توسط خود سازنده‌های اصلی نِکوباکس ارائه نشده است. **از استفاده از آن نسخه خودداری کنید.**
+{{ '{{<' }} /hint {{ '>}}' }}
+
+۲. اپلیکیشن را نصب و اجرا کنید.
+
+۳. در صورت لزوم، دسترسی‌های مورد نیاز را به اپلیکیشن بدهید (دسترسی به **اعلان‌ها**)
+
+![Nekobox-02](/images/nekobox-01.png)
+
+۴. در پیام بعدی، روی **YES** کلیک کنید.
+
+![Nekobox-03](/images/nekobox-02.png)
+
+۵. روی دکمه زیر کلیک کنید و فایل تنظیمات نِکوباکس را دانلود کنید.
+
+{{ '{{<' }} button href="/nekoboxsetting/Nekobox-Settings.json" {{ '>}}' }}**دانلود تنظیمات نِکوباکس**{{ '{{<' }} /button {{ '>}}' }}
+
+۶. در بالا سمت چپ، روی دکمه سه خط بزنید تا پنل **تنظیمات** باز شود. سپس، روی **Tools** بزنید.
+
+![Nekobox-04](/images/nekobox-03.png)
+
+۷. به قسمت **Backup** بروید و گزینه **Import from file** را انتخاب کنید.
+
+![Nekobox-05](/images/nekobox-04.png)
+
+۸. فایلی که در قدم **شماره 5** دانلود کردید را انتخاب کنید و سپس روی **IMPORT** بزنید.
+
+![Nekobox-06](/images/nekobox-05.png)
+![Nekobox-07](/images/nekobox-06.png)
+
+۹. اگر قدم قبلی را **درست** انجام داده باشید، رنگ محیط کاربری به **آبی** تغییر می‌کند و به صفحه اصلی اپلیکیشن برمی‌گردید.
+
+۱۰. لینک پروتکل مورد نظرتان را از قسمت پایین کپی کنید.
+
+{% if users[item].vless is defined %}
+```
+{{ users[item].vless }}
+```
+{% endif %}
+
+{% if users[item].vmess is defined %}
+```
+{{ users[item].vmess }}
+```
+{% endif %}
+
+{% if users[item].trojan is defined %}
+```
+{{ users[item].trojan }}
+```
+{% endif %}
+
+۱۱. در اپلیکیشن، روی علامت مثبت در بالای صحفه بزنید و **Import from Clipboard** را انتخاب کنید. (**نکته: ** اگر که لینک با موفقیت وارد برنامه شد ولی در صفحه اصلی برنامه چیزی ظاهر نشد، برنامه را ببندید و دوباره باز کنید تا در لیست ظاهر شود.)
+
+![Nekobox-08](/images/nekobox-07.png)
+![Nekobox-09](/images/nekobox-08.png)
+
+۱۲. روی VPN که به تازگی ایجاد شد بزنید تا انتخاب شود. اگر چندین پروفایل در لیست دارید، آن که در کنارش نوار رنگی است انتخاب شده است.
+
+۱۳. روی **دکمه** پایین صفحه بزنید تا به VPN وصل شوید.
+
+![Nekobox-10](/images/nekobox-09.png)
+
+۱۴. برای بررسی سرعت و تاخیر، در پایین صفحه روی نوشته **Connected, Tap to check connection** بزنید تا میزان تاخیر به میلی ثانیه به شما نشان داده شود.
+
+![Nekobox-11](/images/nekobox-10.png)
+
+۱۵. تمام! حال به VPN وصل شده‌اید. می‌توانید با استفاده از سایت‌های بررسی IP، لوکیشن خود را بررسی و از اتصال به VPN اطمینان حاصل کنید.
diff --git a/web/content.fa/docs/android/nekossh.md.j2 b/web/content.fa/docs/android/nekossh.md.j2
new file mode 100644
index 00000000..439fdf43
--- /dev/null
+++ b/web/content.fa/docs/android/nekossh.md.j2
@@ -0,0 +1,96 @@
+---
+title: SecureShell (SSH)
+type: docs
+weight: 1
+---
+
+# پروتکل SecureShell (SSH)
+
+در این آموزش یاد خواهید گرفت که چگونه از نِکوباکس برای به کارگیری پروتکل SSH استفاده کنید.
+
+اپلیکیشن نِکوباکس از پروتکل‌های زیادی پشتیبانی می‌کند، و از این اپلیکیشن برای اتصال به پروتکل SSH استفاده خواهیم کرد.
+
+**توجه داشته باشید که این پروتکل تنها در صورتی ارائه می‌شود که سایر پروتکل و متودها برای شما قابل استفاده نباشد.**
+
+## نحوه نصب و استفاده از نِکوباکس برای استفاده از پروتکل SSH:
+
+۱. روی دکمه زیر کلیک کنید تا به صفحه گیت‌هاب نِکوباکس بروید. فایل APK که با گوشی شما سازگار است را دانلود کنید. (در اکثر موارد، نسخه **arm64-v8a** با گوشی‌تان سازگار است، مگر این که دستگاه شما قدیمی باشد که در آن صورت نسخه **armeabi-v7a** را نصب کنید.)
+
+{{ '{{<' }} button href="https://github.com/MatsuriDayo/NekoBoxForAndroid/releases/tag/1.2.9" {{ '>}}' }}**صفحه گیت‌هاب نِکوباکس**{{ '{{<' }} /button {{ '>}}' }}
+
+![Nekobox-01](/images/nekobox-12.png)
+
+{{ '{{<' }} hint danger {{ '>}}' }}
+**اخطار**
+اپلیکیشن نِکوباکس که در گوگل پلی استور است توسط خود سازنده‌های اصلی نِکوباکس ارائه نشده است. **از استفاده از آن نسخه خودداری کنید.**
+{{ '{{<' }} /hint {{ '>}}' }}
+
+۲. اپلیکیشن را نصب و اجرا کنید.
+
+۳. در صورت لزوم، دسترسی‌های مورد نیاز را به اپلیکیشن بدهید (دسترسی به **اعلان‌ها**)
+
+![Nekobox-02](/images/nekobox-01.png)
+
+۴. در پیام بعدی، روی **YES** کلیک کنید.
+
+![Nekobox-03](/images/nekobox-02.png)
+
+۵. روی دکمه زیر کلیک کنید و فایل تنظیمات نِکوباکس را دانلود کنید.
+
+{{ '{{<' }} button href="/nekoboxsetting/Nekobox-Settings.json" {{ '>}}' }}**دانلود تنظیمات نِکوباکس**{{ '{{<' }} /button {{ '>}}' }}
+
+۶. در بالا سمت چپ، روی دکمه سه خط بزنید تا پنل **تنظیمات** باز شود. سپس، روی **Tools** بزنید.
+
+![Nekobox-04](/images/nekobox-03.png)
+
+۷. به قسمت **Backup** بروید و گزینه **Import from file** را انتخاب کنید.
+
+![Nekobox-05](/images/nekobox-04.png)
+
+۸. فایلی که در قدم **شماره 5** دانلود کردید را انتخاب کنید و سپس روی **IMPORT** بزنید.
+
+![Nekobox-06](/images/nekobox-05.png)
+![Nekobox-07](/images/nekobox-06.png)
+
+۹. اگر قدم قبلی را **درست** انجام داده باشید، رنگ محیط کاربری به **آبی** تغییر می‌کند و به صفحه اصلی اپلیکیشن برمی‌گردید.
+
+۱۰. در صفحه اصلی، روی گزینه مثبت در بالای صفحه بزنید و سپس **Manual** را انتخاب کنید. پس از آن، **SSH** را انتخاب کنید.
+
+![NekoSSH-08](/images/nekobox-07.png)
+![NekoSSH-09](/images/nekossh-01.png)
+![NekoSSH-10](/images/nekossh-02.png)
+
+۱۱. در صفحه‌ای که باز می‌شود، روی گزینه **Authentication Type** بزنید و آن را به **Public Key** تغییر دهید.
+
+![NekoSSH-11](/images/nekossh-03.png)
+![NekoSSH-12](/images/nekossh-04.png)
+
+۱۲. حال موارد زیر را مطابق عکس در جاهای مربوطه کپی کنید.
+
+۱. نام دلخواه خودتان
+
+۲. {{ ansible_all_ipv4_addresses[0] }}
+
+۳. **sshvpn**
+
+۴. محتوای باکس زیر را به طور کامل کپی کنید و در قسمت **Private key** وارد کنید.
+
+```bash
+{{ users[item].sshvpn }}
+```
+
+![NekoSSH-13](/images/nekossh-05.png)
+
+۱۳. پس از وارد کردن موارد قبلی، روی گزینه تیک در بالا سمت چپ بزنید. (نکته، اگر که لینک با موفقیت وارد برنامه شد ولی در صفحه اصلی برنامه چیزی ظاهر نشد، برنامه را ببندید و دوباره باز کنید تا در لیست ظاهر شود.)
+
+۱۴. روی VPN که به تازگی ایجاد شد بزنید تا انتخاب شود. اگر چندین پروفایل در لیست دارید، آن که در کنارش نوار رنگی است انتخاب شده است.
+
+۱۵. روی **دکمه** پایین صفحه بزنید تا به VPN وصل شوید.
+
+![NekoSSH-14](/images/nekossh-06.png)
+
+۱۶. برای بررسی سرعت و تاخیر، در پایین صفحه روی نوشته **Connected, Tap to check connection** بزنید تا میزان تاخیر به میلی ثانیه به شما نشان داده شود.
+
+![NekoSSH-15](/images/nekobox-10.png)
+
+۱۷. تمام! حال به VPN وصل شده‌اید. می‌توانید با استفاده از سایت‌های بررسی IP، لوکیشن خود را بررسی و از اتصال به VPN اطمینان حاصل کنید.
diff --git a/web/content.fa/docs/windows/_index.md b/web/content.fa/docs/windows/_index.md
new file mode 100644
index 00000000..ea6b32a0
--- /dev/null
+++ b/web/content.fa/docs/windows/_index.md
@@ -0,0 +1,5 @@
+---
+bookFlatSection: true
+title: ویندوز
+weight: 1
+---
diff --git a/web/content.fa/docs/windows/nekoray.md.j2 b/web/content.fa/docs/windows/nekoray.md.j2
new file mode 100644
index 00000000..1c479346
--- /dev/null
+++ b/web/content.fa/docs/windows/nekoray.md.j2
@@ -0,0 +1,88 @@
+---
+title: NekoRay (V2Ray)
+type: docs
+---
+
+# نِکو رِی (NekoRay)
+
+در این آموزش یاد خواهید گرفت که چگونه از اپلیکیشن نِکو رِی در ویندوز استفاده کنید.
+
+اپلیکیشن نِکو رِی از پروتکل‌های زیادی پشتیبانی می‌کند، و از این اپلیکیشن برای اتصال به پروتکل‌های اصلی‌مان در ویندوز استفاده خواهیم کرد. پروتکل‌هایی که مورد استفاده قرار خواهند گرفت عبارتند از: VLess، VMess و Trojan.
+
+## نحوه نصب و استفاده از نِکو رِی:
+
+۱. روی دکمه زیر کلیک کنید تا به صفحه گیت‌هاب NekoRay بروید. بر لینکی که در اسکرین شات زیر دور آن خط کشیده شده است کلیک کنید. برنامه نیاز به نصب کردن ندارد و فقط کافیست آن را در جایی در ویندوز استخراج کنید. (فرقی ندارد در کجای ویندوز، ولی ترجیحاً جایی که قابل پیدا کردن باشد.)
+
+{{ '{{<' }} button href="https://github.com/MatsuriDayo/nekoray/releases" {{ '>}}' }}**صفحه گیت‌هاب نِکو رِی**{{ '{{<' }} /button {{ '>}}' }}
+
+![Nekoray-01](/images/nekoray-12.png)
+
+۲. به جایی که برنامه را استخراج کردید بروید و فایل **nekoray** را اجرا کنید. (به صورت Run as Administrator)
+
+![Nekoray-02](/images/nekoray-13.png)
+
+۳. روی دکمه **sing-box** کلیک کنید.
+
+![Nekoray-03](/images/nekoray-1.png)
+
+۴. صفحه اصلی برنامه برای شما باز خواهد شد. روی دکمه **Program** در بالا سمت چپ کلیک کنید.
+
+![Nekoray-04](/images/nekoray-2.png)
+
+۵. روی **Remember my last profile** کلیک کنید.
+
+![Nekoray-05](/images/nekoray-3.png)
+
+۶. لینک پروتکل مورد نظرتان را از باکس پایین کپی کنید و بار دیگر روی دکمه **Program** کلیک کنید. این بار، گزینه **Add profile from clipboard** را انتخاب کنید.
+
+{% if users[item].vless is defined %}
+```
+{{ users[item].vless }}
+```
+{% endif %}
+
+{% if users[item].vmess is defined %}
+```
+{{ users[item].vmess }}
+```
+{% endif %}
+
+{% if users[item].trojan is defined %}
+```
+{{ users[item].trojan }}
+```
+{% endif %}
+
+![Nekoray-06](/images/nekoray-4.png)
+
+۷. با انجام قدم قبلی، در لیست VPNهای برنامه، آن که کپی کرده بودید ظاهر می‌شود. روی آن کلیک راست کنید و **Start** را انتخاب کنید (یا پس از انتخاب آن، کلید Enter را فشار دهید.)
+
+![Nekoray-07](/images/nekoray-6.png)
+
+۸. پس از انجام قدم قبلی، یک تیک کنار پروفایل VPN ظاهر می‌شود و متن آن آبی می‌شود. اگر چند پروفایل دارید، قدم قبلی را روی آن‌ها اجرا کنید.
+
+۹. برای استفاده از VPN و دسترسی به اینترنت، باید روی یکی از دو گزینه System Proxy**** یا **Tun mode** کلیک کنید. تیک گزینه **Tun mode** را فعال کنید تا تمام ترافیک سیستم از بتواند از VPN استفاده کند.
+
+![Nekoray-08](/images/nekoray-7.png)
+
+۱۰. پس از روشن کردن حالت Tun Mode، نقطه قرمزی روی آیکون نِکو رِی در پایین سمت راست ویندوز (آیکون Tray) ظاهر می‌شود که به معنی روشن بودن این حالت است.
+
+![Nekoray-09](/images/nekoray-11.png)
+
+۱۱. برای خاموش کردن VPN، تنها کافیست تیک گزینه **Tun mode** را بردارید. حتماً پس از **اتمام استفاده‌تان** از VPN آن را خاموش کنید. **در حین فعال بودن VPN، برنامه را نبندید و سیستم را خاموش نکنید.**
+
+۱۲. تمام! حال به VPN وصل شده‌اید. می‌توانید با استفاده از سایت‌های بررسی IP، لوکیشن خود را بررسی و از اتصال به VPN اطمینان حاصل کنید.
+
+## سایر نکات
+
+۱. می‌توان برنامه را از طریق آیکون **Tray** نیز خاموش و روشن کرد. روی آیکون آن در گوشه پایین سمت راست کلیک راست کنید و در قسمت **System proxy**، حالت مورد نظرتان را انتخاب کنید. (همان کاری که در قدم شماره 9 انجام دادید.)
+
+![Nekoray-10](/images/nekoray-8.png)
+
+۲. حالت **System Proxy**، به صورت پروکسی برای شما VPN را فعال می‌کند. به این صورت که تنها اپلیکیشن‌های تحت وب و مرورگرها قابلیت استفاده از آن را دارند و روی سایر اپلیکیشن‌های ویندوز (برای مثال بازی‌های آنلاین) تاثیری نخواهد داشت.
+
+۳. در صورتی که فراموش کنید قبل از بستن برنامه یا خاموش کردن سیستم، VPN را خاموش کنید، برای اتصال به اینترنت به مشکل بر خواهید خورد. برای رفع آن، بار دیگر برنامه را اجرا کنید و حالت VPN که انتخاب کرده بودید را غیر فعال کنید.
+
+۴. در صورتی که تنظیمات برنامه را دستکاری کردید و برنامه دیگر کار نکرد، پوشه NekoRay را کامل پاک کنید و از ابتدا آموزش را دنبال کنید.
+
+۵. در صورتی که تمایل به تست سرعت و تاخیر VPN داشتید، می‌توانید روی گوشه پایین سمت چپ برنامه کلیک کنید (جایی که نام پروفایل انتخاب شده نوشته شده است) تا تاخیر به میلی ثانیه به شما نمایش داده شود.
diff --git a/web/content.fa/docs/windows/openconnect.md.j2 b/web/content.fa/docs/windows/openconnect.md.j2
new file mode 100644
index 00000000..4d8e66f2
--- /dev/null
+++ b/web/content.fa/docs/windows/openconnect.md.j2
@@ -0,0 +1,53 @@
+---
+title: OpenConnect
+type: docs
+---
+
+# اوپن کانکت (OpenConnect)
+
+## نحوه نصب و استفاده از اوپن کانکت در ویندوز
+
+۱. بر دکمه زیر کلیک کنید تا وارد صفحه گیت‌لَب اوپن کانکت شوید. روی لینکی که در اسکرین‌شات زیر علامت زده شده است کلیک کنید. نصب آن آسان و بدون دردسر است.
+
+{{ '{{<' }} button href="https://gitlab.com/openconnect/openconnect-gui/-/releases" {{ '>}}' }}**صفحه گیت‌لَب اوپن کانکت**{{ '{{<' }} /button {{ '>}}' }}
+
+![Openconnect-01](/images/windows-oc-01.png)
+
+۲. در حین نصب، اجازه نصب **فایل‌های مورد نیاز** و **آداپتور شبکه** را به آن بدهید.
+
+۳. برنامه را اجرا کنید. روی علامت چرخ دنده کلیک کنید و گزینه **New Profile (Advanced)** را انتخاب کنید.
+
+![Openconnect-02](/images/windows-oc-02.png)
+
+۴. دو فایل زیر را دانلود کنید.
+
+1. فایل **User Certificate:** [برای دانلود User Certificate کلیک کنید](/{{item}}/{{item}}-User-Certificate.pem)
+
+2. فایل **User Key:** [برای دانلود User Key کلیک کنید](/{{item}}/{{item}}-User-Key.pem)
+
+۵. به ترتیب، مراحل زیر را انجام دهید:
+
+1. نام دلخواه خود را وارد کنید.
+
+2. آی پی و پورت رو به رو را در قسمت **شماره 2** وارد کنید: **{{ ansible_all_ipv4_addresses[0] }}:{{ ocserv_port | default(4430) }}**
+
+3. روی دکمه کنار قسمت **User Certificate** کلیک کنید و فایل **User Certificate** که در **قدم شماره ۴** دانلود کردید را انتخاب کنید.
+
+4. روی دکمه کنار قسمت **User Key** کلیک کنید و فایل **User Certificate** که در **قدم شماره ۴** دانلود کردید را انتخاب کنید.
+
+![Openconnect-03](/images/windows-oc-03.png)
+![Openconnect-04](/images/windows-oc-04.png)
+
+۶. روی **Save** کلیک کنید، و در صفحه اصلی روی دکمه **Connect** در وسط صفحه کلیک کنید.
+
+![Openconnect-05](/images/windows-oc-05.png)
+
+۷. در پیام بعدی، روی دکمه **Accurate Information** کلیک کنید.
+
+![Openconnect-06](/images/windows-oc-06.png)
+
+۸. برای خاموش کردن VPN، روی دکمه **Disconnect** کلیک کنید.
+
+![Openconnect-07](/images/windows-oc-08.png)
+
+۹. تمام! حال به VPN وصل شده‌اید. می‌توانید با استفاده از سایت‌های بررسی IP، لوکیشن خود را بررسی و از اتصال به VPN اطمینان حاصل کنید.
diff --git a/web/hugo.toml.j2 b/web/hugo.toml.j2
new file mode 100644
index 00000000..1587763b
--- /dev/null
+++ b/web/hugo.toml.j2
@@ -0,0 +1,29 @@
+baseURL = 'http://{{ ansible_all_ipv4_addresses[0] }}/{{ item }}'
+languageCode = 'en-us'
+title = 'Reactance VPN'
+theme = 'hugo-book'
+
+[params]
+ # (Optional, default light) Sets color theme: light, dark or auto.
+ # Theme 'auto' switches between dark and light modes based on browser/os preferences
+ BookTheme = 'light'
+ BookRepo = 'https://github.com/sarzilhossain'
+
+[languages]
+[languages.en]
+ contentDir = 'content.en'
+ disabled = false
+ languageCode = 'en-US'
+ languageDirection = 'ltr'
+ languageName = 'English'
+ title = 'Reactance VPN'
+ weight = 1
+
+[languages.fa]
+ contentDir = 'content.fa'
+ disabled = false
+ languageCode = 'fa-IR'
+ languageDirection = 'rtl'
+ languageName = 'فارسی'
+ title = 'راکتانس وی پی ان'
+ weight = 2
diff --git a/web/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content b/web/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content
new file mode 100644
index 00000000..50c6fede
--- /dev/null
+++ b/web/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.content
@@ -0,0 +1 @@
+@charset "UTF-8";:root{--gray-100:#f8f9fa;--gray-200:#e9ecef;--gray-500:#adb5bd;--color-link:#0055bb;--color-visited-link:#8440f1;--body-background:white;--body-font-color:black;--icon-filter:none;--hint-color-info:#6bf;--hint-color-warning:#fd6;--hint-color-danger:#f66}/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.flex{display:flex}.flex-auto{flex:auto}.flex-even{flex:1 1}.flex-wrap{flex-wrap:wrap}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.align-center{align-items:center}.mx-auto{margin:0 auto}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.hidden{display:none}input.toggle{height:0;width:0;overflow:hidden;opacity:0;position:absolute}.clearfix::after{content:"";display:table;clear:both}html{font-size:16px;scroll-behavior:smooth;touch-action:manipulation}body{min-width:20rem;color:var(--body-font-color);background:var(--body-background);letter-spacing:.33px;font-weight:400;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}body *{box-sizing:inherit}h1,h2,h3,h4,h5{font-weight:400}a{text-decoration:none;color:var(--color-link)}img{vertical-align:baseline}:focus{outline-style:auto;outline-color:currentColor;outline-color:-webkit-focus-ring-color}aside nav ul{padding:0;margin:0;list-style:none}aside nav ul li{margin:1em 0;position:relative}aside nav ul a{display:block}aside nav ul a:hover{opacity:.5}aside nav ul ul{padding-inline-start:1rem}ul.pagination{display:flex;justify-content:center;list-style-type:none;padding-inline-start:0}ul.pagination .page-item a{padding:1rem}.container{max-width:80rem;margin:0 auto}.book-icon{filter:var(--icon-filter)}.book-brand{margin-top:0;margin-bottom:1rem}.book-brand img{height:1.5em;width:1.5em;margin-inline-end:.5rem}.book-menu{flex:0 0 16rem;font-size:.875rem}.book-menu .book-menu-content{width:16rem;padding:1rem;background:var(--body-background);position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-menu a,.book-menu label{color:inherit;cursor:pointer;word-wrap:break-word}.book-menu a.active{color:var(--color-link)}.book-menu input.toggle+label+ul{display:none}.book-menu input.toggle:checked+label+ul{display:block}.book-menu input.toggle+label::after{content:"▸"}.book-menu input.toggle:checked+label::after{content:"▾"}body[dir=rtl] .book-menu input.toggle+label::after{content:"◂"}body[dir=rtl] .book-menu input.toggle:checked+label::after{content:"▾"}.book-section-flat{margin:2rem 0}.book-section-flat>a,.book-section-flat>span,.book-section-flat>label{font-weight:bolder}.book-section-flat>ul{padding-inline-start:0}.book-page{min-width:20rem;flex-grow:1;padding:1rem}.book-post{margin-bottom:3rem}.book-header{display:none;margin-bottom:1rem}.book-header label{line-height:0}.book-header img.book-icon{height:1.5em;width:1.5em}.book-search{position:relative;margin:1rem 0;border-bottom:1px solid transparent}.book-search input{width:100%;padding:.5rem;border:0;border-radius:.25rem;background:var(--gray-100);color:var(--body-font-color)}.book-search input:required+.book-search-spinner{display:block}.book-search .book-search-spinner{position:absolute;top:0;margin:.5rem;margin-inline-start:calc(100% - 1.5rem);width:1rem;height:1rem;border:1px solid transparent;border-top-color:var(--body-font-color);border-radius:50%;animation:spin 1s ease infinite}@keyframes spin{100%{transform:rotate(360deg)}}.book-search small{opacity:.5}.book-toc{flex:0 0 16rem;font-size:.75rem}.book-toc .book-toc-content{width:16rem;padding:1rem;position:fixed;top:0;bottom:0;overflow-x:hidden;overflow-y:auto}.book-toc img{height:1em;width:1em}.book-toc nav>ul>li:first-child{margin-top:0}.book-footer{padding-top:1rem;font-size:.875rem}.book-footer img{height:1em;width:1em;margin-inline-end:.5rem}.book-comments{margin-top:1rem}.book-languages{margin-block-end:2rem}.book-languages .book-icon{height:1em;width:1em;margin-inline-end:.5em}.book-languages ul{padding-inline-start:1.5em}.book-menu-content,.book-toc-content,.book-page,.book-header aside,.markdown{transition:.2s ease-in-out;transition-property:transform,margin,opacity,visibility;will-change:transform,margin,opacity}@media screen and (max-width:56rem){#menu-control,#toc-control{display:inline}.book-menu{visibility:hidden;margin-inline-start:-16rem;font-size:16px;z-index:1}.book-toc{display:none}.book-header{display:block}#menu-control:focus~main label[for=menu-control]{outline-style:auto;outline-color:currentColor;outline-color:-webkit-focus-ring-color}#menu-control:checked~main .book-menu{visibility:initial}#menu-control:checked~main .book-menu .book-menu-content{transform:translateX(16rem);box-shadow:0 0 .5rem rgba(0,0,0,.1)}#menu-control:checked~main .book-page{opacity:.25}#menu-control:checked~main .book-menu-overlay{display:block;position:absolute;top:0;bottom:0;left:0;right:0}#toc-control:focus~main label[for=toc-control]{outline-style:auto;outline-color:currentColor;outline-color:-webkit-focus-ring-color}#toc-control:checked~main .book-header aside{display:block}body[dir=rtl] #menu-control:checked~main .book-menu .book-menu-content{transform:translateX(-16rem)}}@media screen and (min-width:80rem){.book-page,.book-menu .book-menu-content,.book-toc .book-toc-content{padding:2rem 1rem}}@font-face{font-family:roboto;font-style:normal;font-weight:400;font-display:swap;src:local(""),url(fonts/roboto-v27-latin-regular.woff2)format("woff2"),url(fonts/roboto-v27-latin-regular.woff)format("woff")}@font-face{font-family:roboto;font-style:normal;font-weight:700;font-display:swap;src:local(""),url(fonts/roboto-v27-latin-700.woff2)format("woff2"),url(fonts/roboto-v27-latin-700.woff)format("woff")}@font-face{font-family:roboto mono;font-style:normal;font-weight:400;font-display:swap;src:local(""),url(fonts/roboto-mono-v13-latin-regular.woff2)format("woff2"),url(fonts/roboto-mono-v13-latin-regular.woff)format("woff")}body{font-family:roboto,sans-serif}code{font-family:roboto mono,monospace}@media print{.book-menu,.book-footer,.book-toc{display:none}.book-header,.book-header aside{display:block}main{display:block!important}}.markdown{line-height:1.6}.markdown>:first-child{margin-top:0}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{font-weight:400;line-height:1;margin-top:1.5em;margin-bottom:1rem}.markdown h1 a.anchor,.markdown h2 a.anchor,.markdown h3 a.anchor,.markdown h4 a.anchor,.markdown h5 a.anchor,.markdown h6 a.anchor{opacity:0;font-size:.75em;vertical-align:middle;text-decoration:none}.markdown h1:hover a.anchor,.markdown h1 a.anchor:focus,.markdown h2:hover a.anchor,.markdown h2 a.anchor:focus,.markdown h3:hover a.anchor,.markdown h3 a.anchor:focus,.markdown h4:hover a.anchor,.markdown h4 a.anchor:focus,.markdown h5:hover a.anchor,.markdown h5 a.anchor:focus,.markdown h6:hover a.anchor,.markdown h6 a.anchor:focus{opacity:initial}.markdown h4,.markdown h5,.markdown h6{font-weight:bolder}.markdown h5{font-size:.875em}.markdown h6{font-size:.75em}.markdown b,.markdown optgroup,.markdown strong{font-weight:bolder}.markdown a{text-decoration:none}.markdown a:hover{text-decoration:underline}.markdown a:visited{color:var(--color-visited-link)}.markdown img{max-width:100%;height:auto}.markdown code{direction:ltr;unicode-bidi:embed;padding:0 .25rem;background:var(--gray-200);border-radius:.25rem;font-size:.875em}.markdown pre{direction:ltr;unicode-bidi:embed;padding:1rem;background:var(--gray-100);border-radius:.25rem;overflow-x:auto}.markdown pre code{padding:0;background:0 0}.markdown p{word-wrap:break-word}.markdown blockquote{margin:1rem 0;padding:.5rem 1rem .5rem .75rem;border-inline-start:.25rem solid var(--gray-200);border-radius:.25rem}.markdown blockquote :first-child{margin-top:0}.markdown blockquote :last-child{margin-bottom:0}.markdown table{overflow:auto;display:block;border-spacing:0;border-collapse:collapse;margin-top:1rem;margin-bottom:1rem}.markdown table tr th,.markdown table tr td{padding:.5rem 1rem;border:1px solid var(--gray-200)}.markdown table tr:nth-child(2n){background:var(--gray-100)}.markdown hr{height:1px;border:none;background:var(--gray-200)}.markdown ul,.markdown ol{padding-inline-start:2rem;word-wrap:break-word}.markdown dl dt{font-weight:bolder;margin-top:1rem}.markdown dl dd{margin-inline-start:0;margin-bottom:1rem}.markdown .highlight{direction:ltr;unicode-bidi:embed}.markdown .highlight table tr td:nth-child(1) pre{margin:0;padding-inline-end:0}.markdown .highlight table tr td:nth-child(2) pre{margin:0;padding-inline-start:0}.markdown details{padding:1rem;border:1px solid var(--gray-200);border-radius:.25rem}.markdown details summary{line-height:1;padding:1rem;margin:-1rem;cursor:pointer}.markdown details[open] summary{margin-bottom:0}.markdown figure{margin:1rem 0}.markdown figure figcaption p{margin-top:0}.markdown-inner>:first-child{margin-top:0}.markdown-inner>:last-child{margin-bottom:0}.markdown .book-expand{margin-top:1rem;margin-bottom:1rem;border:1px solid var(--gray-200);border-radius:.25rem;overflow:hidden}.markdown .book-expand .book-expand-head{background:var(--gray-100);padding:.5rem 1rem;cursor:pointer}.markdown .book-expand .book-expand-content{display:none;padding:1rem}.markdown .book-expand input[type=checkbox]:checked+.book-expand-content{display:block}.markdown .book-tabs{margin-top:1rem;margin-bottom:1rem;border:1px solid var(--gray-200);border-radius:.25rem;overflow:hidden;display:flex;flex-wrap:wrap}.markdown .book-tabs label{display:inline-block;padding:.5rem 1rem;border-bottom:1px transparent;cursor:pointer}.markdown .book-tabs .book-tabs-content{order:999;width:100%;border-top:1px solid var(--gray-100);padding:1rem;display:none}.markdown .book-tabs input[type=radio]:checked+label{border-bottom:1px solid var(--color-link)}.markdown .book-tabs input[type=radio]:checked+label+.book-tabs-content{display:block}.markdown .book-tabs input[type=radio]:focus+label{outline-style:auto;outline-color:currentColor;outline-color:-webkit-focus-ring-color}.markdown .book-columns{margin-left:-1rem;margin-right:-1rem}.markdown .book-columns>div{margin:1rem 0;min-width:10rem;padding:0 1rem}.markdown a.book-btn{display:inline-block;font-size:.875rem;color:var(--color-link);line-height:2rem;padding:0 1rem;border:1px solid var(--color-link);border-radius:.25rem;cursor:pointer}.markdown a.book-btn:hover{text-decoration:none}.markdown .book-hint.info{border-color:#6bf;background-color:rgba(102,187,255,.1)}.markdown .book-hint.warning{border-color:#fd6;background-color:rgba(255,221,102,.1)}.markdown .book-hint.danger{border-color:#f66;background-color:rgba(255,102,102,.1)} \ No newline at end of file
diff --git a/web/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json b/web/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json
new file mode 100644
index 00000000..9d04b972
--- /dev/null
+++ b/web/resources/_gen/assets/scss/book.scss_50fc8c04e12a2f59027287995557ceff.json
@@ -0,0 +1 @@
+{"Target":"book.min.309b7ed028807cdb68d8d61e26d609f48369c098dbf5e4d8c0dcf4cdf49feafc.css","MediaType":"text/css","Data":{"Integrity":"sha256-MJt+0CiAfNto2NYeJtYJ9INpwJjb9eTYwNz0zfSf6vw="}} \ No newline at end of file
diff --git a/web/static/fonts/BNazanin.eot b/web/static/fonts/BNazanin.eot
new file mode 100644
index 00000000..d811f6bf
--- /dev/null
+++ b/web/static/fonts/BNazanin.eot
Binary files differ
diff --git a/web/static/fonts/BNazanin.ttf b/web/static/fonts/BNazanin.ttf
new file mode 100644
index 00000000..870801a7
--- /dev/null
+++ b/web/static/fonts/BNazanin.ttf
Binary files differ
diff --git a/web/static/fonts/BNazanin.woff b/web/static/fonts/BNazanin.woff
new file mode 100644
index 00000000..37914028
--- /dev/null
+++ b/web/static/fonts/BNazanin.woff
Binary files differ
diff --git a/web/static/images/anyconnect-01.png b/web/static/images/anyconnect-01.png
new file mode 100755
index 00000000..48f91fdc
--- /dev/null
+++ b/web/static/images/anyconnect-01.png
Binary files differ
diff --git a/web/static/images/anyconnect-02.png b/web/static/images/anyconnect-02.png
new file mode 100755
index 00000000..e9a26db5
--- /dev/null
+++ b/web/static/images/anyconnect-02.png
Binary files differ
diff --git a/web/static/images/anyconnect-03.png b/web/static/images/anyconnect-03.png
new file mode 100755
index 00000000..000251b6
--- /dev/null
+++ b/web/static/images/anyconnect-03.png
Binary files differ
diff --git a/web/static/images/anyconnect-04.png b/web/static/images/anyconnect-04.png
new file mode 100755
index 00000000..b236fbaa
--- /dev/null
+++ b/web/static/images/anyconnect-04.png
Binary files differ
diff --git a/web/static/images/anyconnect-05.png b/web/static/images/anyconnect-05.png
new file mode 100755
index 00000000..b58187d5
--- /dev/null
+++ b/web/static/images/anyconnect-05.png
Binary files differ
diff --git a/web/static/images/anyconnect-06.png b/web/static/images/anyconnect-06.png
new file mode 100755
index 00000000..f2a3ea1f
--- /dev/null
+++ b/web/static/images/anyconnect-06.png
Binary files differ
diff --git a/web/static/images/anyconnect-07.png b/web/static/images/anyconnect-07.png
new file mode 100755
index 00000000..de42eb54
--- /dev/null
+++ b/web/static/images/anyconnect-07.png
Binary files differ
diff --git a/web/static/images/anyconnect-08.png b/web/static/images/anyconnect-08.png
new file mode 100755
index 00000000..4e42cf42
--- /dev/null
+++ b/web/static/images/anyconnect-08.png
Binary files differ
diff --git a/web/static/images/anyconnect-09.png b/web/static/images/anyconnect-09.png
new file mode 100755
index 00000000..d49d8b16
--- /dev/null
+++ b/web/static/images/anyconnect-09.png
Binary files differ
diff --git a/web/static/images/anyconnect-10.png b/web/static/images/anyconnect-10.png
new file mode 100755
index 00000000..62caeaba
--- /dev/null
+++ b/web/static/images/anyconnect-10.png
Binary files differ
diff --git a/web/static/images/anyconnect-11.png b/web/static/images/anyconnect-11.png
new file mode 100755
index 00000000..b2b255c2
--- /dev/null
+++ b/web/static/images/anyconnect-11.png
Binary files differ
diff --git a/web/static/images/anyconnect-12.png b/web/static/images/anyconnect-12.png
new file mode 100755
index 00000000..383a3006
--- /dev/null
+++ b/web/static/images/anyconnect-12.png
Binary files differ
diff --git a/web/static/images/anyconnect-13.png b/web/static/images/anyconnect-13.png
new file mode 100755
index 00000000..6939a5dd
--- /dev/null
+++ b/web/static/images/anyconnect-13.png
Binary files differ
diff --git a/web/static/images/anyconnect-14.png b/web/static/images/anyconnect-14.png
new file mode 100755
index 00000000..ddd750a1
--- /dev/null
+++ b/web/static/images/anyconnect-14.png
Binary files differ
diff --git a/web/static/images/anyconnect-15.png b/web/static/images/anyconnect-15.png
new file mode 100755
index 00000000..70bacf83
--- /dev/null
+++ b/web/static/images/anyconnect-15.png
Binary files differ
diff --git a/web/static/images/anyconnect-16.png b/web/static/images/anyconnect-16.png
new file mode 100755
index 00000000..8e628f77
--- /dev/null
+++ b/web/static/images/anyconnect-16.png
Binary files differ
diff --git a/web/static/images/anyconnect-17.png b/web/static/images/anyconnect-17.png
new file mode 100755
index 00000000..587e8b11
--- /dev/null
+++ b/web/static/images/anyconnect-17.png
Binary files differ
diff --git a/web/static/images/anyconnect-18.png b/web/static/images/anyconnect-18.png
new file mode 100755
index 00000000..441e1b27
--- /dev/null
+++ b/web/static/images/anyconnect-18.png
Binary files differ
diff --git a/web/static/images/anyconnect-19.png b/web/static/images/anyconnect-19.png
new file mode 100755
index 00000000..7e554cd3
--- /dev/null
+++ b/web/static/images/anyconnect-19.png
Binary files differ
diff --git a/web/static/images/nekobox-01.png b/web/static/images/nekobox-01.png
new file mode 100755
index 00000000..4692485d
--- /dev/null
+++ b/web/static/images/nekobox-01.png
Binary files differ
diff --git a/web/static/images/nekobox-02.png b/web/static/images/nekobox-02.png
new file mode 100755
index 00000000..69543ac3
--- /dev/null
+++ b/web/static/images/nekobox-02.png
Binary files differ
diff --git a/web/static/images/nekobox-03.png b/web/static/images/nekobox-03.png
new file mode 100755
index 00000000..91441a3d
--- /dev/null
+++ b/web/static/images/nekobox-03.png
Binary files differ
diff --git a/web/static/images/nekobox-04.png b/web/static/images/nekobox-04.png
new file mode 100755
index 00000000..60b7a7bd
--- /dev/null
+++ b/web/static/images/nekobox-04.png
Binary files differ
diff --git a/web/static/images/nekobox-05.png b/web/static/images/nekobox-05.png
new file mode 100755
index 00000000..9e17c476
--- /dev/null
+++ b/web/static/images/nekobox-05.png
Binary files differ
diff --git a/web/static/images/nekobox-06.png b/web/static/images/nekobox-06.png
new file mode 100755
index 00000000..4b29f087
--- /dev/null
+++ b/web/static/images/nekobox-06.png
Binary files differ
diff --git a/web/static/images/nekobox-07.png b/web/static/images/nekobox-07.png
new file mode 100755
index 00000000..cad2568d
--- /dev/null
+++ b/web/static/images/nekobox-07.png
Binary files differ
diff --git a/web/static/images/nekobox-08.png b/web/static/images/nekobox-08.png
new file mode 100755
index 00000000..43ee068d
--- /dev/null
+++ b/web/static/images/nekobox-08.png
Binary files differ
diff --git a/web/static/images/nekobox-09.png b/web/static/images/nekobox-09.png
new file mode 100755
index 00000000..d79ad037
--- /dev/null
+++ b/web/static/images/nekobox-09.png
Binary files differ
diff --git a/web/static/images/nekobox-10.png b/web/static/images/nekobox-10.png
new file mode 100755
index 00000000..03595f43
--- /dev/null
+++ b/web/static/images/nekobox-10.png
Binary files differ
diff --git a/web/static/images/nekobox-12.png b/web/static/images/nekobox-12.png
new file mode 100755
index 00000000..b7d82fbb
--- /dev/null
+++ b/web/static/images/nekobox-12.png
Binary files differ
diff --git a/web/static/images/nekoray-1.png b/web/static/images/nekoray-1.png
new file mode 100755
index 00000000..45fd3250
--- /dev/null
+++ b/web/static/images/nekoray-1.png
Binary files differ
diff --git a/web/static/images/nekoray-10.png b/web/static/images/nekoray-10.png
new file mode 100755
index 00000000..f0bab47c
--- /dev/null
+++ b/web/static/images/nekoray-10.png
Binary files differ
diff --git a/web/static/images/nekoray-11.png b/web/static/images/nekoray-11.png
new file mode 100755
index 00000000..9f35f4f1
--- /dev/null
+++ b/web/static/images/nekoray-11.png
Binary files differ
diff --git a/web/static/images/nekoray-12.png b/web/static/images/nekoray-12.png
new file mode 100755
index 00000000..e5e7e6ef
--- /dev/null
+++ b/web/static/images/nekoray-12.png
Binary files differ
diff --git a/web/static/images/nekoray-13.png b/web/static/images/nekoray-13.png
new file mode 100755
index 00000000..3844df42
--- /dev/null
+++ b/web/static/images/nekoray-13.png
Binary files differ
diff --git a/web/static/images/nekoray-2.png b/web/static/images/nekoray-2.png
new file mode 100755
index 00000000..e151a334
--- /dev/null
+++ b/web/static/images/nekoray-2.png
Binary files differ
diff --git a/web/static/images/nekoray-3.png b/web/static/images/nekoray-3.png
new file mode 100755
index 00000000..91e6b503
--- /dev/null
+++ b/web/static/images/nekoray-3.png
Binary files differ
diff --git a/web/static/images/nekoray-4.png b/web/static/images/nekoray-4.png
new file mode 100755
index 00000000..e02bbd09
--- /dev/null
+++ b/web/static/images/nekoray-4.png
Binary files differ
diff --git a/web/static/images/nekoray-5.png b/web/static/images/nekoray-5.png
new file mode 100755
index 00000000..d6271046
--- /dev/null
+++ b/web/static/images/nekoray-5.png
Binary files differ
diff --git a/web/static/images/nekoray-6.png b/web/static/images/nekoray-6.png
new file mode 100755
index 00000000..9f3e8a9d
--- /dev/null
+++ b/web/static/images/nekoray-6.png
Binary files differ
diff --git a/web/static/images/nekoray-7.png b/web/static/images/nekoray-7.png
new file mode 100755
index 00000000..e3cc596d
--- /dev/null
+++ b/web/static/images/nekoray-7.png
Binary files differ
diff --git a/web/static/images/nekoray-8.png b/web/static/images/nekoray-8.png
new file mode 100755
index 00000000..1592cd22
--- /dev/null
+++ b/web/static/images/nekoray-8.png
Binary files differ
diff --git a/web/static/images/nekoray-9.png b/web/static/images/nekoray-9.png
new file mode 100755
index 00000000..7b01c385
--- /dev/null
+++ b/web/static/images/nekoray-9.png
Binary files differ
diff --git a/web/static/images/nekossh-01.png b/web/static/images/nekossh-01.png
new file mode 100755
index 00000000..0d9d8c5f
--- /dev/null
+++ b/web/static/images/nekossh-01.png
Binary files differ
diff --git a/web/static/images/nekossh-02.png b/web/static/images/nekossh-02.png
new file mode 100755
index 00000000..b6f7820a
--- /dev/null
+++ b/web/static/images/nekossh-02.png
Binary files differ
diff --git a/web/static/images/nekossh-03.png b/web/static/images/nekossh-03.png
new file mode 100755
index 00000000..2387d9b1
--- /dev/null
+++ b/web/static/images/nekossh-03.png
Binary files differ
diff --git a/web/static/images/nekossh-04.png b/web/static/images/nekossh-04.png
new file mode 100755
index 00000000..6c5621c2
--- /dev/null
+++ b/web/static/images/nekossh-04.png
Binary files differ
diff --git a/web/static/images/nekossh-05.png b/web/static/images/nekossh-05.png
new file mode 100755
index 00000000..73237a1b
--- /dev/null
+++ b/web/static/images/nekossh-05.png
Binary files differ
diff --git a/web/static/images/nekossh-06.png b/web/static/images/nekossh-06.png
new file mode 100755
index 00000000..4218817d
--- /dev/null
+++ b/web/static/images/nekossh-06.png
Binary files differ
diff --git a/web/static/images/windows-oc-01.png b/web/static/images/windows-oc-01.png
new file mode 100755
index 00000000..1c8ed90b
--- /dev/null
+++ b/web/static/images/windows-oc-01.png
Binary files differ
diff --git a/web/static/images/windows-oc-02.png b/web/static/images/windows-oc-02.png
new file mode 100755
index 00000000..345b1617
--- /dev/null
+++ b/web/static/images/windows-oc-02.png
Binary files differ
diff --git a/web/static/images/windows-oc-03.png b/web/static/images/windows-oc-03.png
new file mode 100755
index 00000000..3e7a067e
--- /dev/null
+++ b/web/static/images/windows-oc-03.png
Binary files differ
diff --git a/web/static/images/windows-oc-04.png b/web/static/images/windows-oc-04.png
new file mode 100755
index 00000000..70453c7a
--- /dev/null
+++ b/web/static/images/windows-oc-04.png
Binary files differ
diff --git a/web/static/images/windows-oc-05.png b/web/static/images/windows-oc-05.png
new file mode 100755
index 00000000..88f11038
--- /dev/null
+++ b/web/static/images/windows-oc-05.png
Binary files differ
diff --git a/web/static/images/windows-oc-06.png b/web/static/images/windows-oc-06.png
new file mode 100755
index 00000000..79765600
--- /dev/null
+++ b/web/static/images/windows-oc-06.png
Binary files differ
diff --git a/web/static/images/windows-oc-08.png b/web/static/images/windows-oc-08.png
new file mode 100755
index 00000000..baa51cd3
--- /dev/null
+++ b/web/static/images/windows-oc-08.png
Binary files differ
diff --git a/web/static/nekoboxsetting/Nekobox-Settings.json b/web/static/nekoboxsetting/Nekobox-Settings.json
new file mode 100755
index 00000000..a4b1a366
--- /dev/null
+++ b/web/static/nekoboxsetting/Nekobox-Settings.json
@@ -0,0 +1,48 @@
+{
+ "version": 1,
+ "settings": [
+ "CQAAAG0AaQB4AGUAZABQAG8AcgB0AAAABQAAAAQAAAAyMDgw",
+ "DAAAAHAAbwByAHQATABvAGMAYQBsAEQAbgBzAAAAAAAFAAAABAAAADY0NTA",
+ "DQAAAGkAcwBBAHUAdABvAEMAbwBuAG4AZQBjAHQAAAABAAAAAQAAAAAAAAA",
+ "CgAAAG4AaQBnAGgAdABUAGgAZQBtAGUAAAAAAAUAAAABAAAAMAAAAA",
+ "CwAAAHMAZQByAHYAaQBjAGUATQBvAGQAZQAAAAUAAAADAAAAdnBuAA",
+ "EQAAAHQAdQBuAEkAbQBwAGwAZQBtAGUAbgB0AGEAdABpAG8AbgAAAAUAAAABAAAAMgAAAA",
+ "DQAAAHMAcABlAGUAZABJAG4AdABlAHIAdgBhAGwAAAAFAAAABAAAADEwMDA",
+ "GAAAAHAAcgBvAGYAaQBsAGUAVAByAGEAZgBmAGkAYwBTAHQAYQB0AGkAcwB0AGkAYwBzAAAAAAABAAAAAQAAAAEAAAA",
+ "FwAAAHMAaABvAHcARwByAG8AdQBwAEkAbgBOAG8AdABpAGYAaQBjAGEAdABpAG8AbgAAAAEAAAABAAAAAAAAAA",
+ "EQAAAGEAbAB3AGEAeQBzAFMAaABvAHcAQQBkAGQAcgBlAHMAcwAAAAEAAAABAAAAAAAAAA",
+ "DgAAAG0AZQB0AGUAcgBlAGQATgBlAHQAdwBvAHIAawAAAAAAAQAAAAEAAAAAAAAA",
+ "DwAAAHMAaABvAHcARABpAHIAZQBjAHQAUwBwAGUAZQBkAAAAAQAAAAEAAAABAAAA",
+ "CAAAAGwAbwBnAEwAZQB2AGUAbAAAAAAABQAAAAEAAAAwAAAA",
+ "CQAAAHAAcgBvAHgAeQBBAHAAcABzAAAAAQAAAAEAAAAAAAAA",
+ "CQAAAGIAeQBwAGEAcwBzAEwAYQBuAAAAAQAAAAEAAAAAAAAA",
+ "DwAAAGIAeQBwAGEAcwBzAEwAYQBuAEkAbgBDAG8AcgBlAAAAAQAAAAEAAAAAAAAA",
+ "DwAAAHQAcgBhAGYAZgBpAGMAUwBuAGkAZgBmAGkAbgBnAAAABQAAAAEAAAAxAAAA",
+ "EgAAAHIAZQBzAG8AbAB2AGUARABlAHMAdABpAG4AYQB0AGkAbwBuAAAAAAABAAAAAQAAAAAAAAA",
+ "CAAAAGkAcAB2ADYATQBvAGQAZQAAAAAABQAAAAEAAAAwAAAA",
+ "DQAAAHIAdQBsAGUAcwBQAHIAbwB2AGkAZABlAHIAAAAFAAAAAQAAADAAAAA",
+ "AwAAAG0AdQB4AAAABgAAAAAAAAA",
+ "BwAAAG0AdQB4AFQAeQBwAGUAAAAFAAAAAQAAADAAAAA",
+ "DgAAAG0AdQB4AEMAbwBuAGMAdQByAHIAZQBuAGMAeQAAAAAABQAAAAEAAAA4AAAA",
+ "GgAAAGQAbwBtAGEAaQBuAF8AcwB0AHIAYQB0AGUAZwB5AF8AZgBvAHIAXwByAGUAbQBvAHQAZQAAAAAABQAAAAQAAABhdXRv",
+ "CQAAAGQAaQByAGUAYwB0AEQAbgBzAAAABQAAAAUAAABsb2NhbAAAAA",
+ "GgAAAGQAbwBtAGEAaQBuAF8AcwB0AHIAYQB0AGUAZwB5AF8AZgBvAHIAXwBkAGkAcgBlAGMAdAAAAAAABQAAAAQAAABhdXRv",
+ "GgAAAGQAbwBtAGEAaQBuAF8AcwB0AHIAYQB0AGUAZwB5AF8AZgBvAHIAXwBzAGUAcgB2AGUAcgAAAAAABQAAAAQAAABhdXRv",
+ "EAAAAGUAbgBhAGIAbABlAEQAbgBzAFIAbwB1AHQAaQBuAGcAAAAAAAEAAAABAAAAAQAAAA",
+ "DwAAAGEAcABwAGUAbgBkAEgAdAB0AHAAUAByAG8AeAB5AAAAAQAAAAEAAAAAAAAA",
+ "CwAAAGEAbABsAG8AdwBBAGMAYwBlAHMAcwAAAAEAAAABAAAAAAAAAA",
+ "EQAAAGMAbwBuAG4AZQBjAHQAaQBvAG4AVABlAHMAdABVAFIATAAAAAUAAAAZAAAAaHR0cDovL2NwLmNsb3VkZmxhcmUuY29tLwAAAA",
+ "DwAAAGEAYwBxAHUAaQByAGUAVwBhAGsAZQBMAG8AYwBrAAAAAQAAAAEAAAAAAAAA",
+ "DgAAAGUAbgBhAGIAbABlAEMAbABhAHMAaABBAFAASQAAAAAAAQAAAAEAAAAAAAAA",
+ "FAAAAHQAYwBwAEsAZQBlAHAAQQBsAGkAdgBlAEkAbgB0AGUAcgB2AGEAbAAAAAAABQAAAAIAAAAxNQAA",
+ "DQAAAGEAcABwAFQATABTAFYAZQByAHMAaQBvAG4AAAAFAAAAAwAAADEuMgA",
+ "DQAAAHMAaABvAHcAQgBvAHQAdABvAG0AQgBhAHIAAAABAAAAAQAAAAAAAAA",
+ "AwAAAG0AdAB1AAAABQAAAAQAAAAxNTAw",
+ "DQAAAGUAbgBhAGIAbABlAEYAYQBrAGUARABuAHMAAAABAAAAAQAAAAEAAAA",
+ "CQAAAHIAZQBtAG8AdABlAEQAbgBzAAAABQAAAAkAAAAxMjcuMC4wLjEAAAA",
+ "CAAAAGEAcABwAFQAaABlAG0AZQAAAAAABAAAAAgAAAAAAAAAAAAABw",
+ "CQAAAHAAcgBvAGYAaQBsAGUASQBkAAAABAAAAAgAAAAAAAAAAAAAAw",
+ "DgAAAHAAcgBvAGYAaQBsAGUAQwB1AHIAcgBlAG4AdAAAAAAABAAAAAgAAAAAAAAAAAAAAw",
+ "DAAAAHAAcgBvAGYAaQBsAGUARwByAG8AdQBwAAAAAAAEAAAACAAAAAAAAAAAAAAB"
+ ]
+} \ No newline at end of file
diff --git a/web/themes/README.md b/web/themes/README.md
new file mode 100644
index 00000000..193ac6a2
--- /dev/null
+++ b/web/themes/README.md
@@ -0,0 +1,2 @@
+# This is where themes will go
+(This file exists so the directory is not empty, otherwise it won't be added to git)