diff --git a/docs/content/images/case-selection.png b/docs/content/images/case-selection.png
new file mode 100644
index 0000000..bb487b3
Binary files /dev/null and b/docs/content/images/case-selection.png differ
diff --git a/docs/content/images/compare-compact.png b/docs/content/images/compare-compact.png
new file mode 100644
index 0000000..894e277
Binary files /dev/null and b/docs/content/images/compare-compact.png differ
diff --git a/docs/content/images/employee-table.png b/docs/content/images/employee-table.png
new file mode 100644
index 0000000..7af88ab
Binary files /dev/null and b/docs/content/images/employee-table.png differ
diff --git a/docs/content/images/global-wishes.png b/docs/content/images/global-wishes.png
new file mode 100644
index 0000000..492bc7d
Binary files /dev/null and b/docs/content/images/global-wishes.png differ
diff --git a/docs/content/images/insert-solution.png b/docs/content/images/insert-solution.png
new file mode 100644
index 0000000..750c078
Binary files /dev/null and b/docs/content/images/insert-solution.png differ
diff --git a/docs/content/images/load-min-staffing.png b/docs/content/images/load-min-staffing.png
new file mode 100644
index 0000000..6dc2ef7
Binary files /dev/null and b/docs/content/images/load-min-staffing.png differ
diff --git a/docs/content/images/min-staffing.png b/docs/content/images/min-staffing.png
new file mode 100644
index 0000000..42cbbf1
Binary files /dev/null and b/docs/content/images/min-staffing.png differ
diff --git a/docs/content/images/monthly-wishes.png b/docs/content/images/monthly-wishes.png
new file mode 100644
index 0000000..a96d044
Binary files /dev/null and b/docs/content/images/monthly-wishes.png differ
diff --git a/docs/content/images/save-min-staffing.png b/docs/content/images/save-min-staffing.png
new file mode 100644
index 0000000..5ff46d4
Binary files /dev/null and b/docs/content/images/save-min-staffing.png differ
diff --git a/docs/content/images/schedules-dialog.png b/docs/content/images/schedules-dialog.png
new file mode 100644
index 0000000..b9b3204
Binary files /dev/null and b/docs/content/images/schedules-dialog.png differ
diff --git a/docs/content/images/solution.png b/docs/content/images/solution.png
new file mode 100644
index 0000000..735e2c0
Binary files /dev/null and b/docs/content/images/solution.png differ
diff --git a/docs/content/images/solver.png b/docs/content/images/solver.png
new file mode 100644
index 0000000..e6578eb
Binary files /dev/null and b/docs/content/images/solver.png differ
diff --git a/docs/content/images/upload-solution.png b/docs/content/images/upload-solution.png
new file mode 100644
index 0000000..b088b09
Binary files /dev/null and b/docs/content/images/upload-solution.png differ
diff --git a/docs/content/images/weights.png b/docs/content/images/weights.png
new file mode 100644
index 0000000..d0cb8a9
Binary files /dev/null and b/docs/content/images/weights.png differ
diff --git a/docs/content/images/workflow.png b/docs/content/images/workflow.png
new file mode 100644
index 0000000..e7fe02c
Binary files /dev/null and b/docs/content/images/workflow.png differ
diff --git a/docs/content/user-guide.mdx b/docs/content/user-guide.mdx
index a12e090..7b39988 100644
--- a/docs/content/user-guide.mdx
+++ b/docs/content/user-guide.mdx
@@ -21,6 +21,9 @@ node --version
npm --version
```
+For further instructions on installing Node.js and npm, please refer to the official Node.js documentation:
+[https://nodejs.org/en/download/](https://nodejs.org/en/download/)
+
**Optional** β if you intend to run the constraint-programming solver:
| Requirement | Details |
@@ -67,9 +70,12 @@ Open `config.json` and set the cases directory:
| Key | Description |
|---|---|
| `casesDirectory` | Path to the case data folder. Can be absolute (`C:\data\cases`) or relative to the project root (`/cases`). To share data with the StaffScheduling solver, point this to its `cases/` directory (e.g. `../StaffScheduling/cases`). |
-| `staffSchedulingProject.include` | Set to `true` to enable solver integration. |
+| `staffSchedulingProject.include` | Set to `true` to enable solver integration. If the solver cannot be reached, the programme will return an error message. |
| `staffSchedulingProject.path` | Absolute path to the StaffScheduling Python project on disk. |
-| `staffSchedulingProject.pythonExecutable` | The command used to invoke Python β `uv`, `python`, or `python3`. |
+| `staffSchedulingProject.pythonExecutable` | The command used to invoke Python β `uv`, `python`, or `python3` depending on the local installation. |
+
+> **Important:** If you use the solver API server it is not necessary to change the `staffSchedulingProject` configuration since the API server will be used instead of direct execution regardless of these settings.
+ In this case it is sufficient to change the `casesDirectory` to point to the shared case folder between the web app and the solver.
4. **Start the development server**
@@ -163,7 +169,10 @@ within that case.
> **Note:** Creating a new case via the "+" button will only trigger automatic data generation from TimeOffice if a solver connection is configured. Without a connected solver the case directory is created and you must populate the underlying JSON files manually (see [Underlying Data](./underlying_data)).
-> πΈ **[Screenshot: Case Selection]**
+
+
+ 
+
### Phase 2 β Review Employee Data
@@ -187,7 +196,9 @@ This classification determines which minimum staffing thresholds apply to each e
(configured on the Minimum Staff page). Employee data is read-only in the web interface β
modifications must be made in TimeOffice and re-exported.
-> πΈ **[Screenshot: Employees page showing the employee table with columns for ID, name, and type]**
+
+ 
+
### Phase 3 β Define Wishes & Blocked Periods
@@ -245,7 +256,9 @@ Tuesdays off".
5. For shift-specific entries, also choose the shift type (**F** = Early, **S** = Late, **N** = Night).
6. Click **"Speichern"** (Save). The system immediately generates all corresponding monthly entries.
-> πΈ **[Screenshot: Global Wishes page showing a weekly recurring pattern entry with weekday selector]**
+
+ 
+
#### Saving Global Wishes as a Template
@@ -273,8 +286,9 @@ months without re-entering every entry manually.
You can also edit or delete individual entries from the list at any time to override what was
generated from the global scope β but be aware that re-saving global wishes will reset these.
-> πΈ **[Screenshot: Monthly Wishes page with the calendar interface open, showing selected dates
-> highlighted and the shift type selector]**
+
+ 
+
### Phase 4 β Configure Solver Parameters
@@ -286,22 +300,36 @@ Navigate to **"Gewichtung"** (Weights) to view and adjust penalty weights for so
Higher weights cause the solver to prioritize avoiding specific violations (e.g. forward rotation,
consecutive night shifts).
-> πΈ **[Screenshot: Weights configuration page showing sliders or input fields for constraint weights]**
+
+ 
+
#### Minimum Staff
Navigate to **"Mindestbesetzung"** (Minimum Staff) to define the minimum number of employees required
per shift type (F, S, N) for each day of the week.
-> πΈ **[Screenshot: Minimum Staff page showing the staffing matrix with shift types as columns
-> and weekdays as rows]**
+
+ 
+
#### Templates
Both weights and minimum staff configurations can be saved as **templates** for reuse across cases.
Use the template dialogs to save, load, or import presets.
-> πΈ **[Screenshot: Template save/load dialog]**
+
+
+
+
+
> **Important β Weights and `solve-multiple`:** The weights configuration only affects the
> **`solve`** command (single schedule generation). When using **`solve-multiple`**, the solver
@@ -342,14 +370,22 @@ Workflow mode is the intended end-to-end flow for connected TimeOffice installat
While workflow mode is active, a banner appears at the top of every page indicating the active
case and date range. Navigate to **"Workflow"** to run the solver pipeline.
-> πΈ **[Screenshot: Workflow page with the workflow banner and solver pipeline steps (Fetch / Solve / Insert)]**
+
+ 
+
#### Option B β Solver Page (Manual / Developer Mode)
The Solver page provides the same operations without requiring an active workflow session.
It is primarily intended for development, testing, and manual scheduling scenarios.
-> πΈ **[Screenshot: Solver page showing fetch, solve, solve-multiple, insert, and delete buttons]**
+> **Important:** If you get an error message about the solver connection when entering this page, check your `config.json`
+> settings and ensure the path to the StaffScheduling project is correct and that Python is properly installed.
+> If you are using the API server, make sure it is running on the correct port e.g. `http://localhost:8000`.
+
+
+ 
+
#### Option C β Manual File Import
@@ -370,7 +406,9 @@ schedules, you can upload them manually:
2. Click **"Upload"** and select a `processed_solution_*.json` file from the solver's
`processed_solutions/` output directory.
-> πΈ **[Screenshot: Schedule page with the upload button and file picker dialog]**
+
+ 
+
#### Viewing a Schedule
@@ -395,7 +433,9 @@ spot conflicts at a glance:
| Red-highlighted day | Blocked day (employee must not work) |
| Small triangle indicator | Wish day (employee prefers to be off) |
-> πΈ **[Screenshot: Schedule detail view with the shift matrix and wish/blocked symbols visible in cells]**
+
+ 
+
#### Comparing Schedules
@@ -416,7 +456,9 @@ spot conflicts at a glance:
3. In the same dialog you can **add or edit a description** for each schedule to help distinguish
them (e.g. "Variant with fewer night violations"), and **delete** schedules you no longer need.
-> πΈ **[Screenshot: All Schedules dialog showing metrics table, description column, and delete buttons]**
+
+ 
+
#### Compact / Comparison Views
@@ -425,7 +467,9 @@ spot conflicts at a glance:
vertically across all loaded schedules, making it easy to spot per-employee differences between
variants.
-> πΈ **[Screenshot: Compare view showing two schedules side by side with per-employee shift rows]**
+
+ 
+
#### Selecting the Optimal Schedule
@@ -433,9 +477,9 @@ After reviewing the metrics and visual matrix:
1. Choose the schedule that best balances low violations and high wish fulfillment.
2. Click **"AuswΓ€hlen"** (Select) to mark it as the active schedule for this case.
-3. The selected plan is persisted and will be used for the **Insert** operation (Phase 5).
+3. The selected plan is persisted and will be used for the **Insert** operation (Phase 7).
-> πΈ **[Screenshot: Schedule page with the selection banner indicating the currently active schedule]**
+> The selection is done in the same dialog as the comparison metrics, so you can make an informed decision based on the data and visualizations without needing to switch contexts.
### Phase 7 β Deploy the Schedule
@@ -446,7 +490,9 @@ After selecting the optimal schedule:
3. Use the StaffScheduling insert tool to write the schedule back to TimeOffice.
4. Perform a final manual review in TimeOffice before publishing to staff.
-> πΈ **[Screenshot: Schedule page with a banner indicating the currently selected/active schedule]**
+
+ 
+
---