diff --git a/README.md b/README.md
index fd0987713..9dd026fcc 100644
--- a/README.md
+++ b/README.md
@@ -16,13 +16,13 @@ There are two options for building and viewing ODK docs locally: [using Docker](
## Using Docker
-[Docker](https://www.docker.com/) is a platform that makes it easier to package applications so that they can work on any computer. This is particularly valuable when setting up development environments which can work very differently based on versions of the tools involved.
+[Docker](https://www.docker.com/) is a platform that makes it easier to package applications so that they can work on any computer. This is particularly valuable when setting up development environments which can work very differently based on versions of the tools involved.
### Prerequisites
* Install Docker
* Windows and Mac users should follow the instructions in [the get started guide](https://www.docker.com/get-started)
* Linux users should follow the instructions for their specific distribution: [CentOS](https://docs.docker.com/install/linux/docker-ce/centos/), [Debian](https://docs.docker.com/install/linux/docker-ce/debian/), [Fedora](https://docs.docker.com/install/linux/docker-ce/fedora/), [Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/), [Binaries](https://docs.docker.com/install/linux/docker-ce/binaries/)
-
+
More info at the [Docker CE docs page](https://docs.docker.com/install/)
* Install [git](https://git-scm.com/downloads)
* Install [Git-LFS](https://git-lfs.github.com/)
@@ -37,26 +37,14 @@ git clone https://github.com/getodk/docs.git
It can take a long time (>10 minutes) to clone the repo due to the large number of images in the docs. If you get an error such as `Smudge error` or `GitHub's rate limit reached`, run `git checkout -f HEAD` until you get the message `Checking out files: 100% done`.
-### Building the Docker image
-
-Next, you need to build the Docker image with all the tools you will be using to work with ODK's docs.
+### Building and serving the docs locally
-```
-docker build -t odk-docs .
-```
-
-It can take a long time to build the Docker image, but you only need to do this once.
-
-**Windows users**
- * All commands should be run in an elevated PowerShell window. Right click on PowerShell and select the "Run as administrator" option.
- * Ensure Docker is running by checking your system tray. If Docker is not running, launch "Docker for Windows" app and wait until a notification confirms that Docker is running.
+Build and serve the docs locally with:
+ * Windows: `.\run.bat`
+ * Linux/macOS: `./run.sh`
-### Building and serving the docs locally
+This will build the Docker image with all the tools you will be using to work with ODK's docs which might take some time the first time you run the command.
-Build and serve the docs locally with:
- * Windows: `.\run-task.bat odk1-autobuild`
- * Linux/macOS: `./run-task.sh odk1-autobuild`
-
Once your terminal shows a "Serving on http://0.0.0.0:8080" message, you can then view the docs in your browser at http://localhost:8080.
Changes you make in the source files will automatically be built and shown in your browser.
@@ -69,9 +57,18 @@ If you get a `The name "odk-docs" is already in use by container` error message,
docker kill odk-docs
```
+**Windows users**
+ * All commands should be run in an elevated PowerShell window. Right click on PowerShell and select the "Run as administrator" option.
+ * Ensure Docker is running by checking your system tray. If Docker is not running, launch "Docker for Windows" app and wait until a notification confirms that Docker is running.
+
### Other build tasks
-You can also use the `run-task` script described above to run just a portion of the build process. See available [build tasks](#tasks) below.
+You can also use the `run-task` script to run just a portion of the build process:
+
+* Windows: `.\run-task.bat `
+* Linux/macOS: `./run-task.sh `
+
+See available [build tasks](#tasks) below.
## Python environment
@@ -80,7 +77,7 @@ You can also use the `run-task` script described above to run just a portion of
* Install [Python 3](https://www.python.org/downloads/)
* Install [git](https://git-scm.com/downloads)
* Install [Git-LFS](https://git-lfs.github.com/)
-
+
We highly recommend you use a virtual environment like [virtualenv](https://virtualenv.pypa.io/en/stable/) or a Python version management like [pyenv](https://github.com/pyenv/pyenv). (Type `python --version` to see your current version.)
- Instructions for setting up virtual environment:
@@ -94,7 +91,7 @@ We highly recommend you use a virtual environment like [virtualenv](https://virt
#. Create the virtual environment.
.. tabs::
-
+
.. group-tab:: Bash
.. code:: console
@@ -112,7 +109,7 @@ We highly recommend you use a virtual environment like [virtualenv](https://virt
.. tabs::
.. group-tab:: Bash
-
+
.. code:: console
/odk/ $ source odkenv/bin/activate
@@ -127,7 +124,7 @@ We highly recommend you use a virtual environment like [virtualenv](https://virt
The ``(odkenv)`` before the prompt shows that the virtual environment is active.
You will need to have this active any time you are working on the docs.
-
+
If the file cannot be found, your activate file may be located under odkenv/scripts/activate.
Later, to deactivate the virtual environment:
@@ -135,7 +132,7 @@ We highly recommend you use a virtual environment like [virtualenv](https://virt
.. tabs::
.. group-tab:: Bash
-
+
.. code:: console
(odkenv) /odk/ $ deactivate
@@ -147,7 +144,7 @@ We highly recommend you use a virtual environment like [virtualenv](https://virt
(odkenv) /odk/ > deactivate
/odk/ >
-
+
### Cloning the repo
@@ -161,7 +158,7 @@ $ pip install -r requirements.txt
It can take a long time (>10 minutes) to clone the repo due to the large number of images in the docs. If you get an error such as `Smudge error` or `GitHub's rate limit reached`, run `git checkout -f HEAD` until you get the message `Checking out files: 100% done`.
-### Building the docs
+### Building the docs
### Building the docs
Once your environment is set up, build and serve the docs locally with:
@@ -193,7 +190,7 @@ We are open for new issues and pull requests.
- First time contributors are encouraged to complete a [line edit](https://github.com/getodk/docs/issues/96) as a way to get familiar with our contribution process.
- Issues labelled [easy](https://github.com/getodk/docs/labels/easy) do not require much specific technical knowledge.
- Issues labelled [contributor friendly](https://github.com/getodk/docs/labels/contributor%20friendly) are usually self-contained and don't require extensive knowledge of the ODK ecosystem as a whole.
-
+
You can also...
- [Discuss the documentation from a user perspective in our forum](https://forum.getodk.org/c/development/documentation).
@@ -206,4 +203,3 @@ You can also...
- Make sure your virtual environment is activated.
- Type `python --version` to check your current python version (it should be 3.x).
- Run `pip install -r requirements.txt`.
-
\ No newline at end of file
diff --git a/odk1-src/collect-connect-aggregate.rst b/odk1-src/collect-connect-aggregate.rst
deleted file mode 100644
index 45f294d2f..000000000
--- a/odk1-src/collect-connect-aggregate.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-Connecting to your own ODK Aggregate Server
-=================================================
-
-.. admonition:: Before you get started...
-
- You need to :doc:`install ODK Aggregate ` before you can connect to it.
-
- When connecting to an ODK Aggregate server from Collect, you will need a username and password from your Aggregate server. This can be the superuser created when you install Aggregate, or another user account created by you.
-
- - See :doc:`aggregate-install` to setup your ODK Aggregate server.
- - See :doc:`Aggregate Site Admin ` for details on setting up new users.
-
-
-1. From the Action Button (:guilabel:`⋮`), select :menuselection:`General Settings`
-
-
- .. image:: /img/collect-connect/main-menu-highlight-kebab.*
- :alt: The Main Menu screen of the Collect app. The three-dot 'kebab' menu in the upper-right corner is circled in red.
-
- .. image:: /img/collect-connect/kebab-menu-general-settings.*
- :alt: The Main Menu screen of the Collect App. A modal menu has unrolled in the top-right corner, with the option *About*, *General Settings*, and *Admin Settings*. *General Settings* is circled in red.
-
-2. Select :guilabel:`Server`
-
- .. image:: /img/collect-connect/general-settings-server.*
- :alt: The General Settings menu in the Collect app. The options are *Server*, *User Interface*, *Form management*, and *User and device identity*. *Server* is circled in red.
-
-3. Select :guilabel:`Type`, and set it to :menuselection:`ODK Aggregate`
-
- .. image:: /img/collect-connect/server-settings-type-aggregate.*
- :alt: The Server Settings screen in the Collect app. The first item in the menu is labeled *Type*, and this item is circled in red.
-
- .. image:: /img/collect-connect/server-settings-type-modal.*
- :alt: The Server Settings screen in the Collect App, as displayed in the previous image. There is now a modal menu labeled *Platform*, with single-select radio buttons for: *ODK Aggregate*, *Google Drive, Google Sheets*, and *Other*. *ODK Aggregate* is selected and circled in red.
-
-
-4. Edit :guilabel:`ODK Aggregate settings`
-
- .. image:: /img/collect-connect/server-settings-aggregate-settings.*
- :alt: The Server Settings screen in the Collect app. Below the *Type* option is a section titled *ODK Aggregate Settings*, with the items labeled *URL*, *Username*, and *Password*. These three items are numbered in red.
-
- .. image:: /img/collect-connect/server-settings-server-url.*
- :alt: The Server Settings screen in the Collect app, with a modal overlay titled *Server URL*. There is a single text-entry field with a URL, and buttons labeled OK and CANCEL.
-
- .. image:: /img/collect-connect/server-settings-odk-username.*
- :alt: The Server Settings screen in the Collect app, with a modal overlay titled *ODK Username.* There is a single text-entry field, and buttons labeled OK and CANCEL.
-
- .. image:: /img/collect-connect/server-settings-odk-password.*
- :alt: The Server Settings screen in the Collect app, with a modal overlay titled *ODK Password*. There is a single obscured-text field, and buttons for OK and CANCEL.
-
-------
-
-.. admonition:: Connecting to another OpenRosa server app
-
- Any server application that implements the `OpenRosa API `_ can be connected to, using :doc:`the instructions laid out above `. You would still choose :menuselection:`ODK Aggregate` as the server type.
-
- In :menuselection:`Server Settings`, there is currently a :guilabel:`Type` option of :menuselection:`Other`. It is unlikely you will need this option, since any server application will need to implement the same API as ODK Aggregate.
-
- If you think you might need to connect to a non-Aggregate server application, and are having trouble, we encourage you to visit our `Support Forum `_.
-
- The :menuselection:`Other` option will likely be deprecated in the future, and its use is not recommended.
diff --git a/odk1-src/collect-connect.rst b/odk1-src/collect-connect.rst
index 92231a7f9..da65f0884 100644
--- a/odk1-src/collect-connect.rst
+++ b/odk1-src/collect-connect.rst
@@ -5,7 +5,7 @@ ODK Collect is used to fill forms with participants. Filled forms then need to b
When you first install Collect, it connects to `a demo server `_. This allows you to try out the app by :ref:`downloading blank example forms `, :doc:`filling them out `, and :ref:`uploading completed forms ` back to the demo server.
-Once you are done trying out Collect, you will need a plan for managing forms and data submissions. We recommend using `ODK Central ` and configuring Collect by QR code. :doc:`ODK Central ` provides user and project management features as well as tools for viewing and exporting data. For complex data collection projects, it is usually the right choice. Organizations can choose to use their own infrastructure and have total control over their server configuration. However, setting up and maintaining a server requires technical skills.
+Once you are done trying out Collect, you will need a plan for managing forms and data submissions. We recommend using :ref:`ODK Central ` and configuring Collect by QR code. :doc:`ODK Central ` provides user and project management features as well as tools for viewing and exporting data. For complex data collection projects, it is usually the right choice. Organizations can choose to use their own infrastructure and have total control over their server configuration. However, setting up and maintaining a server requires technical skills.
Simple projects can choose to send data directly to Google Sheets.
@@ -14,15 +14,15 @@ Simple projects can choose to send data directly to Google Sheets.
Configure server from QR code
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-1. From the Action Button (:guilabel:`⋮`), select :menuselection:`Configure via QR code`
+#. From the Action Button (:guilabel:`⋮`), select :menuselection:`Configure via QR code`
-.. image:: /img/collect-configure/quick-qr-code.*
- :alt: Configure via QR code
- :class: device-screen-vertical
+ .. image:: /img/collect-configure/quick-qr-code.*
+ :alt: Configure via QR code
+ :class: device-screen-vertical
-1. Position the QR code in the center of the camera field, under the red line. When the camera focuses on the code, it will beep and scan the code.
+#. Position the QR code in the center of the camera field, under the red line. When the camera focuses on the code, it will beep and scan the code.
-1. Collect will apply the settings from the code and go back to the landing screen.
+#. Collect will apply the settings from the code and go back to the landing screen.
.. seealso::
@@ -33,6 +33,28 @@ Configure server from QR code
.. _other-collect-server-options:
+Configure server from settings
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#. From the Action Button (:guilabel:`⋮`), select :menuselection:`General Settings`
+
+
+ .. image:: /img/collect-connect/main-menu-highlight-kebab.*
+ :alt: The Main Menu screen of the Collect app. The three-dot 'kebab' menu in the upper-right corner is circled in red.
+
+ .. image:: /img/collect-connect/kebab-menu-general-settings.*
+ :alt: The Main Menu screen of the Collect App. A modal menu has unrolled in the top-right corner, with the option *About*, *General Settings*, and *Admin Settings*. *General Settings* is circled in red.
+
+#. Select :guilabel:`Server`
+
+ .. image:: /img/collect-connect/general-settings-server.*
+ :alt: The General Settings menu in the Collect app. The options are *Server*, *User Interface*, *Form management*, and *User and device identity*. *Server* is circled in red.
+
+#. Make sure :guilabel:`ODK` is selected under :guilabel:`Type` and then fill in the :guilabel:`URL`, :guilabel:`Username` and :guilabel:`Password` for your server:
+
+ .. image:: /img/collect-connect/server-settings-odk.*
+ :alt: The Server Settings screen in the Collect app. Below the *Type* option there are three items labeled *URL*, *Username*, and *Password*.
+
Other options
~~~~~~~~~~~~~~~
@@ -40,6 +62,5 @@ Other options
:maxdepth: 1
collect-connect-google
- collect-connect-aggregate
Transfering blank and completed forms directly with adb
Using ODK Briefcase
\ No newline at end of file
diff --git a/odk1-src/collect-forms.rst b/odk1-src/collect-forms.rst
index 34f1c5e00..d6fc5cd73 100644
--- a/odk1-src/collect-forms.rst
+++ b/odk1-src/collect-forms.rst
@@ -203,7 +203,14 @@ Pulling Forms into Briefcase
Deleting Forms
===============
-You can delete :formstate:`Blank` forms as well as filled forms in any state (:formstate:`Saved`, :formstate:`Finalized`, or :formstate:`Sent`). Deleting :formstate:`Blank` forms or filled forms in :formstate:`Saved` or :formstate:`Finalized` state removes every trace of that form definition or filled form. Deleting a :formstate:`Sent` form deletes the form contents but metadata associated with it including the deletion date and the instance name are maintained for display in the :guilabel:`View Sent Form` list.
+.. warning::
+ In versions prior to v1.28, deleting a blank form makes it impossible to edit filled instances of that form.
+
+ In Collect v1.28 and later, filled instances of forms will still be editable after their blank form is deleted. This means that the form definition and media files will remain on the device until all the filled instances have been deleted.
+
+
+
+You can delete :formstate:`Blank` forms as well as filled forms in any state (:formstate:`Saved`, :formstate:`Finalized`, or :formstate:`Sent`). Deleting a :formstate:`Sent` form deletes the form contents but metadata associated with it including the deletion date and the instance name are maintained for display in the :guilabel:`View Sent Form` list.
1. Select :guilabel:`Delete Saved Form` on the app home screen.
diff --git a/odk1-src/collect-import-export.rst b/odk1-src/collect-import-export.rst
index f9f496ed0..9e62a1c87 100644
--- a/odk1-src/collect-import-export.rst
+++ b/odk1-src/collect-import-export.rst
@@ -18,7 +18,7 @@ QR codes can be used to configure Collect on a fleet of devices. The QR code dis
.. note::
QR codes generated by Collect only contain settings with non-default values. When a code is scanned in, settings not explicitly included in the code are reset to their default values.
-.. warning::
+.. warning::
Settings QR codes contain the admin and server passwords *in plain text*. To remove them from the code, :gesture:`tap` the warning on the QR code screen.
Scanning a QR code
@@ -29,7 +29,7 @@ Scanning a QR code
Sharing a QR code
------------------
-You can tap on the :fa:`share-alt` icon to share the QR code as an image. When you click on it, it displays a list of applications and services like *whatsapp*, *facebook*, *hangouts*, *bluetooth*, *MMS* which can be used to share the QR code. This is useful when there are several different data collection sites and all devices have to be configured in the same way, in which case the QR code can be shared from one reference device.
+You can tap on the :fa:`share-alt` icon to share the QR code as an image. When you click on it, it displays a list of applications and services like *whatsapp*, *facebook*, *hangouts*, *bluetooth*, *MMS* which can be used to share the QR code. This is useful when there are several different data collection sites and all devices have to be configured in the same way, in which case the QR code can be shared from one reference device.
.. warning::
Since the QR code encodes compressed plain text settings and may contain the admin and server passwords, you should be careful about how you share it. For example, if you print out the QR code and tape it on wall, someone could use a standard QR code scanner to get the admin password.
@@ -58,7 +58,7 @@ The contents of a settings QR code is a JSON object with two objects for general
The JSON object is compressed using `zlib `_ before building the QR code. To build your own code:
-1) Write a JSON object containing the changed settings with a structure as shown above.
+1) Write a JSON object containing the changed settings with a structure as shown above.
2) Compress it using zlib.
3) Build a QR code from the resulting data.
@@ -72,10 +72,10 @@ Here are the keys for all settings and the set of values they can take:
.. code-block:: javascript
{
- "admin" : {
+ "admin" : {
"admin_pw": String,
-
- // User access control to the main menu. The default value is true.
+
+ // User access control to the main menu. The default value is true.
"edit_saved": Boolean,
"send_finalized": Boolean,
"view_sent": Boolean,
@@ -117,7 +117,7 @@ Here are the keys for all settings and the set of values they can take:
"general" : {
// Server
- "protocol": {"odk_default", "google_sheets", "other_protocol"},
+ "protocol": {"odk_default", "google_sheets"},
"server_url": String,
"username": String,
"password": String,
@@ -133,7 +133,7 @@ Here are the keys for all settings and the set of values they can take:
"navigation": {"swipe" ,"buttons" ,"swipe_buttons"},
"showSplash": Boolean,
"splashPath": String, // Absolute path to splash image
-
+
// Maps
"basemap_source": {"google", "mapbox", "osm", "usgs", "stamen", "carto"},
"google_map_style": {1, 2, 3, 4},
@@ -141,9 +141,10 @@ Here are the keys for all settings and the set of values they can take:
"usgs_map_style": {"topographic", "hybrid", "satellite"},
"carto_map_style": {"positron", "dark_matter"},
"reference_layer": String, // Absolute path to mbtiles file
-
+
// Form management
- "periodic_form_updates_check": {"never", "every_fifteen_minutes", "every_one_hour", "every_six_hours", "every_24_hours"},
+ "form_update_mode": {"manual", "previously_downloaded", "match_exactly"},
+ "periodic_form_updates_check": {"every_fifteen_minutes", "every_one_hour", "every_six_hours", "every_24_hours"},
"automatic_update": Boolean,
"hide_old_form_versions": Boolean,
"autosend": {"off", "wifi_only", "cellular_only", "wifi_and_cellular"},
@@ -154,6 +155,8 @@ Here are the keys for all settings and the set of values they can take:
"image_size": {"original", "small", "very_small", "medium", "large"},
"guidance_hint": {"no", "yes", "yes_collapsed"},
"instance_sync": Boolean,
+
+ // User and device identity
"analytics": Boolean,
"metadata_username": String,
"metadata_phonenumber": String,
diff --git a/odk1-src/collect-settings.rst b/odk1-src/collect-settings.rst
index 5a23c1ff1..761a0fb75 100644
--- a/odk1-src/collect-settings.rst
+++ b/odk1-src/collect-settings.rst
@@ -183,13 +183,33 @@ To access Form Management settings:
.. rubric:: Form update
-:guilabel:`Periodic form updates check`
+:guilabel:`Blank form update mode`
+"""""""""""""""""""""""""""""""""""
+
+Specifies how blank forms should be updated:
+
+ :guilabel:`Manually`
+ The default mode in Collect. Enumerators manually manage blank forms on the device using :guilabel:`Get Blank Form` and :guilabel:`Delete Saved Form`.
+ :guilabel:`Previously downloaded forms only`
+ Enumerators will receive a notification when one or more forms on the device have an update available to their form definition or media files. Tapping on the notification will go to :guilabel:`Get Blank Form` where the user can choose to download some or all of the updated forms.
+ :guilabel:`Exactly match server`
+ Collect will automatically download and update forms based on what's on the server. In addition, forms not on the server will be deleted from Collect. This mode hides :guilabel:`Get Blank Form` and the :guilabel:`Blank Forms` tab in :guilabel:`Delete Saved Form` as they are not required. The enumerator can trigger an update from the server on the :guilabel:`Fill Blank Form` screen. Filled instances of blank forms deleted during server updates will still be editable.
+
+.. tip::
+
+ If your server is configured to provide the exact set of forms enumerators need and you'd like to ensure they always have the most up to date versions on device then we'd recommend using :guilabel:`Exactly match server`.
+
+ However, if your server is set up to provide forms that aren't relevant to every enumerator then we'd recommend using :guilabel:`Previously downloaded forms only` (ideally with :guilabel:`Automatic download`) so that enumerators are still notified when the forms they do use are updated.
+
+ :guilabel:`Manually` makes the most sense when forms only need to be downloaded once and will never change or if you are extremely bandwidth-limited.
+
+:guilabel:`Automatic update frequency`
""""""""""""""""""""""""""""""""""""""""
- Specifies the frequency at which the configured server should be polled for updates to the forms on the device. The user will receive a notification when one or more forms has an update available to its form definition or media files. Tapping on the notification will go to :guilabel:`Get Blank Form` where the user can choose to download some or all of the updated forms.
+ Specifies how frequently Collect should check for updates to the forms on the server when using :guilabel:`Previously downloaded forms only` or :guilabel:`Exactly match server`. This option is not available if :guilabel:`Manually` is selected.
:guilabel:`Automatic download`
"""""""""""""""""""""""""""""""
- Only available if :guilabel:`Periodic form updates check` is set. When :guilabel:`Automatic download` is enabled, the periodic form update check will trigger an automatic download of any forms on the device that have an update to their form definition or media files. The user will receive a notification when the automatic download completes with either a success or failure. Tapping on the notification will go to :guilabel:`Get Blank Form` where the user will see success or failure messages for each form for which an update was attempted.
+ Only available if :guilabel:`Previously downloaded forms only` is selected. When :guilabel:`Automatic download` is enabled, the form update check will trigger an automatic download of any forms on the device that have updated definitions or media files. The user will receive a notification when the automatic download completes with either a success or failure. Tapping on the notification will go to :guilabel:`Get Blank Form` where the user will see success or failure messages for each form for which an update was attempted.
:guilabel:`Hide old form versions`
"""""""""""""""""""""""""""""""""""
diff --git a/odk1-src/collect-using.rst b/odk1-src/collect-using.rst
index 5ccab645d..32a2381b2 100644
--- a/odk1-src/collect-using.rst
+++ b/odk1-src/collect-using.rst
@@ -2,16 +2,16 @@ Using ODK Collect
==================
.. admonition:: This is an in-depth guide to using the Collect App
-
+
To learn about the main features and try out ODK, :doc:`see the Getting Started Guide for a quick walk-through. `
-ODK Collect is used by :term:`enumerators ` to collect survey data by filling out :doc:`forms ` with :term:`participants `.
+ODK Collect is used by :term:`enumerators ` to collect survey data by filling out :doc:`forms ` with :term:`participants `.
To use ODK Collect:
-1. :ref:`Get blank forms ` from :ref:`ODK Aggregate Server or Google Drive `
+1. :ref:`Get blank forms ` from :ref:`a server or Google Drive `
2. :doc:`Fill out surveys ` with participants
-3. :ref:`Upload completed surveys ` to Aggregate or Google Drive
+3. :ref:`Upload completed surveys ` to a server or Google Drive
-----
@@ -19,7 +19,7 @@ To use ODK Collect:
.. toctree::
:maxdepth: 2
-
+
collect-forms
collect-filling-forms
collect-settings
@@ -27,7 +27,7 @@ To use ODK Collect:
collect-offline-maps
.. collect-sms-submissions
-
+
- Advanced Use and Best Practices
- :doc:`collect-adb`
diff --git a/odk1-src/img/collect-connect/server-settings-aggregate-settings.png b/odk1-src/img/collect-connect/server-settings-aggregate-settings.png
deleted file mode 100644
index c810d8b64..000000000
--- a/odk1-src/img/collect-connect/server-settings-aggregate-settings.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d0e57d5efc6abd4f1cb803999bf52debe2b40c45057bb05fa8de7c9fd48420a0
-size 59388
diff --git a/odk1-src/img/collect-connect/server-settings-odk-password.png b/odk1-src/img/collect-connect/server-settings-odk-password.png
deleted file mode 100644
index 2957ce42b..000000000
--- a/odk1-src/img/collect-connect/server-settings-odk-password.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8a68386bbca76f8fc37cb7b57871f2efdb8e53247d25ed9615388681189ae40a
-size 76145
diff --git a/odk1-src/img/collect-connect/server-settings-odk-username.png b/odk1-src/img/collect-connect/server-settings-odk-username.png
deleted file mode 100644
index 6fd982627..000000000
--- a/odk1-src/img/collect-connect/server-settings-odk-username.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e006b9dd0eb5b7f089ce528b65c8a0613b1dd8f4b16d9ed6ee50c76fbd0bc8af
-size 79983
diff --git a/odk1-src/img/collect-connect/server-settings-odk.png b/odk1-src/img/collect-connect/server-settings-odk.png
new file mode 100644
index 000000000..c5e93d341
--- /dev/null
+++ b/odk1-src/img/collect-connect/server-settings-odk.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7e080f4548210e3897ece7ea3eed118f71980085aa6f8027bee86f60283e0769
+size 49706
diff --git a/odk1-src/img/collect-connect/server-settings-server-url.png b/odk1-src/img/collect-connect/server-settings-server-url.png
deleted file mode 100644
index 027bee8a5..000000000
--- a/odk1-src/img/collect-connect/server-settings-server-url.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:cc59317fc504d586a451827cb1cbfd28e1cafa7cb28816beae196d04bac88eee
-size 82719
diff --git a/odk1-src/img/collect-connect/server-settings-type-aggregate.png b/odk1-src/img/collect-connect/server-settings-type-aggregate.png
deleted file mode 100644
index ca264cb3b..000000000
--- a/odk1-src/img/collect-connect/server-settings-type-aggregate.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5649dba9e07fcaf74ef530b6026a21003038c587615943a812232f943c188d08
-size 64813
diff --git a/odk1-src/img/collect-settings/form-management.png b/odk1-src/img/collect-settings/form-management.png
index a4fd6c327..e64a2b7b7 100644
--- a/odk1-src/img/collect-settings/form-management.png
+++ b/odk1-src/img/collect-settings/form-management.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6dcd7c1c9dbaf38dcc6d0d399193b1a56794741f4a3726465f028aca95f866e9
-size 178691
+oid sha256:e51d2ec3fed3a90abf8da32a5041861be1fc81e982c4d4a51e19477a4556517c
+size 72796
diff --git a/odk1-src/img/collect-settings/form-management2.png b/odk1-src/img/collect-settings/form-management2.png
index df57aa5a0..110e7d411 100644
--- a/odk1-src/img/collect-settings/form-management2.png
+++ b/odk1-src/img/collect-settings/form-management2.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:acec92088304328e3d89e281f4dfc95f6561108a9e88312d173af2e651118dfd
-size 39356
+oid sha256:db463456f28e58fb4f57c565b7a19788334dc8eadc73c611f7da931e951812eb
+size 81333
diff --git a/odk1-src/img/collect-settings/server-settings.png b/odk1-src/img/collect-settings/server-settings.png
index df1f7dba8..4b3473d7a 100644
--- a/odk1-src/img/collect-settings/server-settings.png
+++ b/odk1-src/img/collect-settings/server-settings.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a4e115dcce83085d4f43565d312b87d22304eba5634030a93926b5fb5d3de62f
-size 52367
+oid sha256:0d25c6a94fd478c399297b051e99c973624900a2da1a15aba7d8be0a9d78e37d
+size 46742
diff --git a/run.bat b/run.bat
new file mode 100644
index 000000000..be7561093
--- /dev/null
+++ b/run.bat
@@ -0,0 +1,3 @@
+docker kill odk-docs
+docker build -t odk-docs .
+.\run-task.bat odk1-autobuild
diff --git a/run.sh b/run.sh
new file mode 100755
index 000000000..a3ef8f25d
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+docker kill odk-docs
+docker build -t odk-docs .
+./run-task.sh odk1-autobuild
diff --git a/s3_website.yml b/s3_website.yml
index d64a20961..b06c68968 100644
--- a/s3_website.yml
+++ b/s3_website.yml
@@ -43,4 +43,5 @@ redirects:
odk2/index.html: https://docs.odk-x.org/odk-x
pyxform/index.html: xlsform
style-guide/index.html: docs-style-guide
- visualize/index.html: aggregate-visualize
\ No newline at end of file
+ visualize/index.html: aggregate-visualize
+ collect-connect-aggregate/index.html: collect-connect
\ No newline at end of file