diff --git a/apps/web/src/components/back-link.tsx b/apps/web/src/components/back-link.tsx
new file mode 100644
index 0000000..9b6b390
--- /dev/null
+++ b/apps/web/src/components/back-link.tsx
@@ -0,0 +1,35 @@
+import type { ReactNode } from 'react';
+import { Link } from 'react-router-dom';
+
+/**
+ * "← Somewhere" at the top of a page. The arrow is drawn rather than typed,
+ * because the text arrow sits low against the words in most fonts.
+ */
+export function BackLink({
+ to,
+ children,
+}: {
+ to: string;
+ children: ReactNode;
+}) {
+ return (
+
+
+ {children}
+
+ );
+}
diff --git a/apps/web/src/components/layout.tsx b/apps/web/src/components/layout.tsx
index 8373bed..54cc63b 100644
--- a/apps/web/src/components/layout.tsx
+++ b/apps/web/src/components/layout.tsx
@@ -10,7 +10,7 @@ export function Layout() {
const { data: me } = useMe();
const { data: instance } = useInstance();
return (
-
+
openRun
diff --git a/apps/web/src/pages/activity.tsx b/apps/web/src/pages/activity.tsx
index 275cd59..39309a3 100644
--- a/apps/web/src/pages/activity.tsx
+++ b/apps/web/src/pages/activity.tsx
@@ -31,6 +31,7 @@ import { SPORT_LABELS, formatDateTime, ordinal, pbLabel } from '../lib/format';
import { useMe } from '../lib/queries';
import { VISIBILITY_LABELS } from '../lib/privacy';
import { useShoes } from '../lib/stats';
+import { BackLink } from '../components/back-link';
const RouteMap = lazy(() => import('../components/route-map'));
@@ -59,9 +60,7 @@ export function ActivityPage() {
return (
<>
-
- ← Runs
-
+ Runs
{editing ? (
setEditing(false)} />
) : (
diff --git a/apps/web/src/pages/club-coffee.tsx b/apps/web/src/pages/club-coffee.tsx
index 1d1a53e..bac491e 100644
--- a/apps/web/src/pages/club-coffee.tsx
+++ b/apps/web/src/pages/club-coffee.tsx
@@ -2,6 +2,7 @@ import { useEffect } from 'react';
import { Link, useParams } from 'react-router-dom';
import { useOrderSummary } from '../lib/clubs';
import { formatRunTime } from '../lib/format';
+import { BackLink } from '../components/back-link';
/** Keeps the screen on while the order list is open, where supported. */
function useWakeLock() {
@@ -51,12 +52,7 @@ export function ClubCoffeePage() {
return (
<>