From ef5d95d347058a7086f12917f70241a9d6c72669 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Sat, 8 Nov 2025 14:04:06 +0100 Subject: [PATCH] refactor: consolidate page titles --- README.md | 2 +- apps/client/app/modules/auth/routes/login.tsx | 11 +++++++++++ apps/client/app/modules/auth/routes/onboarding.tsx | 11 +++++++++++ .../app/modules/backups/routes/backup-details.tsx | 10 ++++++++++ apps/client/app/modules/backups/routes/backups.tsx | 4 ++-- .../app/modules/backups/routes/create-backup.tsx | 4 ++-- .../app/modules/repositories/routes/repositories.tsx | 4 ++-- .../repositories/routes/repository-details.tsx | 4 ++-- .../modules/repositories/routes/snapshot-details.tsx | 10 ++++++++++ apps/client/app/modules/settings/routes/settings.tsx | 2 +- .../app/modules/volumes/routes/volume-details.tsx | 4 ++-- apps/client/app/modules/volumes/routes/volumes.tsx | 2 +- docker-compose.yml | 2 +- 13 files changed, 56 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index facd534..2c3cccb 100644 --- a/README.md +++ b/README.md @@ -155,7 +155,7 @@ docker compose up -d Ironmount can also be used as a Docker volume plugin, allowing you to mount your volumes directly into other Docker containers. This enables seamless integration with your containerized applications. -In order to enable this feature, you need to run Ironmount with privileged modek and mount several items from the host. Here is an example of how to set this up in your `docker-compose.yml` file: +In order to enable this feature, you need to run Ironmount with privileged mode and mount several items from the host. Here is an example of how to set this up in your `docker-compose.yml` file: ```diff services: diff --git a/apps/client/app/modules/auth/routes/login.tsx b/apps/client/app/modules/auth/routes/login.tsx index a2661ae..51b082a 100644 --- a/apps/client/app/modules/auth/routes/login.tsx +++ b/apps/client/app/modules/auth/routes/login.tsx @@ -10,9 +10,20 @@ import { Button } from "~/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "~/components/ui/form"; import { Input } from "~/components/ui/input"; import { authMiddleware } from "~/middleware/auth"; +import type { Route } from "./+types/login"; export const clientMiddleware = [authMiddleware]; +export function meta(_: Route.MetaArgs) { + return [ + { title: "Login" }, + { + name: "description", + content: "Sign in to your Ironmount account.", + }, + ]; +} + const loginSchema = type({ username: "2<=string<=50", password: "string>=1", diff --git a/apps/client/app/modules/auth/routes/onboarding.tsx b/apps/client/app/modules/auth/routes/onboarding.tsx index da20206..b39e12e 100644 --- a/apps/client/app/modules/auth/routes/onboarding.tsx +++ b/apps/client/app/modules/auth/routes/onboarding.tsx @@ -10,9 +10,20 @@ import { Button } from "~/components/ui/button"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "~/components/ui/form"; import { Input } from "~/components/ui/input"; import { authMiddleware } from "~/middleware/auth"; +import type { Route } from "./+types/onboarding"; export const clientMiddleware = [authMiddleware]; +export function meta(_: Route.MetaArgs) { + return [ + { title: "Onboarding" }, + { + name: "description", + content: "Welcome to Ironmount. Create your admin account to get started.", + }, + ]; +} + const onboardingSchema = type({ username: "2<=string<=50", password: "string>=8", diff --git a/apps/client/app/modules/backups/routes/backup-details.tsx b/apps/client/app/modules/backups/routes/backup-details.tsx index 2bad503..d87c7dc 100644 --- a/apps/client/app/modules/backups/routes/backup-details.tsx +++ b/apps/client/app/modules/backups/routes/backup-details.tsx @@ -19,6 +19,16 @@ import type { Route } from "./+types/backup-details"; import { SnapshotFileBrowser } from "../components/snapshot-file-browser"; import { SnapshotTimeline } from "../components/snapshot-timeline"; +export function meta(_: Route.MetaArgs) { + return [ + { title: "Backup Job Details" }, + { + name: "description", + content: "View and manage backup job configuration, schedule, and snapshots.", + }, + ]; +} + export const clientLoader = async ({ params }: Route.LoaderArgs) => { const { data } = await getBackupSchedule({ path: { scheduleId: params.id } }); diff --git a/apps/client/app/modules/backups/routes/backups.tsx b/apps/client/app/modules/backups/routes/backups.tsx index 1bcaf55..0c1b606 100644 --- a/apps/client/app/modules/backups/routes/backups.tsx +++ b/apps/client/app/modules/backups/routes/backups.tsx @@ -11,10 +11,10 @@ import type { Route } from "./+types/backups"; export function meta(_: Route.MetaArgs) { return [ - { title: "Ironmount" }, + { title: "Backup Jobs" }, { name: "description", - content: "Create, manage, monitor, and automate your Docker volumes with ease.", + content: "Automate volume backups with scheduled jobs and retention policies.", }, ]; } diff --git a/apps/client/app/modules/backups/routes/create-backup.tsx b/apps/client/app/modules/backups/routes/create-backup.tsx index 400147c..b845f66 100644 --- a/apps/client/app/modules/backups/routes/create-backup.tsx +++ b/apps/client/app/modules/backups/routes/create-backup.tsx @@ -20,10 +20,10 @@ import { listRepositories, listVolumes } from "~/api-client"; export function meta(_: Route.MetaArgs) { return [ - { title: "Ironmount" }, + { title: "Create Backup Job" }, { name: "description", - content: "Create, manage, monitor, and automate your Docker volumes with ease.", + content: "Create a new automated backup job for your volumes.", }, ]; } diff --git a/apps/client/app/modules/repositories/routes/repositories.tsx b/apps/client/app/modules/repositories/routes/repositories.tsx index 0c844b2..79055f2 100644 --- a/apps/client/app/modules/repositories/routes/repositories.tsx +++ b/apps/client/app/modules/repositories/routes/repositories.tsx @@ -17,10 +17,10 @@ import { EmptyState } from "~/components/empty-state"; export function meta(_: Route.MetaArgs) { return [ - { title: "Ironmount - Repositories" }, + { title: "Repositories" }, { name: "description", - content: "Manage your backup repositories", + content: "Manage your backup repositories with encryption and compression.", }, ]; } diff --git a/apps/client/app/modules/repositories/routes/repository-details.tsx b/apps/client/app/modules/repositories/routes/repository-details.tsx index 5017660..61f9ec3 100644 --- a/apps/client/app/modules/repositories/routes/repository-details.tsx +++ b/apps/client/app/modules/repositories/routes/repository-details.tsx @@ -27,10 +27,10 @@ import { RepositorySnapshotsTabContent } from "../tabs/snapshots"; export function meta({ params }: Route.MetaArgs) { return [ - { title: `Ironmount - ${params.name}` }, + { title: params.name }, { name: "description", - content: "Manage your restic backup repositories with ease.", + content: "View repository configuration, status, and snapshots.", }, ]; } diff --git a/apps/client/app/modules/repositories/routes/snapshot-details.tsx b/apps/client/app/modules/repositories/routes/snapshot-details.tsx index a47ec4b..3624b9f 100644 --- a/apps/client/app/modules/repositories/routes/snapshot-details.tsx +++ b/apps/client/app/modules/repositories/routes/snapshot-details.tsx @@ -7,6 +7,16 @@ import { SnapshotFileBrowser } from "~/modules/backups/components/snapshot-file- import { getSnapshotDetails } from "~/api-client"; import type { Route } from "./+types/snapshot-details"; +export function meta({ params }: Route.MetaArgs) { + return [ + { title: `Snapshot ${params.snapshotId}` }, + { + name: "description", + content: "Browse and restore files from a backup snapshot.", + }, + ]; +} + export const clientLoader = async ({ params }: Route.ClientLoaderArgs) => { const snapshot = await getSnapshotDetails({ path: { name: params.name, snapshotId: params.snapshotId } }); if (snapshot.data) return snapshot.data; diff --git a/apps/client/app/modules/settings/routes/settings.tsx b/apps/client/app/modules/settings/routes/settings.tsx index 9699a01..cbdfa49 100644 --- a/apps/client/app/modules/settings/routes/settings.tsx +++ b/apps/client/app/modules/settings/routes/settings.tsx @@ -13,7 +13,7 @@ import type { Route } from "./+types/settings"; export function meta(_: Route.MetaArgs) { return [ - { title: "Settings - Ironmount" }, + { title: "Settings" }, { name: "description", content: "Manage your account settings and preferences.", diff --git a/apps/client/app/modules/volumes/routes/volume-details.tsx b/apps/client/app/modules/volumes/routes/volume-details.tsx index 1b66682..edf3169 100644 --- a/apps/client/app/modules/volumes/routes/volume-details.tsx +++ b/apps/client/app/modules/volumes/routes/volume-details.tsx @@ -32,10 +32,10 @@ import { DockerTabContent } from "../tabs/docker"; export function meta({ params }: Route.MetaArgs) { return [ - { title: `Ironmount - ${params.name}` }, + { title: params.name }, { name: "description", - content: "Create, manage, monitor, and automate your Docker volumes with ease.", + content: "View and manage volume details, configuration, and files.", }, ]; } diff --git a/apps/client/app/modules/volumes/routes/volumes.tsx b/apps/client/app/modules/volumes/routes/volumes.tsx index 7c9599c..5eb9273 100644 --- a/apps/client/app/modules/volumes/routes/volumes.tsx +++ b/apps/client/app/modules/volumes/routes/volumes.tsx @@ -17,7 +17,7 @@ import type { Route } from "./+types/volumes"; export function meta(_: Route.MetaArgs) { return [ - { title: "Ironmount" }, + { title: "Volumes" }, { name: "description", content: "Create, manage, monitor, and automate your Docker volumes with ease.", diff --git a/docker-compose.yml b/docker-compose.yml index 5927984..94fc6f8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,7 +15,7 @@ services: ports: - "4096:4097" volumes: - - /var/lib/ironmount/:/var/lib/ironmount/ + - /var/lib/ironmount:/var/lib/ironmount - ./apps/client/app:/app/apps/client/app - ./apps/server/src:/app/apps/server/src