diff --git a/packages/app-web/src/Cheatsheet.tsx b/packages/app-web/src/Cheatsheet.tsx
index 86bb9269a7..e57c4952f4 100644
--- a/packages/app-web/src/Cheatsheet.tsx
+++ b/packages/app-web/src/Cheatsheet.tsx
@@ -1,10 +1,11 @@
import { Cheatsheet as OriginalCheatsheet } from "@cursorless/lib-cheatsheet";
import defaultCheatsheetInfo from "@cursorless/lib-cheatsheet/defaultSpokenForms";
+import { Title } from "./Title";
export function Cheatsheet() {
return (
<>
-
Cursorless cheatsheet
+ Cursorless cheatsheet
>
);
diff --git a/packages/app-web/src/LandingPage.tsx b/packages/app-web/src/LandingPage.tsx
index c46fb13c98..f1eea1671d 100644
--- a/packages/app-web/src/LandingPage.tsx
+++ b/packages/app-web/src/LandingPage.tsx
@@ -1,12 +1,13 @@
import { Button } from "./Button";
import { EmbeddedVideo } from "./EmbeddedVideo";
+import { Title } from "./Title";
import { DESCRIPTION, NAME, TITLE, YOUTUBE_SLUG } from "./constants";
import Logo from "./logo.svg?react";
export function LandingPage() {
return (
<>
- {TITLE}
+ {TITLE}
diff --git a/packages/app-web/src/Title.tsx b/packages/app-web/src/Title.tsx
new file mode 100644
index 0000000000..a62516ff63
--- /dev/null
+++ b/packages/app-web/src/Title.tsx
@@ -0,0 +1,15 @@
+import { useEffect } from "preact/hooks";
+
+interface Props {
+ children: string;
+}
+
+export function Title({ children }: Props) {
+ useEffect(() => {
+ if (children !== document.title) {
+ document.title = children;
+ }
+ }, [children]);
+
+ return null;
+}