diff --git a/README.md b/README.md
index ce36b19d9ca7dd77dff64d99a8929ab3a613835a..70c6bde75d3ca2c16c1dd634d6f67f87f521b970 100644
--- a/README.md
+++ b/README.md
@@ -47,13 +47,18 @@ The project is dual licensed under the [Apache License 2.0](LICENSE) and the [GP
 
 Third party libraries and resources:
 * [github.com/urfave/cli/v2](https://github.com/urfave/cli/v2) (MIT) is used to drive the CLI
-* [Mixkit sound](https://mixkit.co/free-sound-effects/notification/) (Mixkit Free License) used as notification sound
-* [Lato Font](https://www.latofonts.com/) (OFL) is used as a font in the Web UI
+* [Mixkit sounds](https://mixkit.co/free-sound-effects/notification/) (Mixkit Free License) are used as notification sounds
+* [Sounds from notificationsounds.com](https://notificationsounds.com) (Creative Commons Attribution) are used as notification sounds
+* [Roboto Font](https://fonts.google.com/specimen/Roboto) (Apache 2.0) is used as a font in everything web
+* [React](https://reactjs.org/) (MIT) is used for the web app
+* [Material UI components](https://mui.com/) (MIT) are used in the web app
+* [MUI dashboard template](https://github.com/mui/material-ui/tree/master/docs/data/material/getting-started/templates/dashboard) (MIT) was used as a basis for the web app
+* [Dexie.js](https://github.com/dexie/Dexie.js) (Apache 2.0) is used for web app persistence in IndexedDB
 * [GoReleaser](https://goreleaser.com/) (MIT) is used to create releases
 * [go-smtp](https://github.com/emersion/go-smtp) (MIT) is used to receive e-mails
 * [stretchr/testify](https://github.com/stretchr/testify) (MIT) is used for unit and integration tests
 * [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) (MIT) is used to provide the persistent message cache
 * [Firebase Admin SDK](https://github.com/firebase/firebase-admin-go) (Apache 2.0) is used to send FCM messages
 * [github/gemoji](https://github.com/github/gemoji) (MIT) is used for emoji support (specifically the [emoji.json](https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json) file)
-* [Lightbox with vanilla JS](https://yossiabramov.com/blog/vanilla-js-lightbox) 
+* [Lightbox with vanilla JS](https://yossiabramov.com/blog/vanilla-js-lightbox) as a lightbox on the landing page 
 * [Statically linking go-sqlite3](https://www.arp242.net/static-go.html)
diff --git a/web/src/components/App.js b/web/src/components/App.js
index 6db04aa5d52131a83cefed2c031138975f16ea2a..61fbf18d06a585351bcd3dded93fb6390db251cf 100644
--- a/web/src/components/App.js
+++ b/web/src/components/App.js
@@ -23,14 +23,11 @@ import {subscriptionRoute} from "../app/utils";
 // TODO support unsubscribed routes
 // TODO add "home" route that is selected when nothing else fits
 // TODO new notification indicator
-// TODO sound
+// TODO sound autoplay error warning
 // TODO "copy url" toast
 // TODO "copy link url" button
 // TODO races when two tabs are open
-// TODO sound mentions
-//  https://notificationsounds.com/message-tones/pristine-609
-//  https://notificationsounds.com/message-tones/juntos-607
-//  https://notificationsounds.com/notification-sounds/beep-472
+// TODO investigate service workers
 
 const App = () => {
     return (
@@ -149,8 +146,7 @@ const findSelected = (location, subscriptions) => {
     if (!subscriptions || !location)  {
         return null;
     }
-    const [subscription] = subscriptions
-        .filter(s => location.pathname === subscriptionRoute(s));
+    const [subscription] = subscriptions.filter(s => location.pathname === subscriptionRoute(s));
     return subscription;
 };
 
diff --git a/web/src/components/Notifications.js b/web/src/components/Notifications.js
index 61ac06946a7a2fbfa26f7f2ba6b2297e80b52748..cb0157297fb5235a9684e0bde0de60831291c0f0 100644
--- a/web/src/components/Notifications.js
+++ b/web/src/components/Notifications.js
@@ -236,7 +236,7 @@ const Icon = (props) => {
     return (
         <Box
             component="img"
-            src={`static/img/${imageFile}`}
+            src={`/static/img/${imageFile}`}
             loading="lazy"
             sx={{
                 width: '28px',