diff --git a/REDIRECTS b/REDIRECTS
index ca57faee..7efc5710 100644
--- a/REDIRECTS
+++ b/REDIRECTS
@@ -28,7 +28,7 @@ https://help.cloudmergin.com/plugin-installation https://merginmaps.com/docs/set
https://help.cloudmergin.com/plugin-logs https://merginmaps.com/docs/misc/troubleshoot/
https://help.cloudmergin.com/plugin-new-project https://merginmaps.com/docs/manage/create-project/
https://help.cloudmergin.com/plugin-sync-project https://merginmaps.com/docs/manage/plugin/
-https://help.cloudmergin.com/plugin-variables https://merginmaps.com/docs/layer/plugin-variables/
+https://help.cloudmergin.com/plugin-variables https://merginmaps.com/docs/layer/variables/
https://help.cloudmergin.com/project-advanced https://merginmaps.com/docs/manage/project-advanced/
https://help.cloudmergin.com/project-details https://merginmaps.com/docs/manage/project-history/
https://help.cloudmergin.com/quick-start https://merginmaps.com/docs/tutorials/capturing-first-data/
@@ -62,7 +62,7 @@ https://help.inputapp.io/howto/exif_metadata https://merginmaps.com/docs/layer/e
https://help.inputapp.io/howto/external_gps https://merginmaps.com/docs/field/external_gps/
https://help.inputapp.io/howto/gps_accuracy https://merginmaps.com/docs/field/gps_accuracy/
https://help.inputapp.io/howto/package_qgis_project https://merginmaps.com/docs/manage/create-project/
-https://help.inputapp.io/howto/position_variables https://merginmaps.com/docs/layer/position_variables/
+https://help.inputapp.io/howto/position_variables https://merginmaps.com/docs/layer/variables/
https://help.inputapp.io/howto/proj https://merginmaps.com/docs/gis/proj/
https://help.inputapp.io/howto/project_config https://merginmaps.com/docs/gis/features/
https://help.inputapp.io/howto/registration https://merginmaps.com/docs/setup/sign-up-to-mergin-maps/
@@ -75,11 +75,11 @@ https://help.inputapp.io/howto/settingup_background_map https://merginmaps.com/d
https://help.inputapp.io/howto/settingup_background_map_rastertile https://merginmaps.com/docs/gis/settingup_background_map/
https://help.inputapp.io/howto/settingup_background_map_vectortile https://merginmaps.com/docs/gis/settingup_background_map/
https://help.inputapp.io/howto/settingup_forms https://merginmaps.com/docs/layer/form-widgets/
-https://help.inputapp.io/howto/settingup_forms_cascade https://merginmaps.com/docs/layer/form-configuration/
+https://help.inputapp.io/howto/settingup_forms_cascade https://merginmaps.com/docs/layer/value-select/
https://help.inputapp.io/howto/settingup_forms_checkbox https://merginmaps.com/docs/layer/form-widgets/
-https://help.inputapp.io/howto/settingup_forms_constraints https://merginmaps.com/docs/layer/form-configuration/
+https://help.inputapp.io/howto/settingup_forms_constraints https://merginmaps.com/docs/layer//constraints/
https://help.inputapp.io/howto/settingup_forms_datetime https://merginmaps.com/docs/layer/form-widgets/
-https://help.inputapp.io/howto/settingup_forms_defaults https://merginmaps.com/docs/layer/form-configuration/
+https://help.inputapp.io/howto/settingup_forms_defaults https://merginmaps.com/docs/layer/default-values/
https://help.inputapp.io/howto/settingup_forms_layout https://merginmaps.com/docs/layer/form-layout/
https://help.inputapp.io/howto/settingup_forms_number https://merginmaps.com/docs/layer/form-widgets/
https://help.inputapp.io/howto/settingup_forms_one-to-many https://merginmaps.com/docs/layer/one-to-n-relations/
@@ -90,7 +90,7 @@ https://help.inputapp.io/howto/settingup_forms_text https://merginmaps.com/docs/
https://help.inputapp.io/howto/settingup_forms_valuemap https://merginmaps.com/docs/layer/form-widgets/
https://help.inputapp.io/howto/settingup_forms_valuerelation https://merginmaps.com/docs/layer/form-widgets/
https://help.inputapp.io/howto/setup_themes https://merginmaps.com/docs/gis/setup_themes/
-https://help.inputapp.io/howto/working_with_nonspatial_data https://merginmaps.com/docs/layer/non-spatial-data/
+https://help.inputapp.io/howto/working_with_nonspatial_data https://merginmaps.com/docs/layer/overview/
https://help.inputapp.io/input_ui https://merginmaps.com/docs/field/mobile-app-ui/
https://help.inputapp.io/licensing https://merginmaps.com/docs/misc/licensing/
https://help.inputapp.io/privacy N/A -- handled by https://merginmaps.com/privacy-policy/
@@ -120,7 +120,7 @@ https://merginmaps.com/docs/fieldwork/gps_accuracy/ https://merginmaps.com/docs/
https://merginmaps.com/docs/field/input_features/ https://merginmaps.com/docs/field/mobile-features/
https://merginmaps.com/docs/field/input_ui/ https://merginmaps.com/docs/field/mobile-app-ui/
https://merginmaps.com/docs/gis/enable_browsing/ https://merginmaps.com/docs/gis/search_data/
-https://merginmaps.com/docs/howto/attach-multiple-photos-to-features/ https://merginmaps.com/docs/layer/attach-multiple-photos-to-features/
+https://merginmaps.com/docs/howto/attach-multiple-photos-to-features/ https://merginmaps.com/docs/layer/photos/#how-to-attach-multiple-photos-to-one-feature/
https://merginmaps.com/docs/howto/contribute/ https://merginmaps.com/docs/misc/get-involved/
https://merginmaps.com/docs/howto/create-an-organization/ https://merginmaps.com/docs/manage/workspaces/
https://merginmaps.com/docs/howto/create-project/ https://merginmaps.com/docs/manage/create-project/
@@ -140,7 +140,7 @@ https://merginmaps.com/docs/howto/manage/plugin/install/ https://merginmaps.com/
https://merginmaps.com/docs/howto/manage/plugin/plugin-delete-project/ https://merginmaps.com/docs/manage/project-advanced/
https://merginmaps.com/docs/howto/manage/plugin/plugin-new-project/ https://merginmaps.com/docs/manage/create-project/
https://merginmaps.com/docs/howto/manage/plugin/plugin-sync-project/ https://merginmaps.com/docs/manage/plugin/
-https://merginmaps.com/docs/howto/manage/plugin/plugin-variables/ https://merginmaps.com/docs/layer/plugin-variables/
+https://merginmaps.com/docs/howto/manage/plugin/plugin-variables/ https://merginmaps.com/docs/layer/variables/
https://merginmaps.com/docs/howto/manage/troubleshoot/ https://merginmaps.com/docs/misc/troubleshoot/
https://merginmaps.com/docs/howto/manage/web/dashboard/ https://merginmaps.com/docs/manage/dashboard/
https://merginmaps.com/docs/howto/manage/web/project-advanced/ https://merginmaps.com/docs/manage/project-advanced/
@@ -151,7 +151,7 @@ https://merginmaps.com/docs/howto/manage/web/web-create-project/ https://merginm
https://merginmaps.com/docs/howto/manage/web/working-with-organisations/ https://merginmaps.com/docs/manage/workspaces/
https://merginmaps.com/docs/howto/mergince/ https://merginmaps.com/docs/server/
https://merginmaps.com/docs/howto/mergin-tour/ https://merginmaps.com/docs/tutorials/creating-a-project-in-qgis/
-https://merginmaps.com/docs/howto/position_variables/ https://merginmaps.com/docs/layer/position_variables/
+https://merginmaps.com/docs/howto/position_variables/ https://merginmaps.com/docs/layer/variables/
https://merginmaps.com/docs/howto/proj/ https://merginmaps.com/docs/gis/proj/
https://merginmaps.com/docs/howto/project/enable_browsing/ https://merginmaps.com/docs/gis/search_data/
https://merginmaps.com/docs/howto/project/enable_digitising/ https://merginmaps.com/docs/gis/enable_digitising/
@@ -162,17 +162,23 @@ https://merginmaps.com/docs/howto/project/selective_sync/ https://merginmaps.com
https://merginmaps.com/docs/howto/project/settingup_background_map/ https://merginmaps.com/docs/gis/settingup_background_map/
https://merginmaps.com/docs/howto/project/settingup_forms/ https://merginmaps.com/docs/layer/form-widgets/
https://merginmaps.com/docs/howto/project/settingup_forms_photo/ https://merginmaps.com/docs/layer/photos/
-https://merginmaps.com/docs/howto/project/settingup_forms_settings/ https://merginmaps.com/docs/layer/form-configuration/
+https://merginmaps.com/docs/howto/project/settingup_forms_settings/ https://merginmaps.com/docs/layer/overview/
https://merginmaps.com/docs/howto/project/setup_themes/ https://merginmaps.com/docs/gis/setup_themes/
-https://merginmaps.com/docs/howto/project/working_with_nonspatial_data/ https://merginmaps.com/docs/layer/non-spatial-data/
+https://merginmaps.com/docs/howto/project/working_with_nonspatial_data/ https://merginmaps.com/docs/layer/overview/
https://merginmaps.com/docs/howto/quick-start/ https://merginmaps.com/docs/tutorials/capturing-first-data/
https://merginmaps.com/docs/howto/reuse_last_values/ https://merginmaps.com/docs/field/reuse-last-values/
https://merginmaps.com/docs/howto/sign-up-to-mergin-maps/ https://merginmaps.com/docs/setup/sign-up-to-mergin-maps/
+https://merginmaps.com/docs/layer/attach-multiple-photos-to-features/ https://merginmaps.com/docs/layer/photos/#how-to-attach-multiple-photos-to-one-feature/
+https://merginmaps.com/docs/layer/best-practice/ https://merginmaps.com/docs/layer/overview/
https://merginmaps.com/docs/layer/exif_metadata/ https://merginmaps.com/docs/layer/exif/
-https://merginmaps.com/docs/layer/working_with_nonspatial_data/ https://merginmaps.com/docs/layer/non-spatial-data/
+https://merginmaps.com/docs/layer/form-configuration/ https://merginmaps.com/docs/layer/overview/
+https://merginmaps.com/docs/layer/non-spatial-data/ https://merginmaps.com/docs/layer/overview/
+https://merginmaps.com/docs/layer/position_variables/ https://merginmaps.com/docs/layer/variables/
+https://merginmaps.com/docs/layer/plugin-variables/ https://merginmaps.com/docs/layer/variables/
https://merginmaps.com/docs/layer/settingup_forms/ https://merginmaps.com/docs/layer/form-widgets/
https://merginmaps.com/docs/layer/settingup_forms_photo/ https://merginmaps.com/docs/layer/photos/
-https://merginmaps.com/docs/layer/settingup_forms_settings/ https://merginmaps.com/docs/layer/form-configuration/
+https://merginmaps.com/docs/layer/settingup_forms_settings/ https://merginmaps.com/docs/layer/overview/
+https://merginmaps.com/docs/layer/working_with_nonspatial_data/ https://merginmaps.com/docs/layer/overview/
https://merginmaps.com/docs/manage/data_sync/ https://merginmaps.com/docs/manage/plugin/
https://merginmaps.com/docs/manage/project-details/ https://merginmaps.com/docs/manage/project-history/
https://merginmaps.com/docs/manage/plugin-multi-server-use/ https://merginmaps.com/docs/server/plugin-mobile-app/
diff --git a/scripts/wordlist.txt b/scripts/wordlist.txt
index ab6eee72..0b551828 100644
--- a/scripts/wordlist.txt
+++ b/scripts/wordlist.txt
@@ -53,6 +53,7 @@ Geomax
GEOS
GeoPackage
GeoPackages
+Geotagging
GeoTIFF
GeoPDF
Gimp
diff --git a/src/.vitepress/sidebar/en.js b/src/.vitepress/sidebar/en.js
index 0371b4c6..8abb5fb3 100644
--- a/src/.vitepress/sidebar/en.js
+++ b/src/.vitepress/sidebar/en.js
@@ -10,8 +10,7 @@ export default {
{ text: 'Using Mergin Maps Mobile App', link: '/tutorials/mobile/' },
{ text: 'Further Project Customisation', link: '/tutorials/further-project-customisation/' },
{ text: 'Working Collaboratively', link: '/tutorials/working-collaboratively/' }
- ]
- },
+ ] },
{
text: 'Install & Sign Up', // required
collapsed: true,
@@ -20,8 +19,7 @@ export default {
{ text: 'How to Sign Up to Mergin Maps', link: '/setup/sign-up-to-mergin-maps/' },
{ text: 'How to Install QGIS', link: '/setup/install-qgis/' },
{ text: 'How to Install Mergin Maps Plugin for QGIS', link: '/setup/install-mergin-maps-plugin-for-qgis/' }
- ]
- },
+ ] },
{
text: 'Manage Account & Project', // required
collapsed: true,
@@ -43,8 +41,7 @@ export default {
{ text: 'Webmaps', link: '/manage/dashboard-maps/' },
{ text: 'Project History and Versions', link: '/manage/project-history/' },
{ text: 'Selective Synchronisation', link: '/manage/selective_sync/' }
- ]
- },
+ ] },
{
text: 'Setup GIS Project', // required
collapsed: true,
@@ -59,26 +56,47 @@ export default {
{ text: 'How to Avoid Polygons Overlap', link: '/gis/avoid-overlap/' },
{ text: 'Custom Projections', link: '/gis/proj/' },
{ text: 'Supported Formats', link: '/gis/supported_formats/' }
- ]
- },
+ ] },
{
- text: 'Configure Survey Layer', // required
+ text: 'Configure Forms', // required
collapsed: true,
items: [
- { text: 'Best Practice Tips for Layers and Forms', link: '/layer/best-practice/' },
- { text: 'Setting Up Widgets in Attributes Form', link: '/layer/form-widgets/' },
- { text: 'Attributes Form Configuration', link: '/layer/form-configuration/' },
- { text: 'Attributes Form Layout', link: '/layer/form-layout/' },
- { text: 'Capturing Photos', link: '/layer/photos/' },
- { text: 'How to Attach Multiple Photos to Features', link: '/layer/attach-multiple-photos-to-features/' },
- { text: 'How to Link Multiple Records to One Feature (1-N Relations)', link: '/layer/one-to-n-relations/' },
- { text: 'Exif Metadata', link: '/layer/exif/' },
- { text: 'How to Use Hyperlinks', link: '/layer/external-link/' },
- { text: 'Working with Non-Spatial Tables', link: '/layer/non-spatial-data/' },
- { text: 'Extra Position Variables', link: '/layer/position_variables/' },
- { text: 'Extra QGIS Variables', link: '/layer/plugin-variables/' }
- ]
- },
+ { text: 'Overview', link: '/layer/overview/' },
+ { text: 'Widgets', link: '/layer/form-widgets/',
+ items: [
+ { text: 'Text', link: '/layer/text/' },
+ { text: 'Date and Time', link: '/layer/date-time/' },
+ { text: 'Relations', link: '/layer/relations/' },
+ { text: 'Numbers', link: '/layer/numbers/' },
+ { text: 'Checkbox', link: '/layer/checkbox/' },
+ { text: 'QR Code', link: '/layer/qr-code/' },
+ { text: 'Selecting Single or Multiple Values', link: '/layer/value-select/' },
+ { text: 'Photos', link: '/layer/photos/' },
+ { text: 'Informational Widgets', link: '/layer/info-widgets/' },
+ ] },
+ { text: 'Default Values', link: '/layer/default-values/',
+ collapsed: true,
+ items: [
+ { text: 'Geotagging', link: '/layer/exif/' },
+ { text: 'Variables', link: '/layer/variables/' }
+ ] },
+ { text: 'Constraints', link: '/layer/constraints/' },
+ { text: 'Layout', link: '/layer/form-layout/',
+ collapsed: true,
+ items: [
+ { text: 'Tabs and Groups', link: '/layer/tabs-and-groups/' },
+ { text: 'Conditional Visibility', link: '/layer/conditional-visibility/' },
+ ] },
+ { text: 'Use Cases', link: '/layer/use-cases/',
+ collapsed: true,
+ items: [
+ { text: 'How to Open a File', link: '/layer/open-file/' },
+ { text: 'How to Use Hyperlinks', link: '/layer/external-link/' },
+ { text: 'How to Open a Link to a Navigation App', link: '/layer/link-to-navigation/' },
+ { text: 'How to Link Multiple Records to One Feature (1-N Relations)', link: '/layer/one-to-n-relations/' },
+ { text: 'How to Embed an Image', link: '/layer/embed-image/' },
+ ] },
+ ] },
{
text: 'Fieldwork Tips', // required
collapsed: true,
@@ -97,8 +115,7 @@ export default {
{ text: 'How to Reuse Last Entered Values', link: '/field/reuse-last-values/' },
{ text: 'How to Stake Out Points', link: '/field/stake-out/' },
{ text: 'How to Fix a Broken Project', link: '/field/broken-project/' }
- ]
- },
+ ] },
{
text: 'For Developers', // required
collapsed: true,
@@ -110,8 +127,7 @@ export default {
{ text: 'Media Sync', link: '/dev/media-sync/' },
{ text: 'Work Packages', link: '/dev/work-packages/' },
{ text: 'Geodiff Library', link: '/dev/geodiff/' }
- ]
- },
+ ] },
{
text: 'Custom Server', // required
collapsed: true,
@@ -125,8 +141,7 @@ export default {
{ text: 'Administration Panel', link: '/server/dashboard/' },
{ text: 'Troubleshoot Custom Servers', link: '/server/troubleshoot/' },
{ text: 'Using Mergin Maps Mobile App and QGIS Plugin with a Custom Server', link: '/server/plugin-mobile-app/' }
- ]
- },
+ ] },
{
text: 'Migrate to Mergin Maps', // required
collapsed: true,
@@ -134,8 +149,7 @@ export default {
{ text: 'Migrate from QField', link: '/migrate/qfield/' },
{ text: 'Migrate from ArcGIS', link: '/migrate/arcgis/' },
{ text: 'Migrate from FulcrumApp', link: '/migrate/fulcrumapp/' },
- ]
- },
+ ] },
{
text: 'Support & Legal', // required
collapsed: true,
@@ -145,9 +159,8 @@ export default {
{ text: 'Troubleshoot', link: '/misc/troubleshoot/',
collapsed:true,
items: [
- { text: 'Project fails to sync', link: '/misc/troubleshoot/not_syncing/' },
- ]
- },
+ { text: 'Project fails to sync', link: '/misc/troubleshoot/not_syncing/' },
+ ] },
{ text: 'Write Documentation', link: '/misc/write-docs/' }
]
}
diff --git a/src/field/external_gps/index.md b/src/field/external_gps/index.md
index 95fe2a05..77234d92 100644
--- a/src/field/external_gps/index.md
+++ b/src/field/external_gps/index.md
@@ -10,7 +10,7 @@ description: External GPS receivers can be connected to your mobile device via B
External GPS receivers can be connected to your mobile device via Bluetooth and used in to achieve higher [GPS accuracy](../gps_accuracy/).
-There are several [extra position variables](../../layer/position_variables/) that can be useful to record when doing the survey with external GPS, such as the GPS antenna height, GPS device name as well as metrics like horizontal, vertical or position dilution of precision (HDOP, VDOP, PDOP).
+There are several [extra position variables](../../layer/variables/#position-variables) that can be useful to record when doing the survey with external GPS, such as the GPS antenna height, GPS device name as well as metrics like horizontal, vertical or position dilution of precision (HDOP, VDOP, PDOP).
Note that external GPS devices usually return orthometric heights (ellipsoid with the geoid separation applied).
@@ -33,7 +33,7 @@ If GPS antenna height is set to a non-zero value, it is also displayed next to t

:::tip
-GPS antenna height can be recorded during the survey by using the [extra position variable](../../layer/position_variables/) `@position_gps_antenna_height` as a [default value](../../layer/form-configuration/#default-values).
+GPS antenna height can be recorded during the survey by using the [extra position variable](../../layer/variables/#position-variables) `@position_gps_antenna_height` as a [default value](../../layer/default-values/).
:::
## External GPS on Android
diff --git a/src/field/gps_accuracy/index.md b/src/field/gps_accuracy/index.md
index 027f7a3b..14d094de 100644
--- a/src/field/gps_accuracy/index.md
+++ b/src/field/gps_accuracy/index.md
@@ -19,7 +19,7 @@ Tapping the GPS button opens the [GPS info panel](../mobile-app-ui/#current-posi
If you'd like to have higher accuracy, you can wait for your device to acquire a better GPS signal. For precise measurements, you may need to connect your device to an [external GPS](../external_gps/).
-When assessing the overall quality of the survey, it may be beneficial to record some [extra position variables](../../layer/position_variables/), such as type and name of the used GPS device, the horizontal and vertical accuracy or the horizontal, vertical or position dilution of precision (HDOP, VDOP, PDOP).
+When assessing the overall quality of the survey, it may be beneficial to record some [position variables](../../layer/variables/#position-variables), such as type and name of the used GPS device, the horizontal and vertical accuracy or the horizontal, vertical or position dilution of precision (HDOP, VDOP, PDOP).
:::tip
diff --git a/src/field/layers/index.md b/src/field/layers/index.md
index 6e7fc6cb..a44a0b35 100644
--- a/src/field/layers/index.md
+++ b/src/field/layers/index.md
@@ -9,7 +9,7 @@ The **Layers** button is located in the bottom navigation panel.
It provides the overview of layers and features in your project in , as well as the option to turn the visibility of specific layers on/off or to see a layer's legend.
-
+
## Layers visibility
diff --git a/src/layer/non-spatial-data/mobile-app-non-spatial-layers.jpg b/src/field/layers/mobile-app-non-spatial-layers.jpg
similarity index 100%
rename from src/layer/non-spatial-data/mobile-app-non-spatial-layers.jpg
rename to src/field/layers/mobile-app-non-spatial-layers.jpg
diff --git a/src/layer/non-spatial-data/mobile-app-non-spatial-layers.xcf b/src/field/layers/mobile-app-non-spatial-layers.xcf
similarity index 100%
rename from src/layer/non-spatial-data/mobile-app-non-spatial-layers.xcf
rename to src/field/layers/mobile-app-non-spatial-layers.xcf
diff --git a/src/field/mobile-features/index.md b/src/field/mobile-features/index.md
index 8b23c5f1..3c56f3c6 100644
--- a/src/field/mobile-features/index.md
+++ b/src/field/mobile-features/index.md
@@ -35,7 +35,7 @@ In the recording mode, the bottom panel contains tools to capture geometry. Once
Below, we describe capturing [point features](#capture-points), [lines and areas](#capture-lines-or-areas) as well as [non-spatial](#add-or-edit-non-spatial-features) records (e.g. adding a new entry to a table).
:::tip Attributes form make surveys easier!
-Attributes forms can be set up in QGIS to make collecting data more efficient. For more details, see [Setting Up Widgets](../../layer/form-widgets/), [Attributes Form Configuration](../../layer/form-configuration/) or [Attributes Form Layout](../../layer/form-layout/).
+Attributes forms can be set up in QGIS to make collecting data more efficient. For more details, see the [Configure Forms](../../layer/overview/) section.
:::
### Capture points
@@ -146,7 +146,7 @@ If snapping is enabled, the crosshairs will turn purple and snap to vertices (le

## Add or edit non-spatial features
-[Non-spatial features](../../layer/non-spatial-data/), such as tables for [value relations](../../layer/form-widgets/#value-relation), can also be added or edited in the .
+Non-spatial features, such as tables for [value relations](../../layer/value-select/#value-relation), can also be added or edited in the .
1. Tap the **Layers** button and select the layer you want to edit

diff --git a/src/field/tracking/index.md b/src/field/tracking/index.md
index ba930ebd..8aaa02b0 100644
--- a/src/field/tracking/index.md
+++ b/src/field/tracking/index.md
@@ -26,7 +26,7 @@ Tracking needs to be enabled in QGIS when [preparing your p
4. Don't forget to save and synchronise your project!
-Enabled tracking means that a new line layer for tracking will be created in your project called `tracking_layer.gpkg`. This layer is created with a set of fields with set up [default values](../../layer/form-configuration/#default-values):
+Enabled tracking means that a new line layer for tracking will be created in your project called `tracking_layer.gpkg`. This layer is created with a set of fields with set up [default values](../../layer/default-values/):
| Field name | Data Type | Default variable | Description |
@@ -36,7 +36,7 @@ Enabled tracking means that a new line layer for tracking will be created in you
| `total_distance` | Real | `$length` | Tracked distance |
| `tracked_by` | String | `@mm_username` | Name of the current user |
-You can add new fields as needed, however, they should be set up with automatically generated [default values](../../layer/form-configuration/#default-values) as will not open the form for manual inputs. You may use some of the QGIS functions, [extra position variables](../../layer/position_variables/) or [extra QGIS variables](../../layer/plugin-variables/).
+You can add new fields as needed, however, they should be set up with automatically generated [default values](../../layer/default-values/) as will not open the form for manual inputs. You may use some of the QGIS functions, [position variables](../../layer/variables/#position-variables) or [project and user variables ](../../layer/variables/#project-and-user-variables).
## Using position tracking in Mergin Maps mobile app
diff --git a/src/gis/features/index.md b/src/gis/features/index.md
index 7289cd5e..ecab8f7c 100644
--- a/src/gis/features/index.md
+++ b/src/gis/features/index.md
@@ -1,5 +1,5 @@
---
-outline: [1,3]
+outline: [2, 3]
description: Mergin Maps project is prepared in QGIS. Set up survey layers, symbology, forms, snapping, tracking, background maps, and various project settings.
---
@@ -8,7 +8,7 @@ description: Mergin Maps project is prepared in QGIS. Set up survey layers, symb
Project preparation is done in QGIS. For more information about loading layers, styling the data and creating map themes, visit .
-In addition, uses some of the features within the project to help visualise, capture and browse the data. Here is an overview of the project preparations steps.
+In addition, uses some of the features within the project to help visualise, capture and browse the data. Here is an overview of the project preparations steps.
:::tip
Our tutorials can guide you through QGIS project preparation step by step.
@@ -18,6 +18,67 @@ In [Creating a Project in QGIS](../../tutorials/creating-a-project-in-qgis/) you
[Further Project Customisation](../../tutorials/further-project-customisation/) will show you how to style layers, add labels, customise the preview panel, define map themes and set up the project extent.
:::
+## Survey layers
+Vector layers can be used as survey layers in your project. You can apply styles and set up the forms to make your field survey easier.
+The same applies for non-spatial layers that can be used on their own to add new data or linked to a spatial layer, e.g. when linking multiple [photos](../../layer/photos/#how-to-attach-multiple-photos-to-one-feature) or [records](../../layer/one-to-n-relations/). They can be also used in [value relation](../../layer/value-select/#value-relation) widgets.
+
+Making changes in the data schema of layers can lead to issues in the synchronisation process. Be careful to [**deploy the revised project properly**](../../manage/deploy-new-project/). Design the data schema carefully when creating a layer to avoid the need to change it later.
+
+Here are some practical tips for creating and maintaining layers in your project:
+- **Always use GeoPackage for layers**. If you use other formats, such as ESRI shapefile, it is not possible to detect changes from other users and they may be overwritten. Overwritten files are stored in a conflict file. This applies to both spatial and non-spatial layers.
+- **Add some extra back-up field attributes** when creating a survey layer with different types (e.g. a couple of texts, int, real, date/time) and hide them in the form design. These can serve as a backup: if you need extra fields later in the survey, just alias these extra fields and add them to form.
+- If you do not need a field, **remove it from the form**. You don't need to delete it from the table.
+- **Instead of renaming a field, change its alias**.
+- **Add new layers to your project as separate GeoPackages**. Do not add a new table to your existing GeoPackage that contains a survey layer. Just to be safe, it is better to have one GeoPackage for each of your survey layers.
+- use **GeoTIFF** format for your raster files or store them in a separate GeoPackage database
+
+### Layer symbology
+The same symbology as defined in the QGIS project will be used in . However, does not include all the SVG markers that are available within QGIS. Therefore, if you are using SVG markers for your layer styling, ensure those are copied to the project folder.
+
+### Forms
+During the field survey, it is often necessary to fill out some attributes in the form to record the properties of surveyed features. Forms can make the survey easier, consistent and more effective.
+
+Detailed description of form widgets and form configuration can be found in the [Configure Form](../../layer/overview/) section.
+
+### Settings for Mergin Maps mobile app preview panel
+What appears in the preview panel can be defined in the **Display** tab in **Layer Properties**:
+- **Display Name**: a field name or an expression.
+- **HTML Map Tip**: the content of the preview panel. While QGIS always interprets the content of map tip as being HTML, extends the syntax to allow two more modes: field values and images. If the map tip is not specified, will try to use the first three fields and show their attribute values.
+
+
+
+#### HTML
+Sample map tip content that will show render as HTML page:
+
+```
+
Notes:[% "notes" %]
+```
+
+If the map tip does not contain any special marker, it is assumed that the map tip is HTML content. Only a limited subset of HTML is supported - see [Qt documentation](https://doc.qt.io/qt-5/richtext-html-subset.html)
+
+#### Field values
+Sample map tip content that will show "description" and "time" field values:
+
+```
+# fields
+description
+time
+```
+
+If the map tip content has `# fields` marker on the first line, the following lines will be understood as field names that should be listed in the preview. At most three fields will be shown. Expressions are not allowed.
+
+#### Image
+Sample map tip content that will cause an image to be show specified by file path in field "image_1" (containing path relative to the project folder):
+
+```
+# image
+file:///[%@project_folder%]/[% "image_1" %]
+```
+
+If the map tip has `# image` marker on the first line, the following line is understood as the URL for the image. It can be a regular file on the file system, but it could be even a remote image from the network. Expressions embedded in the image URL will be evaluated (enclosed in `[% 1+1 %]`).
+
+
+
## Background layers
Various online and offline maps can be used as background layers for navigation during the field survey. You can find more information in [Background Maps](../settingup_background_map/).
@@ -28,7 +89,7 @@ Various online and offline maps can be used as background layers for navigation
- Define the in the **Data Sources** in Project Properties.
- [Identifiable](../search_data/#setting-identifiable-layers-in-qgis-project) layers can be queried in . If you want to be able to search for attribute values in a layer, it needs to be identifiable and searchable.
- **read-only** layers cannot be modified. If a vector layer is not intended to be used as a survey layer, set it as read-only.
- - [non-spatial](../../layer/non-spatial-data/) layers need to be set as searchable to enable browsing, searching, or editing.
+ - non-spatial layers need to be set as **searchable** to enable browsing, searching, or editing.

@@ -121,51 +182,4 @@ There is an option to define the order in which layers are displayed in the (e.g. cartography maps and aerial imagery)
-## Survey layers
-Vector layers can be used as survey layers in . You can apply styles and set up the forms to make your field survey easier.
-
-### Layer symbology
-The same symbology as defined in the QGIS project will be used in . However, does not include all the SVG markers that are available within QGIS. Therefore, if you are using SVG markers for your layer styling, ensure those are copied to the project folder.
-
-### Forms
-During the field survey, it is often necessary to fill out some attributes in the form to record the properties of surveyed features. Forms can make the survey easier, consistent and more effective. Detailed description of form widgets and form configuration can be found in [Setting Up Form Widgets](../../layer/form-widgets/) and [Advanced Form Configuration](../../layer/form-configuration/).
-
-### Settings for Mergin Maps mobile app preview panel
-What appears in the preview panel can be defined in the **Display** tab in **Layer Properties**:
-- **Display Name**: a field name or an expression.
-- **HTML Map Tip**: the content of the preview panel. While QGIS always interprets the content of map tip as being HTML, extends the syntax to allow two more modes: field values and images. If the map tip is not specified, will try to use the first three fields and show their attribute values.
-
-
-
-#### HTML
-Sample map tip content that will show render as HTML page:
-
-```
-Notes:[% "notes" %]
-```
-
-If the map tip does not contain any special marker, it is assumed that the map tip is HTML content. Only a limited subset of HTML is supported - see [Qt documentation](https://doc.qt.io/qt-5/richtext-html-subset.html)
-
-#### Field values
-Sample map tip content that will show "description" and "time" field values:
-
-```
-# fields
-description
-time
-```
-
-If the map tip content has `# fields` marker on the first line, the following lines will be understood as field names that should be listed in the preview. At most three fields will be shown. Expressions are not allowed.
-
-#### Image
-Sample map tip content that will cause an image to be show specified by file path in field "image_1" (containing path relative to the project folder):
-
-```
-# image
-file:///[%@project_folder%]/[% "image_1" %]
-```
-
-If the map tip has `# image` marker on the first line, the following line is understood as the URL for the image. It can be a regular file on the file system, but it could be even a remote image from the network. Expressions embedded in the image URL will be evaluated (enclosed in `[% 1+1 %]`).
-
-
diff --git a/src/gis/photo-names/index.md b/src/gis/photo-names/index.md
index c0538aa3..5539ff0d 100644
--- a/src/gis/photo-names/index.md
+++ b/src/gis/photo-names/index.md
@@ -53,9 +53,9 @@ Therefore, we recommend using combinations of variables that will ensure that th
:white_check_mark: The file extension (`.jpg`) is added automatically.
-:white_check_mark: When using a field value in the expression, make sure that it is a field that will be filled out during the survey, e.g. by using [constraints](../../layer/form-configuration/#constraints). If the field is empty, the expression won't work!
+:white_check_mark: When using a field value in the expression, make sure that it is a field that will be filled out during the survey, e.g. by using [constraints](../../layer/constraints/). If the field is empty, the expression won't work!
-:white_check_mark: If you want to use a [numeric field](../../layer/form-widgets/#numbers) or other non-text fields in your expression, you need to convert it to a string first using the `to_string()` function
+:white_check_mark: If you want to use a numeric or other non-text fields in your expression, you need to convert it to a string first using the `to_string()` function
:warning: The expression is evaluated with the **current** field values. The name of the photo will stay the same even if you change the value of the field later.
diff --git a/src/gis/search_data/index.md b/src/gis/search_data/index.md
index b5f5f28e..12e7cc76 100644
--- a/src/gis/search_data/index.md
+++ b/src/gis/search_data/index.md
@@ -14,7 +14,7 @@ Working with layers in the , including browsing features a
The follows the sorting of features in the attribute table and of values in the value relation widget as set in the QGIS project.
### Order value list by value
-The [Value relation](../../layer/form-widgets/#value-relation) widget has the option *Order by value*. When checked, values in the drop-down list will be listed in alphabetical or numerical order.
+The [Value relation](../../layer/value-select/#value-relation) widget has the option *Order by value*. When checked, values in the drop-down list will be listed in alphabetical or numerical order.

diff --git a/src/index.md b/src/index.md
index 2d4939de..0e487103 100644
--- a/src/index.md
+++ b/src/index.md
@@ -68,19 +68,31 @@ The ecosystem consist of various components:
- [Custom Projections](./gis/proj/)
- [Supported Formats](./gis/supported_formats/)
-## Configure Survey Layer
-- [Best Practice Tips for Layers and Forms](./layer/best-practice/)
-- [Setting Up Widgets in Attributes Form](./layer/form-widgets/)
-- [Attributes Form Configuration](./layer/form-configuration/)
-- [Attributes Form Layout](./layer/form-layout/)
-- [Capturing Photos](./layer/photos/)
-- [How to Attach Multiple Photos to Features](./layer/attach-multiple-photos-to-features/)
-- [How to Link Multiple Records to One Feature (1-N Relations)](./layer/one-to-n-relations/)
-- [Exif Metadata](./layer/exif/)
-- [How to Use Hyperlinks](./layer/external-link/)
-- [Working with Non-spatial Tables](./layer/non-spatial-data/)
-- [Extra Position Variables](./layer/position_variables/)
-- [Extra QGIS Variables](./layer/plugin-variables/)
+## Configure Forms
+- [Overview](./layer/overview/)
+- [Widgets](./layer/form-widgets/)
+ - [Text](./layer/text/)
+ - [Date and time](./layer/date-time/)
+ - [Relations](./layer/relations/)
+ - [Numbers](./layer/numbers/)
+ - [Checkbox](./layer/checkbox/)
+ - [QR code](./layer/qr-code/)
+ - [Selecting Single or Multiple Values ](./layer/value-select/)
+ - [Photos](./layer/photos/)
+ - [Informational Widgets](./layer/info-widgets/)
+- [Default Values](./layer/default-values/)
+ - [Geotagging](./layer/exif/)
+ - [Variables](./layer/variables/)
+- [Constraints](./layer/constraints/)
+- [Layout](./layer/form-layout/)
+ - [Tabs and Groups](./layer/tabs-and-groups/)
+ - [Conditional Visibility](./layer/conditional-visibility/)
+- [Use Cases](./layer/use-cases/)
+ - [How to Open a File ](./layer/open-file/)
+ - [How to Use Hyperlinks](./layer/external-link/)
+ - [How to Open a Link to a Navigation App](./layer/link-to-navigation/)
+ - [How to Link Multiple Records to One Feature](./layer/one-to-n-relations/)
+ - [How to Embed an Image](./layer/embed-image/)
## Fieldwork Tips
- [ Interface](./field/mobile-app-ui/)
diff --git a/src/layer/attach-multiple-photos-to-features/index.md b/src/layer/attach-multiple-photos-to-features/index.md
deleted file mode 100644
index d6680e55..00000000
--- a/src/layer/attach-multiple-photos-to-features/index.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-description: In Mergin Maps, multiple photos can be attached to one feature. Set up 1-N relations in QGIS to display a photo gallery in the features form.
----
-
-# How to Attach Multiple Photos to Features
-
-In some situations, it might be useful to take more than one picture of a feature during the field survey. Attaching multiple photos to one feature is a 1-N relation. You can read more about 1-N relations and how they can be used in in [How to link multiple records to one feature](../one-to-n-relations/).
-
-
-
-:::tip Example project available
-To see this setup in practice, you can download the following project:
-.
-:::
-
-To link multiple photos to a single feature, we need a **unique field** to link following tables:
-- Survey layer containing spatial information
-- A non-spatial table containing path to the photos (see [how to setup simple photo forms](../photos/))
-
-:::danger WARNING
-**Do not use the FID field to link these tables**. FIDs can be changed during synchronisation, which can result in having photos linked to the incorrect feature. You can learn more about synchronisation in [Behind Data Synchronisation](../../manage/synchronisation/).
-:::
-
-To set 1:N relation between these tables correctly:
-1. Create a new text field in the survey layer, here: `unique-id`
- 
-2. Use the `uuid()` as the **default value** for this field in **Layer Properties**. This function assigns a unique identifier to every created feature, even when different surveyors create features simultaneously.
- 
-3. Create a new text field in the non-spatial table (here: `photos`) that will be used to store the UUID of features from the survey layer (the foreign key), here: `external-pk`.
-
-Now we need to configure a [1-N relation](../one-to-n-relations/):
-4. From the main menu, select **Project** > **Properties ...**
-5. In the **Relations** tab, select **Add Relation**
- 
-
-6. Define the parent and child layer and the fields to link these layers. Here:
- - **Name** is the name of the relation, can be left blank
- - **Referenced (parent)** is the spatial layer `Survey`
- - **Field 1** of the **Referenced (parent)** is the field `unique-id` that contains the UUID
- - **Referencing (child)** is the non-spatial layer `photos`
- - **Field 1** of the **Referencing (child)** layer is the `external-pk` that contains the foreign key to link photos with surveyed features.
- 
-
-7. Navigate to the **Attributes Form** tab in the **Properties** of the `photos` layer. Set the **Widget Type** of the foreign key `external-pk` to **Relation Reference**:
- 
-
-The detects the type of 1-N relation and displays the image viewer for the relations.
-
diff --git a/src/layer/attach-multiple-photos-to-features/qgis_relation_form.jpg b/src/layer/attach-multiple-photos-to-features/qgis_relation_form.jpg
deleted file mode 100644
index 6779bb99..00000000
Binary files a/src/layer/attach-multiple-photos-to-features/qgis_relation_form.jpg and /dev/null differ
diff --git a/src/layer/attach-multiple-photos-to-features/qgis_relation_form.xcf b/src/layer/attach-multiple-photos-to-features/qgis_relation_form.xcf
deleted file mode 100644
index db21b393..00000000
Binary files a/src/layer/attach-multiple-photos-to-features/qgis_relation_form.xcf and /dev/null differ
diff --git a/src/layer/attach-multiple-photos-to-features/qgis_relation_tab.jpg b/src/layer/attach-multiple-photos-to-features/qgis_relation_tab.jpg
deleted file mode 100644
index eaacfcf4..00000000
Binary files a/src/layer/attach-multiple-photos-to-features/qgis_relation_tab.jpg and /dev/null differ
diff --git a/src/layer/attach-multiple-photos-to-features/qgis_relation_tab.xcf b/src/layer/attach-multiple-photos-to-features/qgis_relation_tab.xcf
deleted file mode 100644
index ddfc97ac..00000000
Binary files a/src/layer/attach-multiple-photos-to-features/qgis_relation_tab.xcf and /dev/null differ
diff --git a/src/layer/attach-multiple-photos-to-features/uuid-default.jpg b/src/layer/attach-multiple-photos-to-features/uuid-default.jpg
deleted file mode 100644
index f9b16777..00000000
Binary files a/src/layer/attach-multiple-photos-to-features/uuid-default.jpg and /dev/null differ
diff --git a/src/layer/attach-multiple-photos-to-features/uuid-default.xcf b/src/layer/attach-multiple-photos-to-features/uuid-default.xcf
deleted file mode 100644
index 1ce56359..00000000
Binary files a/src/layer/attach-multiple-photos-to-features/uuid-default.xcf and /dev/null differ
diff --git a/src/layer/attach-multiple-photos-to-features/uuid-field.jpg b/src/layer/attach-multiple-photos-to-features/uuid-field.jpg
deleted file mode 100644
index c1361923..00000000
Binary files a/src/layer/attach-multiple-photos-to-features/uuid-field.jpg and /dev/null differ
diff --git a/src/layer/attach-multiple-photos-to-features/uuid-field.xcf b/src/layer/attach-multiple-photos-to-features/uuid-field.xcf
deleted file mode 100644
index a98c0275..00000000
Binary files a/src/layer/attach-multiple-photos-to-features/uuid-field.xcf and /dev/null differ
diff --git a/src/layer/best-practice/index.md b/src/layer/best-practice/index.md
deleted file mode 100644
index 5a3986ed..00000000
--- a/src/layer/best-practice/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Here are some tips for working with layers in Mergin Maps. Use GeoPackage for layers, GeoTIFF for rasters and make data schema changes carefully.
----
-
-# Best Practice Tips for Layers and Forms
-[[toc]]
-
-Here are some best practice tips to make your work easier in the long run.
-
-## Working with layers
-- Making changes in the data schema of layers can lead to issues in the synchronisation process. Be careful to [**deploy the revised project properly**](../../manage/deploy-new-project/). Design the data schema carefully when creating a layer to avoid the need to change it later.
-- **Always use GeoPackage for survey layers**. If you use other formats, such as ESRI shapefile, it is not possible to detect changes from other users and they may be overwritten. Overwritten files are stored in a conflict file.
-- **Add some extra back-up field attributes** when creating a survey layer with different types (e.g. a couple of texts, int, real, date/time) and hide them in the form design. These can serve as a backup: if you need extra fields later in the survey, just alias these extra fields and add them to form.
-- If you do not need a field, **remove it from the form**. You don't need to delete it from the table.
-- **Instead of renaming a field, change its alias**.
-- **Add new layers to your project as separate GeoPackages**. Do not add a new table to your existing GeoPackage that contains a survey layer. Just to be safe, it is better to have one GeoPackage for each of your survey layers.
-- use **GeoTIFF** format for your raster files or store them in a separate GeoPackage database
-
-
-
diff --git a/src/layer/checkbox/index.md b/src/layer/checkbox/index.md
new file mode 100644
index 00000000..90ed13af
--- /dev/null
+++ b/src/layer/checkbox/index.md
@@ -0,0 +1,47 @@
+---
+description: The checkbox widget is useful when you need a simple yes/no, true/false, or on/off toggle in the attributes form.
+---
+
+# Checkbox
+
+The checkbox widget is handy when you want to set up a field that can have two values, such as true/false, Yes/No, or On/Off.
+
+| Widget
|Preview in the |
+|:---:|:---:|
+| True/false checkbox |  |
+
+
+:::tip Example project available
+Checkbox widget is used in this public project . Download or clone it to see the setup.
+:::
+
+Prefer a video? Here is a short tutorial about the checkbox widget:
+
+
+
+## True/false checkbox for Boolean fields
+
+If you have a field with a `Boolean` data type, QGIS assigns the checkbox widget type by default. It is also possible to use it for fields with [other data types](#checkbox-with-custom-values-yes-no).
+
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the field you want to work with (here: `checkbox`).
+3. In the **Widget Type** tab, the **Checkbox** widget should be set by default (if not, select it from the drop-down menu).
+4. **Apply** the changes. Don't forget to save and sync your project!
+
+
+
+## Checkbox with custom values (yes/no)
+You might want to use the checkbox with custom values, such as Yes/No or On/Off. This is possible for fields with `Text (string)` data type:
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the field you want to work with (here: `checkbox-string`).
+3. In the **Widget Type** tab, select the **Checkbox** widget and define values for the *Checked* and for the *Unchecked* state. Here we use `Yes` and `No`.
+4. **Apply** the changes. Don't forget to save and sync your project!
+
+
+
+Similarly, you could set up the checkbox widget for fields with integer data types and use numerical values, e.g. `0` and `1`, for the *Checked* and for the *Unchecked* state.
+
+In the , the checkbox can be easily toggled on/off.
+
+
+
diff --git a/src/layer/checkbox/mobile-form-checkbox-preview.webp b/src/layer/checkbox/mobile-form-checkbox-preview.webp
new file mode 100644
index 00000000..58f8ced3
Binary files /dev/null and b/src/layer/checkbox/mobile-form-checkbox-preview.webp differ
diff --git a/src/layer/checkbox/mobile-form-checkbox-preview.xcf b/src/layer/checkbox/mobile-form-checkbox-preview.xcf
new file mode 100644
index 00000000..5795154a
Binary files /dev/null and b/src/layer/checkbox/mobile-form-checkbox-preview.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-checkbox.jpg b/src/layer/checkbox/mobile-form-checkbox.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-checkbox.jpg
rename to src/layer/checkbox/mobile-form-checkbox.jpg
diff --git a/src/layer/form-widgets/mobile-form-checkbox.xcf b/src/layer/checkbox/mobile-form-checkbox.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-checkbox.xcf
rename to src/layer/checkbox/mobile-form-checkbox.xcf
diff --git a/src/layer/form-widgets/qgis-form-checkbox-string.jpg b/src/layer/checkbox/qgis-form-checkbox-string.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-checkbox-string.jpg
rename to src/layer/checkbox/qgis-form-checkbox-string.jpg
diff --git a/src/layer/form-widgets/qgis-form-checkbox-string.xcf b/src/layer/checkbox/qgis-form-checkbox-string.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-checkbox-string.xcf
rename to src/layer/checkbox/qgis-form-checkbox-string.xcf
diff --git a/src/layer/form-widgets/qgis-form-checkbox.jpg b/src/layer/checkbox/qgis-form-checkbox.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-checkbox.jpg
rename to src/layer/checkbox/qgis-form-checkbox.jpg
diff --git a/src/layer/form-widgets/qgis-form-checkbox.xcf b/src/layer/checkbox/qgis-form-checkbox.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-checkbox.xcf
rename to src/layer/checkbox/qgis-form-checkbox.xcf
diff --git a/src/layer/conditional-visibility/index.md b/src/layer/conditional-visibility/index.md
new file mode 100644
index 00000000..463547ac
--- /dev/null
+++ b/src/layer/conditional-visibility/index.md
@@ -0,0 +1,29 @@
+---
+description: Conditional visibility can be applied to groups and tabs, so that they will be displayed or hidden in the form depending on the value of a field.
+---
+
+# Conditional Visibility
+Conditional visibility can be applied to groups and tabs, so that they will be displayed or hidden depending on the value of a field.
+
+:::tip Example project available
+You can explore this functionality in .
+:::
+
+Here we will use a line layer named `roads and paths`. It is designed for surveying both roads and paths and most of the fields are relevant for every type of feature in this layer. However, there are some attributes that are specific for roads (e.g. the number of lanes) or for paths (e.g. the visibility of the path).
+
+The form uses the value of the `type` field to display the relevant set of attributes. The `type` field is set up as a [value map](../value-select/#value-map) with defined values `road` and `path`.
+
+
+
+To set the visibility of groups in the attributes form:
+1. Click on the **roads** group in the **Form Layout**
+2. Check the **Control Visibility by Expression** option :heavy_check_mark:
+3. Define the expression. Here we use: `"type" = "road"`
+
+
+
+4. Same steps are used for the **path** group using the expression `"type" = "path"`
+
+In the , the form displays these groups only when the condition is met. So, there are different sets of attributes depending on the value that is entered in the `type` field.
+
+
diff --git a/src/layer/form-layout/mobile-forms-conditional-visibility.jpg b/src/layer/conditional-visibility/mobile-forms-conditional-visibility.jpg
similarity index 100%
rename from src/layer/form-layout/mobile-forms-conditional-visibility.jpg
rename to src/layer/conditional-visibility/mobile-forms-conditional-visibility.jpg
diff --git a/src/layer/form-layout/mobile-forms-conditional-visibility.xcf b/src/layer/conditional-visibility/mobile-forms-conditional-visibility.xcf
similarity index 100%
rename from src/layer/form-layout/mobile-forms-conditional-visibility.xcf
rename to src/layer/conditional-visibility/mobile-forms-conditional-visibility.xcf
diff --git a/src/layer/form-layout/qgis-form-conditional-visibility.jpg b/src/layer/conditional-visibility/qgis-form-conditional-visibility.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-form-conditional-visibility.jpg
rename to src/layer/conditional-visibility/qgis-form-conditional-visibility.jpg
diff --git a/src/layer/form-layout/qgis-form-conditional-visibility.xcf b/src/layer/conditional-visibility/qgis-form-conditional-visibility.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-form-conditional-visibility.xcf
rename to src/layer/conditional-visibility/qgis-form-conditional-visibility.xcf
diff --git a/src/layer/form-layout/qgis-form-value-map-roads.jpg b/src/layer/conditional-visibility/qgis-form-value-map-roads.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-form-value-map-roads.jpg
rename to src/layer/conditional-visibility/qgis-form-value-map-roads.jpg
diff --git a/src/layer/form-layout/qgis-form-value-map-roads.xcf b/src/layer/conditional-visibility/qgis-form-value-map-roads.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-form-value-map-roads.xcf
rename to src/layer/conditional-visibility/qgis-form-value-map-roads.xcf
diff --git a/src/layer/constraints/index.md b/src/layer/constraints/index.md
new file mode 100644
index 00000000..bf59399a
--- /dev/null
+++ b/src/layer/constraints/index.md
@@ -0,0 +1,38 @@
+---
+description: Constraints help to avoid mistakes when filling in the values or to highlight mandatory fields in the attributes form.
+---
+
+# Constraints
+Constraints help to avoid mistakes when filling in the values or to highlight mandatory fields. Fields with constraints have a warning displayed next to them in the form.
+
+There are multiple options of setting up constraints in , such as *Not null* (the field has to be filled in), *Unique* (the field has to have a unique value), or using a custom *expression*.
+
+Check the **enforce constraint** option :heavy_check_mark: to use a hard constraint, meaning that the feature cannot be saved if the constraints are not met.
+
+### Using hard and soft constraints in the form
+
+:::tip Example project available
+Constraints are used in this project . Clone or download it to try it to see how it works.
+:::
+
+Here, we will first set up a constraint to a field that represents the facility capacity. The value has to be a number that is higher than 0. This will be a *hard* constraint: if the value is not higher than 0, the feature cannot be saved.
+
+1. Right-click on a survey layer and select **Properties**
+2. In the **Attributes form** tab, select a numeric field in the **Available Widgets** column that you want to use (here: `number`)
+3. In the **Constraints** tab:
+ - Use the following **Expression**: `"number" >= 1`
+ - Check the **Enforce expression constraint** option :heavy_check_mark:
+
+
+
+Now we will set up a *soft* constraint to a photo field. A photo should be taken during the survey, but the feature can be saved without one.
+
+1. In the **Attributes form** tab, select a photo field in the **Available Widgets** column (here: `photo`)
+2. In the **Constraints** tab:
+ - Check the **Not null** constraint :heavy_check_mark:
+
+
+In the , you will be unable to save a feature unless the field value meets the *enforced* constraint (here: `Capacity`). If the constraint is *not enforced* (here: `photo`), there will be a warning, but the feature can be saved regardless.
+
+
+
diff --git a/src/layer/form-configuration/mobile-form-constaints.jpg b/src/layer/constraints/mobile-form-constaints.jpg
similarity index 100%
rename from src/layer/form-configuration/mobile-form-constaints.jpg
rename to src/layer/constraints/mobile-form-constaints.jpg
diff --git a/src/layer/form-configuration/mobile-form-constaints.xcf b/src/layer/constraints/mobile-form-constaints.xcf
similarity index 100%
rename from src/layer/form-configuration/mobile-form-constaints.xcf
rename to src/layer/constraints/mobile-form-constaints.xcf
diff --git a/src/layer/form-configuration/qgis-form-constraints.jpg b/src/layer/constraints/qgis-form-constraints.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-constraints.jpg
rename to src/layer/constraints/qgis-form-constraints.jpg
diff --git a/src/layer/form-configuration/qgis-form-constraints.xcf b/src/layer/constraints/qgis-form-constraints.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-constraints.xcf
rename to src/layer/constraints/qgis-form-constraints.xcf
diff --git a/src/layer/date-time/index.md b/src/layer/date-time/index.md
new file mode 100644
index 00000000..e06452dc
--- /dev/null
+++ b/src/layer/date-time/index.md
@@ -0,0 +1,54 @@
+---
+description: Date or Date and Time widgets are used to record date and time, e.g. when a feature was created or updated.
+---
+
+# Date and time
+
+Fields with `Date` or `Date and Time` data type can be used to record date and time. The most common use is to record when a feature was created or updated. This can be done manually or automatically by using [default values](../default-values/).
+
+| Widget
|Preview in the |
+|:---:|:---:|
+|Date/time | |
+
+:::tip Example project available
+Various options of setting up Date and Date&Time fields are included in this public project: . Download or clone it to explore it in more detail.
+:::
+
+Prefer a video? Here is a short tutorial about date widgets:
+
+
+## Date/Time widget
+
+To set up the **Date/Time** widget:
+
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+
+2. In the list of **Available Widgets** select the Date and Time field you want to work with (here: `datetime`).
+
+3. In the **Widget Type** tab and select the **Date/Time** widget.
+ - use the default display format or set a custom display format (see [custom date and time formats](#custom-date-and-time-formats))
+ - check the **Calendar popup** option :heavy_check_mark:
+ - use the preview to confirm that this is the format you want to use to store your timestamps
+
+ 
+
+4. If you want to automatically insert the date (or date and time) when the feature is created, use `now()` as a [default value](../default-values/) in the **Defaults** tab.
+
+5. **Apply** the changes. Don't forget to save and sync your project!
+
+In the , the date can be edited using a calendar pop up. If you tap the icon next to the field, the current date and time will be filled in.
+
+
+
+## Custom date and time formats
+Date and time fields can use custom display format.
+
+Here are some common examples:
+
+| Custom Display Format | Preview |
+|:-------------------------------:|:-------------------:|
+| `dd.MM.yyyy` | 12.01.2024 |
+| `MMMM d yyyy` | January 12 2024 |
+| `HH:mm:ss` | 12:34:56 |
+| `yyyy-MM-dd HH:mm:ss` | 2020-09-09 12:34:56 |
+| `dd/MM/yyyy HH-mm-ss` | 09/09/2020 12-34-56 |
diff --git a/src/layer/date-time/mobile-form-datetime-preview.jpg b/src/layer/date-time/mobile-form-datetime-preview.jpg
new file mode 100644
index 00000000..a35a6c08
Binary files /dev/null and b/src/layer/date-time/mobile-form-datetime-preview.jpg differ
diff --git a/src/layer/date-time/mobile-form-datetime-preview.xcf b/src/layer/date-time/mobile-form-datetime-preview.xcf
new file mode 100644
index 00000000..69aa5f0c
Binary files /dev/null and b/src/layer/date-time/mobile-form-datetime-preview.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-datetime.jpg b/src/layer/date-time/mobile-form-datetime.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-datetime.jpg
rename to src/layer/date-time/mobile-form-datetime.jpg
diff --git a/src/layer/form-widgets/mobile-form-datetime.xcf b/src/layer/date-time/mobile-form-datetime.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-datetime.xcf
rename to src/layer/date-time/mobile-form-datetime.xcf
diff --git a/src/layer/form-widgets/qgis-form-datetime.jpg b/src/layer/date-time/qgis-form-datetime.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-datetime.jpg
rename to src/layer/date-time/qgis-form-datetime.jpg
diff --git a/src/layer/form-widgets/qgis-form-datetime.xcf b/src/layer/date-time/qgis-form-datetime.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-datetime.xcf
rename to src/layer/date-time/qgis-form-datetime.xcf
diff --git a/src/layer/default-values/index.md b/src/layer/default-values/index.md
new file mode 100644
index 00000000..c7a33d4b
--- /dev/null
+++ b/src/layer/default-values/index.md
@@ -0,0 +1,102 @@
+---
+description: Default values can be used to automatically fill in the fields in the form using values, variables or expressions.
+---
+
+# Default values
+Default values can be used to automatically record, e.g. the name of the surveyor, date and time of the survey, latitude and longitude of a feature or to have frequently used values filled in advance (see ).
+
+Fields with default values can be hidden from the attributes form if they are used to store data that are not expected to be modified manually.
+
+The default value can be a text, number or a QGIS expression. The data format of the field has to match the result of the default value expression you want to use.
+
+In QGIS, default values can be set up in the **Attributes Form** tab in **Layer Properties**. In the **Defaults** tab, you can enter the default value of the selected field (manually or using an expression).
+
+
+
+Check the option **Apply default value on update** :heavy_check_mark: to update the field value after every change of a feature. Note that this means that the value of this field cannot be changed manually in QGIS or in the as any user input will be overwritten by the default value.
+
+This option is therefore useful for fields that can be recorded automatically without the need of modification, such as parameters derived from geometry (e.g. [coordinates, length, area](#examples-of-useful-default-values)) or [usernames, dates, times](#recording-usernames-dates-and-times-automatically).
+
+::: tip Example project available
+Various usage of default values can be explored in more detail by downloading or cloning this public project .
+:::
+
+## Useful default values examples {#examples-of-useful-default-values}
+There are some commonly used default values that can be useful in your field survey.
+
+- `uuid()` function generates a unique identifier that is needed to correctly setup [1-N relations](../relations/) or [value relations](../value-select/#value-relation)
+
+- It is convenient to know when a feature was created and when it was last updated. Use fields with **Date** or **Date&Time** data types with the `now()` function to record this information. You can change the formatting using the [Date/Time](../date-time/) widget.
+
+- The name of the user who created or modified the feature can be recorded using the `@mm_username` variable. These fields should use **Text (string)** data type.
+ There are also other [project and user variables](../variables/#project-and-user-variables) related to your account or service that can be used as default values.
+
+- The coordinates of a point feature can be recorded as well using the `$x` and `$y` function in QGIS. To record the coordinate accurately, these fields should have the **Decimal number (real)** data type. If the coordinates are in metres, values can be rounded to, say, 2-3 decimal places. When working with geographic coordinates that use degrees, you may want to round the coordinates to 8 decimal places. Use the *apply default value on update* option so that you have correct values when the position of the point feature changes.
+
+- Parameters such as **length** of a line feature or **area** of a polygon feature can be calculated from the geometry. These fields should have the **Decimal number (real)** or **Integer** data type. Use the *apply default value on update* option to update the field in case there is a change in the feature.
+
+- [Position Variables](../variables/#position-variables) can be used to record GPS information from your mobile devices
+
+Here are some examples:
+
+| Variable name | Sample value | Apply default value on update | Description |
+|-----------------------------|-------------------------------|---------|-------------|
+| `uuid()` | `{9d0150eb-a36f-40f1-a768-540db8a36f7c}` | **no** | Generates (Universally Unique Identifier).|
+| `@now` | `2024-06-30 10:00:00` | **no** | The timestamp of when the feature was created. |
+| `@now` | `2024-06-30 10:30:00` | **yes** | The timestamp of when the feature was last **updated**. |
+| `@mm_username` | `sarah` | **no** | Name of the user who created this feature.|
+| `@mm_username` | `jack` | **yes** | Name of the user who **updated** this feature last.|
+| `round($x,2)` | `1898789.92` | **yes** | The X coordinate of a point feature, rounded to 2 decimal places.|
+| `$length` | `123.45` | **yes** | The length of a line feature.|
+| `$area` | `1234.56` | **yes** | The area of a polygon feature.|
+
+## Recording usernames, dates and times automatically
+
+Let's set up an attributes to record the username of the surveyor who *created* a feature:
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the text field you want to use (here: `inserted_by`)
+3. In the **Defaults** tab, define the **Default value** as `@mm_username`.
+ Do not check the **Apply default value on update** option :white_large_square:.
+
+
+
+To save the username of the surveyor who *modified* this feature, the steps are similar:
+1. In the list of **Available Widgets** select the text field you want to use (here: `updated_by`)
+2. In the **Defaults** tab, define the **Default value** as `@mm_username`.
+ Check the **Apply default value on update** option :heavy_check_mark:. The field will be updated anytime the feature is modified, saving the name of the surveyor who made the changes.
+
+
+
+Follow the same steps for attributes to store the timestamps of when the feature was created and updated (here: `inserted_at`, `updated_at`), using the `now()` expression as **Default value**.
+
+When the form is opened in the , the default values are automatically filled in:
+
+
+
+## Automatically transform and record coordinates of a point
+Here we are going to set the default values for `x` and `y` field to be longitude and latitude.
+
+1. Right-click on the survey layer and select **Properties**
+2. In the **Attributes form** tab, select the `x` field in the **Available Widgets** column on the left
+3. In the **Widget Display**, set the **Alias** to *Longitude*
+4. In **Defaults** tab, define the **Default value** as:
+ ```
+ x( transform( $geometry, 'EPSG:3857', 'EPSG:4326'))
+ ```
+ Note that the expression transforms the point from EPSG:3857 (map and layer coordinate reference system) to EPSG:4326.
+5. Check the **Apply default value on update** option :heavy_check_mark:.
+
+
+
+Repeat the same steps for `y` field and setting the **Alias** to *Latitude* and the default value to
+
+```
+y( transform( $geometry, 'EPSG:3857', 'EPSG:4326'))
+```
+
+Don't forget to save and synchronise your project!
+
+When adding or editing features in the , the coordinates are automatically filled in:
+
+
+
diff --git a/src/layer/form-configuration/mobile-form-default-values-coordinates.jpg b/src/layer/default-values/mobile-form-default-values-coordinates.jpg
similarity index 100%
rename from src/layer/form-configuration/mobile-form-default-values-coordinates.jpg
rename to src/layer/default-values/mobile-form-default-values-coordinates.jpg
diff --git a/src/layer/form-configuration/mobile-form-default-values-coordinates.xcf b/src/layer/default-values/mobile-form-default-values-coordinates.xcf
similarity index 100%
rename from src/layer/form-configuration/mobile-form-default-values-coordinates.xcf
rename to src/layer/default-values/mobile-form-default-values-coordinates.xcf
diff --git a/src/layer/form-configuration/mobile-form-default-values-timestamp-username.jpg b/src/layer/default-values/mobile-form-default-values-timestamp-username.jpg
similarity index 100%
rename from src/layer/form-configuration/mobile-form-default-values-timestamp-username.jpg
rename to src/layer/default-values/mobile-form-default-values-timestamp-username.jpg
diff --git a/src/layer/form-configuration/mobile-form-default-values-timestamp-username.xcf b/src/layer/default-values/mobile-form-default-values-timestamp-username.xcf
similarity index 100%
rename from src/layer/form-configuration/mobile-form-default-values-timestamp-username.xcf
rename to src/layer/default-values/mobile-form-default-values-timestamp-username.xcf
diff --git a/src/layer/form-configuration/mobile-forms-open-file-default-value.jpg b/src/layer/default-values/mobile-forms-open-file-default-value.jpg
similarity index 100%
rename from src/layer/form-configuration/mobile-forms-open-file-default-value.jpg
rename to src/layer/default-values/mobile-forms-open-file-default-value.jpg
diff --git a/src/layer/form-configuration/mobile-forms-open-file-default-value.xcf b/src/layer/default-values/mobile-forms-open-file-default-value.xcf
similarity index 100%
rename from src/layer/form-configuration/mobile-forms-open-file-default-value.xcf
rename to src/layer/default-values/mobile-forms-open-file-default-value.xcf
diff --git a/src/layer/form-configuration/qgis-form-default-coordinates.jpg b/src/layer/default-values/qgis-form-default-coordinates.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-default-coordinates.jpg
rename to src/layer/default-values/qgis-form-default-coordinates.jpg
diff --git a/src/layer/form-configuration/qgis-form-default-coordinates.xcf b/src/layer/default-values/qgis-form-default-coordinates.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-default-coordinates.xcf
rename to src/layer/default-values/qgis-form-default-coordinates.xcf
diff --git a/src/layer/form-configuration/qgis-form-default-inserted-by.jpg b/src/layer/default-values/qgis-form-default-inserted-by.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-default-inserted-by.jpg
rename to src/layer/default-values/qgis-form-default-inserted-by.jpg
diff --git a/src/layer/form-configuration/qgis-form-default-inserted-by.xcf b/src/layer/default-values/qgis-form-default-inserted-by.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-default-inserted-by.xcf
rename to src/layer/default-values/qgis-form-default-inserted-by.xcf
diff --git a/src/layer/form-configuration/qgis-form-default-updated-by.jpg b/src/layer/default-values/qgis-form-default-updated-by.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-default-updated-by.jpg
rename to src/layer/default-values/qgis-form-default-updated-by.jpg
diff --git a/src/layer/form-configuration/qgis-form-default-updated-by.xcf b/src/layer/default-values/qgis-form-default-updated-by.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-default-updated-by.xcf
rename to src/layer/default-values/qgis-form-default-updated-by.xcf
diff --git a/src/layer/form-configuration/qgis-form-default-values.jpg b/src/layer/default-values/qgis-form-default-values.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-default-values.jpg
rename to src/layer/default-values/qgis-form-default-values.jpg
diff --git a/src/layer/form-configuration/qgis-form-default-values.xcf b/src/layer/default-values/qgis-form-default-values.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-default-values.xcf
rename to src/layer/default-values/qgis-form-default-values.xcf
diff --git a/src/layer/embed-image/index.md b/src/layer/embed-image/index.md
new file mode 100644
index 00000000..c9f657e3
--- /dev/null
+++ b/src/layer/embed-image/index.md
@@ -0,0 +1,27 @@
+---
+description: HTML widget can be used to embed an online image in the attributes form of your survey layer.
+---
+
+# How to Embed an Image
+
+The [**HTML widget**](../info-widgets/#html-widget) can be used to display online images in the .
+
+::: tip Example project available
+Clone to how this works.
+:::
+
+Your layer should contain a text field for storing the full URL link (here: `link`).
+
+To show an online image in the form, [add the HTML widget to the form](../info-widgets/) and configure it with this expression (replace `link` with the name of the appropriate field in your layer):
+
+```html
+
+```
+
+Make sure that the HTML widget works before taking it to the field by testing it in the . It should look something like this:
+
+
+
+::: details Image preview in QGIS
+Some QGIS versions may not display the preview of the image correctly. This issue does not occur in . Therefore we recommend trying the setup by opening the form in the to make sure it works as intended.
+:::
diff --git a/src/layer/form-layout/qgis-form-html-text-widget.jpg b/src/layer/embed-image/qgis-form-html-text-widget.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-form-html-text-widget.jpg
rename to src/layer/embed-image/qgis-form-html-text-widget.jpg
diff --git a/src/layer/form-layout/qgis-form-html-text-widget.xcf b/src/layer/embed-image/qgis-form-html-text-widget.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-form-html-text-widget.xcf
rename to src/layer/embed-image/qgis-form-html-text-widget.xcf
diff --git a/src/layer/embed-image/qgis-mobile-html-form.webp b/src/layer/embed-image/qgis-mobile-html-form.webp
new file mode 100644
index 00000000..b33e038f
Binary files /dev/null and b/src/layer/embed-image/qgis-mobile-html-form.webp differ
diff --git a/src/layer/form-layout/qgis-mobile-html-form.xcf b/src/layer/embed-image/qgis-mobile-html-form.xcf
similarity index 90%
rename from src/layer/form-layout/qgis-mobile-html-form.xcf
rename to src/layer/embed-image/qgis-mobile-html-form.xcf
index 0ae5097f..af9eda11 100644
Binary files a/src/layer/form-layout/qgis-mobile-html-form.xcf and b/src/layer/embed-image/qgis-mobile-html-form.xcf differ
diff --git a/src/layer/exif/index.md b/src/layer/exif/index.md
index 8b5e1b2a..80f1a17f 100644
--- a/src/layer/exif/index.md
+++ b/src/layer/exif/index.md
@@ -2,10 +2,10 @@
description: EXIF is a file format for storing metadata in image files. Mergin Maps mobile app can store EXIF metadata values in the fields of survey layers.
---
-# Exif Metadata
+# Geotagging
[[toc]]
-EXIF is a file format for storing metadata in image files, such as the camera settings, image metrics, date and time or location information (see, e.g., [Wikipedia](https://en.wikipedia.org/wiki/Exif)).
+Geotagging can be achieved through EXIF metadata. EXIF is a file format for storing metadata in image files, such as the camera settings, image metrics, date and time or location information (see, e.g., [Wikipedia](https://en.wikipedia.org/wiki/Exif)).
The supports some default value expression functions that can be used to read EXIF metadata and store their values in the fields of your survey layer.
@@ -28,7 +28,7 @@ Clone to see how it works
To store EXIF metadata values in the fields of your survey layer:
1. In QGIS, open the **Properties** of your survey layer and navigate to the **Attributes Form** tab.
-2. Now we need to set the [default values](../form-configuration/#default-values) of fields that should store EXIF metadata.
+2. Now we need to set the [default values](../default-values/) of fields that should store EXIF metadata.
[Supported EXIF functions](#supported-exif-functions) are listed below. In general, EXIF functions looks like this:
`read_exif('', '')`
diff --git a/src/layer/external-link/index.md b/src/layer/external-link/index.md
index 49de775e..3e114666 100644
--- a/src/layer/external-link/index.md
+++ b/src/layer/external-link/index.md
@@ -1,11 +1,10 @@
---
-description: Hyperlinks can be used in the attributes form in Mergin Maps mobile app to open a link in a browser or a navigation app directly from the feature's form.
+description: Hyperlinks can be used in the attributes form in Mergin Maps mobile app to open a link in a browser directly from the feature's form.
---
# How to Use Hyperlinks
-[[toc]]
-## Open link in a browser
+Attributes forms can include clickable links that can be used to open a link in a browser directly from the form in .
1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
2. In the list of **Available Widgets** select the field you want to work with.
@@ -28,29 +27,6 @@ description: Hyperlinks can be used in the attributes form in Mergin Maps mobile
When you click on a feature in , the form will contain a clickable link.

-## Open link to a navigation app
-
:::tip
-Clone to follow this example!
+Hyperlinks can be used in the attributes form also to open a [link to a navigation app](../link-to-navigation/).
:::
-
-Let's say you want to find your surveyed features on Google Maps. It is possible to do so directly from , you just need to set up a **text field** that will open Google Maps and enter the coordinates of the feature to the Google Maps search bar.
-
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the field you want to work with.
-3. In the **Widget Display** tab:
- - Ensure that **Text Edit** is selected
- - Check the **Multiline** and **HTML** options
-4. In the **Defaults** tab, use this string as **Default value**:
- `'Open Google Map'`
-5. Check the **Apply default value on update** option
-6. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-When you tap a feature in the , the form will display a clickable link **Open Google Map** that opens the Google Map app at the position of the feature.
-
-
-
-
-
diff --git a/src/layer/form-configuration/index.md b/src/layer/form-configuration/index.md
deleted file mode 100644
index 1bdd5e21..00000000
--- a/src/layer/form-configuration/index.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-description: Use default values, constraints and drill-down (cascade) forms to make the data entry in Mergin Maps mobile app and QGIS easier and more efficient.
----
-
-# Attributes Form Configuration
-[[toc]]
-
-In addition to setting up [edit widgets](../form-widgets/) and designing the [form layout](../form-layout/), extra configuration can be done to the fields in QGIS to make the data collection easier and more consistent.
-
-Here is a tutorial video on how to configure forms that includes the usage of default values and constraints:
-
-
-
-## Default values
-Default values can be used to automatically record, e.g, the name of the surveyor, date and time of the survey, latitude and longitude of a feature or to have frequently used values filled in advance (see ).
-
-Fields with default values can be hidden from the attributes form if they are used to store data that are not expected to be modified manually.
-
-The default value can be a text, number or a QGIS expression. The data format of the field has to match the result of the default value expression you want to use.
-
-In QGIS, default values can be set up in the **Attributes Form** tab in **Layer Properties**. In the **Defaults** tab, you can enter the default value of the selected field (manually or using an expression).
-
-
-
-Check the option **Apply default value on update** :heavy_check_mark: to update the field value after every change of a feature. Note that this means that the value of this field cannot be changed manually in QGIS or in the as any user input will be overwritten by the default value.
-
-This option is therefore useful for fields that can be recorded automatically without the need of modification, such as parameters derived from geometry (e.g. [coordinates, length, area](#examples-of-useful-default-values)) or [usernames, dates, times](#recording-usernames-dates-and-times-automatically).
-
-::: tip Example project available
-Various usage of default values can be explored in more detail by downloading or cloning this public project .
-:::
-
-### Recording usernames, dates and times automatically
-
-Let's set up an attributes to record the username of the surveyor who *created* a feature:
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the text field you want to use (here: `inserted_by`)
-3. In the **Defaults** tab, define the **Default value** as `@mm_username`.
- Do not check the **Apply default value on update** option :white_large_square:.
-
-
-
-To save the username of the surveyor who *modified* this feature, the steps are similar:
-1. In the list of **Available Widgets** select the text field you want to use (here: `updated_by`)
-2. In the **Defaults** tab, define the **Default value** as `@mm_username`.
- Check the **Apply default value on update** option :heavy_check_mark:. The field will be updated anytime the feature is modified, saving the name of the surveyor who made the changes.
-
-
-
-Follow the same steps for attributes to store the timestamps of when the feature was created and updated (here: `inserted_at`, `updated_at`), using the `now()` expression as **Default value**.
-
-When the form is opened in the , the default values are automatically filled in:
-
-
-
-### Automatically transform and record coordinates of a point
-Here we are going to set the default values for `x` and `y` field to be longitude and latitude.
-
-1. Right-click on the survey layer and select **Properties**
-2. In the **Attributes form** tab, select the `x` field in the **Available Widgets** column on the left
-3. In the **Widget Display**, set the **Alias** to *Longitude*
-4. In **Defaults** tab, define the **Default value** as:
- ```
- x( transform( $geometry, 'EPSG:3857', 'EPSG:4326'))
- ```
- Note that the expression transforms the point from EPSG:3857 (map and layer coordinate reference system) to EPSG:4326.
-5. Check the **Apply default value on update** option :heavy_check_mark:.
-
-
-
-Repeat the same steps for `y` field and setting the **Alias** to *Latitude* and the default value to
-
-```
-y( transform( $geometry, 'EPSG:3857', 'EPSG:4326'))
-```
-
-Don't forget to save and synchronise your project!
-
-When adding or editing features in the , the coordinates are automatically filled in:
-
-
-
-### Examples of useful default values
-There are some commonly used default values that can be useful in your field survey.
-
-- It is convenient to know when a feature was created and when it was last updated. Use fields with **Date** or **Date&Time** data types with the `now()` function to record this information. You can change the formatting using the [Date/Time](../form-widgets/#date-and-time) widget.
-
-- The name of the user who created or modified the feature can be recorded using the `@mm_username` variable. These fields should use **Text (string)** data type.
- There are also other [extra QGIS variables](../position_variables/) related to your account or service that can be used as default values.
-
-- The coordinates of a point feature can be recorded as well using the `$x` and `$y` function in QGIS. To record the coordinate accurately, these fields should have the **Decimal number (real)** data type. If the coordinates are in metres, values can be rounded to, say, 2-3 decimal places. When working with geographic coordinates that use degrees, you may want to round the coordinates to 8 decimal places. Use the *apply default value on update* option so that you have correct values when the position of the point feature changes.
-
-- Parameters such as **length** of a line feature or **area** of a polygon feature can be calculated from the geometry. These fields should have the **Decimal number (real)** or **Integer** data type. Use the *apply default value on update* option to update the field in case there is a change in the feature.
-
-- [Extra Position Variables](../position_variables/) can be used to record GPS information from your mobile devices
-
-Here are some examples:
-
-| Variable name | Sample value | Apply default value on update | Description |
-|-----------------------------|-------------------------------|---------|-------------|
-| `@now` | `2024-06-30 10:00:00` | **no** | The timestamp of when the feature was created. |
-| `@now` | `2024-06-30 10:30:00` | **yes** | The timestamp of when the feature was last **updated**. |
-| `@mm_username` | `sarah` | **no** | Name of the user who created this feature.|
-| `@mm_username` | `jack` | **yes** | Name of the user who **updated** this feature last.|
-| `round($x,2)` | `1898789.92` | **yes** | The X coordinate of a point feature, rounded to 2 decimal places.|
-| `$length` | `123.45` | **yes** | The length of a line feature.|
-| `$area` | `1234.56` | **yes** | The area of a polygon feature.|
-| `uuid()` | `{9d0150eb-a36f-40f1-a768-540db8a36f7c}` | **no** | Generates (Universally Unique Identifier).|
-
-
-### Open local files using default values
-Default values can also be used to open local files (e.g. a PDF file) from within the form. This file needs to be packaged with the project, so it should be stored somewhere in the [project folder](../../manage/project/#mergin-maps-project-folder).
-
-There is a public project you can download or clone to see how the setup works.
-- A PDF file named `my-pdf.pdf` is stored in the main project folder.
-- The survey layer has a field named `local-file-default-value` with **Text (string)** data type.
- - This field is set to *not editable* (the form will refer to the same file for all features and does not need to be changed).
- - This field uses the **Text Edit** widget with the *Multiline* and *HTML* options enabled.
- - The **default value** is set to:
- ```
- 'Open File'
- ```
-
-
-
-In the , you can tap the *Open File* link to open the PDF file using the default application of your device.
-
-
-
-::: tip Open local files using the HTML widget
-Local files can be displayed in the form also using [the HTML widget](../form-layout/#using-html-widget-to-open-local-files).
-
-In the project, you can explore and compare both alternatives.
-:::
-
-## Constraints
-Constraints help to avoid mistakes when filling in the values or to highlight mandatory fields. Fields with constraints have a warning displayed next to them in the form.
-
-There are multiple options of setting up constraints in , such as *Not null* (the field has to be filled in), *Unique* (the field has to have a unique value), or using a custom *expression*.
-
-Check the **enforce constraint** option :heavy_check_mark: to use a hard constraint, meaning that the feature cannot be saved if the constraints are not met.
-
-### Using hard and soft constraints in the form
-
-:::tip Example project available
-Constraints are used in this project . Clone or download it to try it to see how it works.
-:::
-
-Here, we will first set up a constraint to a field that represents the facility capacity. The value has to be a number that is higher than 0. This will be a *hard* constraint: if the value is not higher than 0, the feature cannot be saved.
-
-1. Right-click on a survey layer and select **Properties**
-2. In the **Attributes form** tab, select a numeric field in the **Available Widgets** column that you want to use (here: `number`)
-3. In the **Constraints** tab:
- - Use the following **Expression**: `"number" >= 1`
- - Check the **Enforce expression constraint** option :heavy_check_mark:
-
-
-
-Now we will set up a *soft* constraint to a photo field. A photo should be taken during the survey, but the feature can be saved without one.
-
-1. In the **Attributes form** tab, select a photo field in the **Available Widgets** column (here: `photo`)
-2. In the **Constraints** tab:
- - Check the **Not null** constraint :heavy_check_mark:
-
-
-In the , you will be unable to save a feature unless the field value meets the *enforced* constraint (here: `Capacity`). If the constraint is *not enforced* (here: `photo`), there will be a warning, but the feature can be saved regardless.
-
-
-
-## Drill-down forms
-
-
-
-Drill-down or cascade forms enable to list values in a field depending on a value selected in another field.
-
-:::tip Example project available
-Clone to explore drill-down forms.
-:::
-
-Here, we have a layer named `landuse` that has fields such as *Land use*, *Type*, *Plant type*. Values that can be filled in these fields depend on the previous choices: if we select `Farmland` as the *Land use*, the *Type* field drop-down menu offers options such as `Cereals`, `Oil plants` or `Vegetables`. Subsequently, the *Plant type* field has only options that are relevant for the selected type of land use.
-
-
-
-At first, let us explore the structure of value tables that are used to set up drill-down forms. In the example project, *Land use* field uses `plant-habitat` value table that has following fields:
-
-
-
-The *Type* field refers to the `plant-type` value table. In this table, there is a field `habitat-code` that refers to a specific `code` value from the `plant-habitat` table.
-For instance, the `FAR` habitat code (standing for *Farmland*) is used as the `habitat-code` for *Cereals, Vegetables, Oil plants* as these are applicable farmland types.
-
-
-
-Similarly, the *Plant type* field uses the `plant-sub-type` value table that contains a `Code` field that refers to specific types from the `plant-type` table.
-For instance, the `CER` type code is applied for *Wheat, Rye, Barley, Maize*, meaning these types of plants belong to the *Cereals* category.
-
-
-
-To set up drill-down forms:
-1. Right-click on a survey layer, select **Properties** and go to the **Attributes form** tab
-2. The `habitat` field aliased as *Land use* is set up using the **Value relation** widget. Values are defined in the `plant-habitat` table:
- - **Key column** is the field that contains the values (here: `code`)
- - **Value column** is the field that contains the alias (description) of the value (here: `desc`)
-
- 
-
-3. The `type` field (aliased as *Type*) uses the **Value relation** widget with values from the `plant-type` table:
- - **Key column** is the field that contains the values (here: `Code`)
- - **Value column** is the field that contains the alias (description) of the value (here: `Description`)
- - **Filter expression**: `"habitat-code"= current_value('habitat')` is used to limit the options in the drop-down menu to values where the `habitat-code` of the value is the same as the current value of the `habitat` field.
- 
-
-4. Likewise, the `subtype` field (aliased as *Plant type*) uses the **Value relation** widget with values defined in the `plant-sub-type` table:
- - **Key column** is the field that contains the values (here: `id`)
- - **Value column** is the field that contains the alias (description) of the value (here: `Species`)
- - **Filter expression**: `"Code" = current_value('type')`
- 
-
-And this is how the drill-down form looks in the . After selecting *Land use: Farmland*, the *Type* field only offers values `Cereals`, `Oil plants` or `Vegetables`. After selecting `Cereals`, the *Plant type* offers only relevant options such as `Wheat`, `Rye` or `Barley`.
-
-
diff --git a/src/layer/form-layout/index.md b/src/layer/form-layout/index.md
index 2af0dcb9..85f1832b 100644
--- a/src/layer/form-layout/index.md
+++ b/src/layer/form-layout/index.md
@@ -5,11 +5,11 @@ description: Use QGIS drag and drop designer, conditional visibility, and widget
# Attributes Form Layout
[[toc]]
-Collecting and editing data in the field can be more efficient with forms that are easy to navigate. QGIS offers a lot of options for improving the layout of your forms, such as using groups and tabs to keep related fields together, displaying or hiding a group of fields based on conditional visibility, or displaying tips and instructions in the forms.
+Collecting and editing data in the field can be more efficient with forms that are easy to navigate. QGIS offers a lot of options for improving the layout of your forms, such as using [tabs and groups](../tabs-and-groups/) to keep related fields together, displaying or hiding a group of fields based on [conditional visibility](../conditional-visibility/), or displaying tips and instructions in the forms using the [Text or HTML widget](../info-widgets/). The starting point for creating a form is [QGIS Drag and Drop Designer](#qgis-drag-and-drop-designer).
## QGIS Drag and Drop Designer
-By default, the form is automatically generated and contains all the fields in the layer. However, you might want to change the order of the fields. Also, there may be some fields that do not need to be displayed during the survey, such as fields with [default values](../form-configuration/#default-values) that are calculated from the geometry.
+By default, the form is automatically generated and contains all the fields in the layer. However, you might want to change the order of the fields. Also, there may be some fields that do not need to be displayed during the survey, such as fields with [default values](../default-values) that are calculated from the geometry.
QGIS Drag and Drop designer is an easy tool for defining the form layouts:
1. Open your project in QGIS
@@ -23,157 +23,6 @@ QGIS Drag and Drop designer is an easy tool for defining the form layouts:

-## Tabs and groups
-Using QGIS Drag and Drop designer, fields can be arranged into groups and tabs.
-
-:::tip Example project available
-To see an example of tabs and groups, you can clone .
-:::
-
-1. Click on the **+** button to add new group or a tab to the form layout
- 
-2. Choose the container type, add a label, and if needed, the number of columns.
-
- A group can be placed within a tab or another group.
- 
- 
-
-3. Drag and drop fields to tabs or groups as needed.
-
-Here we have two tabs, *Data* and *Changelog*. The *Data* tab contains two groups: *roads* and *paths*.
-
-
-The form with tabs and groups will appear in QGIS like this:
-
-
-And this is how the same form looks like in the :
-
-
-
-## Show and hide fields depending on a field value (conditional visibility)
-Conditional visibility can be applied to groups and tabs, meaning they will be displayed or hidden depending on the value of a field.
-
-:::tip Example project available
-You can explore this functionality in .
-:::
-
-Here we will use a line layer named `roads and paths`. It is designed for surveying both roads and paths and most of the fields are relevant for every type of feature in this layer. However, there are some attributes that are specific for roads (e.g. the number of lanes) or for paths (e.g. the visibility of the path).
-
-The form uses the value of the `type` field to display the relevant set of attributes. The `type` field is set up as [value map](../form-widgets/#value-map) with defined values `road` and `path`.
-
-
-
-To set the visibility of groups in the attributes form:
-1. Click on the **roads** group in the **Form Layout**
-2. Check the **Control Visibility by Expression** option :heavy_check_mark:
-3. Define the expression. Here we use: `"type" = "road"`
-
-
-
-4. Same steps are used for the **path** group using the expression `"type" = "path"`
-
-In the , the form displays these groups only when the condition is met. So, there are different sets of attributes depending on the value that is entered in the `type` field.
-
-
-
-
-## Display instructions in the form using Text and HTML widget
-Sometimes, you may want to include instructions or tips for surveyors in your forms. offers Text and HTML widgets that can be used for this purpose. Your text instructions can include [expressions and field values](#using-expressions-in-text-and-html-widgets) as well. The HTML widget supports various [HTML tags](https://doc.qt.io/qt-6/richtext-html-subset.html#supported-tags), so it can be also used, for instance, to display [online images](#using-html-widget-to-display-online-images-and-other-online-resources).
-
-These widgets can be found in **Available Widgets** in the **Other Widgets** section when using the [Drag and Drop Designer](#qgis-drag-and-drop-designer).
-
-
-To configure the **Text** widget, enter the text you want to display in the form. On the right, you will see the preview.
-
-
-If you prefer your text to be formatted, you may do so in the **HTML** widget. HTML widget supports these [HTML tags](https://doc.qt.io/qt-6/richtext-html-subset.html#supported-tags).
-
-
-...and this is how the Text and HTML widgets look like in the form in QGIS (left) and in the mobile app (right).
-
-
-### Using expressions in Text and HTML widgets
-Expressions and variables can be used both in the Text and the HTML widget.
-
-
-
-:::tip
-Clone to follow this example.
-:::
-
-1. When configuring the Text or HTML widget, click on the **Expression Builder** button
-2. Enter the expression that will be used in your text and click **OK**.
-
- Field values can be selected from the **Fields and Values** list. There are other variables and expressions that can be used.
-
-3. Click on the **+** button to add the expression to the text.
-
- Here, we configured the widget with this text:
- `Make sure the number plate [% "VRP" %] is visible in the photo.`
-
- In this case, `VRP` is the name of a field aliased as `Vehicle Registration Plate` in the form.
-
-4. Save and synchronise your project.
-
-... and this is how it works during the field survey. `[% "VRP" %]` expression displays the current value of the `Vehicle Registration Plate` field.
-
-
-### Using HTML widget to display online images and other online resources
-The **HTML widget** can be also used to display online images in the mobile app or open online resources, such as PDF files, videos or websites, in the browser of your device.
-
-::: tip
-Clone to follow this example.
-:::
-
-Here are HTML samples you can use to [configure the HTML widget](#using-expressions-in-text-and-html-widgets). Your form should contain a text field for storing the full URL link (here: `link`).
-
-To use these samples, replace `link` by the name of the appropriate field in your layer.
-
-- show image in the form
-
-```html
-
-```
-
-- display a text (`here is your link`) with a link that can be opened in a browser
-```html
-
-```
-
-Make sure that the HTML widget works before taking it to the field by testing it in the . It should look something like this:
-
-
-
-::: warning Image preview in QGIS 3.36+
-QGIS may not display the preview of the online image if you use QGIS 3.36 or higher. Despite this behaviour, the displays it correctly. Therefore we recommend trying the setup by opening the form in the to make sure it works as intended.
-:::
-
-
-### Using HTML widget to open local files
-The HTML widget can also be used to open local files: for instance, a locally stored PDF file can be opened from within the form during the survey.
-
-::: tip
-Clone to how this works.
-:::
-
-- A PDF file named `my-pdf.pdf` is stored in the main [project folder](../../manage/project/#mergin-maps-project-folder) as it needs to be packaged with the project.
-- The HTML Widget is added to the **Attributes Form** and configured as follows:
- ```
- Open File
- ```
-
-
-
-In the , you can tap the *Open File* link to open the PDF file using the default application of your device.
-
-
-
-::: tip Open local files using default values
-Local files can be displayed in the form also using [default values](../form-configuration/#open-local-files-using-default-values).
-
-In the project, you can explore and compare both alternatives.
-:::
-
## Spacer widget
The Spacer widget can be useful if you want to have some space between the fields in your form or add a horizontal line.
diff --git a/src/layer/form-layout/qgis-form-text-html.jpg b/src/layer/form-layout/qgis-form-text-html.jpg
deleted file mode 100644
index d387d1ea..00000000
Binary files a/src/layer/form-layout/qgis-form-text-html.jpg and /dev/null differ
diff --git a/src/layer/form-layout/qgis-mobile-html-form.jpg b/src/layer/form-layout/qgis-mobile-html-form.jpg
deleted file mode 100644
index 6bb98a70..00000000
Binary files a/src/layer/form-layout/qgis-mobile-html-form.jpg and /dev/null differ
diff --git a/src/layer/form-widgets/index.md b/src/layer/form-widgets/index.md
index 3f8b7887..17b08bed 100644
--- a/src/layer/form-widgets/index.md
+++ b/src/layer/form-widgets/index.md
@@ -1,304 +1,30 @@
---
-description: Use text, numbers, date and time, QR code, checkbox or drop-down menu widgets in your attributes forms to make the data entry easier and more efficient.
+description: Our Widget Gallery provides an overview of QGIS form widgets supported by the Mergin Maps mobile app. Find the best widget for your survey form!
---
-# Setting Up Widgets in Attributes Form
+# Form Widgets Gallery
-[[toc]]
-
-Capturing field data often requires filling some attributes in the form to record the properties of surveyed points, lines or polygons. Attribute forms can simplify the data entry and even ensure to some extent that the correct information is filled in. Here, we will explore the possibilities of various that can be used in .
-
-Extra configuration of attribute forms can be done to make data collection easier and more consistent, such as using default values, conditional visibility or constraint enforcement. These topics are covered in [Attributes Form Configuration](../form-configuration/) and [Attributes Form Layout](../form-layout/).
-
-Prefer video? Check out this tutorial on how to configure QGIS widgets for survey forms.
-
-
-## Widget gallery
-Attributes forms can be configured using in the **Attributes Form** tab in the **Layer Properties**.
-
-
-
-Here is an overview of widgets commonly used both in QGIS and the . Note that the widget has to be compatible with the data type of a field.
-
-|QGIS widget | Description |Preview in
|
-|:---:|:---:|:---:|
-|Text Edit |[Text](#text) |  |
-|Text Edit |[Multiline Text](#multiline-text) |  |
-|QR & barcode scanner |[Camera to scan QR and barcode](#qr-code) |  |
-|Range - Editable |[Enter a number](#numbers) |  |
-|Range - Slider |[Select a number using the slider](#slider) |  |
-|Date/Time |[Calendar with time](#date-and-time) | |
-|Checkbox |[Checkbox](#checkbox) | |
-|Value Map |[Drop-down menu with predefined values](#value-map) | |
-|Value Relation |[Drop-down menu with values from another table](#value-relation) | |
-|Attachment |[Photos from device's camera or gallery](#attachment) |   |
-|Relations - Gallery |[Multiple photos from device's camera or gallery](../attach-multiple-photos-to-features/) |  |
-|Relations |[Multiple records linked to one feature](../one-to-n-relations/) |  |
+Form widgets define the way you can enter values in the form, both in QGIS and in the . The configuration of form widgets in your project is done in QGIS.
+Here is an overview of widgets that are commonly used both in QGIS and the .
::: tip Public project available
:bulb: These widgets can be explored in this project: .
:::
-
-## Text
-
-
-
-Adding or editing text is the most common method for inserting information within the forms. In QGIS, the default widget for most types of fields is the **Text Edit**. It can be used for single line or [multiline](#multiline-text) text inputs.
-
-
-
-
-In the , the text can be entered manually or using voice-to-text (if your mobile device supports this feature).
-
-
-
-### Multiline text
-
-:::tip Example project available
-Multiline text option is used in this public project: . Download or clone it to see this setup.
-:::
-
-The **Text Edit** widget offers the option to store multiple lines within a single field.
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the field you want to work with (here: `text-multiline`)
-3. In the **Widget Type** tab:
- - Ensure that **Text Edit** is selected
- - Check the **Multiline** option :heavy_check_mark:
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-In the , the **multiline text edit widget** will look like this:
-
-
-
-## QR code
-
-:::tip Example project available
-A QR code field is used in this public project: . Download or clone it to see this setup.
-:::
-
-
-
-To be able to scan QR codes using your camera, the field name or the field alias has to contain the word `qrcode` (the text is not case sensitive, it can be in combination of lower or upper case letters).
-
-In the , there will be a QR code icon next to the field. Tap on it to scan the QR code using your camera and the content (a number, text, link, etc.) will be filled in automatically to your field.
-
-
-
-
-## Numbers
-
-:::tip Example project available
-This public project: uses various options for entering numerical data. Download or clone it to see this setup.
-:::
-
-Number fields can be handled by the **Range** widget. Two options are supported by the : [editable range](#range) and [slider](#slider).
-
-
-
-### Range
-To set up the **editable range widget**:
-
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the integer field you want to work with (here: `numbers-range-editable`).
-3. In the **Widget Type** tab the **Range** widget and the **Editable** option should be selected by default. If this is not the case, select these options from the drop-down menus.
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-In the , the numbers can be entered manually or by using the +/- buttons:
-
-
-
-### Slider
-To set up the **Slider**:
-
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the numeric field you want to work with (here: `numbers-range-slider`).
-3. In the **Widget Type** tab:
- - the **Range** widget should be selected by default (if not, select it from the menu)
- - set the edit widget to **Slider**
- - set the **Minimum**, **Maximum** and **Step** values of the slider
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-In the , the **Slider** looks like this. The number can be filled in by moving the slider:
-
-
-
-## Date and time
-
-:::tip Example project available
-Various options of setting up Date and Date&Time fields are included in this public project: . Download or clone it to explore it in more detail.
-:::
-
-
-
-**Date** or **Date and Time** fields can be used to record date and time. The most common use is to record when a feature was created or updated. This can be done manually or automatically by using [default values](../form-configuration/#default-values).
-
-To set up the **Date/Time** widget:
-
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the Date and Time field you want to work with (here: `datetime`).
-3. In the **Widget Type** tab and select the **Date/Time** widget.
- - use the default or custom **Display Format**
- - check the **Calendar popup** option :heavy_check_mark:
- - use the preview to confirm that this is the format you want to use to store your timestamps
-4. If you want to automatically insert the date (or date and time) when the feature is created, use `now()` as a [default value](../form-configuration/#default-values) in the **Defaults** tab.
-5. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-In the , the date can be edited using a calendar pop up. If you tap the icon next to field, the current date and time will be filled in.
-
-
-
-### Custom date and time formats
-Date and time fields can use custom display format.
-
-Here are some examples:
-
-| Custom Display Format | Preview |
-|:-------------------------------:|:-------------------:|
-| `dd.MM.yyyy` | 12.01.2024 |
-| `MMMM d yyyy` | January 12 2024 |
-| `HH:mm:ss` | 12:34:56 |
-| `yyyy-MM-dd HH:mm:ss` | 2020-09-09 12:34:56 |
-| `dd/MM/yyyy HH-mm-ss` | 09/09/2020 12-34-56 |
-
-
-## Checkbox
-
-:::tip Example project available
-Checkbox widget is used in this public project . Download or clone it to see the setup.
-:::
-
-
-
-Checkbox field becomes handy when you want to set up a Yes/No, True/False or On/Off in your field.
-
-If you have a field set as **Boolean** in your GeoPackage layer, QGIS assigns the checkbox widget type by default.
-
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the field you want to work with (here: `checkbox`).
-3. In the **Widget Type** tab, the **Checkbox** widget should be set by default (if not, select it from the drop-down menu).
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-Checkbox widget can be also used for **Text** (string) fields:
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the field you want to work with (here: `checkbox-string`).
-3. In the **Widget Type** tab, select the **Checkbox** widget and define values for the *Checked* and for the *Unchecked* state. Here we use `Yes` and `No`.
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-In the , the status of the checkbox field can be easily toggled on/off.
-
-
-
-
-## Select value from a drop-down menu
-
-Selecting values from a drop-down menu is faster then typing them in manually and it also ensures that there are no typos or spelling variations. To present the options as a drop-down menu in the form, you can use the [Value Map](#value-map) or [Value Relation](#value-relation) widgets in QGIS.
-
-There are some benefits of using the Value Relation widget, such as:
-- Option to select multiple values from the list (in this case, the field needs to be of `text` data type).
-- The layer that contains values can be edited in the field. For example, if you have missed a value in your list for the drop-down menu, you can edit the table in the , add the value and use it during your survey. See [Working with non-spatial tables](../non-spatial-data/) for more details.
-- Searching the values: if you have a large list of values, it will become cumbersome to find the right value. With Value Relation widget, you have the option to search for values in the list in the .
-
-### Value Map
-
-Value map widget is used to select a value from a drop-down menu. Values are defined in the widget. They cannot be changed or added from the and only one value can be selected.
-
-If you want to use multiple selections in a field or need to add new values during the survey, check out the [Value Relation](#value-relation) widget.
-
-
-
-:::tip Example project available
-This public project contains a Value Map field. Download or clone it to see the setup.
-:::
-
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the field you want to work with (here: `valuemap`)
-3. In the **Widget Type** tab, select the **Value Map** option from the drop-down menu and fill in the table below.
- **Value** is what will be stored in the field (these can be coded values or shortened names, here we use `1`, `2`, `3`). **Description** is what will be displayed in the form and in the attributes table (here: `value 1`, `value 2`, `value 3`).
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-Now you can select the value from a drop-down menu in the :
-
-
-
-### Value Relation
-
-:::tip Example project available
-This public project contains a Value Relation setup. Download or clone it to explore it in more detail.
-:::
-
-
-
-The **Value Relation** widget is similar to the [Value Map](#value-map) widget, but the values for the drop-down menu come from another layer (usually a non-spatial table).
-
-To have the option to safely add new values when working collaboratively, the value table should have a unique field with UUID values. This field should use the `uuid()` function as a [default value](../attach-multiple-photos-to-features/), so that every new entry has its UUID.
-
-To set up **Value Relation** in QGIS:
-
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the field you want to work with (here: `value-relation-multi-select`)
-3. In the **Widget Type** tab, select **Value Relation** from the drop-down menu and set it up as follows:
- - Select the **Layer** that contains the values (here: `value-relation-table`)
- - **Key column** is the field that contains the values (here: `uuid`)
- - **Value column** is the field that contains the alias (description) of the value (here: `value`)
- - Check the **Allow multiple selections** option :heavy_check_mark: if you want to have the option to select multiple values
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-:::danger Using UUID as key field
-**Why UUID?** FID can be changed during [synchronisation](../../manage/synchronisation/). If multiple surveyors add new entries to the value table, features can end up with wrong values.
-
-On the other hand, (Universally Unique Identifier) is guaranteed to be unique and will not be changed when synced. Therefore, we recommend using UUID if you want to add new values during the survey.
-:::
-
-When you open the field with **Value Relation** in the , you will be able to select values from the list.
-
-
-
-## Attachment
-
-:::tip Example project available
-Basic attachment widget is set up in the public project .
-:::
-
-When there is a field with the **Attachment** widget type in a survey layer, the automatically sees it as a field to **capture photos**. Such field exists in a survey layer in the basic project (created by using *New basic QGIS project* option when [creating a project in QGIS](../../manage/create-project/)). If you create your survey layers manually, you will need to set it up.
-
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the text field you want to work with (here: `attachment`)
-3. In the **Widget Type** tab, select **Attachment** from the drop-down menu:
- - Default path defines where images will be saved. If it is not defined, the project home folder will be used.
- - Store the path as **Relative to project path** or **Relative to default path** depending on how you want to store the paths.
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-
-In the , you have the option to take a picture using the camera or upload a picture from the gallery of your mobile device:
-
-
-:::tip More about this topic
-There are much more settings related to photos that can improve your workflow, such as storing them in a custom folder, resize them automatically or customise their name. Learn more about this topic in [Capturing Photos](../photos/).
-:::
-
-
-## Cascade forms, 1-N relations, form layout,...
-
-There is much more you can do to set up your forms efficiently, such as:
-- Create advanced forms with drill-down menu by setting up a [cascade form](../form-configuration/#drill-down-forms).
-- Use 1-N relations to [link multiple records to one feature](../one-to-n-relations/) or to [attach multiple photos to one feature](../attach-multiple-photos-to-features/).
-- Design an appropriate [form layout](../form-layout/) with groups and tabs, conditional visibility of fields or instructions for the fieldwork.
+|QGIS widget | Description |Preview in
|
+|:---:|:---:|:---:|
+|Text Edit |[Text](../text) |  |
+|Text Edit |[Multiline Text](../text#multiline-text) |  |
+|Date/Time |[Calendar with time](../date-time) | |
+|Relations |[Multiple records linked to one feature](../relations/) |  |
+|Relation reference | [Reference to feature from another layer](../relations/) |  |
+|Range - Editable |[Enter a number](../numbers) |  |
+|Range - Slider |[Select a number using the slider](../numbers#slider) |  |
+|Checkbox |[Checkbox](../checkbox) | |
+|QR & barcode scanner |[Camera to scan QR and barcode](../qr-code) |  |
+|Value Map |[Drop-down menu with predefined values](../value-select/#value-map) | |
+|Value Relation |[Drop-down menu with values from another table](../value-select/#value-relation) | |
+|Attachment |[Photos from device's camera or gallery](../photos) |   |
+|Relations - Gallery |[Multiple photos from device's camera or gallery](../photos/#how-to-attach-multiple-photos-to-one-feature) |  |
+| Text and HTML Widgets |[Informational Widgets](../info-widgets/) |  |
diff --git a/src/layer/form-widgets/mobile-form-info-widgets.webp b/src/layer/form-widgets/mobile-form-info-widgets.webp
new file mode 100644
index 00000000..98cf0444
Binary files /dev/null and b/src/layer/form-widgets/mobile-form-info-widgets.webp differ
diff --git a/src/layer/form-widgets/mobile-form-info-widgets.xcf b/src/layer/form-widgets/mobile-form-info-widgets.xcf
new file mode 100644
index 00000000..72b93fd0
Binary files /dev/null and b/src/layer/form-widgets/mobile-form-info-widgets.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-relation-reference-preview.webp b/src/layer/form-widgets/mobile-form-relation-reference-preview.webp
new file mode 100644
index 00000000..f8f64b1c
Binary files /dev/null and b/src/layer/form-widgets/mobile-form-relation-reference-preview.webp differ
diff --git a/src/layer/form-widgets/mobile-form-relation-reference-preview.xcf b/src/layer/form-widgets/mobile-form-relation-reference-preview.xcf
new file mode 100644
index 00000000..3dbb5f39
Binary files /dev/null and b/src/layer/form-widgets/mobile-form-relation-reference-preview.xcf differ
diff --git a/src/layer/form-widgets/qgis-form-attachment-photo.jpg b/src/layer/form-widgets/qgis-form-attachment-photo.jpg
deleted file mode 100644
index a0e4cc6e..00000000
Binary files a/src/layer/form-widgets/qgis-form-attachment-photo.jpg and /dev/null differ
diff --git a/src/layer/form-widgets/qgis-form-attachment-photo.xcf b/src/layer/form-widgets/qgis-form-attachment-photo.xcf
deleted file mode 100644
index 83df2400..00000000
Binary files a/src/layer/form-widgets/qgis-form-attachment-photo.xcf and /dev/null differ
diff --git a/src/layer/info-widgets/form-html-widget.webp b/src/layer/info-widgets/form-html-widget.webp
new file mode 100644
index 00000000..372206a6
Binary files /dev/null and b/src/layer/info-widgets/form-html-widget.webp differ
diff --git a/src/layer/form-layout/qgis-form-text-html.xcf b/src/layer/info-widgets/form-html-widget.xcf
similarity index 92%
rename from src/layer/form-layout/qgis-form-text-html.xcf
rename to src/layer/info-widgets/form-html-widget.xcf
index 9e4b91a1..e9dc4012 100644
Binary files a/src/layer/form-layout/qgis-form-text-html.xcf and b/src/layer/info-widgets/form-html-widget.xcf differ
diff --git a/src/layer/info-widgets/form-text-widget.webp b/src/layer/info-widgets/form-text-widget.webp
new file mode 100644
index 00000000..d1a6f41d
Binary files /dev/null and b/src/layer/info-widgets/form-text-widget.webp differ
diff --git a/src/layer/info-widgets/form-text-widget.xcf b/src/layer/info-widgets/form-text-widget.xcf
new file mode 100644
index 00000000..c2e9eb4d
Binary files /dev/null and b/src/layer/info-widgets/form-text-widget.xcf differ
diff --git a/src/layer/info-widgets/index.md b/src/layer/info-widgets/index.md
new file mode 100644
index 00000000..40e22de0
--- /dev/null
+++ b/src/layer/info-widgets/index.md
@@ -0,0 +1,67 @@
+---
+description: HTML and Text widgets are not connected to a specific field of the layer and can be configured to display instructions, online images or open local files.
+---
+
+# Informational Widgets
+[[toc]]
+
+ also offers widgets that can be added to the form to display values or text, but are not connected to a specific field of the layer, such as the Text or HTML widget. These widgets are also supported by .
+
+HTML and Text widgets can be used, e.g., to display instructions in the form. They can include [expressions and field values](#using-expressions-in-text-and-html-widgets) as well. The HTML widget supports various [HTML tags](https://doc.qt.io/qt-6/richtext-html-subset.html#supported-tags), so it can also be used, for instance, to display [online images](../embed-image/) or [open local files](../open-file/).
+
+| Widget
|Preview in the |
+|:---:|:---:|
+Text |  |
+HTML Widget |  |
+
+These widgets can be found in **Available Widgets** in the **Other Widgets** section when using the [Drag and Drop Designer](../form-layout/#qgis-drag-and-drop-designer). Simply add them to the form layout and double click to configure them as needed.
+
+
+
+
+
+## Text widget
+
+To configure the **Text** widget, enter the text you want to display in the form. On the right, you will see the preview.
+
+
+...and this is how the Text widget looks like in the form in QGIS (left) and in the mobile app (right):
+
+
+## HTML Widget
+The **HTML** widget offers the option to format the text as needed. HTML widget supports these [HTML tags](https://doc.qt.io/qt-6/richtext-html-subset.html#supported-tags).
+
+
+
+...and this is how the HTML widget looks like in the form in QGIS (left) and in the mobile app (right):
+
+
+## Using expressions in Text and HTML widgets
+Expressions and variables can be used in the Text and the HTML widget.
+
+:::tip Example project available
+Clone to follow this example.
+:::
+
+
+
+1. When configuring the Text or HTML widget, click on the **Expression Builder** button
+
+2. Enter the expression that will be used in your text and click **OK**.
+
+ Field values can be selected from the **Fields and Values** list. There are other variables and expressions that can be used.
+
+3. Click on the **+** button to add the expression to the text.
+
+ Here, we configured the widget with this text:
+
+ `Make sure the number plate [% "VRP" %] is visible in the photo.`
+
+ In this case, `VRP` is the name of a field aliased as `Vehicle Registration Plate` in the form.
+
+4. Save and synchronise your project.
+
+... and this is how it works during the field survey. `[% "VRP" %]` expression displays the current value of the `Vehicle Registration Plate` field.
+
+
+
diff --git a/src/layer/form-layout/mobile-text-widget-expression.jpg b/src/layer/info-widgets/mobile-text-widget-expression.jpg
similarity index 100%
rename from src/layer/form-layout/mobile-text-widget-expression.jpg
rename to src/layer/info-widgets/mobile-text-widget-expression.jpg
diff --git a/src/layer/form-layout/mobile-text-widget-expression.xcf b/src/layer/info-widgets/mobile-text-widget-expression.xcf
similarity index 100%
rename from src/layer/form-layout/mobile-text-widget-expression.xcf
rename to src/layer/info-widgets/mobile-text-widget-expression.xcf
diff --git a/src/layer/info-widgets/mobile-text-widget-preview.webp b/src/layer/info-widgets/mobile-text-widget-preview.webp
new file mode 100644
index 00000000..49a1e4de
Binary files /dev/null and b/src/layer/info-widgets/mobile-text-widget-preview.webp differ
diff --git a/src/layer/info-widgets/mobile-text-widget-preview.xcf b/src/layer/info-widgets/mobile-text-widget-preview.xcf
new file mode 100644
index 00000000..5edafc8b
Binary files /dev/null and b/src/layer/info-widgets/mobile-text-widget-preview.xcf differ
diff --git a/src/layer/form-layout/qgis-configure-html-widget.jpg b/src/layer/info-widgets/qgis-configure-html-widget.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-configure-html-widget.jpg
rename to src/layer/info-widgets/qgis-configure-html-widget.jpg
diff --git a/src/layer/form-layout/qgis-configure-html-widget.xcf b/src/layer/info-widgets/qgis-configure-html-widget.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-configure-html-widget.xcf
rename to src/layer/info-widgets/qgis-configure-html-widget.xcf
diff --git a/src/layer/form-layout/qgis-configure-text-widget.jpg b/src/layer/info-widgets/qgis-configure-text-widget.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-configure-text-widget.jpg
rename to src/layer/info-widgets/qgis-configure-text-widget.jpg
diff --git a/src/layer/form-layout/qgis-configure-text-widget.xcf b/src/layer/info-widgets/qgis-configure-text-widget.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-configure-text-widget.xcf
rename to src/layer/info-widgets/qgis-configure-text-widget.xcf
diff --git a/src/layer/info-widgets/qgis-form-html-text-widget.jpg b/src/layer/info-widgets/qgis-form-html-text-widget.jpg
new file mode 100644
index 00000000..c26f093d
Binary files /dev/null and b/src/layer/info-widgets/qgis-form-html-text-widget.jpg differ
diff --git a/src/layer/info-widgets/qgis-form-html-text-widget.xcf b/src/layer/info-widgets/qgis-form-html-text-widget.xcf
new file mode 100644
index 00000000..04f2875b
Binary files /dev/null and b/src/layer/info-widgets/qgis-form-html-text-widget.xcf differ
diff --git a/src/layer/form-layout/qgis-text-widget-expression.gif b/src/layer/info-widgets/qgis-text-widget-expression.gif
similarity index 100%
rename from src/layer/form-layout/qgis-text-widget-expression.gif
rename to src/layer/info-widgets/qgis-text-widget-expression.gif
diff --git a/src/layer/link-to-navigation/index.md b/src/layer/link-to-navigation/index.md
new file mode 100644
index 00000000..a48e980f
--- /dev/null
+++ b/src/layer/link-to-navigation/index.md
@@ -0,0 +1,31 @@
+---
+description: Hyperlinks can be used in the attributes form in Mergin Maps mobile app to open a link to a navigation app directly from the feature's form.
+---
+
+# How to Open a Link to a Navigation App
+[[toc]]
+
+Attributes forms can include clickable links that can be used to open a navigation app directly from the form in .
+
+:::tip
+Clone to follow this example!
+:::
+
+Let's say you want to find your surveyed features on Google Maps. It is possible to do so directly from , you just need to set up a **text field** that will open Google Maps and enter the coordinates of the feature to the Google Maps search bar.
+
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the field you want to work with.
+3. In the **Widget Display** tab:
+ - Ensure that **Text Edit** is selected
+ - Check the **Multiline** and **HTML** options
+4. In the **Defaults** tab, use this string as **Default value**:
+ `'Open Google Map'`
+5. Check the **Apply default value on update** option
+6. **Apply** the changes. Don't forget to save and sync your project!
+
+
+
+When you tap a feature in the , the form will display a clickable link **Open Google Map** that opens the Google Map app at the position of the feature.
+
+
+
diff --git a/src/layer/external-link/mobile-form-link-to-navigation-app.jpg b/src/layer/link-to-navigation/mobile-form-link-to-navigation-app.jpg
similarity index 100%
rename from src/layer/external-link/mobile-form-link-to-navigation-app.jpg
rename to src/layer/link-to-navigation/mobile-form-link-to-navigation-app.jpg
diff --git a/src/layer/external-link/mobile-form-link-to-navigation-app.xcf b/src/layer/link-to-navigation/mobile-form-link-to-navigation-app.xcf
similarity index 100%
rename from src/layer/external-link/mobile-form-link-to-navigation-app.xcf
rename to src/layer/link-to-navigation/mobile-form-link-to-navigation-app.xcf
diff --git a/src/layer/external-link/qgis-google-maps.jpg b/src/layer/link-to-navigation/qgis-google-maps.jpg
similarity index 100%
rename from src/layer/external-link/qgis-google-maps.jpg
rename to src/layer/link-to-navigation/qgis-google-maps.jpg
diff --git a/src/layer/external-link/qgis-google-maps.xcf b/src/layer/link-to-navigation/qgis-google-maps.xcf
similarity index 100%
rename from src/layer/external-link/qgis-google-maps.xcf
rename to src/layer/link-to-navigation/qgis-google-maps.xcf
diff --git a/src/layer/non-spatial-data/index.md b/src/layer/non-spatial-data/index.md
deleted file mode 100644
index 61b16e0b..00000000
--- a/src/layer/non-spatial-data/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Tables are a key part of Mergin Maps projects. Use them to record non-spatial data, link records to another layer, or in value relation widgets in the forms.
----
-
-# Working with Non-spatial Tables
-[[toc]]
-
-Non-spatial tables are often a key part of a survey project. The tables can be used either on their own to add new data or linked to a spatial layer, e.g. when linking multiple [photos](../attach-multiple-photos-to-features/) or [records](../one-to-n-relations/). They can be also used in [value relation](../form-widgets/#value-relation) widgets.
-
-We recommend using **GeoPackage** format to save your non-spatial table. With this format, you can collaboratively edit the data and track changes.
-
-## Enable editing and browsing of non-spatial layers
-Ensure you have [enabled editing and browsing](../../gis/search_data/) of your non-spatial table in **Project Properties** in QGIS.
-
-
-
-## Non-spatial layers in Mergin Maps mobile app
-Non-spatial tables can be browsed, searched and edited in the .
-
-Tap the [**Layers**](../../field/layers/) button to open the list of layers, including non-spatial tables, in the project.
-
-
-
-Tap on a layer to open its attributes table where you can browse the data and [search for values](../../field/layers/#browsing-features). It is also possible to [add and edit](../../field/mobile-features/#add-or-edit-non-spatial-features) entries in the table.
-
diff --git a/src/layer/non-spatial-data/qgis_nonspatial_properties.jpg b/src/layer/non-spatial-data/qgis_nonspatial_properties.jpg
deleted file mode 100644
index 1e4cb5ad..00000000
Binary files a/src/layer/non-spatial-data/qgis_nonspatial_properties.jpg and /dev/null differ
diff --git a/src/layer/non-spatial-data/qgis_nonspatial_properties.xcf b/src/layer/non-spatial-data/qgis_nonspatial_properties.xcf
deleted file mode 100644
index 9d05a71d..00000000
Binary files a/src/layer/non-spatial-data/qgis_nonspatial_properties.xcf and /dev/null differ
diff --git a/src/layer/numbers/index.md b/src/layer/numbers/index.md
new file mode 100644
index 00000000..d7d41c5d
--- /dev/null
+++ b/src/layer/numbers/index.md
@@ -0,0 +1,51 @@
+---
+description: See how to set up Editable Range or Range Slider to record numbers in the forms in Mergin Maps mobile app.
+---
+
+# Numbers
+
+Number fields can be handled by the **Range** widget that offers two options supported by the : [editable range](#range) and [slider](#slider).
+
+| Widget
|Preview in the |
+|:---:|:---:|
+| Editable range |  |
+| Slider |  |
+
+:::tip Example project available
+This public project: uses various options for entering numbers. Download or clone it to see this setup.
+:::
+
+Prefer a video? Here is a short tutorial about number widgets:
+
+
+## Range
+To set up the **editable range widget**:
+
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the integer field you want to work with (here: `numbers-range-editable`).
+3. In the **Widget Type** tab the **Range** widget and the **Editable** option should be selected by default. If this is not the case, select these options from the drop-down menus.
+4. **Apply** the changes. Don't forget to save and sync your project!
+
+
+
+In the , the numbers can be entered manually or by using the +/- buttons:
+
+
+
+## Slider
+To set up the **Slider**:
+
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the numeric field you want to work with (here: `numbers-range-slider`).
+3. In the **Widget Type** tab:
+ - the **Range** widget should be selected by default (if not, select it from the menu)
+ - set the edit widget to **Slider**
+ - set the **Minimum**, **Maximum** and **Step** values of the slider
+4. **Apply** the changes. Don't forget to save and sync your project!
+
+
+
+In the , the **Slider** looks like this. The number can be filled in by moving the slider:
+
+
+
diff --git a/src/layer/form-widgets/mobile-form-editable-range.jpg b/src/layer/numbers/mobile-form-editable-range.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-editable-range.jpg
rename to src/layer/numbers/mobile-form-editable-range.jpg
diff --git a/src/layer/form-widgets/mobile-form-editable-range.xcf b/src/layer/numbers/mobile-form-editable-range.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-editable-range.xcf
rename to src/layer/numbers/mobile-form-editable-range.xcf
diff --git a/src/layer/numbers/mobile-form-number-editable-preview.jpg b/src/layer/numbers/mobile-form-number-editable-preview.jpg
new file mode 100644
index 00000000..cd4de5b4
Binary files /dev/null and b/src/layer/numbers/mobile-form-number-editable-preview.jpg differ
diff --git a/src/layer/numbers/mobile-form-number-editable-preview.xcf b/src/layer/numbers/mobile-form-number-editable-preview.xcf
new file mode 100644
index 00000000..f3d16f1f
Binary files /dev/null and b/src/layer/numbers/mobile-form-number-editable-preview.xcf differ
diff --git a/src/layer/numbers/mobile-form-number-slider-preview.jpg b/src/layer/numbers/mobile-form-number-slider-preview.jpg
new file mode 100644
index 00000000..fc912c8b
Binary files /dev/null and b/src/layer/numbers/mobile-form-number-slider-preview.jpg differ
diff --git a/src/layer/numbers/mobile-form-number-slider-preview.xcf b/src/layer/numbers/mobile-form-number-slider-preview.xcf
new file mode 100644
index 00000000..f067fc8e
Binary files /dev/null and b/src/layer/numbers/mobile-form-number-slider-preview.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-range-slider.jpg b/src/layer/numbers/mobile-form-range-slider.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-range-slider.jpg
rename to src/layer/numbers/mobile-form-range-slider.jpg
diff --git a/src/layer/form-widgets/mobile-form-range-slider.xcf b/src/layer/numbers/mobile-form-range-slider.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-range-slider.xcf
rename to src/layer/numbers/mobile-form-range-slider.xcf
diff --git a/src/layer/form-widgets/qgis-form-number-range-editable.jpg b/src/layer/numbers/qgis-form-number-range-editable.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-number-range-editable.jpg
rename to src/layer/numbers/qgis-form-number-range-editable.jpg
diff --git a/src/layer/form-widgets/qgis-form-number-range-editable.xcf b/src/layer/numbers/qgis-form-number-range-editable.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-number-range-editable.xcf
rename to src/layer/numbers/qgis-form-number-range-editable.xcf
diff --git a/src/layer/form-widgets/qgis-form-number-range-slider.jpg b/src/layer/numbers/qgis-form-number-range-slider.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-number-range-slider.jpg
rename to src/layer/numbers/qgis-form-number-range-slider.jpg
diff --git a/src/layer/form-widgets/qgis-form-number-range-slider.xcf b/src/layer/numbers/qgis-form-number-range-slider.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-number-range-slider.xcf
rename to src/layer/numbers/qgis-form-number-range-slider.xcf
diff --git a/src/layer/one-to-n-relations/index.md b/src/layer/one-to-n-relations/index.md
index 8e12b84e..69687116 100644
--- a/src/layer/one-to-n-relations/index.md
+++ b/src/layer/one-to-n-relations/index.md
@@ -2,30 +2,31 @@
description: Do you need to link multiple records to one feature in Mergin Maps? Set up 1-N relations for your layers in QGIS.
---
-# How to Link Multiple Records to One Feature (1-N Relations)
+# How to Link Multiple Records to One Feature
[[toc]]
-:::tip Example project available
-You can clone these projects to take a closer look on 1-N relations:
- - Assigning multiple inspections to a single feature:
- - Adding multiple photos to a single feature:
-:::
+It is often the case that you have a set of spatial features and you want to record their status every now and then.
-It is often the case that you have a set of spatial features and you want to record their status every now and then. For example, there is a GIS layer representing the manholes and the surveyors carry out regular inspections of the manholes using . Instead of duplicating the manhole layer and recording each inspection as a new feature, inspections can be recorded in a non-spatial table that is linked to the spatial layer. This way, multiple records can be linked to one feature.
+For example, there is a GIS layer representing the manholes and the surveyors carry out regular inspections of the manholes using . Instead of duplicating the manhole layer and recording each inspection as a new feature, inspections can be recorded in a non-spatial table that is linked to the spatial layer. This way, multiple records can be linked to one feature as a [one to many relation](../relations/).
The image below shows the manhole locations and a form with listed inspections in .
-
+
-The manhole point layer has the following attribute table:
-| fid | Manhole | Manhole UUID |
+:::tip Example project available
+Clone our public project to follow this setup. The project includes a data sample.
+:::
+
+The **manhole point layer** has the following attribute table:
+
+| fid | Manhole | Manhole uuid (`uuid`) |
|:---:|:---:|:---:|
-| 1 | 1 | `{70c59616-492e-4757-aa9a-ee61b207ce94}` |
-| 2 | 2 | `{be01b98f-3585-49d4-be74-4cf3530a2989}` |
-| 3 | 3 | `{03178264-0070-45c8-a981-b2474627d7e0}` |
+| 1 | 1 | `{db908450-4265-4070-a3f7-1d73705df8bf}` |
+| 2 | 2 | `{aeea4c7d-e7c5-4638-8207-53fa469ccddd}` |
+| 3 | 3 | `{042a715a-73ac-4bff-9bb0-7f598d216ec9}` |
-This layer contains only information about the manholes. `Manhole UUID` values are generated using [`uuid()` function as a default value](../attach-multiple-photos-to-features/) when a feature is created. This ensures that these values are **unique** even when multiple surveyors capture new features at the same time. This field will be used to link inspections and manholes.
+This layer contains only information about the manholes. **Manhole uuid** (`uuid`) values are unique values generated using the [`uuid()` function](../relations/#generating-unique-ids-uuid) when a feature is created. This field will be used to link inspections and manholes.
:::danger Using UUID
**Why UUID?** FID can be changed during [synchronisation](../../manage/synchronisation/). As a result, records can end up being linked to wrong features.
@@ -33,32 +34,18 @@ This layer contains only information about the manholes. `Manhole UUID` values a
On the other hand, (Universally Unique Identifier) is generated to be unique and will not be changed when synced. Therefore, we recommend always using UUID to link layers.
:::
-Inspections are recorded in a separate [non-spatial table](../non-spatial-data) with attribute table such as:
-
-| Inspection Date | Blocked? | Flooded? | Inspector | Manhole UUID |
-|:---:|:---:|:---:|:---:|:---:|
-| 10/05/2022 | | | | `{70c59616-492e-4757-aa9a-ee61b207ce94}` |
-| 10/05/2022 | | :heavy_check_mark: | | `{03178264-0070-45c8-a981-b2474627d7e0}` |
-| 12/05/2022 | :heavy_check_mark: | | | `{70c59616-492e-4757-aa9a-ee61b207ce94}` |
-| 14/05/2022 | :heavy_check_mark: | :heavy_check_mark: | | `{be01b98f-3585-49d4-be74-4cf3530a2989}` |
-
-In this table, all information about the inspections are recorded. `Manhole UUID` is filled in automatically based on a 1-N relation that we will set up in QGIS.
-
-The same principle can be used when you want to capture [multiple photos for a single feature](../attach-multiple-photos-to-features/).
-
-
-## How to set up 1-N relations in QGIS project
-You can follow this example by cloning .
-
-:::tip
-Make sure that your survey layer has a **unique UUID** field to create the link correctly. You will find detailed steps how to set it up in [How to Attach Multiple Photos to Features](../attach-multiple-photos-to-features/)
-:::
+The **non-spatial inspections table** has the following attributes. **Manhole uuid** (`parent-uuid`) are references to manholes.
+| fid | Date | Blocked? | Flooded? | Inspector | Manhole uuid (`parent-uuid`) |
+|:---:|:---:|:---:|:---:|:---:|:---:|
+| 8 | 2025-11-20 | false |false| | `{db908450-4265-4070-a3f7-1d73705df8bf}` |
+| 9 | 2025-11-28 | false |true | | `{db908450-4265-4070-a3f7-1d73705df8bf}` |
+| 10 | 2025-12-01 | true |true| | `{aeea4c7d-e7c5-4638-8207-53fa469ccddd}` |
+| 11 | 2025-12-03 | false |false| | `{042a715a-73ac-4bff-9bb0-7f598d216ec9}` |
-To configure 1-N relations in QGIS:
+To configure 1-N relations in QGIS (detailed steps can be found in [Relations](../relations/#setting-up-relation-in-qgis)):
1. From the main menu, select **Projects** > **Properties ...**
2. In the **Relations** tab, select **Add Relation**
- 
-3. A new window will appear, where we can define the parent and child layers and the fields to link the two layers:
+3. Define the parent and child layers and the fields to link the two layers:
- **Name** is the name of the relation, e.g. `Inspection`
- **Referenced (parent)** is the spatial layer `manhole_locations`
- **Field 1** of the **Referenced (parent)** is the field `Manhole UUID` that contains the **unique** UUID
@@ -67,16 +54,16 @@ To configure 1-N relations in QGIS:

-4. Right-click on the survey layer, select **Properties** and go to the **Attributes** form tab.
-5. Drag and drop the **Inspections** relation to the **Form Layout**.
- 
+4. Navigate to the **Attributes form** tab in Layer **Properties** of the survey layer (`manhole_locations`)
+5. Add the **Inspections** relation to the **Form Layout**
+ 
Now you can add multiple inspections for each manhole location. The inspections records will be stored in the `inspections` table.
When you open the form for an existing record in the `manhole_locations` point layer, it will display existing inspection records and you can also add, delete or edit the records:
-
+
In the , the form will display all linked inspection records. Tapping the **+** button opens the inspection form and a new inspection record can be added.
-
+
diff --git a/src/layer/one-to-n-relations/mobile-1-n-relation.jpg b/src/layer/one-to-n-relations/mobile-1-n-relation.jpg
deleted file mode 100644
index 624cda6d..00000000
Binary files a/src/layer/one-to-n-relations/mobile-1-n-relation.jpg and /dev/null differ
diff --git a/src/layer/one-to-n-relations/mobile-1-n-relation.webp b/src/layer/one-to-n-relations/mobile-1-n-relation.webp
new file mode 100644
index 00000000..75ff64c3
Binary files /dev/null and b/src/layer/one-to-n-relations/mobile-1-n-relation.webp differ
diff --git a/src/layer/one-to-n-relations/mobile-1-n-relation.xcf b/src/layer/one-to-n-relations/mobile-1-n-relation.xcf
index 0f987e1a..f6b67239 100644
Binary files a/src/layer/one-to-n-relations/mobile-1-n-relation.xcf and b/src/layer/one-to-n-relations/mobile-1-n-relation.xcf differ
diff --git a/src/layer/one-to-n-relations/mobile-form-1-n-relation.jpg b/src/layer/one-to-n-relations/mobile-form-1-n-relation.jpg
deleted file mode 100644
index bf1af5b0..00000000
Binary files a/src/layer/one-to-n-relations/mobile-form-1-n-relation.jpg and /dev/null differ
diff --git a/src/layer/one-to-n-relations/mobile-form-1-n-relation.webp b/src/layer/one-to-n-relations/mobile-form-1-n-relation.webp
new file mode 100644
index 00000000..89599364
Binary files /dev/null and b/src/layer/one-to-n-relations/mobile-form-1-n-relation.webp differ
diff --git a/src/layer/one-to-n-relations/mobile-form-1-n-relation.xcf b/src/layer/one-to-n-relations/mobile-form-1-n-relation.xcf
index 116b8686..e4ebaad7 100644
Binary files a/src/layer/one-to-n-relations/mobile-form-1-n-relation.xcf and b/src/layer/one-to-n-relations/mobile-form-1-n-relation.xcf differ
diff --git a/src/layer/one-to-n-relations/qgis-1-N-form.jpg b/src/layer/one-to-n-relations/qgis-1-N-form.jpg
deleted file mode 100644
index 77b91108..00000000
Binary files a/src/layer/one-to-n-relations/qgis-1-N-form.jpg and /dev/null differ
diff --git a/src/layer/one-to-n-relations/qgis-1-N-form.webp b/src/layer/one-to-n-relations/qgis-1-N-form.webp
new file mode 100644
index 00000000..7bcd7735
Binary files /dev/null and b/src/layer/one-to-n-relations/qgis-1-N-form.webp differ
diff --git a/src/layer/one-to-n-relations/qgis-1-N-form.xcf b/src/layer/one-to-n-relations/qgis-1-N-form.xcf
index 8e2ae1b0..f7446599 100644
Binary files a/src/layer/one-to-n-relations/qgis-1-N-form.xcf and b/src/layer/one-to-n-relations/qgis-1-N-form.xcf differ
diff --git a/src/layer/one-to-n-relations/qgis-forms-relations-setup.jpg b/src/layer/one-to-n-relations/qgis-forms-relations-setup.jpg
deleted file mode 100644
index 2952a80c..00000000
Binary files a/src/layer/one-to-n-relations/qgis-forms-relations-setup.jpg and /dev/null differ
diff --git a/src/layer/one-to-n-relations/qgis-forms-relations-setup.webp b/src/layer/one-to-n-relations/qgis-forms-relations-setup.webp
new file mode 100644
index 00000000..5b94f8be
Binary files /dev/null and b/src/layer/one-to-n-relations/qgis-forms-relations-setup.webp differ
diff --git a/src/layer/one-to-n-relations/qgis-forms-relations-setup.xcf b/src/layer/one-to-n-relations/qgis-forms-relations-setup.xcf
index 74258348..c8751a77 100644
Binary files a/src/layer/one-to-n-relations/qgis-forms-relations-setup.xcf and b/src/layer/one-to-n-relations/qgis-forms-relations-setup.xcf differ
diff --git a/src/layer/open-file/index.md b/src/layer/open-file/index.md
new file mode 100644
index 00000000..a97080a9
--- /dev/null
+++ b/src/layer/open-file/index.md
@@ -0,0 +1,55 @@
+---
+description: A local file, e.g. a PDF stored in the project folder, can be opened from within the form using the HTML widget.
+---
+
+# How to Open a File
+[[toc]]
+
+A local file, e.g. a PDF stored in the project folder, can be opened from within the form using [the HTML widget](../info-widgets/#html-widget). There is an alternative setting that uses [default values](#open-local-files-using-default-values) that may be useful for specific scenarios.
+
+::: tip Public project available
+Download or clone our public project to explore both options and see what works the best for you.
+:::
+
+## Using HTML widget to open local files
+The HTML widget can be used to open local files: for instance, a locally stored PDF file can be opened from within the form during the survey.
+
+::: tip Example project available
+This setup is used in our public project .
+:::
+
+- A PDF file named `my-pdf.pdf` is stored in the main [project folder](../../manage/project/#mergin-maps-project-folder) as it needs to be packaged with the project.
+- The HTML Widget is added to the **Attributes Form** and configured as follows:
+ ```
+ Open File
+ ```
+
+
+
+In the , you can tap the *Open File* link to open the PDF file using the default application of your device.
+
+
+
+## Open local files using default values
+
+Local files (e.g. a PDF file) can also be opened from within the form using default values. This file needs to be packaged with the project, so it should be stored somewhere in the [project folder](../../manage/project/#mergin-maps-project-folder).
+
+::: tip Example project available
+This setup is used in our public project .
+:::
+
+- A PDF file named `my-pdf.pdf` is stored in the main project folder.
+- The survey layer has a field named `local-file-default-value` with **Text (string)** data type.
+ - This field is set to *not editable* (the form will refer to the same file for all features and does not need to be changed).
+ - This field uses the **Text Edit** widget with the *Multiline* and *HTML* options enabled.
+ - The **default value** is set to:
+ ```
+ 'Open File'
+ ```
+
+
+
+In the , you can tap the *Open File* link to open the PDF file using the default application of your device.
+
+
+
diff --git a/src/layer/open-file/mobile-forms-open-file-default-value.jpg b/src/layer/open-file/mobile-forms-open-file-default-value.jpg
new file mode 100644
index 00000000..d4d7f568
Binary files /dev/null and b/src/layer/open-file/mobile-forms-open-file-default-value.jpg differ
diff --git a/src/layer/open-file/mobile-forms-open-file-default-value.xcf b/src/layer/open-file/mobile-forms-open-file-default-value.xcf
new file mode 100644
index 00000000..3cd7beb2
Binary files /dev/null and b/src/layer/open-file/mobile-forms-open-file-default-value.xcf differ
diff --git a/src/layer/form-layout/mobile-forms-open-file-html-widget.jpg b/src/layer/open-file/mobile-forms-open-file-html-widget.jpg
similarity index 100%
rename from src/layer/form-layout/mobile-forms-open-file-html-widget.jpg
rename to src/layer/open-file/mobile-forms-open-file-html-widget.jpg
diff --git a/src/layer/form-layout/mobile-forms-open-file-html-widget.xcf b/src/layer/open-file/mobile-forms-open-file-html-widget.xcf
similarity index 100%
rename from src/layer/form-layout/mobile-forms-open-file-html-widget.xcf
rename to src/layer/open-file/mobile-forms-open-file-html-widget.xcf
diff --git a/src/layer/form-configuration/qgis-form-open-file-default-value.jpg b/src/layer/open-file/qgis-form-open-file-default-value.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-open-file-default-value.jpg
rename to src/layer/open-file/qgis-form-open-file-default-value.jpg
diff --git a/src/layer/form-configuration/qgis-form-open-file-default-value.xcf b/src/layer/open-file/qgis-form-open-file-default-value.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-open-file-default-value.xcf
rename to src/layer/open-file/qgis-form-open-file-default-value.xcf
diff --git a/src/layer/form-layout/qgis-form-open-file-html-widget.jpg b/src/layer/open-file/qgis-form-open-file-html-widget.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-form-open-file-html-widget.jpg
rename to src/layer/open-file/qgis-form-open-file-html-widget.jpg
diff --git a/src/layer/form-layout/qgis-form-open-file-html-widget.xcf b/src/layer/open-file/qgis-form-open-file-html-widget.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-form-open-file-html-widget.xcf
rename to src/layer/open-file/qgis-form-open-file-html-widget.xcf
diff --git a/src/layer/overview/index.md b/src/layer/overview/index.md
new file mode 100644
index 00000000..42f8905a
--- /dev/null
+++ b/src/layer/overview/index.md
@@ -0,0 +1,38 @@
+---
+description: In the Configure forms section, you will find everything you need to set up attributes forms for spatial and non-spatial layers in your Mergin Maps project.
+---
+
+# Configure Forms Overview
+
+Capturing field data includes recording some information about surveyed points, lines, polygons or non-spatial features by filling in attributes form. This section will guide you through various settings of attributes forms for spatial and non-spatial layers.
+
+:::tip Mergin Maps project setup in QGIS
+In this section, we focus specifically on configuring forms for field survey layers. We recommend using **GeoPackage** format for your layers.
+
+To learn how to create your project and add survey layers, follow our tutorial [Creating a Project in QGIS](../../tutorials/creating-a-project-in-qgis/). Additional tips for project setup can be found in [QGIS project preparation](../../gis/features/).
+:::
+
+Just as other project settings, the forms for data collection are configured in and follows these settings.
+
+Each layer has its own form. By default, the form is automatically generated, contains all the fields and these fields have a default type of data input. This means that even without a special configuration, you are able to fill in the form with valid input values. These default options can be changed to fit the needs of your field survey. You can define the type of data input for each field by choosing a . See our [widget gallery](../form-widgets/) for a quick overview of available widgets.
+
+Do you prefer a video? Check out this tutorial on how to configure QGIS widgets for survey forms.
+
+
+## Setting up form widgets
+
+Attributes forms can be configured using in the **Attributes Form** tab in the **Layer Properties**. Note that the widget has to be compatible with the field data type.
+
+Each data type has a default widget: for instance, text fields use *Text edit* widget by default and are filled in by manually typing the value, while date fields use *Date/Time* widget and the value is selected using a calendar pop-up.
+
+
+
+## Layout and configuration
+
+Extra configuration of attribute forms can be done to make data collection easier and more consistent, such as:
+- using [default values](../default-values/) to automatically record attribute's values
+- setting [constraints](../constraints/) to define valid inputs for the attributes
+- designing the [attributes forms layout](../form-layout/) so that the forms are easy to work with
+
+In [Use Cases](../use-cases), you can find step-by-step guides to deal with specific scenarios, such as [opening files](../open-file/) from within the form, [using hyperlinks](../external-link/), [open a link to a navigation app](../link-to-navigation/) in the form and much more.
+
diff --git a/src/layer/form-widgets/qgis-attributes-form.gif b/src/layer/overview/qgis-attributes-form.gif
similarity index 100%
rename from src/layer/form-widgets/qgis-attributes-form.gif
rename to src/layer/overview/qgis-attributes-form.gif
diff --git a/src/layer/photos/index.md b/src/layer/photos/index.md
index e8c94397..38df12e5 100644
--- a/src/layer/photos/index.md
+++ b/src/layer/photos/index.md
@@ -1,108 +1,180 @@
----
-description: Capture photos with Mergin Maps mobile app using photo attachment widget in QGIS. Photos can be stored in a custom folder, resized and renamed automatically.
----
-
-# Capturing Photos
-[[toc]]
-
-When surveying, you might want to take a photo from your camera or attach an existing photo from the device gallery to your survey feature.
-
-To capture and save photos using the , the survey layer needs to have a field configured with the [attachment widget](../form-widgets/#attachment).
-
-In the , this field will provide two options:
-- **Take a picture** to use your camera app for taking a photos
-- **From gallery** to attach an existing photo from your device
-
-
-
-You can use [Photo sketching](../../field/photo-sketching/) to annotate the pictures attached to features.
-
-:::tip Multiple pictures of one feature
-Do you need to attach multiple pictures to one feature? [How to attach multiple photos to features](../attach-multiple-photos-to-features/) will guide you through the setup.
-:::
-
-::: warning
-Keep in mind that synchronising photos during the field survey can use up a lot of mobile data - depending on the amount of pictures taken and their size.
-
-To reduce the data usage, you may consider using [selective synchronisation](../../manage/selective_sync/), [resizing pictures automatically](#resizing-pictures-automatically) or following the [offline field survey workflow](../../field/offline-use/#offline-field-survey-workflow).
-:::
-
-## Photo attachment widget in QGIS
-
-:::tip Example project available
-Clone to follow this example!
-:::
-
-In QGIS, the [attachment widget](../form-widgets/#attachment) is used to set up a field to capture photos.
-
-To set up the attachment widget:
-1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
-2. In the list of **Available Widgets** select the text field you want to work with.
-3. In the **Widget Display** tab:
- - From the drop-down menu, select **Attachment**
- - **Default path** defines where images will be saved. If it is not defined, the project home folder will be used.
- - Store the path as **Relative to project path** or **Relative to default path** depending on how you want to store the paths.
-4. **Apply** the changes. Don't forget to save and sync your project!
-
-
-Here is an overview of paths that will be stored in various settings of the attachment widget. `path/to/project` represents the project home folder, where the project file is located.
-
-| Default path | Store path as | Value |
-|:-------------------------: |:------------: |:----------------------------------: |
-| - | Relative to project path | `image.jpg` |
-| - | Relative to default path | `image.jpg` |
-| `@project_folder` | Relative to project path | `image.jpg` |
-| `@project_folder` | Relative to default path | `image.jpg` |
-| `@project_home + '/photos'` | Relative to project path | `/photos/image.jpg` |
-| `@project_home + '/photos'` | Relative to default path | `image.jpg` |
-
-:::danger Avoid using absolute paths
-Using *absolute paths* causes issues when working with your projects on different devices or working in a team: as each device or team member can use different paths, they may be unable to display the attachments.
-:::
-
-## How to set up a custom folder for storing photos
-It can be useful to set up a custom folder for photos, e.g. if you want to use [selective synchronisation](../../manage/selective_sync/) or if you simply want to have your data organised.
-
-To set up a custom folder:
-1. Create a subfolder in the project folder (here: `photos`)
-2. Open your project in QGIS
-3. Open the **Properties** of the survey layer and navigate to the **Attributes form** tab.
- Select the field, where photos are stored (here: `photo`) and make sure that the widget type is set to **Attachment**:
- 
-5. Now we need to change the **Default path** to the folder we have created. Click on the *Data defined override* icon and choose **Edit...**
- 
-
-6. In **Expression String Builder** enter the expression `@project_folder + '/photos'` (replace `photos` by the name of your folder). Click **OK**.
- 
-
-7. The **Default path** now refers to the custom folder.
- 
-
-8. **Apply the changes**. Don't forget to save and sync your project!
-
-## Resizing pictures automatically
-Photos that are captured during the field survey or uploaded using can be automatically resized, e.g. to save up storage space. The quality of the photos can be set up in the [ project properties](../../gis/features/#photo-quality) using .
-
-## Customising photo name format with expressions
-Photos taken in the field using can be automatically renamed. This can be useful when browsing pictures in your project and keeping them organised.
-
-[**How to Set Photo Names Format**](../../gis/photo-names/) will guide you through the setup and provide examples of expressions that can be used to name your photos.
-
-## Displaying photos in QGIS
-Photos taken using during the survey can be displayed in the feature's form in QGIS.
-
-1. In QGIS, double click on a survey layer to open **Layer Properties**
-2. In the **Attributes Form** tab, select the field that contains the path to the photo.
-
- Scroll to the **Integrated Document Viewer** in the panel on the right. Set the **Type** to *Image*.
- 
-
-3. **Apply** the changes and click **OK**.
-
-Now when you click on a feature that contains a photo, it will be displayed in the form.
-
-
-
-::: warning Image preview in QGIS 3.36+
-QGIS may not display the preview of the image if you use QGIS 3.36 or higher. Despite this behaviour, the displays it correctly. Therefore we recommend trying the setup by opening the form in the to make sure it works as intended.
-:::
+---
+description: Capture photos with Mergin Maps mobile app using photo attachment widget in QGIS. Photos can be stored in a custom folder, resized and renamed automatically.
+
+outline: deep
+---
+
+# Photos
+[[toc]]
+
+Adding photos to a surveyed feature can be really helpful. With , you can quickly take photos during the survey, share them with your team and store them in the cloud. You can either capture a photo using your camera or select existing photos from the gallery.
+
+ offers some useful functionalities for capturing photos:
+- More than one photo can be attached to one feature. Follow our guide [How to attach multiple photos to features](#how-to-attach-multiple-photos-to-one-feature) to do so.
+- Photos can be named automatically based on a [customised names format](#customising-photo-name-format-with-expressions).
+- Synchronising photos during the field survey can use up a lot of mobile data, depending on the amount of pictures taken and their size. To reduce the data usage, you may use [selective synchronisation](../../manage/selective_sync/), [resizing pictures automatically](../../gis/features/#photo-quality) or following the [offline field survey workflow](../../field/offline-use/#offline-field-survey-workflow).
+
+| Widget
|Preview in the |
+|:---:|:---:|
+[Single Photo](#photo-attachment-widget-in-qgis) |  |
+|[ Multiple Photos (Gallery) ](#how-to-attach-multiple-photos-to-one-feature) |  |
+
+
+:::tip Example projects available
+To see the basic [attachment widget](#photo-attachment-widget-in-qgis) setup for photos, clone .
+
+If you want to [attach multiple photos to one feature](#how-to-attach-multiple-photos-to-one-feature) explore the public project .
+:::
+
+## Photo attachment widget in QGIS
+
+:::tip Example project available
+Clone to follow this example!
+:::
+
+To add photos to features using the , the attributes form of a survey layer needs to have a field with data type `Text (string)` configured with the **Attachment** widget in QGIS as follows:
+
+To set up the attachment widget:
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the text field you want to work with.
+3. In the **Widget Display** tab:
+ - From the drop-down menu, select **Attachment**
+ - **Default path** defines where images will be saved. If it is not defined, the project home folder will be used.
+ - Store the path as **Relative to project path** or **Relative to default path** depending on how you want to store the paths.
+
+ 
+
+ :::danger Avoid using absolute paths
+ Using *absolute paths* causes issues when working with your projects on different devices or working in a team: as each device or team member can use different paths, they may be unable to display the images.
+ :::
+
+4. **Apply** the changes. Don't forget to save and sync your project!
+
+In the , this field will provide two options:
+- **Take a picture** to use your camera app for taking a photos
+- **From gallery** to attach an existing photo from your device
+
+
+
+## Custom folder for storing photos {#how-to-set-up-a-custom-folder-for-storing-photos}
+It can be useful to set up a custom folder for photos, e.g. if you want to use [selective synchronisation](../../manage/selective_sync/) or if you simply want to have your data organised.
+
+To set up a custom folder:
+1. Create a subfolder in the project folder (here: `photos`)
+2. Open your project in QGIS
+3. Open the **Properties** of the survey layer and navigate to the **Attributes form** tab.
+
+ Select the field, where photos are stored (here: `photo`) and make sure that the widget type is set to [**Attachment**](#photo-attachment-widget-in-qgis)
+ 
+
+5. Now we need to change the **Default path** to the folder we have created. Click on the *Data defined override* icon and choose **Edit...**
+ 
+
+6. In **Expression String Builder** enter the expression `@project_folder + '/photos'` (replace `photos` by the name of your folder). Click **OK**.
+ 
+
+7. The **Default path** now refers to the custom folder.
+ 
+
+8. **Apply the changes**. Don't forget to save and sync your project!
+
+### Overview of paths for attachment widget
+
+Here is an overview of paths that can be stored in various settings of the attachment widget.
+
+| Default path | Store path as | Value |
+|:-------------------------: |:------------: |:----------------------------------: |
+| - | Relative to project path | `image.jpg` |
+| - | Relative to default path | `image.jpg` |
+| `@project_folder` | Relative to project path | `image.jpg` |
+| `@project_folder` | Relative to default path | `image.jpg` |
+| `@project_home + '/photos'` | Relative to project path | `/photos/image.jpg` |
+| `@project_home + '/photos'` | Relative to default path | `image.jpg` |
+
+
+## Resizing pictures automatically
+Photos that are captured during the field survey or uploaded using can be automatically resized, e.g. to save up storage space. The quality of the photos can be set up in the [ project properties](../../gis/features/#photo-quality) using .
+
+## Customising photo name format with expressions
+Photos taken in the field using can be automatically renamed. This can be useful when browsing pictures in your project and keeping them organised.
+
+[**How to Set Photo Names Format**](../../gis/photo-names/) will guide you through the setup and provide examples of expressions that can be used to name your photos.
+
+## Displaying photos in QGIS
+Photos taken using during the survey can be displayed in the feature's form in QGIS.
+
+1. In QGIS, double click on a survey layer to open **Layer Properties**
+2. In the **Attributes Form** tab, select the field that contains the path to the photo.
+
+ Scroll to the **Integrated Document Viewer** in the panel on the right. Set the **Type** to *Image*.
+ 
+
+3. **Apply** the changes and click **OK**.
+
+Now when you click on a feature that contains a photo, it will be displayed in the form.
+
+
+
+::: details Image preview in QGIS
+Some QGIS versions may not display the preview of the image correctly. This issue does not occur in . Therefore we recommend trying the setup by opening the form in the to make sure it works as intended.
+:::
+
+
+## Attaching multiple photos to one feature {#how-to-attach-multiple-photos-to-one-feature}
+
+In some situations, it might be useful to take more than one picture of a feature during the field survey. Attaching multiple photos to one feature is a **one to many relation**. You can read more about this topic in general in [Relations](../relations).
+
+| Widget
|Preview in the |
+|:---:|:---:|
+|Relation - Gallery |  |
+
+:::tip Example project available
+To see this setup in practice, you can download this public project .
+:::
+
+
+
+### Non-spatial layer for storing photos
+To link multiple photos to a single feature, we need to have a non-spatial layer (table) to store the paths to the photos.
+
+1. Here we will create a new GeoPackage layer named `photos` with following attributes:
+ - `photo` with `Text (string)` data type to store the photo path
+ - `external-pk` with `Text (string)` data type to store the reference to the feature from the survey layer
+
+ 
+
+ ::: tip Using default values
+ You may add other attributes as needed, e.g. to record the username or dates automatically using [default values](../default-values/).
+ :::
+
+2. Now we need to configure the attributes form: set the `photo` field to store photo paths as described in the [photo attachment widget](#photo-attachment-widget-in-qgis).
+
+### Relation setup
+The `photos` layer will be linked to the survey layer using an UUID: the survey layer needs to have a **unique UUID** field generated by the `uuid()` function (see how to set it up [here](../relations/#generating-unique-ids-uuid)) and the [`photos` layer](#non-spatial-layer-for-storing-photos) has a field to store the foreign key (here: `external-pk`).
+
+:::danger Use UUIDs to link layers
+**Do not use the FID field to link these tables**. FIDs can be changed during synchronisation, which can result in having photos linked to the incorrect feature. See [Behind Data Synchronisation](../../manage/synchronisation/) for more details.
+
+You should always use unique UUIDs generated by the `uuid()` function to link layers as they do not change during the sync.
+:::
+
+Navigate to the [**Relations**](../relations/#setting-up-relation-in-qgis) tab in **Project Properties** and **Add Relation** as follows:
+- **Name** is the name of the relation, can be left blank
+- **Referenced (parent)** is the spatial layer `Survey`
+- **Field 1** of the **Referenced (parent)** is the field `unique-id` that contains the UUID
+- **Referencing (child)** is the non-spatial layer `photos`
+- **Field 1** of the **Referencing (child)** layer is the `external-pk` that contains the foreign key to link photos with surveyed features.
+
+
+
+### Relations widget (gallery) in the form
+
+Check the **Attributes form** tab in the **Layer Properties** of your survey layer and make sure that the [relation widget](../relations/#attributes-forms-configuration-for-1-n-relations) is included in the form.
+
+If you use [Drag and Drop Designer](../form-layout/#qgis-drag-and-drop-designer), you may need to add it to the form manually.
+
+
+
+The detects the relation widget and allows to add multiple images to one feature, displaying them in a gallery form.
+
+
diff --git a/src/layer/form-widgets/mobile-form-attachment-photo.jpg b/src/layer/photos/mobile-form-attachment-photo.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-attachment-photo.jpg
rename to src/layer/photos/mobile-form-attachment-photo.jpg
diff --git a/src/layer/form-widgets/mobile-form-attachment-photo.xcf b/src/layer/photos/mobile-form-attachment-photo.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-attachment-photo.xcf
rename to src/layer/photos/mobile-form-attachment-photo.xcf
diff --git a/src/layer/attach-multiple-photos-to-features/mobile-multiple-photos.jpg b/src/layer/photos/mobile-multiple-photos.jpg
similarity index 100%
rename from src/layer/attach-multiple-photos-to-features/mobile-multiple-photos.jpg
rename to src/layer/photos/mobile-multiple-photos.jpg
diff --git a/src/layer/attach-multiple-photos-to-features/mobile-multiple-photos.xcf b/src/layer/photos/mobile-multiple-photos.xcf
similarity index 100%
rename from src/layer/attach-multiple-photos-to-features/mobile-multiple-photos.xcf
rename to src/layer/photos/mobile-multiple-photos.xcf
diff --git a/src/layer/photos/qgis-create-photos-table.webp b/src/layer/photos/qgis-create-photos-table.webp
new file mode 100644
index 00000000..ddaec994
Binary files /dev/null and b/src/layer/photos/qgis-create-photos-table.webp differ
diff --git a/src/layer/photos/qgis-create-photos-table.xcf b/src/layer/photos/qgis-create-photos-table.xcf
new file mode 100644
index 00000000..88aacd71
Binary files /dev/null and b/src/layer/photos/qgis-create-photos-table.xcf differ
diff --git a/src/layer/photos/qgis-form-photo-relation.webp b/src/layer/photos/qgis-form-photo-relation.webp
new file mode 100644
index 00000000..609fdd5a
Binary files /dev/null and b/src/layer/photos/qgis-form-photo-relation.webp differ
diff --git a/src/layer/photos/qgis-form-photo-relation.xcf b/src/layer/photos/qgis-form-photo-relation.xcf
new file mode 100644
index 00000000..db63fffb
Binary files /dev/null and b/src/layer/photos/qgis-form-photo-relation.xcf differ
diff --git a/src/layer/photos/qgis_form_photo.jpg b/src/layer/photos/qgis_form_photo.jpg
deleted file mode 100644
index e5c26301..00000000
Binary files a/src/layer/photos/qgis_form_photo.jpg and /dev/null differ
diff --git a/src/layer/photos/qgis_form_photo.webp b/src/layer/photos/qgis_form_photo.webp
new file mode 100644
index 00000000..ffdeecee
Binary files /dev/null and b/src/layer/photos/qgis_form_photo.webp differ
diff --git a/src/layer/photos/qgis_form_photo.xcf b/src/layer/photos/qgis_form_photo.xcf
index b9ec0463..4d9e6815 100644
Binary files a/src/layer/photos/qgis_form_photo.xcf and b/src/layer/photos/qgis_form_photo.xcf differ
diff --git a/src/layer/photos/qgis_forms_photo.jpg b/src/layer/photos/qgis_forms_photo.jpg
deleted file mode 100644
index 7a81c6e1..00000000
Binary files a/src/layer/photos/qgis_forms_photo.jpg and /dev/null differ
diff --git a/src/layer/photos/qgis_forms_photo.xcf b/src/layer/photos/qgis_forms_photo.xcf
deleted file mode 100644
index 5958f546..00000000
Binary files a/src/layer/photos/qgis_forms_photo.xcf and /dev/null differ
diff --git a/src/layer/attach-multiple-photos-to-features/qgis_relation_photos.jpg b/src/layer/photos/qgis_relation_photos.jpg
similarity index 100%
rename from src/layer/attach-multiple-photos-to-features/qgis_relation_photos.jpg
rename to src/layer/photos/qgis_relation_photos.jpg
diff --git a/src/layer/attach-multiple-photos-to-features/qgis_relation_photos.xcf b/src/layer/photos/qgis_relation_photos.xcf
similarity index 100%
rename from src/layer/attach-multiple-photos-to-features/qgis_relation_photos.xcf
rename to src/layer/photos/qgis_relation_photos.xcf
diff --git a/src/layer/plugin-variables/index.md b/src/layer/plugin-variables/index.md
deleted file mode 100644
index 7080fe95..00000000
--- a/src/layer/plugin-variables/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-description: Special Mergin Maps variables (such as username, user email or project name) can be used in QGIS expressions and as default values in feature forms.
----
-
-# Extra QGIS Variables
-
-The adds several variables that can be used in QGIS expressions:
-
-| Variable name | Sample value | Scope | Description |
-|-----------------------------|-------------------------------|---------|-------------
-| `@mm_full_name` | `martin second name` | global | Full name of the currently logged in user, blank if the full name is not set |
-| `@mm_username` | `martin` | global | Username of the user currently logged in to |
-| `@mm_user_email` | `martin@example.com` | global | Email of the user currently logged in to |
-| `@mm_url` | `https://app.merginmaps.com` | global | URL of the service |
-| `@mm_project_name` | `Tree survey` | project | Name of the active project |
-| `@mm_project_full_name` | `martin/Tree survey` | project | Workspace and project name joined with a forward slash |
-| `@mm_project_version` | `42` | project | Current version of the active project |
-
-A common use case is to use `@mm_username` or `@mm_user_email` as the [default value](../form-configuration/#default-values) for one of the fields in a survey layer to automatically track who has added (and/or modified) a particular record.
-
-::: tip `mergin_` variable names still work!
-QGIS variables listed here previously used the prefix `mergin_`. Now we use the prefix `mm_` standing for .
-
-Both naming options are functional and will continue to work in the future: `@mergin_user_email` and `@mm_user_email` provide the same value when used in QGIS expressions.
-:::
diff --git a/src/layer/position_variables/index.md b/src/layer/position_variables/index.md
deleted file mode 100644
index e799959a..00000000
--- a/src/layer/position_variables/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-description: Mergin Maps mobile app can access GPS information using extra position variables. They can be used as default values in feature forms.
----
-
-# Extra Position Variables
-
-With , it is possible to access GPS information using extra position variables. Note that location permission has to be allowed and location service enabled.
-
-Extra position variables can be used as [default values in feature forms](../form-configuration/#default-values).
-
-Following variables are supported:
- - `@position_coordinate` - A point with the coordinates in WGS84.
- - `@position_latitude` - Latitude
- - `@position_longitude` - Longitude
- - `@position_altitude` - Altitude
- - `@position_direction` - The bearing measured in degrees clockwise from true north to the direction of travel.
- - `@position_ground_speed` - The ground speed, in meters/sec.
- - `@position_vertical_speed` - The vertical speed, in meters/sec.
- - `@position_magnetic_variation` - The angle between the horizontal component of the magnetic field and true north, in degrees. Also known as magnetic declination. A positive value indicates a clockwise direction from true north and a negative value indicates a counter-clockwise direction.
- - `@position_horizontal_accuracy` - The accuracy of the provided latitude-longitude value, in meters.
- - `@position_vertical_accuracy` - The accuracy of the provided altitude value, in meters.
- - `@position_from_gps` - True, if recorder/edited feature's geometry correspond with current user's position (Position marker has the same location as the crosshairs marker).
- - `@position_satellites_visible` - Number of visible satellites.
- - `@position_satellites_used` - Number of satellites used to calculate the position.
- - `@position_gps_fix` - GPS fix, e.g. "RTK float"
- - `@position_gps_antenna_height` - Antenna height as defined in [GPS settings](../../field/mobile-app-ui/#gps-settings)
- - `@position_provider_type` - GPS device type.
- - for internal GPS, returns "internal"
- - for external GPS, returns "external"
- - `@position_provider_name` - GPS device name.
- - for internal GPS, returns "Internal"
- - for external GPS, returns the name of the external device
- - `@position_provider_address` - GPS device address.
- - for internal GPS, returns ""
- - for external GPS, returns the MAC address
- - `@position_hdop` - Horizontal dilution of precision (HDOP)
- - `@position_vdop` - Vertical dilution of precision (VDOP)
- - `@position_pdop` - Position (3D) dilution of precision (PDOP)
-
-:::tip
-**Dilution of precision** (DOP) is a useful value that reflects the confidence level of achieved position precision. In addition to the horizontal and vertical accuracy, the appropriate DOP value (horizontal, vertical, or 3D) can be used to assess the overall quality of your survey accuracy.
-
-You can read more about this topic e.g. on [Wikipedia](https://en.wikipedia.org/wiki/Dilution_of_precision_(navigation)).
-:::
diff --git a/src/layer/qr-code/index.md b/src/layer/qr-code/index.md
new file mode 100644
index 00000000..3c0128f7
--- /dev/null
+++ b/src/layer/qr-code/index.md
@@ -0,0 +1,27 @@
+---
+description: A field in the form can be set up for QR code scanning. Scan QR codes with your mobile device to fill in the values.
+---
+
+# QR code
+
+You can scan QR codes with your mobile device to fill in a field in the form. The field data type should match the desired input: if you want to scan, say, a link, you need a field with `Text (string)` data type.
+
+| Widget
|Preview in the |
+|:---:|:---:|
+QR code or barcode scanner |  |
+
+:::tip Example project available
+A QR code field is used in this public project: . Download or clone it to see this setup.
+:::
+
+Prefer a video? Here is a short tutorial about scanning QR codes:
+
+
+
+## QR code setup
+
+To set up the field for QR code scanning, the field name or the field alias has to contain the word `qrcode`. The text is not case sensitive, it can be in combination of lower or upper case letters.
+
+In the , there will be a QR code icon next to the field. Tap on it to scan the QR code using your camera and the content (a number, text, link, etc.) will be filled in automatically to your field.
+
+
diff --git a/src/layer/qr-code/mobile-form-qrcode-preview.jpg b/src/layer/qr-code/mobile-form-qrcode-preview.jpg
new file mode 100644
index 00000000..fcaba40c
Binary files /dev/null and b/src/layer/qr-code/mobile-form-qrcode-preview.jpg differ
diff --git a/src/layer/qr-code/mobile-form-qrcode-preview.xcf b/src/layer/qr-code/mobile-form-qrcode-preview.xcf
new file mode 100644
index 00000000..68d78fdb
Binary files /dev/null and b/src/layer/qr-code/mobile-form-qrcode-preview.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-qrcode.jpg b/src/layer/qr-code/mobile-form-qrcode.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-qrcode.jpg
rename to src/layer/qr-code/mobile-form-qrcode.jpg
diff --git a/src/layer/form-widgets/mobile-form-qrcode.xcf b/src/layer/qr-code/mobile-form-qrcode.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-qrcode.xcf
rename to src/layer/qr-code/mobile-form-qrcode.xcf
diff --git a/src/layer/relations/index.md b/src/layer/relations/index.md
new file mode 100644
index 00000000..e466dc44
--- /dev/null
+++ b/src/layer/relations/index.md
@@ -0,0 +1,161 @@
+---
+
+description: Do you need to link multiple records to one feature in Mergin Maps? Set up 1-N relations between your layers in QGIS.
+
+outline: 2,3
+---
+
+# Relations
+
+There are cases when multiple records from one layer (or table) relate to one feature from another layer, forming one to many (1-N) relation. For instance, there may be multiple photos of one feature, multiple inspections of the same feature or multiple parts, or one feature consisting of multiple polygons with different properties. As these use cases vary, there are different options for how to set up forms for relations.
+
+ to learn more about connecting and editing data across layers.
+
+| Widget
|Preview in the |
+|:---:|:---:|
+| View from parent (relation) |  |
+| View from child (relation reference) |  |
+
+:::tip Example projects and guides available
+You can take a closer look at 1-N relations:
+- Public project contains the setup described on this page as well as sample data
+- [How to Link Multiple Records to One Feature](../one-to-n-relations/) explains how to add multiple **records** to a single feature. See also our public project:
+- [How to Attach Multiple Photos to Features ](../photos/#how-to-attach-multiple-photos-to-one-feature) shows how to add multiple **photos** to a single feature. See also our public project:
+:::
+
+There are two ways to add features with relations in the : using the [relation widget](#referenced-parent-layer-attributes-form-relations-widget) on the parent layer or using the [relation reference widget](#referencing-child-layer-attributes-form-relation-reference-widget) on the child layer:
+
+
+
+As an example, we will use a project with two spatial layers: **parks** and **amenities**. One park can have multiple amenities, such as benches, picnic tables, fireplaces or water fountains. Every amenity feature can be located in one park only. Thus, the relation between these layers is one to many (1-*N*): one park to many amenities.
+
+This means that **parks** are the **referenced (parent) layer** and **amenities** are the **referencing (child) layer**. They will be related based on the *primary keys* of parks and corresponding *foreign keys* of the amenities layer, linking amenities to a specific park.
+
+*Primary keys* are unique IDs. While all layers have a default ID field when created (`fid`, `id`), these IDs can be changed during synchronisation in , e.g. when multiple surveyors capture new features at the same time (see [Behind data synchronisation](../../manage/synchronisation/#behind-data-synchronisation) for detailed explanation). As a result, child features could end up being linked to a wrong parent feature.
+
+Therefore, **we strongly recommend creating a new field for primary keys and using UUIDs generated by the `uuid()` function when a feature is created [as described below](#generating-unique-ids-uuid)**. UUID (Universally Unique Identifier) ensures that the primary keys are unique even after synchronisation and that the correct features are linked.
+
+## One to many relation setup overview
+One to many (1-N) relation needs to be set up in your project in QGIS as follows:
+1. [Create unique UUID field](#generating-unique-ids-uuid) for your referenced (parent) layer and a field for storing foreign keys in the referencing (child) layer
+3. Define the relation in [Project Properties](#setting-up-relation-in-qgis)
+4. [Configure Attributes forms](#attributes-forms-configuration-for-1-n-relations) of both layers as needed
+
+## Generating unique IDs (UUID)
+
+:::tip UUID as unique primary keys
+ (Universally Unique Identifier) is generated to be unique and will not be changed when synced. Therefore, **we strongly recommend using UUID to link layers**.
+:::
+
+To create a field for storing unique UUIDs:
+
+1. Add a new field with `Text (string)` data type, here: `uuid`
+ 
+
+2. Use the `uuid()` as the [**default value**](../default-values/) for this field in **Layer Properties**.
+
+ This function assigns a unique identifier to every created feature, even when different surveyors create features simultaneously.
+ 
+
+ **Do not use** the *apply default value on update* option. The generated UUID should not be changed.
+
+::: tip Field for foreign keys
+To create a 1-N relation between two layers, the referencing (child) layer needs to have a field for storing foreign keys.
+
+This field needs to have the same data type as the primary key: `Text (string)`. Here we will use `fk-uuid`.
+:::
+
+
+## Setting up relation in QGIS
+Now let's look at the 1-N relation setup in QGIS:
+1. From the main menu, select **Projects** > **Properties ...**
+ 
+
+2. In the **Relations** tab, click on the **Add Relation** button
+
+
+3. Specify the relation:
+ - **Id** is generated automatically
+ - **Name** is the name of the relation, here `park-amenities-relation`
+ - **Referenced (parent)** is the parks layer, here:`parent-park`
+ - **Field 1** of the **Referenced (parent)** is the field `uuid` that contains the **unique** UUID created as described [here](#generating-unique-ids-uuid)
+ - **Referencing (child)** is the amenities layer, here: `child-amenities`
+ - **Field 1** of the **Referencing (child)** layer is the `fk-uuid`, which acts as a foreign key to link amenities to parks
+
+ 
+
+4. Confirm the setup by clicking **OK**
+
+The one to many relation between **parks** and **amenities** is now set in QGIS. Next we can configure the forms for both layers.
+
+## Attributes forms configuration for 1-N relations
+Attributes form for both linked layers can be set up as needed, depending on the preferred data collection method for the referencing (child) layer:
+- Child features can be added through the form of the [referenced (parent) layer](#referenced-parent-layer-attributes-form-relations-widget), meaning you can use the attributes form of the **parks** layer to add/edit/remove **amenities**.
+- Child features can be added through the form of the [referencing (child) layer](#referencing-child-layer-attributes-form-relation-reference-widget). A new feature can be added to the **amenities** layer and the link to the corresponding **park** feature is set manually in the attributes form.
+
+Both options work both in QGIS and in the .
+
+### Referenced (parent) layer attributes form - relations widget
+Explore the attributes form of the referenced (parent) layer **parks**:
+1. Navigate to the **Attributes** form tab in **Layer Properties**
+2. Notice the `park-amenities-relation` was automatically added to the list of available widgets as **Relations**.
+
+ If you use [Drag and Drop Designer](../form-layout/#qgis-drag-and-drop-designer), you can add or remove the relation widget from the form manually.
+
+ 
+
+In QGIS, the attributes form looks like this:
+
+
+
+Note the editable `park-amenities-relation` with the option to add new (child) features to the **amenities** layer directly from the **parks** form.
+
+Now look at this form in . The referenced (parent) features have the [relation widget](#referenced-parent-layer-attributes-form-relations-widget) in the attributes form. It displays all linked child features in a row.
+
+Here, **parks** feature `Park B` already contains a link to a `bench` from the **amenities** layer. Tapping on the child feature `bench` opens its attributes form with the option to edit the feature.
+
+A new child feature can be added by tapping the **+** button:
+
+
+
+- If the referencing (child) layer is a spatial layer, you will be asked to record geometry. Here **amenities** are captured as points. Note that it is not possible to change the [active layer](../../field/mobile-features/#adding-features).
+- In the form, you can fill in information about the child feature (here we add a `picnic table`). Note that the relation reference (foreign key `fk-uuid`) is filled in automatically based on the parent feature (here `Park B`).
+- Save the changes. The form of the `Park B` feature now displays one more entry in the relation widget (`picnic table`).
+
+
+
+### Referencing (child) layer attributes form - relation reference widget
+The referencing (child) layer **amenities** can also have the relation added to the attributes form.
+
+1. Navigate to the **Attributes** form tab in **Layer Properties**
+2. Select the foreign key field (here: `fk-uuid`) in the list of fields.
+
+ Choose **Relation Reference** as **Widget Type**:
+ - **Display expression** sets the display name of referenced layer (here: `name`)
+ - **Relation** offers all available relations defined in the project (here: `park-amenities-relation`)
+
+ 
+
+In QGIS, the attributes form of the referencing (child) **amenities** layer looks like this. The foreign key field `fk-uuid` offers a drop-down menu with the list of features from the referenced (parent) layer **parks**.
+
+In this case, the link between the amenity feature and the park can be set (or edited) manually.
+
+
+
+It works the same in the . You can add a new feature to the referencing (child) layer:
+- Tap the **Add** button and capture the geometry
+- Fill in the Attributes form. Note that the [relation reference](#referencing-child-layer-attributes-form-relation-reference-widget) (foreign key, here `fk-uuid`) is empty and needs to be entered manually by choosing a feature from the referenced (parent) layer.
+- Save the changes.
+
+
+
+## Gallery?
+Did you follow these steps and do you see something like this? If the referencing (child) layer is set up with the [Attachment widget](../photos) for photos, the form in the will automatically display a gallery.
+
+
+
+::: tip
+To display the [relations widget](#referenced-parent-layer-attributes-form-relations-widget) without the gallery, use `nogallery` in the relation name or label.
+:::
+
+Recommended setup for gallery is explained in [Attaching multiple photos to one feature ](../photos/#how-to-attach-multiple-photos-to-one-feature).
diff --git a/src/layer/relations/mobile-add-child-feature.webp b/src/layer/relations/mobile-add-child-feature.webp
new file mode 100644
index 00000000..60ec37d9
Binary files /dev/null and b/src/layer/relations/mobile-add-child-feature.webp differ
diff --git a/src/layer/relations/mobile-add-child-feature.xcf b/src/layer/relations/mobile-add-child-feature.xcf
new file mode 100644
index 00000000..5598416c
Binary files /dev/null and b/src/layer/relations/mobile-add-child-feature.xcf differ
diff --git a/src/layer/relations/mobile-form-added-child-feature.webp b/src/layer/relations/mobile-form-added-child-feature.webp
new file mode 100644
index 00000000..a9dba445
Binary files /dev/null and b/src/layer/relations/mobile-form-added-child-feature.webp differ
diff --git a/src/layer/relations/mobile-form-added-child-feature.xcf b/src/layer/relations/mobile-form-added-child-feature.xcf
new file mode 100644
index 00000000..678b9123
Binary files /dev/null and b/src/layer/relations/mobile-form-added-child-feature.xcf differ
diff --git a/src/layer/relations/mobile-form-relation-preview.webp b/src/layer/relations/mobile-form-relation-preview.webp
new file mode 100644
index 00000000..74ff4157
Binary files /dev/null and b/src/layer/relations/mobile-form-relation-preview.webp differ
diff --git a/src/layer/relations/mobile-form-relation-preview.xcf b/src/layer/relations/mobile-form-relation-preview.xcf
new file mode 100644
index 00000000..1fcf403f
Binary files /dev/null and b/src/layer/relations/mobile-form-relation-preview.xcf differ
diff --git a/src/layer/relations/mobile-form-relation-reference-preview.webp b/src/layer/relations/mobile-form-relation-reference-preview.webp
new file mode 100644
index 00000000..f8f64b1c
Binary files /dev/null and b/src/layer/relations/mobile-form-relation-reference-preview.webp differ
diff --git a/src/layer/relations/mobile-form-relation-reference-preview.xcf b/src/layer/relations/mobile-form-relation-reference-preview.xcf
new file mode 100644
index 00000000..3dbb5f39
Binary files /dev/null and b/src/layer/relations/mobile-form-relation-reference-preview.xcf differ
diff --git a/src/layer/relations/mobile-form-relation-widget.webp b/src/layer/relations/mobile-form-relation-widget.webp
new file mode 100644
index 00000000..189f9a87
Binary files /dev/null and b/src/layer/relations/mobile-form-relation-widget.webp differ
diff --git a/src/layer/relations/mobile-form-relation-widget.xcf b/src/layer/relations/mobile-form-relation-widget.xcf
new file mode 100644
index 00000000..01567675
Binary files /dev/null and b/src/layer/relations/mobile-form-relation-widget.xcf differ
diff --git a/src/layer/relations/mobile-multiple-photos.jpg b/src/layer/relations/mobile-multiple-photos.jpg
new file mode 100644
index 00000000..ac94cc27
Binary files /dev/null and b/src/layer/relations/mobile-multiple-photos.jpg differ
diff --git a/src/layer/relations/mobile-multiple-photos.xcf b/src/layer/relations/mobile-multiple-photos.xcf
new file mode 100644
index 00000000..6b1e7b2e
Binary files /dev/null and b/src/layer/relations/mobile-multiple-photos.xcf differ
diff --git a/src/layer/relations/mobile-relation-widgets.gif b/src/layer/relations/mobile-relation-widgets.gif
new file mode 100644
index 00000000..0d68a2d7
Binary files /dev/null and b/src/layer/relations/mobile-relation-widgets.gif differ
diff --git a/src/layer/relations/qgis-add-relation.webp b/src/layer/relations/qgis-add-relation.webp
new file mode 100644
index 00000000..94170d87
Binary files /dev/null and b/src/layer/relations/qgis-add-relation.webp differ
diff --git a/src/layer/relations/qgis-add-relation.xcf b/src/layer/relations/qgis-add-relation.xcf
new file mode 100644
index 00000000..004920e1
Binary files /dev/null and b/src/layer/relations/qgis-add-relation.xcf differ
diff --git a/src/layer/relations/qgis-form-child-setup.webp b/src/layer/relations/qgis-form-child-setup.webp
new file mode 100644
index 00000000..c442bd86
Binary files /dev/null and b/src/layer/relations/qgis-form-child-setup.webp differ
diff --git a/src/layer/relations/qgis-form-child-setup.xcf b/src/layer/relations/qgis-form-child-setup.xcf
new file mode 100644
index 00000000..66eb7c86
Binary files /dev/null and b/src/layer/relations/qgis-form-child-setup.xcf differ
diff --git a/src/layer/relations/qgis-form-child.webp b/src/layer/relations/qgis-form-child.webp
new file mode 100644
index 00000000..dc859669
Binary files /dev/null and b/src/layer/relations/qgis-form-child.webp differ
diff --git a/src/layer/relations/qgis-form-child.xcf b/src/layer/relations/qgis-form-child.xcf
new file mode 100644
index 00000000..c70186d2
Binary files /dev/null and b/src/layer/relations/qgis-form-child.xcf differ
diff --git a/src/layer/relations/qgis-form-parent.webp b/src/layer/relations/qgis-form-parent.webp
new file mode 100644
index 00000000..8355cb68
Binary files /dev/null and b/src/layer/relations/qgis-form-parent.webp differ
diff --git a/src/layer/relations/qgis-form-parent.xcf b/src/layer/relations/qgis-form-parent.xcf
new file mode 100644
index 00000000..710c5e4d
Binary files /dev/null and b/src/layer/relations/qgis-form-parent.xcf differ
diff --git a/src/layer/relations/qgis-forms-relations-setup.webp b/src/layer/relations/qgis-forms-relations-setup.webp
new file mode 100644
index 00000000..b447bf43
Binary files /dev/null and b/src/layer/relations/qgis-forms-relations-setup.webp differ
diff --git a/src/layer/relations/qgis-forms-relations-setup.xcf b/src/layer/relations/qgis-forms-relations-setup.xcf
new file mode 100644
index 00000000..60d3f405
Binary files /dev/null and b/src/layer/relations/qgis-forms-relations-setup.xcf differ
diff --git a/src/layer/relations/qgis-project-properties.webp b/src/layer/relations/qgis-project-properties.webp
new file mode 100644
index 00000000..f4ae55ab
Binary files /dev/null and b/src/layer/relations/qgis-project-properties.webp differ
diff --git a/src/layer/relations/qgis-project-properties.xcf b/src/layer/relations/qgis-project-properties.xcf
new file mode 100644
index 00000000..01bcd277
Binary files /dev/null and b/src/layer/relations/qgis-project-properties.xcf differ
diff --git a/src/layer/relations/qgis_relation_tab.webp b/src/layer/relations/qgis_relation_tab.webp
new file mode 100644
index 00000000..e13ee5a0
Binary files /dev/null and b/src/layer/relations/qgis_relation_tab.webp differ
diff --git a/src/layer/relations/qgis_relation_tab.xcf b/src/layer/relations/qgis_relation_tab.xcf
new file mode 100644
index 00000000..fcd563b4
Binary files /dev/null and b/src/layer/relations/qgis_relation_tab.xcf differ
diff --git a/src/layer/relations/uuid-default.webp b/src/layer/relations/uuid-default.webp
new file mode 100644
index 00000000..f838c547
Binary files /dev/null and b/src/layer/relations/uuid-default.webp differ
diff --git a/src/layer/relations/uuid-default.xcf b/src/layer/relations/uuid-default.xcf
new file mode 100644
index 00000000..a2737bc7
Binary files /dev/null and b/src/layer/relations/uuid-default.xcf differ
diff --git a/src/layer/relations/uuid-field.webp b/src/layer/relations/uuid-field.webp
new file mode 100644
index 00000000..ab66e887
Binary files /dev/null and b/src/layer/relations/uuid-field.webp differ
diff --git a/src/layer/relations/uuid-field.xcf b/src/layer/relations/uuid-field.xcf
new file mode 100644
index 00000000..5cead170
Binary files /dev/null and b/src/layer/relations/uuid-field.xcf differ
diff --git a/src/layer/tabs-and-groups/index.md b/src/layer/tabs-and-groups/index.md
new file mode 100644
index 00000000..795fed3d
--- /dev/null
+++ b/src/layer/tabs-and-groups/index.md
@@ -0,0 +1,29 @@
+---
+description: Using QGIS Drag and Drop designer, fields can be arranged into groups and tabs.
+---
+
+# Tabs and groups
+Using [QGIS Drag and Drop designer](../form-layout/#qgis-drag-and-drop-designer), fields can be arranged into groups and tabs.
+
+:::tip Example project available
+To see an example of tabs and groups, you can clone .
+:::
+
+1. Click on the **+** button to add new group or a tab to the form layout
+ 
+2. Choose the container type, add a label, and if needed, the number of columns.
+
+ A group can be placed within a tab or another group.
+ 
+ 
+
+3. Drag and drop fields to tabs or groups as needed.
+
+Here we have two tabs, *Data* and *Changelog*. The *Data* tab contains two groups: *roads* and *paths*.
+
+
+The form with tabs and groups will appear in QGIS like this:
+
+
+And this is how the same form looks like in the :
+
diff --git a/src/layer/form-layout/mobile-forms-layout.jpg b/src/layer/tabs-and-groups/mobile-forms-layout.jpg
similarity index 100%
rename from src/layer/form-layout/mobile-forms-layout.jpg
rename to src/layer/tabs-and-groups/mobile-forms-layout.jpg
diff --git a/src/layer/form-layout/mobile-forms-layout.xcf b/src/layer/tabs-and-groups/mobile-forms-layout.xcf
similarity index 100%
rename from src/layer/form-layout/mobile-forms-layout.xcf
rename to src/layer/tabs-and-groups/mobile-forms-layout.xcf
diff --git a/src/layer/form-layout/qgis-add-group-tab.jpg b/src/layer/tabs-and-groups/qgis-add-group-tab.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-add-group-tab.jpg
rename to src/layer/tabs-and-groups/qgis-add-group-tab.jpg
diff --git a/src/layer/form-layout/qgis-add-group-tab.xcf b/src/layer/tabs-and-groups/qgis-add-group-tab.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-add-group-tab.xcf
rename to src/layer/tabs-and-groups/qgis-add-group-tab.xcf
diff --git a/src/layer/form-layout/qgis-form-add-group.jpg b/src/layer/tabs-and-groups/qgis-form-add-group.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-form-add-group.jpg
rename to src/layer/tabs-and-groups/qgis-form-add-group.jpg
diff --git a/src/layer/form-layout/qgis-form-add-group.xcf b/src/layer/tabs-and-groups/qgis-form-add-group.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-form-add-group.xcf
rename to src/layer/tabs-and-groups/qgis-form-add-group.xcf
diff --git a/src/layer/form-layout/qgis-form-layout-add-groups-tabs.jpg b/src/layer/tabs-and-groups/qgis-form-layout-add-groups-tabs.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-form-layout-add-groups-tabs.jpg
rename to src/layer/tabs-and-groups/qgis-form-layout-add-groups-tabs.jpg
diff --git a/src/layer/form-layout/qgis-form-layout-add-groups-tabs.xcf b/src/layer/tabs-and-groups/qgis-form-layout-add-groups-tabs.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-form-layout-add-groups-tabs.xcf
rename to src/layer/tabs-and-groups/qgis-form-layout-add-groups-tabs.xcf
diff --git a/src/layer/form-layout/qgis-form-tabs-groups.jpg b/src/layer/tabs-and-groups/qgis-form-tabs-groups.jpg
similarity index 100%
rename from src/layer/form-layout/qgis-form-tabs-groups.jpg
rename to src/layer/tabs-and-groups/qgis-form-tabs-groups.jpg
diff --git a/src/layer/form-layout/qgis-form-tabs-groups.xcf b/src/layer/tabs-and-groups/qgis-form-tabs-groups.xcf
similarity index 100%
rename from src/layer/form-layout/qgis-form-tabs-groups.xcf
rename to src/layer/tabs-and-groups/qgis-form-tabs-groups.xcf
diff --git a/src/layer/form-layout/qgis_forms_layout.jpg b/src/layer/tabs-and-groups/qgis_forms_layout.jpg
similarity index 100%
rename from src/layer/form-layout/qgis_forms_layout.jpg
rename to src/layer/tabs-and-groups/qgis_forms_layout.jpg
diff --git a/src/layer/form-layout/qgis_forms_layout.xcf b/src/layer/tabs-and-groups/qgis_forms_layout.xcf
similarity index 100%
rename from src/layer/form-layout/qgis_forms_layout.xcf
rename to src/layer/tabs-and-groups/qgis_forms_layout.xcf
diff --git a/src/layer/text/index.md b/src/layer/text/index.md
new file mode 100644
index 00000000..b649a5ac
--- /dev/null
+++ b/src/layer/text/index.md
@@ -0,0 +1,56 @@
+---
+description: The Text Edit widget can be used for single-line or multiline text inputs.
+---
+
+# Text
+
+Adding or editing text is the most common method for inserting information within the forms. The **Text Edit** widget can be used for single-line or [multiline](#multiline-text) text inputs for fields with `Text (string)` or `varchar` data types.
+
+| Widget
|Preview in the |
+|:---:|:---:|
+|[Text](#text-widget) |  |
+|[Multiline Text](#multiline-text) |  |
+
+:::tip Example project available
+Both single-line and multiline text options are used in this public project: . Download or clone it to see this setup.
+:::
+
+Prefer a video? Here is a short tutorial about text widgets:
+
+
+## Text widget
+The **Text Edit** widget is set by default for fields with text data type. For simple text input, you do not need to change it.
+
+
+
+In the , the basic text field looks like this:
+
+
+
+
+## Multiline text
+
+The **Text Edit** widget offers the option to store multiple lines within a single field.
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the field you want to work with (here: `text-multiline`)
+3. In the **Widget Type** tab:
+ - Ensure that **Text Edit** is selected
+ - Check the **Multiline** option :heavy_check_mark:
+4. **Apply** the changes. Don't forget to save and sync your project!
+
+
+
+In the , the **multiline text edit widget** looks like this:
+
+
+::: tip
+Both QGIS and support the use of HTML text fields. When setting up the [multiline](#multiline-text) text widget, check also the **HTML** option :heavy_check_mark:.
+
+HTML text fields can be used to include clickable links to, e.g., [open a link in a browser](../external-link/) or [open a navigation app](../link-to-navigation/) directly from the form in the .
+:::
+
+## Voice input
+
+In the , the text can be entered manually or using voice-to-text (if your mobile device supports this feature).
+
+
diff --git a/src/layer/text/mobile-form-text-multiline-preview.jpg b/src/layer/text/mobile-form-text-multiline-preview.jpg
new file mode 100644
index 00000000..84272cb9
Binary files /dev/null and b/src/layer/text/mobile-form-text-multiline-preview.jpg differ
diff --git a/src/layer/text/mobile-form-text-multiline-preview.xcf b/src/layer/text/mobile-form-text-multiline-preview.xcf
new file mode 100644
index 00000000..33d3455c
Binary files /dev/null and b/src/layer/text/mobile-form-text-multiline-preview.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-text-multiline.jpg b/src/layer/text/mobile-form-text-multiline.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-text-multiline.jpg
rename to src/layer/text/mobile-form-text-multiline.jpg
diff --git a/src/layer/form-widgets/mobile-form-text-multiline.xcf b/src/layer/text/mobile-form-text-multiline.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-text-multiline.xcf
rename to src/layer/text/mobile-form-text-multiline.xcf
diff --git a/src/layer/text/mobile-form-text-preview.jpg b/src/layer/text/mobile-form-text-preview.jpg
new file mode 100644
index 00000000..47c44680
Binary files /dev/null and b/src/layer/text/mobile-form-text-preview.jpg differ
diff --git a/src/layer/text/mobile-form-text-preview.xcf b/src/layer/text/mobile-form-text-preview.xcf
new file mode 100644
index 00000000..49b9c9ae
Binary files /dev/null and b/src/layer/text/mobile-form-text-preview.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-text-voice-input.jpg b/src/layer/text/mobile-form-text-voice-input.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-text-voice-input.jpg
rename to src/layer/text/mobile-form-text-voice-input.jpg
diff --git a/src/layer/form-widgets/mobile-form-text-voice-input.xcf b/src/layer/text/mobile-form-text-voice-input.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-text-voice-input.xcf
rename to src/layer/text/mobile-form-text-voice-input.xcf
diff --git a/src/layer/text/mobile-form-text.webp b/src/layer/text/mobile-form-text.webp
new file mode 100644
index 00000000..ddc6f589
Binary files /dev/null and b/src/layer/text/mobile-form-text.webp differ
diff --git a/src/layer/text/mobile-form-text.xcf b/src/layer/text/mobile-form-text.xcf
new file mode 100644
index 00000000..d93d7a9c
Binary files /dev/null and b/src/layer/text/mobile-form-text.xcf differ
diff --git a/src/layer/form-widgets/qgis-form-text-multiline.jpg b/src/layer/text/qgis-form-text-multiline.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-text-multiline.jpg
rename to src/layer/text/qgis-form-text-multiline.jpg
diff --git a/src/layer/form-widgets/qgis-form-text-multiline.xcf b/src/layer/text/qgis-form-text-multiline.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-text-multiline.xcf
rename to src/layer/text/qgis-form-text-multiline.xcf
diff --git a/src/layer/form-widgets/qgis-form-text.jpg b/src/layer/text/qgis-form-text.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-text.jpg
rename to src/layer/text/qgis-form-text.jpg
diff --git a/src/layer/form-widgets/qgis-form-text.xcf b/src/layer/text/qgis-form-text.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-text.xcf
rename to src/layer/text/qgis-form-text.xcf
diff --git a/src/layer/use-cases/index.md b/src/layer/use-cases/index.md
new file mode 100644
index 00000000..09f2492c
--- /dev/null
+++ b/src/layer/use-cases/index.md
@@ -0,0 +1,14 @@
+---
+description: Our step-by-step guides provide detailed descriptions accompanied by public Mergin Maps projects you can clone and explore in more detail.
+---
+
+# Use Cases
+
+Here you can find some common use cases that can help you deal with specific scenarios.
+
+Our step-by-step guides provide detailed descriptions accompanied by public projects you can clone and explore in more detail:
+- [How to Open a File](../open-file/) from within the form using the HTML widget or default values
+- [How to Use Hyperlinks](../external-link/) in the form
+- [How to Open a Link to a Navigation App](../link-to-navigation/) from within the form
+- [How to Link Multiple Records to One Feature](../one-to-n-relations/)
+- [How to Embed an Image](../embed-image/) in the form
diff --git a/src/layer/value-select/index.md b/src/layer/value-select/index.md
new file mode 100644
index 00000000..b8ca01c3
--- /dev/null
+++ b/src/layer/value-select/index.md
@@ -0,0 +1,141 @@
+---
+description: To select values from a drop-down menu in the form in Mergin Maps mobile app, you can use the Value Map or Value Relation widgets.
+---
+
+# Selecting Single or Multiple Values
+[[toc]]
+
+Selecting values from a drop-down menu is faster than typing them in manually and it also ensures that there are no typos or spelling variations. Additionally, it is possible to create [drill-down (cascade) forms](#drill-down-forms), where a value selected in one field can affect the options available in another field.
+
+| Widget
|Preview in the |
+|:---:|:---:|
+|[Drop-down menu with predefined values](#value-map) | |
+|[Drop-down menu with values from another table, allowed multiple selection](#value-relation) | |
+
+To select values from a drop-down menu in the form, you can use the Value Map or Value Relation widgets in QGIS. The field data type depends on the values that should be stored in the field, usually `Text (string)` or `Integer`. To [allow multiple selection](#value-relation), the field needs to be of `Text (string)` data type).
+
+The **Value Relation** widget is a bit more complex as it uses another layer (usually a non-spatial table) as a source of values. However, it provides some benefits when compared to the simpler **Value Map** setup, such as:
+- Option to select multiple values from the list
+- The table used for the drop-down menu can be edited in the . For example, if there is a value missing, you can [create it](../../field/mobile-features/#add-or-edit-non-spatial-features) during the field survey and use it immediately. The *Value Map* options can be managed only through QGIS.
+- Searching the values: if you have a large list of values, it will become cumbersome to find the right value. With the *Value Relation* widget, you have the option to search for values in the list in the .
+
+:::tip Example projects available
+The public project contains both *Value Map* and *Value relation* widgets. Download or clone it to see the setup.
+
+*Drill-down forms* are included in public project.
+:::
+
+
+## Value Map
+
+Value map widget is used to select a value from a drop-down menu. Values are defined in the widget in layer properties in QGIS. They cannot be changed or added from the . Only one value can be selected.
+
+If you want to use multiple selections in a field or need to add new values during the survey, check out the [Value Relation](#value-relation) widget.
+
+:::tip Example project available
+This public project contains a Value Map field. Download or clone it to see the setup.
+:::
+
+Prefer a video? Here is a short tutorial about using Value Map widget:
+
+
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the field you want to work with (here: `valuemap`)
+3. In the **Widget Type** tab, select the **Value Map** option from the drop-down menu and fill in the table below.
+ **Value** is what will be stored in the field (these can be coded values or shortened names, here we use `1`, `2`, `3`). **Description** is what will be displayed in the form and in the attributes table (here: `value 1`, `value 2`, `value 3`).
+4. **Apply** the changes. Don't forget to save and sync your project!
+
+
+
+Now you can select the value from a drop-down menu in the :
+
+
+
+## Value Relation
+
+The **Value Relation** widget is similar to the [Value Map](#value-map) widget, but the values for the drop-down menu come from another layer (usually a non-spatial table).
+
+:::tip Example project available
+This public project contains a Value Relation setup. Download or clone it to explore it in more detail.
+:::
+
+Prefer a video? Here is a short tutorial about using Value relations:
+
+
+To have the option to safely add new values when working collaboratively, the value table should have a unique field with UUID values. This field should use the `uuid()` function as a [default value](../default-values/#examples-of-useful-default-values), so that every new entry has its UUID.
+
+To set up **Value Relation** in QGIS:
+
+1. Right-click on a layer, select **Properties** and go to the **Attributes form** tab.
+2. In the list of **Available Widgets** select the field you want to work with (here: `value-relation-multi-select`)
+3. In the **Widget Type** tab, select **Value Relation** from the drop-down menu and set it up as follows:
+ - Select the **Layer** that contains the values (here: `value-relation-table`)
+ - **Key column** is the field that contains the values (here: `uuid`)
+ - **Value column** is the field that contains the alias (description) of the value (here: `value`)
+ - Check the **Allow multiple selections** option :heavy_check_mark: if you want to have the option to select multiple values
+4. **Apply** the changes. Don't forget to save and sync your project!
+
+
+
+:::danger Using UUID as key field
+**Why UUID?** FID can be changed during [synchronisation](../../manage/synchronisation/). If multiple surveyors add new entries to the value table, features can end up with wrong values.
+
+On the other hand, (Universally Unique Identifier) is guaranteed to be unique and will not be changed when synced. Therefore, we recommend using UUID if you want to add new values during the survey.
+:::
+
+When you open the field with **Value Relation** in the , you will be able to select a value or multiple values from the list.
+
+
+
+## Drill-down forms
+Drill-down or cascade forms enable to list values in a field depending on a value selected in another field.
+
+:::tip Example project available
+Clone to explore drill-down forms.
+:::
+
+Prefer a video? Here is a short tutorial about drill-down forms:
+
+
+### How to set up drill-down forms
+Here, we have a layer named `landuse` that has fields such as *Land use*, *Type*, *Plant type*. Values that can be filled in these fields depend on the previous choices: if we select `Farmland` as the *Land use*, the *Type* field drop-down menu offers options such as `Cereals`, `Oil plants` or `Vegetables`. Subsequently, the *Plant type* field has only options that are relevant for the selected type of land use.
+
+
+
+First, let us explore the structure of value tables that are used to set up drill-down forms. In the example project, *Land use* field uses `plant-habitat` value table that has following fields:
+
+
+
+The *Type* field refers to the `plant-type` value table. In this table, there is a field `habitat-code` that refers to a specific `code` value from the `plant-habitat` table.
+For instance, the `FAR` habitat code (standing for *Farmland*) is used as the `habitat-code` for *Cereals, Vegetables, Oil plants* as these are applicable farmland types.
+
+
+
+Similarly, the *Plant type* field uses the `plant-sub-type` value table that contains a `Code` field that refers to specific types from the `plant-type` table.
+For instance, the `CER` type code is applied for *Wheat, Rye, Barley, Maize*, meaning these types of plants belong to the *Cereals* category.
+
+
+
+To set up drill-down forms:
+1. Right-click on a survey layer, select **Properties** and go to the **Attributes form** tab
+2. The `habitat` field aliased as *Land use* is set up using the **Value relation** widget. Values are defined in the `plant-habitat` table:
+ - **Key column** is the field that contains the values (here: `code`)
+ - **Value column** is the field that contains the alias (description) of the value (here: `desc`)
+
+ 
+
+3. The `type` field (aliased as *Type*) uses the **Value relation** widget with values from the `plant-type` table:
+ - **Key column** is the field that contains the values (here: `Code`)
+ - **Value column** is the field that contains the alias (description) of the value (here: `Description`)
+ - **Filter expression**: `"habitat-code"= current_value('habitat')` is used to limit the options in the drop-down menu to values where the `habitat-code` of the value is the same as the current value of the `habitat` field.
+ 
+
+4. Likewise, the `subtype` field (aliased as *Plant type*) uses the **Value relation** widget with values defined in the `plant-sub-type` table:
+ - **Key column** is the field that contains the values (here: `id`)
+ - **Value column** is the field that contains the alias (description) of the value (here: `Species`)
+ - **Filter expression**: `"Code" = current_value('type')`
+ 
+
+And this is how the drill-down form looks in the . After selecting *Land use: Farmland*, the *Type* field only offers values `Cereals`, `Oil plants` or `Vegetables`. After selecting `Cereals`, the *Plant type* offers only relevant options such as `Wheat`, `Rye` or `Barley`.
+
+
diff --git a/src/layer/form-configuration/mobile-drill-down-form.gif b/src/layer/value-select/mobile-drill-down-form.gif
similarity index 100%
rename from src/layer/form-configuration/mobile-drill-down-form.gif
rename to src/layer/value-select/mobile-drill-down-form.gif
diff --git a/src/layer/value-select/mobile-form-value-relation-preview.jpg b/src/layer/value-select/mobile-form-value-relation-preview.jpg
new file mode 100644
index 00000000..f2eebc6b
Binary files /dev/null and b/src/layer/value-select/mobile-form-value-relation-preview.jpg differ
diff --git a/src/layer/value-select/mobile-form-value-relation-preview.xcf b/src/layer/value-select/mobile-form-value-relation-preview.xcf
new file mode 100644
index 00000000..e5894350
Binary files /dev/null and b/src/layer/value-select/mobile-form-value-relation-preview.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-value-relation.jpg b/src/layer/value-select/mobile-form-value-relation.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-value-relation.jpg
rename to src/layer/value-select/mobile-form-value-relation.jpg
diff --git a/src/layer/form-widgets/mobile-form-value-relation.xcf b/src/layer/value-select/mobile-form-value-relation.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-value-relation.xcf
rename to src/layer/value-select/mobile-form-value-relation.xcf
diff --git a/src/layer/value-select/mobile-form-valuemap-preview.jpg b/src/layer/value-select/mobile-form-valuemap-preview.jpg
new file mode 100644
index 00000000..7c746a52
Binary files /dev/null and b/src/layer/value-select/mobile-form-valuemap-preview.jpg differ
diff --git a/src/layer/value-select/mobile-form-valuemap-preview.xcf b/src/layer/value-select/mobile-form-valuemap-preview.xcf
new file mode 100644
index 00000000..e25746df
Binary files /dev/null and b/src/layer/value-select/mobile-form-valuemap-preview.xcf differ
diff --git a/src/layer/form-widgets/mobile-form-valuemap.jpg b/src/layer/value-select/mobile-form-valuemap.jpg
similarity index 100%
rename from src/layer/form-widgets/mobile-form-valuemap.jpg
rename to src/layer/value-select/mobile-form-valuemap.jpg
diff --git a/src/layer/form-widgets/mobile-form-valuemap.xcf b/src/layer/value-select/mobile-form-valuemap.xcf
similarity index 100%
rename from src/layer/form-widgets/mobile-form-valuemap.xcf
rename to src/layer/value-select/mobile-form-valuemap.xcf
diff --git a/src/layer/form-configuration/qgis-drill-down-form.gif b/src/layer/value-select/qgis-drill-down-form.gif
similarity index 100%
rename from src/layer/form-configuration/qgis-drill-down-form.gif
rename to src/layer/value-select/qgis-drill-down-form.gif
diff --git a/src/layer/form-configuration/qgis-form-value-relation-expression-subtype.jpg b/src/layer/value-select/qgis-form-value-relation-expression-subtype.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-value-relation-expression-subtype.jpg
rename to src/layer/value-select/qgis-form-value-relation-expression-subtype.jpg
diff --git a/src/layer/form-configuration/qgis-form-value-relation-expression-subtype.xcf b/src/layer/value-select/qgis-form-value-relation-expression-subtype.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-value-relation-expression-subtype.xcf
rename to src/layer/value-select/qgis-form-value-relation-expression-subtype.xcf
diff --git a/src/layer/form-configuration/qgis-form-value-relation-expression.jpg b/src/layer/value-select/qgis-form-value-relation-expression.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-value-relation-expression.jpg
rename to src/layer/value-select/qgis-form-value-relation-expression.jpg
diff --git a/src/layer/form-configuration/qgis-form-value-relation-expression.xcf b/src/layer/value-select/qgis-form-value-relation-expression.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-value-relation-expression.xcf
rename to src/layer/value-select/qgis-form-value-relation-expression.xcf
diff --git a/src/layer/form-widgets/qgis-form-value-relation-multiselect.jpg b/src/layer/value-select/qgis-form-value-relation-multiselect.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-value-relation-multiselect.jpg
rename to src/layer/value-select/qgis-form-value-relation-multiselect.jpg
diff --git a/src/layer/form-widgets/qgis-form-value-relation-multiselect.xcf b/src/layer/value-select/qgis-form-value-relation-multiselect.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-value-relation-multiselect.xcf
rename to src/layer/value-select/qgis-form-value-relation-multiselect.xcf
diff --git a/src/layer/form-configuration/qgis-form-value-relation.jpg b/src/layer/value-select/qgis-form-value-relation.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-form-value-relation.jpg
rename to src/layer/value-select/qgis-form-value-relation.jpg
diff --git a/src/layer/form-configuration/qgis-form-value-relation.xcf b/src/layer/value-select/qgis-form-value-relation.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-form-value-relation.xcf
rename to src/layer/value-select/qgis-form-value-relation.xcf
diff --git a/src/layer/form-widgets/qgis-form-valuemap.jpg b/src/layer/value-select/qgis-form-valuemap.jpg
similarity index 100%
rename from src/layer/form-widgets/qgis-form-valuemap.jpg
rename to src/layer/value-select/qgis-form-valuemap.jpg
diff --git a/src/layer/form-widgets/qgis-form-valuemap.xcf b/src/layer/value-select/qgis-form-valuemap.xcf
similarity index 100%
rename from src/layer/form-widgets/qgis-form-valuemap.xcf
rename to src/layer/value-select/qgis-form-valuemap.xcf
diff --git a/src/layer/form-configuration/qgis-table-habitat.jpg b/src/layer/value-select/qgis-table-habitat.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-table-habitat.jpg
rename to src/layer/value-select/qgis-table-habitat.jpg
diff --git a/src/layer/form-configuration/qgis-table-habitat.xcf b/src/layer/value-select/qgis-table-habitat.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-table-habitat.xcf
rename to src/layer/value-select/qgis-table-habitat.xcf
diff --git a/src/layer/form-configuration/qgis-table-subtype.jpg b/src/layer/value-select/qgis-table-subtype.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-table-subtype.jpg
rename to src/layer/value-select/qgis-table-subtype.jpg
diff --git a/src/layer/form-configuration/qgis-table-subtype.xcf b/src/layer/value-select/qgis-table-subtype.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-table-subtype.xcf
rename to src/layer/value-select/qgis-table-subtype.xcf
diff --git a/src/layer/form-configuration/qgis-table-type.jpg b/src/layer/value-select/qgis-table-type.jpg
similarity index 100%
rename from src/layer/form-configuration/qgis-table-type.jpg
rename to src/layer/value-select/qgis-table-type.jpg
diff --git a/src/layer/form-configuration/qgis-table-type.xcf b/src/layer/value-select/qgis-table-type.xcf
similarity index 100%
rename from src/layer/form-configuration/qgis-table-type.xcf
rename to src/layer/value-select/qgis-table-type.xcf
diff --git a/src/layer/variables/index.md b/src/layer/variables/index.md
new file mode 100644
index 00000000..1fca3d9d
--- /dev/null
+++ b/src/layer/variables/index.md
@@ -0,0 +1,76 @@
+---
+description: Mergin Maps variables (username, user email or project name) or GPS position variables can be used in QGIS expressions and as default values in forms.
+---
+
+# Variables
+
+There are some useful variables that can be used as [default values](../default-values/).
+
+Here you can find the lists of:
+- [project and user variables](#project-and-user-variables) introduced by that can be used to record information related to workspace, project or users
+- [position variables](#position-variables) that can be used to record GPS information
+
+## Project and user variables
+
+
+The adds several variables that can be used in QGIS expressions:
+
+| Variable name | Sample value | Scope | Description |
+|-----------------------------|-------------------------------|---------|-------------
+| `@mm_full_name` | `martin second name` | global | Full name of the currently logged in user, blank if the full name is not set |
+| `@mm_username` | `martin` | global | Username of the user currently logged in to |
+| `@mm_user_email` | `martin@example.com` | global | Email of the user currently logged in to |
+| `@mm_url` | `https://app.merginmaps.com` | global | URL of the service |
+| `@mm_project_name` | `Tree survey` | project | Name of the active project |
+| `@mm_project_full_name` | `martin/Tree survey` | project | Workspace and project name joined with a forward slash |
+| `@mm_project_version` | `42` | project | Current version of the active project |
+
+A common use case is to use `@mm_username` or `@mm_user_email` as the [default value](../default-values/) for one of the fields in a survey layer to automatically track who has added (and/or modified) a particular record.
+
+::: tip `mergin_` variable names still work!
+QGIS variables listed here previously used the prefix `mergin_`. Now we use the prefix `mm_` standing for .
+
+Both naming options are functional and will continue to work in the future: `@mergin_user_email` and `@mm_user_email` provide the same value when used in QGIS expressions.
+:::
+
+## Position Variables
+
+With , it is possible to access GPS information using extra position variables. Note that location permission has to be allowed and location service enabled.
+
+Extra position variables can be used as [default values in feature forms](../default-values/).
+
+Following variables are supported:
+ - `@position_coordinate` - A point with the coordinates in WGS84.
+ - `@position_latitude` - Latitude
+ - `@position_longitude` - Longitude
+ - `@position_altitude` - Altitude
+ - `@position_direction` - The bearing measured in degrees clockwise from true north to the direction of travel.
+ - `@position_ground_speed` - The ground speed, in meters/sec.
+ - `@position_vertical_speed` - The vertical speed, in meters/sec.
+ - `@position_magnetic_variation` - The angle between the horizontal component of the magnetic field and true north, in degrees. Also known as magnetic declination. A positive value indicates a clockwise direction from true north and a negative value indicates a counter-clockwise direction.
+ - `@position_horizontal_accuracy` - The accuracy of the provided latitude-longitude value, in meters.
+ - `@position_vertical_accuracy` - The accuracy of the provided altitude value, in meters.
+ - `@position_from_gps` - True, if recorded/edited feature's geometry corresponds with current user's position (Position marker has the same location as the crosshairs marker).
+ - `@position_satellites_visible` - Number of visible satellites.
+ - `@position_satellites_used` - Number of satellites used to calculate the position.
+ - `@position_gps_fix` - GPS fix, e.g. "RTK float"
+ - `@position_gps_antenna_height` - Antenna height as defined in [GPS settings](../../field/mobile-app-ui/#gps-settings)
+ - `@position_provider_type` - GPS device type.
+ - for internal GPS, returns "internal"
+ - for external GPS, returns "external"
+ - `@position_provider_name` - GPS device name.
+ - for internal GPS, returns "Internal"
+ - for external GPS, returns the name of the external device
+ - `@position_provider_address` - GPS device address.
+ - for internal GPS, returns ""
+ - for external GPS, returns the MAC address
+ - `@position_hdop` - Horizontal dilution of precision (HDOP)
+ - `@position_vdop` - Vertical dilution of precision (VDOP)
+ - `@position_pdop` - Position (3D) dilution of precision (PDOP)
+
+:::tip
+**Dilution of precision** (DOP) is a useful value that reflects the confidence level of achieved position precision. In addition to the horizontal and vertical accuracy, the appropriate DOP value (horizontal, vertical, or 3D) can be used to assess the overall quality of your survey accuracy.
+
+You can read more about this topic e.g. on [Wikipedia](https://en.wikipedia.org/wiki/Dilution_of_precision_(navigation)).
+:::
+
diff --git a/src/manage/deploy-new-project/index.md b/src/manage/deploy-new-project/index.md
index 22aebb97..d92c9569 100644
--- a/src/manage/deploy-new-project/index.md
+++ b/src/manage/deploy-new-project/index.md
@@ -6,7 +6,7 @@ description: Data schema changes can cause synchronisation issues in Mergin Maps
[[toc]]
::: tip
-It is recommended to design your data schema carefully when creating a new layer. See [the best practice tips](../../layer/best-practice/) to make your work easier in the long run!
+It is recommended to design your data schema carefully when creating a new layer. See [these tips](../../gis/features/#survey-layers) to make your work easier in the long run!
:::
Sometimes you may need to make changes in your project. Changing **forms** by adding/removing existing fields or changing their aliases should not cause any issues and you can just synchronise your project as usual.
diff --git a/src/manage/project/index.md b/src/manage/project/index.md
index 517652c7..7e8bea58 100644
--- a/src/manage/project/index.md
+++ b/src/manage/project/index.md
@@ -25,7 +25,7 @@ Typically, especially if your project is rather complex, you would:
4. [Share the project](../project-advanced/) with your team members. Now you can collaborate safely and effectively.
:::tip
-[QGIS Project Preparation](../../gis/features/) will guide you the project preparation steps. We also recommend following our [Best Practice Tips for Layers and Forms](../../layer/best-practice/).
+[QGIS Project Preparation](../../gis/features/) will guide you the project preparation steps.
If you need to make changes in the data schema of survey layers, please follow [How to Deploy Revised Projects](../deploy-new-project/) to avoid synchronisation issues.
:::
diff --git a/src/manage/synchronisation/index.md b/src/manage/synchronisation/index.md
index 5755a952..751ffb27 100644
--- a/src/manage/synchronisation/index.md
+++ b/src/manage/synchronisation/index.md
@@ -89,7 +89,7 @@ There may be conflicts that can't be resolved automatically, e.g. if the same va
Conflicts can happen when two users edit some files in a shared project at once. The technology behind service makes an effort to merge changes from individual users automatically and therefore conflicts do not happen normally, even if multiple people edit a single data source (e.g. a GeoPackage). However, there are still some occasions when it is not possible to automatically resolve conflicts and will create conflict files in projects.
::: tip
-Make your work easier and avoid unnecessary conflict files by following [these tips](../../layer/best-practice/).
+Make your work easier and avoid unnecessary conflict files by following [these tips](../../gis/features/#survey-layers).
:::
There are two types of conflicts:
diff --git a/src/migrate/arcgis/index.md b/src/migrate/arcgis/index.md
index 7f437fc7..5610f884 100644
--- a/src/migrate/arcgis/index.md
+++ b/src/migrate/arcgis/index.md
@@ -78,7 +78,7 @@ We recommend using QGIS, GDAL algorithms or [SLYR](#slyr) to facilitate the conv
### Data Formats
-**Always use GeoPackage for survey layers** in . If you use other formats it is not possible to detect changes from other users and they may be overwritten. This is one of the [best practice](../../layer/best-practice). The downside is the GeoPackage will have limited support in Esri software, e.g. some GeoPackages just cannot be opened within ArcGIS Pro. Specifically we do not recommended to keep using [Shapefile](http://switchfromshapefile.org) format.
+**Always use GeoPackage for [survey layers](../../gis/features/#survey-layers)** in . If you use other formats it is not possible to detect changes from other users and they may be overwritten . The downside is the GeoPackage will have limited support in Esri software, e.g. some GeoPackages just cannot be opened within ArcGIS Pro. Specifically we do not recommended to keep using [Shapefile](http://switchfromshapefile.org) format.
For rest of the layers, both ArcGIS and QGIS can also handle Shapefile, GeoTIFF, GeoJSON, WMS, WFS, and PostGIS layers. See all [supported formats](../../gis/supported_formats/).
diff --git a/src/tutorials/creating-a-project-in-qgis/index.md b/src/tutorials/creating-a-project-in-qgis/index.md
index 5256acf6..affc2c65 100755
--- a/src/tutorials/creating-a-project-in-qgis/index.md
+++ b/src/tutorials/creating-a-project-in-qgis/index.md
@@ -130,7 +130,7 @@ The `hedges` layer has an attribute called `photo`. The attribute itself is stor
5. Click **OK** to close the **Layer properties**.
:::tip
-There is much more that can be done with the Attributes Form in QGIS when preparing a project! You can learn more about forms in [Setting Up Form Widgets](../../layer/form-widgets/), [Advanced Form Configuration](../../layer/form-configuration/) or other pages in the *Configure Survey Layer* part of this documentation.
+There is much more that can be done with the Attributes Form in QGIS when preparing a project! You can learn more in the [Configure Forms](../../layer/overview/) section of this documentation.
:::