diff --git a/artwork/do-it-now.svg b/artwork/do-it-now.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fd2845c5eb8a0394bd26d9b8fd13375cfdac59f0
--- /dev/null
+++ b/artwork/do-it-now.svg
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="400mm"
+   height="300mm"
+   viewBox="0 0 400 300"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   sodipodi:docname="do-it-now.svg"
+   inkscape:export-filename="/tmp/do-it-now.png"
+   inkscape:export-xdpi="50.799999"
+   inkscape:export-ydpi="50.799999">
+  <defs
+     id="defs2">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient878">
+      <stop
+         style="stop-color:#efff00;stop-opacity:1"
+         offset="0"
+         id="stop874" />
+      <stop
+         id="stop882"
+         offset="0.20221727"
+         style="stop-color:#ff3400;stop-opacity:1" />
+      <stop
+         style="stop-color:#ff0adf;stop-opacity:1"
+         offset="0.42144346"
+         id="stop884" />
+      <stop
+         id="stop886"
+         offset="0.61043155"
+         style="stop-color:#2b00ff;stop-opacity:1" />
+      <stop
+         style="stop-color:#00fff3;stop-opacity:1"
+         offset="0.82398808"
+         id="stop888" />
+      <stop
+         style="stop-color:#00ff35;stop-opacity:0.983"
+         offset="1"
+         id="stop876" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient878"
+       id="linearGradient880"
+       x1="1.4099832e-14"
+       y1="300"
+       x2="400"
+       y2="-5.6843419e-14"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="927.71944"
+     inkscape:cy="694.3691"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="993"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="bg">
+    <rect
+       style="opacity:1;vector-effect:none;fill:url(#linearGradient880);fill-opacity:1;stroke:none;stroke-width:7.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
+       id="rect857"
+       width="400"
+       height="300"
+       x="1.4210855e-14"
+       y="-5.6843419e-14" />
+  </g>
+  <g
+     inkscape:label="font"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,3)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:102.09881592px;line-height:1.25;font-family:Impact;-inkscape-font-specification:'Impact, Condensed';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#fffbfb;fill-opacity:1;stroke:#000000;stroke-width:10.58333302;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
+       x="81.698982"
+       y="128.98587"
+       id="text817"><tspan
+         sodipodi:role="line"
+         id="tspan815"
+         x="81.698982"
+         y="128.98587"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:102.09881592px;font-family:Impact;-inkscape-font-specification:'Impact, Condensed';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#fffbfb;fill-opacity:1;stroke:#000000;stroke-width:10.58333302;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers">DO IT!</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:67.48417664px;line-height:1.25;font-family:Impact;-inkscape-font-specification:'Impact, Condensed';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:7.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
+       x="51.669907"
+       y="222.68974"
+       id="text817-4"><tspan
+         sodipodi:role="line"
+         id="tspan815-6"
+         x="51.669907"
+         y="222.68974"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:67.48417664px;font-family:Impact;-inkscape-font-specification:'Impact, Condensed';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:7.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers">DO IT NOW!</tspan></text>
+  </g>
+</svg>
diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestScreenshot.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestScreenshot.kt
index cf75964c501e055a604e0fcf72ffd21458364790..b2db21f697424079aac960525af0a807ef0e83d4 100644
--- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestScreenshot.kt
+++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/TestScreenshot.kt
@@ -22,7 +22,8 @@ import kotlinx.coroutines.delay
 import org.briarproject.bramble.api.plugin.LanTcpConstants
 
 /**
- * Launches Briar Desktop with UI set up for taking a screenshot for the README file.
+ * Launches Briar Desktop with UI set up for taking a screenshot for the README file
+ * or the website.
  * This includes faking connections to two contacts to make them appear as online.
  */
 fun main() = RunWithTemporaryAccount {
diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/Conversations.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/Conversations.kt
index dbb42b7701eabd4388dfbf11675b8ce887749c94..c157180f38094eb3c910b68378e65f01a52f169c 100644
--- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/Conversations.kt
+++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/Conversations.kt
@@ -30,7 +30,7 @@ data class Conversation(
 )
 
 data class Message(
-    val text: String,
+    val text: String?,
     val images: List<String>,
     val direction: Direction,
     val date: LocalDateTime,
diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/ConversationsData.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/ConversationsData.kt
index 1f0400ed9a56b26540b6866448a621e8e9cf92f2..76ac296831ecf9377d9f145a561f2debfc6567b4 100644
--- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/ConversationsData.kt
+++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/ConversationsData.kt
@@ -26,17 +26,27 @@ val conversations = conversations {
         outgoing {
             text = "Hi, Bob"
             read = true
-            date = "2020-12-24 20:10:15"
+            date = "2022-01-21 10:10:15"
         }
         incoming {
             text = "What's up?"
             read = true
-            date = "2020-12-24 20:11:05"
+            date = "2022-01-21 10:11:05"
         }
         outgoing {
-            text = "Nothing much, lately"
-            read = false
-            date = "2020-12-24 20:12:34"
+            text = "Nothing much, lately. Have you seen the new Briar Desktop release?"
+            read = true
+            date = "2022-01-21 10:12:34"
+        }
+        incoming {
+            text = "Oh, wow. I have to check it out! \uD83E\uDD2F"
+            read = true
+            date = "2022-01-21 10:13:05"
+        }
+        outgoing {
+            images = listOf("images/do-it-now.png")
+            read = true
+            date = "2022-01-21 10:13:15"
         }
     }
     conversation {
diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/ConversationsDsl.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/ConversationsDsl.kt
index 244a2fee9c4590d83852ef03d99196d758ee148e..cf44f9f9da8a11e25a45cc44c9dcf7c1d50046ff 100644
--- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/ConversationsDsl.kt
+++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/ConversationsDsl.kt
@@ -63,7 +63,7 @@ var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
 @ConversationsDsl
 class MessageBuilder(private val direction: Direction) {
 
-    var text: String = ""
+    var text: String? = null
     var images: List<String> = emptyList()
     var read: Boolean = false
 
diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
index 698a59fbba215eecaa68ba7d6710697ee76708cf..a681e897b3d616c6570ddf87ca6471880ada1036 100644
--- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
+++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
@@ -355,7 +355,7 @@ class DeterministicTestDataCreatorImpl @Inject internal constructor(
     private fun createPrivateMessage(
         contactId: ContactId,
         groupId: GroupId,
-        text: String,
+        text: String?,
         images: List<String>,
         timestamp: Long,
         local: Boolean,
diff --git a/briar-desktop/src/test/resources/images/do-it-now.png b/briar-desktop/src/test/resources/images/do-it-now.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0efd870f37c784d8b2629b11d59a0c4b684b7f5
Binary files /dev/null and b/briar-desktop/src/test/resources/images/do-it-now.png differ