diff --git a/messages/en.json b/messages/en.json
index f6a5ccf9..f5b6b268 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -37,6 +37,21 @@
"title": "Community Posts",
"desc": "Articles written by community members — published instantly, no PR review needed. Topics range from dev notes to technical deep-dives."
}
+ },
+ "community": {
+ "label": "Community Network · Our Ecosystem",
+ "monitor": {
+ "title": "Server Status",
+ "desc": "Live health, load & cert monitoring for every service — guarded by Ailumao."
+ },
+ "mc": {
+ "title": "Minecraft Server",
+ "desc": "Our self-hosted MC survival server. Hop in and build together."
+ },
+ "invest": {
+ "title": "openInvest",
+ "desc": "Multi-asset AI investment committee — four roles debate each call."
+ }
}
},
"footer": {
@@ -44,12 +59,6 @@
"a11y": {
"github": "GitHub",
"discord": "Discord"
- },
- "community": {
- "title": "Community",
- "monitor": "Server Status",
- "mc": "Minecraft Server",
- "invest": "openInvest"
}
},
"notFound": {
diff --git a/messages/zh.json b/messages/zh.json
index cf2e1f7a..20e5dbbf 100644
--- a/messages/zh.json
+++ b/messages/zh.json
@@ -37,6 +37,21 @@
"title": "群友创作",
"desc": "群友随手写的文章,不用等 PR review,发完即在。选题自由,从踩坑记录到技术思考都有。"
}
+ },
+ "community": {
+ "label": "社区网络 · 我们的生态",
+ "monitor": {
+ "title": "服务器状态",
+ "desc": "实时监控全部服务健康、负载与证书,由艾露猫看守。"
+ },
+ "mc": {
+ "title": "Minecraft 服务器",
+ "desc": "内卷地狱自建 MC 生存服,加入一起联机开荒。"
+ },
+ "invest": {
+ "title": "openInvest",
+ "desc": "多资产 AI 投资委员会,4 角色辩论给出决策。"
+ }
}
},
"footer": {
@@ -44,12 +59,6 @@
"a11y": {
"github": "访问 GitHub",
"discord": "加入 Discord 社区"
- },
- "community": {
- "title": "社区",
- "monitor": "服务器状态",
- "mc": "Minecraft 服务器",
- "invest": "openInvest 投资"
}
},
"notFound": {
From 7d808a14505c95bbe3a71eba5cd81482e390ae62 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 16 Jul 2026 15:42:47 +0000
Subject: [PATCH 3/6] =?UTF-8?q?fix(home):=20=E7=A4=BE=E5=8C=BA=E7=89=88?=
=?UTF-8?q?=E5=9D=97=E6=94=B9=E7=B4=A7=E5=87=91=E6=A8=AA=E5=90=91=E5=B8=83?=
=?UTF-8?q?=E5=B1=80=EF=BC=8C=E4=BF=AE=E5=A4=8D=E7=A8=80=E7=96=8F=E9=9A=BE?=
=?UTF-8?q?=E8=AF=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
原版照搬归档的高卡片:3 宽栏配短描述 + flex-1 把链接顶到底,中间大片留白、
阅读性差。改成横向紧凑卡:NET 编号左置基线对齐,标题内联箭头,描述紧跟其下,
去掉强制拉伸和底部空白,描述对比度提到 neutral-300。内容自然高度、不再空旷。
---
app/components/Hero.tsx | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/app/components/Hero.tsx b/app/components/Hero.tsx
index 06dc0df7..ee7bbda3 100644
--- a/app/components/Hero.tsx
+++ b/app/components/Hero.tsx
@@ -1,5 +1,6 @@
import Link from "next/link";
import { Suspense } from "react";
+import { ArrowRight } from "lucide-react";
import { getTranslations } from "next-intl/server";
import ZoteroFeedLazy from "@/app/components/ZoteroFeedLazy";
import { Contribute } from "@/app/components/Contribute";
@@ -163,7 +164,7 @@ export async function Hero() {
@@ -171,23 +172,25 @@ export async function Hero() {
href={s.href}
target="_blank"
rel="noopener noreferrer"
- className="p-8 hover:bg-neutral-100 dark:hover:bg-neutral-900 transition-colors h-full flex flex-col hard-shadow-hover"
+ className="flex items-baseline gap-4 p-6 hover:bg-neutral-100 dark:hover:bg-neutral-900 transition-colors hard-shadow-hover"
data-umami-event="community_click"
data-umami-event-target={s.key}
data-umami-event-location="hero"
>
-
+
NET-0{idx + 1}
-
-
- {s.title}
-
-
- {s.desc}
-
-
- Visit →
-
+
+
+
+
+ {s.title}
+
+
+
+
+ {s.desc}
+
+
))}
From ca57ffd974b54a8dfc043205c9c61a96d082e980 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 16 Jul 2026 16:00:30 +0000
Subject: [PATCH 4/6] =?UTF-8?q?feat(home):=20=E7=A4=BE=E5=8C=BA=E7=89=88?=
=?UTF-8?q?=E5=9D=97=E6=94=B9=E7=BC=96=E8=BE=91=E4=BD=93=E5=89=8D=E5=93=A8?=
=?UTF-8?q?=E6=B3=A2=E6=AE=B5=20+=20=E6=BB=9A=E5=8A=A8=E6=8F=AD=E7=A4=BA/?=
=?UTF-8?q?=E5=8F=8D=E8=89=B2=20wipe=20=E5=8A=A8=E6=95=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
反馈:三个并排一样的格子没设计感,想要下滑时的交互变换。改成三条全宽波段
(CommunityNetwork client 组件,motion/react):
- 站名超大衬线体做编辑体信号,功能呼号(Live Ops / Game Node / AI Desk)
取代无意义的 01/02/03 序号;monitor 带呼吸红点(它本就是实时状态台)
- 滚动进入视口错峰升起(whileInView + stagger),hover 墨色从左漫满整条
并反色(复用站点反色 idiom 做成 wipe)
- mounted 门控 + useReducedMotion:SSR/无 JS/reduced-motion 直接可见,
不把内容藏死;呼吸点与 wipe 都 motion-reduce 降级
本地:typecheck / lint(两文件干净) / build 全过;首页仍 ● /[locale] SSG
(client 组件只 hydrate 不破坏静态);Playwright 实测静止 + hover 反色两态。
---
app/components/CommunityNetwork.tsx | 108 ++++++++++++++++++++++++++++
app/components/Hero.tsx | 67 +++--------------
2 files changed, 119 insertions(+), 56 deletions(-)
create mode 100644 app/components/CommunityNetwork.tsx
diff --git a/app/components/CommunityNetwork.tsx b/app/components/CommunityNetwork.tsx
new file mode 100644
index 00000000..e4d120bc
--- /dev/null
+++ b/app/components/CommunityNetwork.tsx
@@ -0,0 +1,108 @@
+"use client";
+
+import { useEffect, useState } from "react";
+import Image from "next/image";
+import { ArrowUpRight } from "lucide-react";
+import { motion, useReducedMotion } from "motion/react";
+import { cn } from "@/lib/utils";
+
+type Outpost = {
+ key: string;
+ callsign: string;
+ title: string;
+ desc: string;
+ href: string;
+ live?: boolean;
+};
+
+/**
+ * 首页"社区网络"版块:三个生态前哨(monitor / mc / openInvest)做成全宽波段,
+ * 滚动进入视口时错峰升起,hover 时墨色从左漫过整条(反色 wipe)。
+ * SSR/无 JS/reduced-motion 时直接渲染可见状态(mounted 门控),不把内容藏死。
+ */
+export function CommunityNetwork({
+ label,
+ outposts,
+}: {
+ label: string;
+ outposts: Outpost[];
+}) {
+ const reduce = useReducedMotion();
+ const [mounted, setMounted] = useState(false);
+ useEffect(() => setMounted(true), []);
+ const animate = mounted && !reduce;
+
+ return (
+
+ );
+}
diff --git a/app/components/Hero.tsx b/app/components/Hero.tsx
index ee7bbda3..4170e071 100644
--- a/app/components/Hero.tsx
+++ b/app/components/Hero.tsx
@@ -1,8 +1,8 @@
import Link from "next/link";
import { Suspense } from "react";
-import { ArrowRight } from "lucide-react";
import { getTranslations } from "next-intl/server";
import ZoteroFeedLazy from "@/app/components/ZoteroFeedLazy";
+import { CommunityNetwork } from "@/app/components/CommunityNetwork";
import { Contribute } from "@/app/components/Contribute";
import { ShareLink } from "@/app/components/ShareLink";
import Image from "next/image";
@@ -42,26 +42,25 @@ export async function Hero() {
},
];
- const communitySites: {
- key: string;
- title: string;
- desc: string;
- href: string;
- }[] = [
+ const communitySites = [
{
key: "monitor",
+ callsign: "Live Ops",
title: t("community.monitor.title"),
desc: t("community.monitor.desc"),
href: "https://monitor.involutionhell.com/",
+ live: true,
},
{
key: "mc",
+ callsign: "Game Node",
title: t("community.mc.title"),
desc: t("community.mc.desc"),
href: "https://mc.involutionhell.com/",
},
{
key: "invest",
+ callsign: "AI Desk",
title: t("community.invest.title"),
desc: t("community.invest.desc"),
href: "https://openinvest.involutionhell.com/",
@@ -147,55 +146,11 @@ export async function Hero() {