diff --git a/harp_apps/dashboard/frontend/index.html b/harp_apps/dashboard/frontend/index.html
index 40a62d4d..9e710132 100644
--- a/harp_apps/dashboard/frontend/index.html
+++ b/harp_apps/dashboard/frontend/index.html
@@ -1,11 +1,11 @@
-
+
- Harp UI
+ Harp
diff --git a/harp_apps/dashboard/frontend/package.json b/harp_apps/dashboard/frontend/package.json
index c1a4fef5..7b5bbc61 100644
--- a/harp_apps/dashboard/frontend/package.json
+++ b/harp_apps/dashboard/frontend/package.json
@@ -39,6 +39,7 @@
"@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.13",
"@types/lodash": "^4.17.4",
+ "@types/react-helmet": "^6.1.11",
"date-fns": "^3.6.0",
"http-status-codes": "^2.3.0",
"localforage": "^1.10.0",
@@ -49,6 +50,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-error-boundary": "^4.0.13",
+ "react-helmet": "^6.1.0",
"react-is": "18.2.0",
"react-query": "^3.39.3",
"react-router-dom": "^6.23.1",
diff --git a/harp_apps/dashboard/frontend/pnpm-lock.yaml b/harp_apps/dashboard/frontend/pnpm-lock.yaml
index 792a92f6..0121b42d 100644
--- a/harp_apps/dashboard/frontend/pnpm-lock.yaml
+++ b/harp_apps/dashboard/frontend/pnpm-lock.yaml
@@ -38,6 +38,9 @@ importers:
'@types/lodash':
specifier: ^4.17.4
version: 4.17.4
+ '@types/react-helmet':
+ specifier: ^6.1.11
+ version: 6.1.11
date-fns:
specifier: ^3.6.0
version: 3.6.0
@@ -68,6 +71,9 @@ importers:
react-error-boundary:
specifier: ^4.0.13
version: 4.0.13(react@18.3.1)
+ react-helmet:
+ specifier: ^6.1.0
+ version: 6.1.0(react@18.3.1)
react-is:
specifier: 18.2.0
version: 18.2.0
@@ -1142,6 +1148,9 @@ packages:
'@types/react-dom@18.3.0':
resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==}
+ '@types/react-helmet@6.1.11':
+ resolution: {integrity: sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==}
+
'@types/react-sparklines@1.7.5':
resolution: {integrity: sha512-rIAmNyRKUqWWnaQMjNrxMNkgEFi5f9PrdczSNxj5DscAa48y4i9P0fRKZ72FmNcFsdg6Jx4o6CXWZtIaC0OJOg==}
@@ -3445,6 +3454,14 @@ packages:
peerDependencies:
react: '>=16.13.1'
+ react-fast-compare@3.2.2:
+ resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
+
+ react-helmet@6.1.0:
+ resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==}
+ peerDependencies:
+ react: '>=16.3.0'
+
react-hotkeys-hook@4.5.0:
resolution: {integrity: sha512-Samb85GSgAWFQNvVt3PS90LPPGSf9mkH/r4au81ZP1yOIFayLC3QAvqTgGtJ8YEDMXtPmaVBs6NgipHO6h4Mug==}
peerDependencies:
@@ -3502,6 +3519,11 @@ packages:
peerDependencies:
react: ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-side-effect@2.1.2:
+ resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==}
+ peerDependencies:
+ react: ^16.3.0 || ^17.0.0 || ^18.0.0
+
react-smooth@4.0.1:
resolution: {integrity: sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==}
peerDependencies:
@@ -5271,6 +5293,10 @@ snapshots:
dependencies:
'@types/react': 18.3.3
+ '@types/react-helmet@6.1.11':
+ dependencies:
+ '@types/react': 18.3.3
+
'@types/react-sparklines@1.7.5':
dependencies:
'@types/react': 18.3.3
@@ -8122,6 +8148,16 @@ snapshots:
'@babel/runtime': 7.24.1
react: 18.3.1
+ react-fast-compare@3.2.2: {}
+
+ react-helmet@6.1.0(react@18.3.1):
+ dependencies:
+ object-assign: 4.1.1
+ prop-types: 15.8.1
+ react: 18.3.1
+ react-fast-compare: 3.2.2
+ react-side-effect: 2.1.2(react@18.3.1)
+
react-hotkeys-hook@4.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
@@ -8168,6 +8204,10 @@ snapshots:
react: 18.3.1
react-is: 18.3.1
+ react-side-effect@2.1.2(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
react-smooth@4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
fast-equals: 5.0.1
diff --git a/harp_apps/dashboard/frontend/src/Pages/Overview/OverviewPage.tsx b/harp_apps/dashboard/frontend/src/Pages/Overview/OverviewPage.tsx
index a7b17b4e..0c28db77 100644
--- a/harp_apps/dashboard/frontend/src/Pages/Overview/OverviewPage.tsx
+++ b/harp_apps/dashboard/frontend/src/Pages/Overview/OverviewPage.tsx
@@ -1,11 +1,16 @@
+import { Helmet } from "react-helmet"
+
import { Page, PageTitle } from "Components/Page"
import { HistorySection } from "./Sections/HistorySection.tsx"
import { SummarySection } from "./Sections/SummarySection.tsx"
-
export const OverviewPage = () => {
return (
}>
+
+ Harp
+
+
diff --git a/harp_apps/dashboard/frontend/src/Pages/System/SystemPage.tsx b/harp_apps/dashboard/frontend/src/Pages/System/SystemPage.tsx
index 5a1f08b5..fa1cc67c 100644
--- a/harp_apps/dashboard/frontend/src/Pages/System/SystemPage.tsx
+++ b/harp_apps/dashboard/frontend/src/Pages/System/SystemPage.tsx
@@ -1,3 +1,5 @@
+import { Helmet } from "react-helmet"
+
import { Page, PageTitle } from "Components/Page"
import { Tab } from "ui/Components/Tabs"
@@ -8,6 +10,10 @@ import { SystemStorageTabPanel } from "./SystemStorageTabPanel.tsx"
export const SystemPage = () => {
return (
}>
+
+ System | Harp
+
+
Settings
diff --git a/harp_apps/dashboard/frontend/src/Pages/Transactions/TransactionListPage.tsx b/harp_apps/dashboard/frontend/src/Pages/Transactions/TransactionListPage.tsx
index e3a93434..6dd6dabe 100644
--- a/harp_apps/dashboard/frontend/src/Pages/Transactions/TransactionListPage.tsx
+++ b/harp_apps/dashboard/frontend/src/Pages/Transactions/TransactionListPage.tsx
@@ -1,5 +1,6 @@
import { isEqual } from "lodash"
import { useCallback, useEffect, useRef, useState } from "react"
+import { Helmet } from "react-helmet"
import { useLocation, useNavigate, useSearchParams } from "react-router-dom"
import { Page } from "Components/Page"
@@ -124,6 +125,11 @@ export function TransactionListPage() {
}
>
+
+ Transactions | Harp
+
+
+
{(query) => }