diff --git a/src/app.js b/src/app.js
index 8eacaea26ff1ebe56084325b41e6806925165b3b..838c957f6cbeed516eda5e1e43895725ba801f36 100644
--- a/src/app.js
+++ b/src/app.js
@@ -14,8 +14,17 @@ import * as humanhash from "humanhash"
 import jdenticon from "jdenticon"
 
 const DEFAULT_ROOM = "imperial"
-const initialRoom =
-  new URLSearchParams(location.search).get("room") || DEFAULT_ROOM
+
+const navigateToRoom = (roomID) => {
+  const url = new URL(location.href)
+  url.searchParams.set("room", roomID)
+  location.href = url
+}
+
+const initialRoom = new URLSearchParams(location.search).get("room")
+if (initialRoom == null) {
+  navigateToRoom(DEFAULT_ROOM)
+}
 
 const MIN_PRESSURE_FACTOR = 0.1
 const MAX_PRESSURE_FACTOR = 1.5
@@ -362,22 +371,7 @@ HTML.peerButton.addEventListener("click", () => {
 })
 
 const onRoomJoinEnter = () => {
-  const selectedRoomID = HTML.roomIDElem.value
-  if (!selectedRoomID || selectedRoomID == room.name) {
-    return
-  }
-
-  if (room != null) {
-    room.disconnect()
-    room = null
-  }
-
-  canvas.clear()
-  HTML.connectedPeers.innerHTML = "No peers are connected"
-  HTML.fastUndoButton.classList.add("disabled")
-  HTML.undoButton.classList.add("disabled")
-
-  tryRoomConnect(selectedRoomID)
+  navigateToRoom(HTML.roomIDElem.value)
 }
 
 HTML.roomConnectButton.addEventListener("click", onRoomJoinEnter)
diff --git a/src/server.js b/src/server.js
index cf912eeaf5c06537a24065d5f56dbd6df86cdf63..d76e14fb84356ce37c4c2e867e0bae8e1c418d05 100644
--- a/src/server.js
+++ b/src/server.js
@@ -45,6 +45,17 @@ app.use((request, response, next) => {
   next()
 })
 
+app.get("/", (request, response, next) => {
+  if (request.query.room == null) {
+    const url = new URL(
+      `${request.protocol}://${request.get("host")}${request.originalUrl}`,
+    )
+    url.searchParams.set("room", "imperial")
+    return response.redirect(url)
+  }
+  next()
+})
+
 app.use("/", express.static("public"))
 
 server.listen(port, host, () => {