feat: establish NekoNest Cloud control and relay

This commit is contained in:
2026-08-12 23:25:43 +08:00
commit f27606b709
222 changed files with 71456 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
import type { Metadata } from "next";
import { PublicShell, StatusPill } from "../components/Shells";
import { getPublicCommercialSnapshot } from "@/db/repository";
export const dynamic = "force-dynamic";
export const metadata: Metadata = {
title: "免费公测上线门禁",
description: "免费公测开放前必须完成的安全、主机接入、主体路径、隐私与运维证据。",
};
const categoryName: Record<string, string> = {
security: "安全",
entitlement: "权益",
infrastructure: "基础设施",
billing: "账单与支付",
compliance: "经营与合规",
privacy: "隐私与数据",
operations: "运维",
product: "产品规则",
};
export default async function ReadinessPage() {
const commercial = await getPublicCommercialSnapshot();
return (
<PublicShell>
<section className="subpage-hero readiness-hero">
<div className="subpage-hero-inner">
<StatusPill tone={commercial.blockedP0 ? "danger" : "good"}>{commercial.blockedP0 ? "PUBLIC BETA BLOCKED" : "P0 GATES PASSED"}</StatusPill>
<h1>{commercial.blockedP0 ? "先把免费公测跑稳。" : "免费公测基础门禁已经通过。"}</h1>
<p>{commercial.blockedP0 ? `控制台可以演示数据和管理流程;真实主机接入、生产租户开通和强隐私承诺仍由 ${commercial.blockedP0} 项 P0 证据门禁阻止。` : "P0 证据已经齐全;接下来按邀请范围、支持能力和运营容量逐步开放。"}</p>
</div>
</section>
<section className="section gates-section">
<div className="gates-heading">
<div><span className="eyebrow">P0 BETA GATES</span><h2></h2></div>
<p></p>
</div>
<div className="gates-grid">
{commercial.gates.map((gate) => (
<article className="gate-card" key={gate.key}>
<div className="gate-card-top">
<span>{categoryName[gate.category] ?? gate.category}</span>
<StatusPill tone={gate.status === "passed" ? "good" : gate.status === "in_progress" ? "warn" : "danger"}>
{gate.status === "passed" ? "已通过" : gate.status === "in_progress" ? "进行中" : "阻止"}
</StatusPill>
</div>
<h3>{gate.title}</h3>
<dl>
<div><dt></dt><dd>{gate.owner || "待指定"}</dd></div>
<div><dt></dt><dd>{gate.evidence_url ? <a href={gate.evidence_url}></a> : "尚未提交"}</dd></div>
</dl>
</article>
))}
</div>
</section>
<section className="section legal-section">
<div className="section-heading split-heading">
<div><span className="eyebrow">DOMESTIC BETA BASICS</span><h2></h2></div>
<p>/</p>
</div>
<div className="legal-ledger">
<article><span>01</span><h3></h3><p></p></article>
<article><span>02</span><h3>退</h3><p>退/</p><a href="/privacy"> </a></article>
<article><span>03</span><h3></h3><p> daemon </p></article>
<article><span>04</span><h3></h3><p></p></article>
</div>
</section>
</PublicShell>
);
}