new cursor, speedtest at another page, remove rubbish

This commit is contained in:
2026-05-11 20:22:27 +07:00
parent 3bf53a90fd
commit 31f354d9ca
27 changed files with 194 additions and 24458 deletions
+2 -2
View File
@@ -123,12 +123,12 @@ export function NodesClient({ dict }: { dict: Dictionary["nodes"] }) {
hidden: { opacity: 0, y: 20 },
show: { opacity: 1, y: 0, transition: { type: "spring" } },
}}
className={`bg-card/40 backdrop-blur-xl border rounded-[2rem] p-6 relative overflow-hidden transition-all duration-300 ${
className={`cursor-net-move bg-card/40 backdrop-blur-xl border rounded-[2rem] p-6 relative overflow-hidden transition-all duration-300 ${
node.status === "online"
? "border-border/50 hover:border-primary/50 hover:shadow-[0_0_30px_rgba(0,240,255,0.1)]"
: node.status === "full"
? "border-secondary/30 opacity-80"
: "border-destructive/30 opacity-60 grayscale-[50%]"
: "border-destructive/30 opacity-60 grayscale-50"
}`}
>
<div className="flex justify-between items-start mb-6">
+3 -16
View File
@@ -3,34 +3,25 @@ import dynamic from "next/dynamic";
import { getDictionary } from "@/lib/dictionaries";
import { Hero } from "@/components/sections/Hero";
import { Features } from "@/components/sections/Features";
import { SpeedtestClient } from "@/components/sections/SpeedtestClient";
// Легкий скелетон для плавности
const SectionSkeleton = () => (
<div className="h-[500px] w-full animate-pulse bg-card/20 rounded-3xl my-10" />
);
// Ленивая загрузка тяжелых секций
const Pricing = dynamic(
() => import("@/components/sections/Pricing").then((mod) => mod.Pricing),
{
loading: () => <SectionSkeleton />,
},
{ loading: () => <SectionSkeleton /> },
);
const FAQ = dynamic(
() => import("@/components/sections/Faq").then((mod) => mod.FAQ),
{
loading: () => <SectionSkeleton />,
},
{ loading: () => <SectionSkeleton /> },
);
const TerminalGuestbook = dynamic(
() =>
import("@/components/sections/TerminalGuestbook").then(
(mod) => mod.TerminalGuestbook,
),
{
loading: () => <SectionSkeleton />,
},
{ loading: () => <SectionSkeleton /> },
);
const BlogPreview = dynamic(() =>
import("@/components/sections/BlogPreview").then((mod) => mod.BlogPreview),
@@ -52,10 +43,6 @@ export default async function Home({
<FAQ dict={dict.faq} lang={lang} />
<TerminalGuestbook dict={dict.guestbook} />
<section className="container mx-auto px-4 py-24 sm:py-32 relative z-10">
<SpeedtestClient dict={dict.speedtest} />
</section>
<Suspense fallback={<SectionSkeleton />}>
<BlogPreview lang={lang} dict={dict.blog} />
</Suspense>
+18
View File
@@ -0,0 +1,18 @@
import { getDictionary } from "@/lib/dictionaries";
import { SpeedtestClient } from "@/components/sections/SpeedtestClient";
export default async function SpeedtestPage({
params,
}: {
params: Promise<{ lang: string }>;
}) {
const { lang } = await params;
const dict = await getDictionary(lang);
return (
<main className="min-h-screen pt-32 pb-20 container mx-auto px-4 relative z-10 flex items-center justify-center">
<div className="absolute inset-0 bg-[radial-gradient(circle_at_center,_var(--tw-gradient-stops))] from-primary/5 via-transparent to-transparent -z-10 blur-3xl pointer-events-none" />
<SpeedtestClient dict={dict.speedtest} />
</main>
);
}