+ {/* Tagline */}
+
+ Turtle WoW 一站式插件管理平台
+
+
+ {/* Download button */}
- {totalDownloads != null && totalDownloads > 0 && (
-
- 累计{" "}
-
- {totalDownloads.toLocaleString()}
- {" "}
- 次下载
-
- )}
+ {/* Stats row */}
+
+ {totalDownloads != null && totalDownloads > 0 && (
+
+
+
+ {totalDownloads.toLocaleString()}
+
+ 次下载
+
+ )}
+
-
+ {/* Carousel indicators */}
+
{slides.map((_, i) => (
+
+ {/* Top-left subtle glow */}
+
+ {/* Bottom-right subtle glow */}
+
diff --git a/src/components/public/MarkdownContent.tsx b/src/components/public/MarkdownContent.tsx
new file mode 100644
index 0000000..b3f7b0f
--- /dev/null
+++ b/src/components/public/MarkdownContent.tsx
@@ -0,0 +1,18 @@
+"use client";
+
+import ReactMarkdown from "react-markdown";
+import remarkGfm from "remark-gfm";
+import rehypeHighlight from "rehype-highlight";
+
+export function MarkdownContent({ content }: { content: string }) {
+ return (
+
+
+ {content}
+
+
+ );
+}
diff --git a/src/components/public/Navbar.tsx b/src/components/public/Navbar.tsx
index fc64527..62456fc 100644
--- a/src/components/public/Navbar.tsx
+++ b/src/components/public/Navbar.tsx
@@ -5,7 +5,7 @@ import { ThemeToggle } from "@/components/ThemeToggle";
export function Navbar() {
return (
-
+
Nanami
-
diff --git a/src/components/public/PageTracker.tsx b/src/components/public/PageTracker.tsx
new file mode 100644
index 0000000..9ca8948
--- /dev/null
+++ b/src/components/public/PageTracker.tsx
@@ -0,0 +1,24 @@
+"use client";
+
+import { useEffect } from "react";
+import { usePathname } from "next/navigation";
+
+export function PageTracker() {
+ const pathname = usePathname();
+
+ useEffect(() => {
+ const controller = new AbortController();
+ fetch("/api/track", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ path: pathname,
+ referrer: document.referrer,
+ }),
+ signal: controller.signal,
+ }).catch(() => {});
+ return () => controller.abort();
+ }, [pathname]);
+
+ return null;
+}
diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx
new file mode 100644
index 0000000..9b8b44b
--- /dev/null
+++ b/src/components/ui/switch.tsx
@@ -0,0 +1,32 @@
+"use client"
+
+import { Switch as SwitchPrimitive } from "@base-ui/react/switch"
+
+import { cn } from "@/lib/utils"
+
+function Switch({
+ className,
+ size = "default",
+ ...props
+}: SwitchPrimitive.Root.Props & {
+ size?: "sm" | "default"
+}) {
+ return (
+
+
+
+ )
+}
+
+export { Switch }
diff --git a/src/img/view_1.png b/src/img/view_1.png
new file mode 100644
index 0000000..183679b
Binary files /dev/null and b/src/img/view_1.png differ
diff --git a/src/img/view_10.png b/src/img/view_10.png
new file mode 100644
index 0000000..7da986b
Binary files /dev/null and b/src/img/view_10.png differ
diff --git a/src/img/view_11.png b/src/img/view_11.png
new file mode 100644
index 0000000..832b44b
Binary files /dev/null and b/src/img/view_11.png differ
diff --git a/src/img/view_12.png b/src/img/view_12.png
new file mode 100644
index 0000000..c667d8d
Binary files /dev/null and b/src/img/view_12.png differ
diff --git a/src/img/view_13.png b/src/img/view_13.png
new file mode 100644
index 0000000..3f2f79b
Binary files /dev/null and b/src/img/view_13.png differ
diff --git a/src/img/view_14.png b/src/img/view_14.png
new file mode 100644
index 0000000..9abbcdc
Binary files /dev/null and b/src/img/view_14.png differ
diff --git a/src/img/view_2.png b/src/img/view_2.png
new file mode 100644
index 0000000..25b29d0
Binary files /dev/null and b/src/img/view_2.png differ
diff --git a/src/img/view_3.png b/src/img/view_3.png
new file mode 100644
index 0000000..95bb9c0
Binary files /dev/null and b/src/img/view_3.png differ
diff --git a/src/img/view_4.png b/src/img/view_4.png
new file mode 100644
index 0000000..b89b6f4
Binary files /dev/null and b/src/img/view_4.png differ
diff --git a/src/img/view_5.png b/src/img/view_5.png
new file mode 100644
index 0000000..28fd85d
Binary files /dev/null and b/src/img/view_5.png differ
diff --git a/src/img/view_6.png b/src/img/view_6.png
new file mode 100644
index 0000000..62eef86
Binary files /dev/null and b/src/img/view_6.png differ
diff --git a/src/img/view_7.png b/src/img/view_7.png
new file mode 100644
index 0000000..8252697
Binary files /dev/null and b/src/img/view_7.png differ
diff --git a/src/img/view_8.png b/src/img/view_8.png
new file mode 100644
index 0000000..a177b79
Binary files /dev/null and b/src/img/view_8.png differ
diff --git a/src/img/view_9.png b/src/img/view_9.png
new file mode 100644
index 0000000..086d774
Binary files /dev/null and b/src/img/view_9.png differ