diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 72d4fc4..39deec6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,7 +2,7 @@
Most of this repository is structured for **Sphinx**, a documentation engine in Python.
-## Build the documentation
+## Build the documentation locally
The easiest way to build the documentation in this repository is to use `nox`, a tool for quickly building environments and running commands within them.
This ensures that your environment has all the dependencies needed to build the documentation.
@@ -27,3 +27,55 @@ To build live documentation that updates when you update local files, run the fo
```
nox -s docs_live
```
+
+## Pre-populate the FreshDesk Help widget
+
+We use a [FreshDesk Help Widget](https://support.freshdesk.com/support/solutions/articles/239273-set-up-your-help-widget) to let users quickly submit support tickets from our documentation.
+This is the little widget in the bottom-right that you can click on.
+
+Configuration for the JavaScript that loads this widget is in our `conf.py` file.
+See the `widget_embed_code` section.
+
+### Create a button to make the widget pop up
+
+Trigger the Help widget by calling the `openWidget()` function in JavaScript.
+You can attach it to a button by embedding some raw HTML in MyST Markdown like so:
+
+```html
+
+```
+
+
+
+### Pre-fill parts of the support widget
+
+You can configure the button to pre-populate fields for the user so that they can ask make their request more quickly.
+To do so, use `key:"value"` pairs in the call to `openWidget()`.
+
+See the `widget_embed_code` section of `conf.py` for the list of possible field names.
+
+The example below populates a few extra fields:
+
+```html
+
+````
+
+
+
+:::{admonition} Things to pay attention to:
+
+- **Note curly brackets!** You need to give the `key:val` pairs inside curly brackets!
+- **Type must exactly match a dropdown option**. If you get the case, spacing, etc wrong, then no option will be selected.
+:::
+
+## Review and merging guidelines
+
+See the [2i2c team guidelines for reviewing and merging](https://infrastructure.2i2c.org/contributing/code-review/#review-and-merge-guidelines-for-2i2c-engineers). Use your best judgment!
diff --git a/_static/custom.css b/_static/custom.css
index 07b493f..f3b12bf 100644
--- a/_static/custom.css
+++ b/_static/custom.css
@@ -1,4 +1,19 @@
/* Tables */
table.align-middle td {
vertical-align: middle !important;
+}
+
+/* Default button style so we don't have to add classes each time */
+button {
+ border-radius: .5em;
+ padding: 1em;
+ background: var(--pst-color-primary);
+ color: white;
+ font-weight: bold;
+ border: none;
+}
+
+/* This just makes the widget background a little bit nicer on dark mode */
+#launcher-frame {
+ border-radius: .5em;
}
\ No newline at end of file
diff --git a/admin/howto/environment/index.md b/admin/howto/environment/index.md
index 23e5ced..7d80966 100644
--- a/admin/howto/environment/index.md
+++ b/admin/howto/environment/index.md
@@ -110,6 +110,19 @@ research organizations use this.
If you are using the default environment, and think that one or two packages should be installed by default on it, please [send a support request](../../../support.md) and request an update to the default environment.
+(image-building-setup)=
+## Allow users to build their own environment image
+
+Hubs can be configured to allow users to [dynamically build environment images from the JupyterHub](#user:environment-building). This provides a lightweight UI allowing users to point the hub to a GitHub repository containing the definition of the environment they wish to build.
+
+
+
+:::{admonition} Ask a 2i2c staff member to enable dynamic image building
+This feature requires a bit of set-up to enable for a community's hub, so it isn't enabled by default. If you'd like this functionality on your hub, reach out to a 2i2c team member.
+:::
+
## Accessing user interfaces
There are three main interfaces available on the 2i2c JupyterHubs.
diff --git a/admin/howto/environment/update-community-image.md b/admin/howto/environment/update-community-image.md
index 895c3d8..d308c54 100644
--- a/admin/howto/environment/update-community-image.md
+++ b/admin/howto/environment/update-community-image.md
@@ -175,9 +175,9 @@ Once complete, under the section *Repository secrets* you should now see two row
//:
```
- e.g. `quay.io/jnywong/jupyter-scipy-xarray:739fec9705b1`, which you need to provide in the [](/user/howto/specify-unlisted-image.md#the-bring-your-own-image-option).
+ e.g. `quay.io/jnywong/jupyter-scipy-xarray:739fec9705b1`, which you need to provide in the [](#environment:bring-your-own-image).
-1. Navigate to your 2i2c hub and paste the image tag into the *Image > Custom Image > Other...* field (see [](/user/howto/specify-unlisted-image.md#the-bring-your-own-image-option)).
+1. Navigate to your 2i2c hub and paste the image tag into the *Image > Custom Image > Other...* field (see [](#environment:bring-your-own-image)).
1. Click start to launch the server and test your custom environment. You can continue editing the *DockerFile* and *environment.yml*, then push changes to the pull request as required.
diff --git a/conf.py b/conf.py
index d30bbf8..fe671af 100644
--- a/conf.py
+++ b/conf.py
@@ -81,7 +81,28 @@
# Embed a contact form Freshdesk widget to collect support tickets with
widget_embed_code = """
// This is the function to open the widget code
-function openWidget() {
+function openWidget({
+ name = '',
+ email = '',
+ subject = '',
+ description = '',
+ hub_url = '',
+ type = ''
+} = {}) {
+ // Build prefill data with provided values
+ const prefillData = {
+ name: name,
+ email: email,
+ subject: subject,
+ description: description,
+ type: type,
+ cf_hub_url: hub_url,
+ };
+ console.log(prefillData)
+ // Only prefill if any values were provided
+ if (name || email || subject || description || hub_url || type) {
+ FreshworksWidget('prefill', 'ticketForm', prefillData);
+ }
FreshworksWidget('open');
}
diff --git a/contribute/index.md b/contribute/index.md
new file mode 100644
index 0000000..7a5a514
--- /dev/null
+++ b/contribute/index.md
@@ -0,0 +1,5 @@
+# Contributing guide
+
+```{include} ../CONTRIBUTING.md
+:start-line: 2
+```
\ No newline at end of file
diff --git a/index.md b/index.md
index d593881..595e6ac 100644
--- a/index.md
+++ b/index.md
@@ -37,9 +37,8 @@ Covers end-user workflows that are common for cloud-native workflows with intera
user/topics/getting-started
user/topics/data/index
+user/environment/index
community/content
-user/howto/specify-unlisted-image
-user/topics/dynamic-imagebuilding/index
user/howto/launch-dask-gateway-cluster
```
@@ -99,4 +98,5 @@ Lists and programmatically-generated content to serve as a quick reference.
:maxdepth: 2
about/terminology
+contribute/index
```
diff --git a/support.md b/support.md
index a670001..b449735 100644
--- a/support.md
+++ b/support.md
@@ -9,7 +9,7 @@ When you make a support request, please include as much information as possible
% Copy the style classes of sphinx-design buttons
% The JavaScript that this calls is defined in conf.py
-