diff --git a/assets/static/android-chrome-192x192.png b/assets/static/android-chrome-192x192.png
new file mode 100644
index 00000000..0e375b75
Binary files /dev/null and b/assets/static/android-chrome-192x192.png differ
diff --git a/assets/static/android-chrome-512x512.png b/assets/static/android-chrome-512x512.png
new file mode 100644
index 00000000..1320743b
Binary files /dev/null and b/assets/static/android-chrome-512x512.png differ
diff --git a/assets/static/apple-touch-icon.png b/assets/static/apple-touch-icon.png
new file mode 100644
index 00000000..21b29970
Binary files /dev/null and b/assets/static/apple-touch-icon.png differ
diff --git a/assets/static/browserconfig.xml b/assets/static/browserconfig.xml
new file mode 100644
index 00000000..28bb142b
--- /dev/null
+++ b/assets/static/browserconfig.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+    <msapplication>
+        <tile>
+            <square150x150logo src="/mstile-150x150.png"/>
+            <TileColor>#ee6c4d</TileColor>
+        </tile>
+    </msapplication>
+</browserconfig>
diff --git a/assets/static/favicon-16x16.png b/assets/static/favicon-16x16.png
new file mode 100644
index 00000000..2a840a0e
Binary files /dev/null and b/assets/static/favicon-16x16.png differ
diff --git a/assets/static/favicon-32x32.png b/assets/static/favicon-32x32.png
new file mode 100644
index 00000000..6d232913
Binary files /dev/null and b/assets/static/favicon-32x32.png differ
diff --git a/assets/static/favicon.ico b/assets/static/favicon.ico
index 73de524a..7f192b65 100644
Binary files a/assets/static/favicon.ico and b/assets/static/favicon.ico differ
diff --git a/assets/static/mstile-144x144.png b/assets/static/mstile-144x144.png
new file mode 100644
index 00000000..105e1808
Binary files /dev/null and b/assets/static/mstile-144x144.png differ
diff --git a/assets/static/mstile-150x150.png b/assets/static/mstile-150x150.png
new file mode 100644
index 00000000..e4e6903e
Binary files /dev/null and b/assets/static/mstile-150x150.png differ
diff --git a/assets/static/mstile-310x150.png b/assets/static/mstile-310x150.png
new file mode 100644
index 00000000..4903cd4a
Binary files /dev/null and b/assets/static/mstile-310x150.png differ
diff --git a/assets/static/mstile-310x310.png b/assets/static/mstile-310x310.png
new file mode 100644
index 00000000..c0d7baf3
Binary files /dev/null and b/assets/static/mstile-310x310.png differ
diff --git a/assets/static/mstile-70x70.png b/assets/static/mstile-70x70.png
new file mode 100644
index 00000000..e7fa394b
Binary files /dev/null and b/assets/static/mstile-70x70.png differ
diff --git a/assets/static/safari-pinned-tab.svg b/assets/static/safari-pinned-tab.svg
new file mode 100644
index 00000000..640fa9f3
--- /dev/null
+++ b/assets/static/safari-pinned-tab.svg
@@ -0,0 +1,48 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
+ preserveAspectRatio="xMidYMid meet">
+<metadata>
+Created by potrace 1.11, written by Peter Selinger 2001-2013
+</metadata>
+<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
+fill="#000000" stroke="none">
+<path d="M1442 6981 c-49 -23 -86 -61 -109 -111 -15 -32 -21 -104 -23 -271 l0
+-36 -242 0 c-134 0 -265 -3 -293 -7 -27 -4 -66 -10 -84 -13 -134 -20 -324
+-125 -440 -242 -102 -105 -205 -285 -224 -397 -3 -16 -10 -51 -16 -79 -7 -34
+-10 -871 -10 -2555 l0 -2505 24 -91 c44 -173 125 -314 246 -430 61 -57 180
+-144 199 -144 5 0 24 -9 42 -19 18 -11 74 -32 123 -48 l90 -28 2770 0 2770 0
+79 23 c240 69 415 204 543 417 27 46 56 115 81 195 l27 85 2 2530 c1 2396 1
+2534 -16 2610 -25 109 -44 161 -93 247 -134 238 -356 394 -623 438 -39 7 -181
+12 -318 13 -136 0 -250 4 -253 8 -3 5 -5 59 -6 121 -1 134 -16 192 -60 236
+-44 46 -81 63 -147 68 -80 6 -153 -31 -196 -101 -29 -47 -30 -53 -33 -190 l-4
+-142 -1749 0 -1749 0 0 127 c0 136 -9 176 -49 227 -58 73 -176 102 -259 64z
+m4820 -880 c143 -46 254 -168 289 -317 13 -56 18 -4891 5 -4979 -12 -83 -68
+-186 -132 -244 -63 -57 -111 -85 -188 -108 -45 -13 -366 -15 -2722 -15 -1469
+0 -2691 3 -2715 7 -72 12 -165 60 -224 116 -64 60 -119 163 -131 244 -4 28 -7
+1153 -7 2500 l0 2450 22 63 c12 35 33 82 47 104 61 95 181 177 289 195 28 5
+1254 8 2725 7 l2675 -1 67 -22z"/>
+<path d="M1255 5463 c-50 -13 -110 -64 -138 -118 -19 -37 -21 -57 -22 -300 -2
+-293 2 -321 64 -385 68 -72 -109 -67 2361 -66 l2225 1 40 22 c54 29 82 61 104
+119 16 43 18 80 17 314 l-2 265 -26 42 c-34 51 -81 88 -133 102 -28 8 -681 11
+-2255 10 -1218 -1 -2224 -4 -2235 -6z"/>
+<path d="M3657 3928 c-52 -14 -131 -87 -145 -136 -8 -26 -12 -128 -12 -298 0
+-235 2 -263 20 -299 26 -55 50 -80 101 -107 42 -22 55 -23 284 -25 132 -1 259
+1 283 4 63 8 131 58 161 117 25 49 25 52 26 309 0 171 -4 272 -11 294 -18 50
+-60 101 -107 125 -40 22 -54 23 -302 25 -152 1 -276 -3 -298 -9z"/>
+<path d="M4950 3921 c-59 -24 -115 -88 -129 -149 -7 -29 -10 -143 -9 -302 3
+-242 4 -257 25 -290 33 -53 73 -86 123 -103 36 -12 95 -14 295 -13 137 2 266
+6 285 11 50 12 124 89 138 145 17 70 14 525 -5 575 -19 50 -88 117 -136 132
+-23 7 -134 11 -289 11 -221 1 -259 -2 -298 -17z"/>
+<path d="M1465 2612 c-66 -19 -130 -85 -143 -146 -5 -26 -9 -160 -8 -299 1
+-275 4 -292 64 -353 59 -59 82 -63 371 -64 264 -1 265 0 315 25 57 28 98 79
+115 141 11 41 14 457 4 528 -9 60 -60 127 -118 156 -49 24 -55 25 -302 25
+-184 1 -265 -3 -298 -13z"/>
+<path d="M2777 2613 c-60 -17 -122 -79 -139 -138 -10 -33 -13 -115 -13 -303 1
+-242 3 -259 23 -298 24 -48 69 -88 119 -109 44 -19 514 -22 577 -4 54 15 93
+46 124 99 l27 45 0 285 0 285 -25 40 c-28 46 -40 58 -95 87 -38 20 -54 22
+-297 23 -183 1 -270 -3 -301 -12z"/>
+</g>
+</svg>
diff --git a/assets/static/site.webmanifest b/assets/static/site.webmanifest
new file mode 100644
index 00000000..cafbccd8
--- /dev/null
+++ b/assets/static/site.webmanifest
@@ -0,0 +1,18 @@
+{
+    "name": "Shift73k",
+    "short_name": "Shift73k",
+    "icons": [
+        {
+            "src": "/android-chrome-192x192.png",
+            "sizes": "192x192",
+            "type": "image/png"
+        },
+        {
+            "src": "/android-chrome-512x512.png",
+            "sizes": "512x512",
+            "type": "image/png"
+        }
+    ],
+    "theme_color": "#ee6c4d",
+    "background_color": "#ee6c4d"
+}
diff --git a/lib/shift73k_web/endpoint.ex b/lib/shift73k_web/endpoint.ex
index b74d04ff..519f1c99 100644
--- a/lib/shift73k_web/endpoint.ex
+++ b/lib/shift73k_web/endpoint.ex
@@ -21,11 +21,31 @@ defmodule Shift73kWeb.Endpoint do
   #
   # You should set gzip to true if you are running phx.digest
   # when deploying your static files in production.
+  #
+  # file list generated by simple ls -1 assets/static/ - then copy/paste here
+  static_files = ~w(
+    android-chrome-192x192.png
+    android-chrome-512x512.png
+    apple-touch-icon.png
+    browserconfig.xml
+    favicon-16x16.png
+    favicon-32x32.png
+    favicon.ico
+    mstile-144x144.png
+    mstile-150x150.png
+    mstile-310x150.png
+    mstile-310x310.png
+    mstile-70x70.png
+    robots.txt
+    safari-pinned-tab.svg
+    site.webmanifest
+  )
+
   plug(Plug.Static,
     at: "/",
     from: :shift73k,
     gzip: false,
-    only: ~w(css fonts images js favicon.ico robots.txt)
+    only: ~w(css fonts images js) ++ static_files
   )
 
   # Code reloading can be explicitly enabled under the