From 1e0e75a7d47c64882e56c410b8e7491f0361328d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 18:57:11 +0000 Subject: [PATCH 1/6] =?UTF-8?q?feat(footer):=20=E5=8A=A0=20IH=20=E7=94=9F?= =?UTF-8?q?=E6=80=81=E7=A4=BE=E5=8C=BA=E6=A0=8F=EF=BC=88monitor=20/=20mc?= =?UTF-8?q?=20/=20openInvest=EF=BC=89+=20=E8=89=BE=E9=9C=B2=E7=8C=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 首页 Footer 导航区新增'社区 Community'栏目,与 Archives/Resources 同款列表 UI, 依次链接 monitor.involutionhell.com(服务器状态)、mc.involutionhell.com、 openinvest.involutionhell.com;栏目标题带艾露猫像素头像(public/friends/ailumao.png)。 i18n zh/en 双语;umami 埋点 community_click。 本地验证:pnpm typecheck / lint(Footer 无问题) / build 全过;build 表首页 仍为 ● /[locale] SSG,未回归 ƒ Dynamic;prod server 实测 zh/en 两 locale 均 正确渲染三链与顺序。 --- app/components/Footer.tsx | 44 ++++++++++++++++++++++++++++++++++++- messages/en.json | 6 +++++ messages/zh.json | 6 +++++ public/friends/ailumao.png | Bin 0 -> 10156 bytes 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 public/friends/ailumao.png diff --git a/app/components/Footer.tsx b/app/components/Footer.tsx index a11cb875..1e9b4c27 100644 --- a/app/components/Footer.tsx +++ b/app/components/Footer.tsx @@ -1,4 +1,5 @@ import Link from "next/link"; +import Image from "next/image"; import { getTranslations } from "next-intl/server"; import { Github, MessageCircle } from "lucide-react"; import { BrandMark } from "./BrandMark"; @@ -55,7 +56,7 @@ export async function Footer() { {/* Navigation */} -
+

Archives @@ -112,6 +113,47 @@ export async function Footer() {

+ {/* 社区 Community — IH 生态站点 */} +
+

+ + {t("community.title")} +

+
    + {[ + { + key: "monitor", + href: "https://monitor.involutionhell.com/", + }, + { key: "mc", href: "https://mc.involutionhell.com/" }, + { + key: "invest", + href: "https://openinvest.involutionhell.com/", + }, + ].map(({ key, href }) => ( +
  • + + {t(`community.${key}`)} + +
  • + ))} +
+
+

Resources diff --git a/messages/en.json b/messages/en.json index afb37cdd..f6a5ccf9 100644 --- a/messages/en.json +++ b/messages/en.json @@ -44,6 +44,12 @@ "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 8190779a..cf2e1f7a 100644 --- a/messages/zh.json +++ b/messages/zh.json @@ -44,6 +44,12 @@ "a11y": { "github": "访问 GitHub", "discord": "加入 Discord 社区" + }, + "community": { + "title": "社区", + "monitor": "服务器状态", + "mc": "Minecraft 服务器", + "invest": "openInvest 投资" } }, "notFound": { diff --git a/public/friends/ailumao.png b/public/friends/ailumao.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb1d32c3778bd21b76cb264a240dd8f9ceb2b32 GIT binary patch literal 10156 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 a^nU^3<9>>a<+K|B0000 Date: Thu, 16 Jul 2026 15:10:19 +0000 Subject: [PATCH 2/6] =?UTF-8?q?refactor(home):=20=E7=A4=BE=E5=8C=BA?= =?UTF-8?q?=E7=89=88=E5=9D=97=E4=BB=8E=20footer=20=E7=A7=BB=E5=88=B0?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=AD=A3=E6=96=87=EF=BC=88CTA=20=E4=B8=8E?= =?UTF-8?q?=E5=BD=92=E6=A1=A3=E4=B9=8B=E9=97=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按 UI 反馈:footer 栏目位置不够显眼。改成首页 Hero 里的独立版块, 插在双 CTA 行与 CLASSIFIED ARCHIVES 之间,把归档网格挤下去。 - Hero 新增 Community Network 版块:与归档网格同款报纸设计(border-t-4 + mono 标签栏 + 分栏卡片),3 列列 monitor / mc / openInvest,NET-01~03 编号, Visit → 外链;标签栏带艾露猫像素头像 - Footer 的 community 栏目撤回(恢复 3 列导航原样) - i18n 从 footer.community 迁到 hero.community(zh/en) 本地:typecheck / lint(Hero+Footer 干净) / build 全过;build 表首页仍 ● /[locale] SSG;prod server 实测版块位于 CTA 之后、归档之前,三链齐全。 --- app/components/Footer.tsx | 44 +---------------------- app/components/Hero.tsx | 74 +++++++++++++++++++++++++++++++++++++++ messages/en.json | 21 +++++++---- messages/zh.json | 21 +++++++---- 4 files changed, 105 insertions(+), 55 deletions(-) diff --git a/app/components/Footer.tsx b/app/components/Footer.tsx index 1e9b4c27..a11cb875 100644 --- a/app/components/Footer.tsx +++ b/app/components/Footer.tsx @@ -1,5 +1,4 @@ import Link from "next/link"; -import Image from "next/image"; import { getTranslations } from "next-intl/server"; import { Github, MessageCircle } from "lucide-react"; import { BrandMark } from "./BrandMark"; @@ -56,7 +55,7 @@ export async function Footer() {

{/* Navigation */} -
+

Archives @@ -113,47 +112,6 @@ export async function Footer() {

- {/* 社区 Community — IH 生态站点 */} -
-

- - {t("community.title")} -

-
    - {[ - { - key: "monitor", - href: "https://monitor.involutionhell.com/", - }, - { key: "mc", href: "https://mc.involutionhell.com/" }, - { - key: "invest", - href: "https://openinvest.involutionhell.com/", - }, - ].map(({ key, href }) => ( -
  • - - {t(`community.${key}`)} - -
  • - ))} -
-
-

Resources diff --git a/app/components/Hero.tsx b/app/components/Hero.tsx index 413a914b..06dc0df7 100644 --- a/app/components/Hero.tsx +++ b/app/components/Hero.tsx @@ -41,6 +41,32 @@ export async function Hero() { }, ]; + const communitySites: { + key: string; + title: string; + desc: string; + href: string; + }[] = [ + { + key: "monitor", + title: t("community.monitor.title"), + desc: t("community.monitor.desc"), + href: "https://monitor.involutionhell.com/", + }, + { + key: "mc", + title: t("community.mc.title"), + desc: t("community.mc.desc"), + href: "https://mc.involutionhell.com/", + }, + { + key: "invest", + title: t("community.invest.title"), + desc: t("community.invest.desc"), + href: "https://openinvest.involutionhell.com/", + }, + ]; + return (
@@ -120,6 +146,54 @@ export async function Hero() {

+ {/* Community Network - IH 生态站点 */} +
+
+ + {t("community.label")} +
+ +
+ {/* Top-level directories - Grid with shared borders */}
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 ( +
    +
    + + {label} +
    + + +
    + ); +} 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() {
    - {/* Community Network - IH 生态站点 */} -
    -
    - - {t("community.label")} -
    - -
    + {/* Community Network - IH 生态站点(滚动揭示 + 反色 wipe,见 CommunityNetwork) */} + {/* Top-level directories - Grid with shared borders */}
    From 31c4dd8ee571ffed4930d85af1bd2b3ec99f08b4 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:06:06 +0000 Subject: [PATCH 5/6] =?UTF-8?q?copy(home):=20openInvest=20=E6=98=8E?= =?UTF-8?q?=E7=A1=AE=E4=B8=BA=E5=BC=80=E6=BA=90=E5=AE=9E=E9=AA=8C=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E3=80=81=E9=9D=9E=E6=8A=95=E8=B5=84=E5=BB=BA=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 公益教育社区首页不宜出现无限定的金融项目。openInvest 描述加'开源实验项目 … 仅供研究,非投资建议',呼号 AI Desk → AI Lab 去掉交易台意味、强调研究属性。 --- app/components/Hero.tsx | 2 +- messages/en.json | 2 +- messages/zh.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/components/Hero.tsx b/app/components/Hero.tsx index 4170e071..c1363604 100644 --- a/app/components/Hero.tsx +++ b/app/components/Hero.tsx @@ -60,7 +60,7 @@ export async function Hero() { }, { key: "invest", - callsign: "AI Desk", + callsign: "AI Lab", title: t("community.invest.title"), desc: t("community.invest.desc"), href: "https://openinvest.involutionhell.com/", diff --git a/messages/en.json b/messages/en.json index f5b6b268..343896ed 100644 --- a/messages/en.json +++ b/messages/en.json @@ -50,7 +50,7 @@ }, "invest": { "title": "openInvest", - "desc": "Multi-asset AI investment committee — four roles debate each call." + "desc": "Open-source experiment — a multi-asset AI committee for research. Not investment advice." } } }, diff --git a/messages/zh.json b/messages/zh.json index 20e5dbbf..223a0956 100644 --- a/messages/zh.json +++ b/messages/zh.json @@ -50,7 +50,7 @@ }, "invest": { "title": "openInvest", - "desc": "多资产 AI 投资委员会,4 角色辩论给出决策。" + "desc": "开源实验项目:多资产 AI 投资委员会,4 角色辩论。仅供研究,非投资建议。" } } }, From 434dc5a3a906762550cb346c7629dd822a19552f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 16 Jul 2026 17:50:39 +0000 Subject: [PATCH 6/6] =?UTF-8?q?fix(home):=20=E5=8E=BB=E6=8E=89=20mounted?= =?UTF-8?q?=20=E9=97=A8=E6=8E=A7=E4=BF=AE=20CI=20lint=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit react-hooks 7 规则禁止 effect 内同步 setState(set-state-in-effect)。 mounted 门控触发该 error 导致 CI build 挂。改为只用 useReducedMotion—— SSR 首渲染与客户端一致(无 hydration 错配),动效行为不变。 --- app/components/CommunityNetwork.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/components/CommunityNetwork.tsx b/app/components/CommunityNetwork.tsx index e4d120bc..b6beb80c 100644 --- a/app/components/CommunityNetwork.tsx +++ b/app/components/CommunityNetwork.tsx @@ -1,6 +1,5 @@ "use client"; -import { useEffect, useState } from "react"; import Image from "next/image"; import { ArrowUpRight } from "lucide-react"; import { motion, useReducedMotion } from "motion/react"; @@ -18,7 +17,7 @@ type Outpost = { /** * 首页"社区网络"版块:三个生态前哨(monitor / mc / openInvest)做成全宽波段, * 滚动进入视口时错峰升起,hover 时墨色从左漫过整条(反色 wipe)。 - * SSR/无 JS/reduced-motion 时直接渲染可见状态(mounted 门控),不把内容藏死。 + * reduced-motion 时跳过入场动画,直接渲染最终可见状态。 */ export function CommunityNetwork({ label, @@ -28,9 +27,7 @@ export function CommunityNetwork({ outposts: Outpost[]; }) { const reduce = useReducedMotion(); - const [mounted, setMounted] = useState(false); - useEffect(() => setMounted(true), []); - const animate = mounted && !reduce; + const animate = !reduce; return (