diff --git a/web/app/items/ItemGrid.tsx b/web/app/items/ItemGrid.tsx
index 2a62562..7d9c469 100644
--- a/web/app/items/ItemGrid.tsx
+++ b/web/app/items/ItemGrid.tsx
@@ -1,6 +1,7 @@
"use client";
import { useMemo } from "react";
+import Spinner from "../components/Spinner";
interface RichItem {
id: string;
@@ -188,9 +189,9 @@ export default function ItemGrid({
|
- Loading...
+
|
) : items.length === 0 ? (
diff --git a/web/app/items/page.tsx b/web/app/items/page.tsx
index c3834ab..d44279e 100644
--- a/web/app/items/page.tsx
+++ b/web/app/items/page.tsx
@@ -3,6 +3,7 @@
import { useSearchParams, useRouter } from "next/navigation";
import { Suspense, useCallback, useEffect, useState } from "react";
import FilterPanel from "./FilterPanel";
+import Spinner from "../components/Spinner";
import ItemGrid from "./ItemGrid";
import ItemDetail from "./ItemDetail";
import CreateItemModal from "./CreateItemModal";
@@ -292,8 +293,8 @@ export default function ItemsPage() {
return (
- Loading...
+
+
}
>
diff --git a/web/app/layout.tsx b/web/app/layout.tsx
index a77ce86..482d6a9 100644
--- a/web/app/layout.tsx
+++ b/web/app/layout.tsx
@@ -5,6 +5,7 @@ import Sidebar from "./components/Sidebar";
export const metadata: Metadata = {
title: "WhereTF",
description: "R&D workshop item tracker",
+ icons: { icon: "/icon.svg" },
};
export default function RootLayout({
diff --git a/web/app/modules/[id]/page.tsx b/web/app/modules/[id]/page.tsx
index d35b672..298b7ec 100644
--- a/web/app/modules/[id]/page.tsx
+++ b/web/app/modules/[id]/page.tsx
@@ -3,6 +3,7 @@
import { useParams, useRouter } from "next/navigation";
import Link from "next/link";
import { useCallback, useEffect, useState, useMemo } from "react";
+import Spinner from "../../components/Spinner";
import { CellGrid } from "@/app/_components/CellGrid";
// --- Types ---
@@ -898,8 +899,8 @@ export default function ModuleDetailPage() {
if (loading) {
return (
-
- Loading...
+
+
);
}
diff --git a/web/app/modules/page.tsx b/web/app/modules/page.tsx
index 3c77552..359e978 100644
--- a/web/app/modules/page.tsx
+++ b/web/app/modules/page.tsx
@@ -3,6 +3,7 @@
import Link from "next/link";
import { useRouter } from "next/navigation";
import { useCallback, useEffect, useState } from "react";
+import Spinner from "../components/Spinner";
interface Module {
id: string;
@@ -121,8 +122,8 @@ export default function ModulesPage() {
if (loading) {
return (
-
- Loading…
+
+
);
}
diff --git a/web/app/taxonomy/page.tsx b/web/app/taxonomy/page.tsx
index 0d0dd3e..c821dfc 100644
--- a/web/app/taxonomy/page.tsx
+++ b/web/app/taxonomy/page.tsx
@@ -3,6 +3,7 @@
import { useCallback, useEffect, useRef, useState } from "react";
import CreateFromDesignationDialog from "@/app/items/CreateFromDesignationDialog";
import GenerateSetDialog from "@/app/items/GenerateSetDialog";
+import Spinner from "../components/Spinner";
import BulkAspectImport from "./BulkAspectImport";
import { parseSiValue } from "@/lib/siPrefix";
@@ -698,7 +699,7 @@ export function AspectsTab() {
{loading ? (
-
Loading...
+
) : aspects.length === 0 ? (
No aspects defined yet.
@@ -1045,8 +1046,8 @@ function AspectParameterMatrix({
if (loading) {
return (
-
- Loading matrix…
+
+
);
}
@@ -1686,9 +1687,7 @@ export function ParametersTab() {
{loading ? (
-
- Loading…
-
+
) : filteredParamDefs.length === 0 ? (
{paramDefs.length === 0 ? "No parameters yet." : "No matches."}
@@ -2525,9 +2524,7 @@ export function CategoriesTab() {
{loading ? (
-
- Loading…
-
+
) : filtered.length === 0 ? (
{categories.length === 0 ? "No categories yet." : "No matches."}
@@ -3075,7 +3072,7 @@ export function StandardsTab() {
)}
{loading ? (
-
Loading…
+
) : standards.length === 0 ? (
None yet
) : (
diff --git a/web/app/templates/_components/TemplateEditor.tsx b/web/app/templates/_components/TemplateEditor.tsx
index 286ddba..fffada2 100644
--- a/web/app/templates/_components/TemplateEditor.tsx
+++ b/web/app/templates/_components/TemplateEditor.tsx
@@ -2,6 +2,7 @@
import { useCallback, useEffect, useMemo, useState } from "react";
import { getGridLabel } from "@/lib/gridLabels";
+import Spinner from "../../components/Spinner";
type Origin = "top-left" | "top-right" | "bottom-left" | "bottom-right";
@@ -442,8 +443,8 @@ export default function TemplateEditor({
if (loading) {
return (
-
- Loading…
+
+
);
}
diff --git a/web/app/templates/page.tsx b/web/app/templates/page.tsx
index 5033c04..6b00763 100644
--- a/web/app/templates/page.tsx
+++ b/web/app/templates/page.tsx
@@ -3,6 +3,7 @@
import Link from "next/link";
import { useRouter, useSearchParams } from "next/navigation";
import { Suspense, useCallback, useEffect, useState } from "react";
+import Spinner from "../components/Spinner";
import TemplateEditor from "./_components/TemplateEditor";
interface Template {
@@ -92,8 +93,8 @@ function TemplatesPageInner() {
{loading ? (
-
- Loading…
+
+
) : templates.length === 0 ? (
@@ -193,8 +194,8 @@ export default function TemplatesPage() {
return (
- Loading…
+
+
}
>
diff --git a/web/public/file.svg b/web/public/file.svg
deleted file mode 100644
index 004145c..0000000
--- a/web/public/file.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/public/globe.svg b/web/public/globe.svg
deleted file mode 100644
index 567f17b..0000000
--- a/web/public/globe.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/public/icon.svg b/web/public/icon.svg
new file mode 100644
index 0000000..0a62f62
--- /dev/null
+++ b/web/public/icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/web/public/next.svg b/web/public/next.svg
deleted file mode 100644
index 5174b28..0000000
--- a/web/public/next.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/public/vercel.svg b/web/public/vercel.svg
deleted file mode 100644
index 7705396..0000000
--- a/web/public/vercel.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/public/window.svg b/web/public/window.svg
deleted file mode 100644
index b2b2a44..0000000
--- a/web/public/window.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file