- {/* DEFAULT VIEW: Always rendered, opacity controlled by parent hover */}
+ {/* --- DEFAULT VIEW --- */}
@@ -58,7 +88,7 @@ export default function MonitorCard({ isHovered }: { isHovered: boolean }) {
- {/* REGISTRY VIEW: Only "Active" when hovered */}
+ {/* --- REGISTRY VIEW --- */}
-
- Service Registry
-
+ {/* HEADER WITH SYNCED TIMER */}
+
+
+ Explore Systems
+
+ →
+
+
+
+
+
+
+
+
+ {String(page + 1).padStart(2, "0")}
+
+
+
+
- {/* We pass isHovered here to start/stop the timer inside a separate lifecycle */}
-
+
);
}
-function RegistrySlider({ isHovered }: { isHovered: boolean }) {
- const [page, setPage] = useState(0);
- const totalPages = Math.ceil(MONITORS.length / 6);
-
- useEffect(() => {
- if (!isHovered) {
- const timeout = setTimeout(() => setPage(0), 300);
- return () => clearTimeout(timeout);
- }
-
- const interval = setInterval(() => {
- setPage((p) => (p + 1) % totalPages);
- }, 4000);
-
- return () => clearInterval(interval);
- }, [isHovered, totalPages]);
-
- const currentItems = MONITORS.slice(page * 6, (page + 1) * 6);
+function RegistrySlider({ page }: { page: number }) {
+ const currentItems = MONITORS.slice(
+ page * ITEMS_PER_PAGE,
+ (page + 1) * ITEMS_PER_PAGE,
+ );
return (
\ No newline at end of file
diff --git a/public/lab/audiobookshelf.jpg b/public/lab/audiobookshelf.jpg
new file mode 100644
index 0000000..21b56dd
Binary files /dev/null and b/public/lab/audiobookshelf.jpg differ
diff --git a/public/lab/change-detection.jpg b/public/lab/change-detection.jpg
new file mode 100644
index 0000000..1c0bc5f
Binary files /dev/null and b/public/lab/change-detection.jpg differ
diff --git a/public/lab/observatory.jpg b/public/lab/observatory.jpg
new file mode 100644
index 0000000..ffb6bb0
Binary files /dev/null and b/public/lab/observatory.jpg differ
diff --git a/public/lab/paperless.jpg b/public/lab/paperless.jpg
new file mode 100644
index 0000000..9b531f9
Binary files /dev/null and b/public/lab/paperless.jpg differ
diff --git a/public/lab/portainer.jpg b/public/lab/portainer.jpg
new file mode 100644
index 0000000..a3c52c6
Binary files /dev/null and b/public/lab/portainer.jpg differ
diff --git a/public/lab/surf-hub.jpg b/public/lab/surf-hub.jpg
new file mode 100644
index 0000000..6e7a6ae
Binary files /dev/null and b/public/lab/surf-hub.jpg differ
diff --git a/public/lab/wikijs.jpg b/public/lab/wikijs.jpg
new file mode 100644
index 0000000..9d267e3
Binary files /dev/null and b/public/lab/wikijs.jpg differ
diff --git a/public/lab/yamtrack.jpg b/public/lab/yamtrack.jpg
new file mode 100644
index 0000000..2775832
Binary files /dev/null and b/public/lab/yamtrack.jpg differ
diff --git a/types/index.ts b/types/index.ts
index d557119..effeca5 100644
--- a/types/index.ts
+++ b/types/index.ts
@@ -35,3 +35,15 @@ export interface Project {
mermaidChart?: string;
isPrivate: boolean;
}
+
+export interface LabService {
+ id: string;
+ name: string;
+ description: string;
+ stack: string[];
+ visibility: "public" | "tailscale";
+ url?: string;
+ gitUrl?: string;
+ image: string;
+ uptimeId?: number;
+}