diff --git a/README.md b/README.md
index 20f1000f..4c30b463 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,30 @@
-# OGP-AdminLTE
-AdminLTE Theme adapted for OpenGamePanel
+# GSP Windows Agent
-### Features
-- [x] Installs a Theme Database for User specific Theme Settings
-- [x] Responsive
-- [x] Dark and Light Mode Switcher
-- [x] Custom Dashboard with additional Rows (all Boxes are movable!)
-- [x] Custom Server Overview (with Chart & Cronjob)
-- [x] Custom FTP Style
-- [x] Custom Shop Style
-- [x] User specific Avatars (will also load other User Avatars if needed)
-- [x] Maintenance Notification on Login Screen
-- [x] Custom Logo Upload
+Cygwin-based agent that lets the GameServer Panel manage Windows Server 2019/2022 hosts. It mirrors the Linux agent feature set: signed RPC transport, GNU Screen session management, and SteamCMD-aware installers.
-### Images
-
-
-
-
-
-
+## Highlights
+
+- One-click installer (`Install/onceinstall_agent.bat`) that bootstraps Cygwin, required packages, and the `gameserver` service account.
+- Task Scheduler entry that keeps the agent running after reboots.
+- Helper scripts (`agent_conf.sh`, `rebase_post_ins.bat`, etc.) for maintaining the environment.
+- Markdown documentation under [`documentation/agent-guide.md`](documentation/agent-guide.md).
+
+## Quick start
+
+1. Clone or download the repository to `C:\\gsp-agent`.
+2. Right-click `Install\\onceinstall_agent.bat` → “Run as administrator”.
+3. Open the bundled Cygwin terminal and configure the agent:
+ ```bash
+ cd /OGP
+ bash agent_conf.sh -p "gameserverPassword"
+ ```
+4. Edit `C:\\OGP\\Cfg\\Config.pm` (match the settings you entered in the GSP web panel) and start the “OGP agent start on boot” scheduled task.
+
+## Related repositories
+
+- [GSP](https://github.com/GameServerPanel/GSP) – PHP panel that issues commands to the agents.
+- [GSP_Agent_Linux](https://github.com/GameServerPanel/GSP_Agent_Linux) – Linux counterpart with systemd service files.
+
+## Contributing
+
+Send pull requests through GitHub. Test installer changes on a clean Windows Server VM, keep batch files in ASCII, and update `documentation/agent-guide.md` whenever you modify the workflow.
diff --git a/documentation/admin-guide.md b/documentation/admin-guide.md
new file mode 100644
index 00000000..f0956952
--- /dev/null
+++ b/documentation/admin-guide.md
@@ -0,0 +1,151 @@
+# GameServer Panel Admin Guide
+
+This document mirrors the internal WDS wiki entry so it can be viewed directly from the repository, packaged with releases, or imported into another wiki. It explains how we deploy, operate, and extend the GameServer Panel (GSP) fork of Open Game Panel.
+
+## Overview
+
+- **Project scope** – PHP web panel + billing, Linux and Windows agents, 100+ XML driven game templates.
+- **Audience** – Administrators and integrators who maintain commercial hosting fleets.
+- **Companion repos** – [`GSP_Agent_Linux`](https://github.com/GameServerPanel/GSP_Agent_Linux) and [`GSP-Agent-Windows`](https://github.com/GameServerPanel/GSP-Agent-Windows).
+- **Color coding** – We keep the “rust + charcoal” palette across documentation so screenshots match the UX.
+
+## Quick Install (deploy_gsp.sh)
+
+The repository ships `deploy_gsp.sh`, a bash helper that stages the latest commit and syncs it to your web root. Always read the script before running it and override variables via the environment when necessary.
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/GameServerPanel/GSP/main/deploy_gsp.sh \
+ -o /tmp/deploy_gsp.sh
+bash /tmp/deploy_gsp.sh
+```
+
+Key behaviors:
+
+1. Clones/updates the repo in `~/gsp_stage` (configurable via `STAGE_DIR`).
+2. Uses `rsync` to copy files to `WEB_ROOT` while preserving `includes/config.inc.php` and billing configs.
+3. Applies safe permissions (directories 755, files 644, writable directories such as `templates_c` set to 2775).
+4. Leaves MySQL credentials untouched—only you should rotate them.
+
+## Architecture
+
+GSP is still built around the classic OGP topology:
+
+1. **Web Panel** – PHP application with billing, coupons, invoicing, and customer UI enhancements.
+2. **Agents** – Lightweight Perl daemons (`ogp_agent.pl`) installed on every game host. Default port 12679/TCP.
+3. **Game Servers** – Processes defined in `modules/config_games/server_configs/*.xml`. Agents launch them inside detached GNU screen sessions, capture PIDs, and stream console logs back to the panel.
+
+All provisioning logic flows through XML definition files, so keep IDs, attributes, and order compliant with `modules/config_games/schema_server_config.xml`.
+
+## Agent Management
+
+### Linux Agent
+
+1. Install dependencies: `sudo apt install git curl rsync perl libxml2-utils screen` (Ubuntu 24.04+).
+2. Clone and install:
+ ```bash
+ sudo git clone https://github.com/GameServerPanel/GSP_Agent_Linux.git /opt/gsp-agent
+ cd /opt/gsp-agent
+ sudo bash install.sh
+ sudo bash agent_conf.sh -s "yourRootPassword" -u ogp_agent
+ ```
+3. Edit `/home/ogp_agent/Cfg/Config.pm` to match the panel entry (listen ip/port, `key`, `web_api_url`).
+4. Enable the service: `sudo systemctl enable --now ogp_agent` (installs from `systemd/ogp_agent.service`).
+5. Confirm heartbeats from the panel → Administration → Game Servers.
+
+### Windows Agent (Cygwin bundle)
+
+1. `git clone https://github.com/GameServerPanel/GSP-Agent-Windows.git C:\\gsp-agent`.
+2. Run `Install\onceinstall_agent.bat` as Administrator to install Cygwin, create the `gameserver` service user, and copy files.
+3. Launch the bundled Cygwin terminal and execute:
+ ```bash
+ cd /OGP
+ bash agent_conf.sh -p "gameserverPassword"
+ ```
+4. Update `C:\\OGP\\Cfg\\Config.pm` (same structure as Linux) with the panel’s key, API URL, and listen port.
+5. Ensure the “OGP Agent” Windows service is set to Automatic (Delayed Start) and the firewall allows the agent port plus expected game ports.
+
+## XML Deep Dive
+
+Game definitions live under `modules/config_games/server_configs`. They must respect the schema order and content. Keep one tag per line so diffs remain clean.
+
+```xml
+
+
+ valheim_linux64
+ lgsl
+ valheim
+ steamcmd
+ Valheim
+ start_server.sh
+ 1
+ %HOME_PATH%/start_server.sh -name "%HOSTNAME%" -port %PORT% -world %MAP% %VAR_ALL%
+
+
+
+
+
+
+ 1
+ 10
+
+ :-_\
+ saves/worlds
+ 10
+ rcon2
+
+
+ Dedicated
+ 896660
+
+
+
+
+ my_server_identity
+ Sets the Rust identity folder.
+
+
+
+
+ Start
+ ./RustDedicated -port {PORT} -ip {IP} {VAR_ALL}
+
+
+
+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{OGP_HOME_DIR}/RustDedicated_Data/Plugins/x86_64
+
+
+```
+
+### Schema Tag Reference (abridged)
+
+The full human-readable version is provided in [`documentation/xml-notes.md`](./xml-notes.md). Highlights:
+
+- `game_config` – Root node, one per file.
+- `game_key` – Unique identifier plus OS suffix (`_linux64`, `_win32`, etc.).
+- `protocol`, `lgsl_query_name`, `gameq_query_name` – Control how the panel queries live status.
+- `installer` – `steamcmd`, `rsync`, `manual`, or custom.
+- `cli_template` – Command string appended after the executable; supports `%VARIABLE%` placeholders and `{VAR_ALL}` macros.
+- `cli_param` – Defines formatting rules for each variable (space/quote behaviors via the `options` attribute).
+- `reserve_ports` – Offsets additional ports relative to `%PORT%` (query, Steam, RCON, etc.).
+- `server_params` / `param` – Form inputs shown in the panel UI.
+- `replace_texts` – Declarative config edits (search/replace values inside cfg files).
+- `commands` – Start/stop/console actions executed by the agent.
+- `environment_variables` – Prepend exports before the command runs.
+
+## Adding a New Game
+
+1. **Research** – Identify the executable, required CLI flags, optional parameters, config paths, and ports.
+2. **Copy a template** – Duplicate a similar XML file from `server_configs/` and modify it in-place.
+3. **Wire up parameters** – Use `server_params` for every knob you want exposed, and map those IDs inside `cli_params`.
+4. **Validate** – Run `xmllint --schema modules/config_games/schema_server_config.xml mygame.xml --noout`.
+5. **Test** – Upload through the panel, click “Update Games List,” provision a server, and watch `ogp_agent.log` for errors.
+6. **Document** – Update this guide or the wiki with any quirks, Steam app IDs, or non-standard install notes.
+
+## Operational Notes
+
+- **No panelStart wrapper** – The agent handles PID tracking, console logs, and restart logic. Keep commands clean.
+- **Logging** – Agents write `ogp_agent.log`, `ogp_agent.pid`, `ogp_agent_run.pid`, and individual `console.log` files.
+- **Stats database** – Optional MySQL credentials in `Cfg/Config.pm` feed resource monitoring cron jobs.
+- **Password rotation** – Update credentials in `content/staff-passwords.txt` on the WDS website and regenerate secrets in the panel/agents at the same time.
+
+For deeper schema commentary, consult [`documentation/xml-notes.md`](./xml-notes.md) or import the Markdown into your preferred wiki.
diff --git a/documentation/agent-guide.md b/documentation/agent-guide.md
new file mode 100644
index 00000000..0700afd9
--- /dev/null
+++ b/documentation/agent-guide.md
@@ -0,0 +1,72 @@
+# Linux Agent Operations Guide
+
+Packaged copy of the instructions we keep in the staff wiki so you can view them offline or import them into any other knowledge base.
+
+## Purpose
+
+The Linux agent (`ogp_agent.pl`) exposes the RPC endpoint that allows the GameServer Panel to install, start, stop, and monitor game servers on Linux hosts. Every host that runs customer games must run this service.
+
+## Supported platforms
+
+- Ubuntu 20.04/22.04/24.04 LTS
+- Debian 11/12
+- Rocky/AlmaLinux 8+
+- Any modern distribution with Perl 5.30+, GNU Screen, and rsync
+
+## Installation (Ubuntu example)
+
+```bash
+sudo apt update
+sudo apt install -y git curl rsync screen perl libxml-parser-perl libpath-class-perl libarchive-zip-perl libhttp-daemon-perl
+sudo git clone https://github.com/GameServerPanel/GSP_Agent_Linux.git /opt/gsp-agent
+cd /opt/gsp-agent
+sudo bash install.sh
+sudo bash agent_conf.sh -s "root-password" -u ogp_agent
+```
+
+`agent_conf.sh` writes `/home/ogp_agent/Cfg/Config.pm`. Set:
+
+| Key | Description |
+| --- | ----------- |
+| `listen_ip` | Interface to bind (use `0.0.0.0` unless you want to restrict access). |
+| `listen_port` | TCP port exposed to the panel. Default is `12679`. |
+| `key` | Shared secret copied from the panel → Administration → Game Servers. |
+| `web_api_url` | HTTPS URL to `ogp_api.php` on the panel. |
+| `stats_db_*` | Optional MySQL credentials for the resource stats cron. |
+
+## Service management
+
+```bash
+sudo cp systemd/ogp_agent.service /etc/systemd/system/
+sudo sed -i "s#{OGP_AGENT_PATH}#/opt/gsp-agent#g" /etc/systemd/system/ogp_agent.service
+sudo systemctl daemon-reload
+sudo systemctl enable --now ogp_agent
+```
+
+Logs live next to the binaries (`/opt/gsp-agent/ogp_agent.log`). Individual game servers stream to their own `console.log` files inside each home folder.
+
+## Firewall checklist
+
+1. Allow inbound TCP on the agent port.
+2. Allow inbound/outbound UDP/TCP for the games you host.
+3. Allow outbound HTTPS to the panel so the agent can talk to `ogp_api.php`.
+
+## Upgrades
+
+1. `cd /opt/gsp-agent && git pull`
+2. Stop the service (`sudo systemctl stop ogp_agent`).
+3. Re-run `bash install.sh` if new files were added.
+4. Start the service (`sudo systemctl start ogp_agent`).
+5. Verify the panel shows the agent as “online”.
+
+## Troubleshooting
+
+- `tail -f ogp_agent.log` – handshake failures usually mean the encryption key or port mismatches the panel entry.
+- `journalctl -u ogp_agent` – capture Perl stack traces and missing dependency errors.
+- `screen -ls` – confirm customer servers are running in screen sessions.
+- `nc -vz panel.example.com 12679` from the panel host – ensures the agent port is reachable.
+
+## Related docs
+
+- [`GSP/documentation/admin-guide.md`](https://github.com/GameServerPanel/GSP/tree/main/documentation) – Panel-side instructions plus XML authoring notes.
+- [`GSP-Agent-Windows/documentation/agent-guide.md`](https://github.com/GameServerPanel/GSP-Agent-Windows/tree/main/documentation/agent-guide.md) – Windows counterpart.
diff --git a/documentation/xml-notes.md b/documentation/xml-notes.md
new file mode 100644
index 00000000..2e32a526
--- /dev/null
+++ b/documentation/xml-notes.md
@@ -0,0 +1,622 @@
+## GameServer Panel XML Notes / still W.I.P.
+
+_The order of each XML element matters, and this guide presents them in their order of appearance for the GSP (OGP fork)!_
+___
+### Linux and Windows:
+
+
+#### Game Config:
+This is the first element. There can only be one `` element.
+```
+
+the whole XML file content here
+
+```
+All the following elements should be contained within `` element.
+
+
+
+___
+#### Game Key:
+Comes after `` element (actually within `` element as said above). There can only be one `` element. Example:
+
+```
+space_engineers_win64
+```
+This is a unique key used to identify this specific game server in OGP. You should not use spaces, nor any special character in it, only alpha-numeric value and underscores. It should contain a suffix related to the compatible OS. Available suffixes are `_win32`, `_win64`, `_linux32`, `_linux64`, using one of these suffixes in the game_key will let OGP know which OS it is available on, making it visible or not when you install a new game server, depending on your OS architecture. `_win` and `_linux` work too, but we highly recommend to now use the previously listed suffixes.
+
+
+
+___
+#### Query Protocol:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+lgsl
+```
+It defines the query protocol used by OGP. Available protocols are `lgsl`, `gameq`, `rcon` (`rcon2`? `lcon`?)
+
+
+
+___
+#### LGSL Query Name:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+killingfloor2
+```
+This is the unique key referencing this specific game server in the LGSL protocol file, used to query the game server.
+
+
+
+___
+#### GameQ Query Name:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+redorchestra2
+```
+This is the unique key referencing this specific game server in the GameQ protocol files, used to query the game server.
+
+
+
+___
+#### Installer:
+Comes after `` element (or comes after `` or `` element when used). There can only be one `` element. Example:
+
+```
+steamcmd
+```
+Defines the use of SteamCMD tool to install the game server.
+
+
+
+___
+#### Game Name:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+Killing Floor 2
+```
+This is the real game server name appearing in the list when installing a new game server.
+
+
+
+___
+#### Server Executable Name:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+SpaceEngineersDedicated.exe
+```
+This is the server executable name used in the start command line.
+
+
+
+___
+#### Query Port:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+13
+```
+Difference between the server port (`%PORT%`) and the query port (`%QUERY_PORT%`). In this example the variable %QUERY_PORT% will be 13 added to the port value.
+
+
+
+___
+#### CLI Template:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+-console %BASE_PATH% -ignorelastsession
+```
+```
+%MAP%%GAMEMODE%%DIFFICULTY%%GAMELENGTH%%PLAYERS%%MUTATOR% %PORT% %IP% %WEB_ADMIN_PORT% %QUERY_PORT%
+```
+This is the template that will generate the start command line placed after the server executable name.
+You can use these variables which are known to OGP:
+```
+GAME_TYPE
+HOSTNAME
+IP
+MAP
+PID_FILE
+PLAYERS
+PORT
+QUERY_PORT
+BASE_PATH
+HOME_PATH
+SAVE_PATH
+OUTPUT_PATH
+CONTROL_PASSWORD
+```
+These variable should be between `%` characters, the Panel will then replace them with the proper value when generating the start command line.
+
+You can also use custom variables that you will define later in the XML.
+
+
+
+___
+#### CLI Parameters:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+
+
+
+
+
+
+
+
+```
+It defines the known variables used in ``. In this example we can imagine that for **%MAP%** it will generate the map name without space or quotes around it, because there is no `options`, for **%IP%** it will generate `-MultiHome="123.123.123.123"` using the `cli_string` and adding only quotes around the game server IP value because of `options="q"`, and **%PORT%** will generate `-Port= "27015"` using the `cli_string` and adding space and quotes around the game server port because of `options="sq"`.
+
+
+
+___
+#### Reserve Ports:
+Comes after `` or `` element. There can only be one `` element. Example:
+
+```
+
+ 5
+ 19238
+ 666
+
+```
+You can add reserved ports here to use in the generated start command line. These ports will also be managed by OGP if OGP is used to manage the Agent machine firewall. Type can be `add` or `subtract` which is self explanatory. In this example when using the %WEB_ADMIN_PORT% variable in the `` it will generate `-WebAdminPort=XXX`, XXX being 5 subtracted to the Port set for this game server, when using the %STEAM_PORT% variable in the `` it will generate `-SteamPort=XXX` where XXX will be 19238 added to the Port set for this game server. As you can see, the variable %MY_CUSTOM_PORT% have no `cli_string`, this can be used this way to simply open this port (which here would be 666 added to the game server port) in the Agent machine firewall, when OGP is set to control the machine firewall (note: the firewall management may actually not open anything else than the game server port, to be verified).
+
+
+
+___
+#### CLI Allowed Characters:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+;
+```
+Used to allow some special characters in the command line. Escaped by default: ```\ " ' | & ; > < ` $ ( ) [ ]```
+
+
+
+___
+#### Maps Location:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+folder/maps
+```
+It sets the path of the map folder for this game server, which will be used to generate a selectable map list available before starting the game server. If folder contains map files it will use their name without the extension, if it contains sub folders with each map inside each own sub folder, it will generate the map list based on the folders names contained in the defined path. The selected map in the list will be used to replace the %MAP% variable in the ``.
+
+
+
+___
+#### Map List:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+maplist.txt
+```
+The map list file path used to generate the selectable map list available before starting the game server. In this example it will look for a file called maplist.txt inside the root of the game server. Map list should have one map per line. The selected map in the list will be used to replace the %MAP% variable in the ``.
+
+
+
+___
+#### Console Log:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+KFGame/Logs/Launch.log
+```
+It defines the path of the log file that will be shown in the LOG page of the game server. Most game servers, especially on Linux, will not need that, when in general, Windows game server will need it to properly show the output log.
+
+
+
+___
+#### Executable Location:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+Binaries/Win64
+```
+It defines the path of the game server executable when not in the root folder.
+
+
+
+___
+#### Max User Amount:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+64
+```
+It defines the maximum player number you will be able to set when creating the game server.
+
+
+
+___
+#### Control Protocol:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+rcon2
+```
+Can be `rcon`, `rcon2`, or `lcon` (legacy). Note that `rcon` can also have type option to define, which can be `old` or `new`. Example:
+```
+rcon
+old
+```
+
+
+
+___
+#### Mods:
+Comes after `` element. There can only be one `` element. Example:
+
+```
+
+
+ none
+ 237410
+
+
+```
+
+Used to define different mods for the game server, in this example there is only one mod available which will be the default installed one (actually the game server itself here). The `` here is the Steam appID that will be used to install and update the game server. (note: case RSync to explain? Case multi mods to explain?)
+
+
+
+___
+#### Replace Texts
+`` Comes after ``.
+
+Contains multiple `` entries like so:
+
+```
+
+
+ ServerAdminPassword=.*
+ ServerAdminPassword=
+ ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini
+ sq
+
+
+ SessionName=.*
+ SessionName=
+ ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini
+ sq
+
+
+```
+
+`` within `` is what the line to replace starts with.
+
+`` within `` is the key for what should be kept when the line is replaced with the value entered by the user when replacing text occurs.
+
+`` within `` specifies the text file to make the replacement in.
+
+`` within `` specifies how to enter the user's value after the `` key. Possible options are:
+
+```
+ nothing / no value = placed as is
+ s = space / separated
+ q = quoted
+ sq = space and quotes
+ sc = space and ends with a comma
+ sqc = space, quoted, and ends with a comma
+```
+These replace text will be applied on server start and modify the specified config files with the values generated by the Panel.
+
+
+
+___
+#### Server Params:
+`` Comes after ``.
+
+Contains multiple `` entries like so:
+
+```
+
+
+
+
Server Password
+ Players must know this password to connect.
+
+
+
+
+
+ ns
+
Difficulty
+ This sets the server difficulty. Leave empty to configure this parameter in the config files or webadmin
+
+
+
Cheats
+ Enable the cheats to be used from the ingame Admin menu
+
+
+```
+
+`id` attribute on the `` specifies which variable to replace in the ``
+`key` attribute specifies what will replace the variable defined by id attribute
+type attribute will define what kind of parameter it is, possible values are `text` `select` `checkbox_key_value`:
+- `text` will allow to write text value to be added during the replacement of the variables in startup command line. For example, `%SP%` in `` would be replaced with `?ServerPassword=XXX` where XXX would be the value entered by the user in the text box, if nothing is entered the variable is not replaced but removed from ``. The value entered can be modified to fit your needs by using the `