Skip to content

Commit 2eb00f4

Browse files
refactor(home): 社区版块从 footer 移到首页正文(CTA 与归档之间)
按 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 之后、归档之前,三链齐全。
1 parent 1e0e75a commit 2eb00f4

4 files changed

Lines changed: 105 additions & 55 deletions

File tree

app/components/Footer.tsx

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import Link from "next/link";
2-
import Image from "next/image";
32
import { getTranslations } from "next-intl/server";
43
import { Github, MessageCircle } from "lucide-react";
54
import { BrandMark } from "./BrandMark";
@@ -56,7 +55,7 @@ export async function Footer() {
5655
</div>
5756

5857
{/* Navigation */}
59-
<div className="md:col-span-7 grid grid-cols-2 md:grid-cols-4 gap-8">
58+
<div className="md:col-span-7 grid grid-cols-2 md:grid-cols-3 gap-8">
6059
<div>
6160
<h3 className="font-sans text-xs font-bold uppercase tracking-widest mb-6 border-b border-[var(--foreground)] pb-2 text-[var(--foreground)]">
6261
Archives
@@ -113,47 +112,6 @@ export async function Footer() {
113112
</ul>
114113
</div>
115114

116-
{/* 社区 Community — IH 生态站点 */}
117-
<div>
118-
<h3 className="font-sans text-xs font-bold uppercase tracking-widest mb-6 border-b border-[var(--foreground)] pb-2 text-[var(--foreground)] flex items-center gap-2">
119-
<Image
120-
src="/friends/ailumao.png"
121-
alt=""
122-
width={20}
123-
height={20}
124-
className="[image-rendering:pixelated]"
125-
/>
126-
{t("community.title")}
127-
</h3>
128-
<ul className="space-y-3 font-body text-sm text-[var(--foreground)]">
129-
{[
130-
{
131-
key: "monitor",
132-
href: "https://monitor.involutionhell.com/",
133-
},
134-
{ key: "mc", href: "https://mc.involutionhell.com/" },
135-
{
136-
key: "invest",
137-
href: "https://openinvest.involutionhell.com/",
138-
},
139-
].map(({ key, href }) => (
140-
<li key={key}>
141-
<a
142-
href={href}
143-
target="_blank"
144-
rel="noopener noreferrer"
145-
className="hover:text-[#CC0000] transition-colors"
146-
data-umami-event="community_click"
147-
data-umami-event-target={key}
148-
data-umami-event-location="footer"
149-
>
150-
{t(`community.${key}`)}
151-
</a>
152-
</li>
153-
))}
154-
</ul>
155-
</div>
156-
157115
<div>
158116
<h3 className="font-sans text-xs font-bold uppercase tracking-widest mb-6 border-b border-[var(--foreground)] pb-2 text-[var(--foreground)]">
159117
Resources

app/components/Hero.tsx

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,32 @@ export async function Hero() {
4141
},
4242
];
4343

44+
const communitySites: {
45+
key: string;
46+
title: string;
47+
desc: string;
48+
href: string;
49+
}[] = [
50+
{
51+
key: "monitor",
52+
title: t("community.monitor.title"),
53+
desc: t("community.monitor.desc"),
54+
href: "https://monitor.involutionhell.com/",
55+
},
56+
{
57+
key: "mc",
58+
title: t("community.mc.title"),
59+
desc: t("community.mc.desc"),
60+
href: "https://mc.involutionhell.com/",
61+
},
62+
{
63+
key: "invest",
64+
title: t("community.invest.title"),
65+
desc: t("community.invest.desc"),
66+
href: "https://openinvest.involutionhell.com/",
67+
},
68+
];
69+
4470
return (
4571
<section className="relative pt-32 pb-16 newsprint-texture transition-colors duration-300">
4672
<div className="container relative mx-auto px-6">
@@ -120,6 +146,54 @@ export async function Hero() {
120146
</div>
121147
</div>
122148

149+
{/* Community Network - IH 生态站点 */}
150+
<div className="mt-16 border-t-4 border-[var(--foreground)] transition-colors duration-300">
151+
<div className="flex items-center gap-2 py-4 font-mono text-xs uppercase tracking-widest border-b border-[var(--foreground)] text-[var(--foreground)]">
152+
<Image
153+
src="/friends/ailumao.png"
154+
alt=""
155+
width={22}
156+
height={22}
157+
className="[image-rendering:pixelated]"
158+
/>
159+
{t("community.label")}
160+
</div>
161+
<ul className="grid grid-cols-1 md:grid-cols-3">
162+
{communitySites.map((s, idx) => (
163+
<li
164+
key={s.title}
165+
className={cn(
166+
"group border-b border-[var(--foreground)] md:border-r last:border-r-0 h-full",
167+
idx === 2 && "md:border-r-0",
168+
)}
169+
>
170+
<a
171+
href={s.href}
172+
target="_blank"
173+
rel="noopener noreferrer"
174+
className="p-8 hover:bg-neutral-100 dark:hover:bg-neutral-900 transition-colors h-full flex flex-col hard-shadow-hover"
175+
data-umami-event="community_click"
176+
data-umami-event-target={s.key}
177+
data-umami-event-location="hero"
178+
>
179+
<div className="font-mono text-[10px] text-neutral-400 mb-4">
180+
NET-0{idx + 1}
181+
</div>
182+
<div className="text-2xl font-serif font-bold mb-2 uppercase text-[var(--foreground)]">
183+
{s.title}
184+
</div>
185+
<p className="text-sm font-body text-neutral-600 dark:text-neutral-400 flex-1 leading-relaxed">
186+
{s.desc}
187+
</p>
188+
<div className="mt-6 font-sans text-[10px] uppercase tracking-widest font-bold text-[var(--foreground)] group-hover:text-[#CC0000]">
189+
Visit &rarr;
190+
</div>
191+
</a>
192+
</li>
193+
))}
194+
</ul>
195+
</div>
196+
123197
{/* Top-level directories - Grid with shared borders */}
124198
<div className="mt-16 border-t-4 border-[var(--foreground)] transition-colors duration-300">
125199
<div className="py-4 font-mono text-xs uppercase tracking-widest border-b border-[var(--foreground)] text-[var(--foreground)]">

messages/en.json

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,28 @@
3737
"title": "Community Posts",
3838
"desc": "Articles written by community members — published instantly, no PR review needed. Topics range from dev notes to technical deep-dives."
3939
}
40+
},
41+
"community": {
42+
"label": "Community Network · Our Ecosystem",
43+
"monitor": {
44+
"title": "Server Status",
45+
"desc": "Live health, load & cert monitoring for every service — guarded by Ailumao."
46+
},
47+
"mc": {
48+
"title": "Minecraft Server",
49+
"desc": "Our self-hosted MC survival server. Hop in and build together."
50+
},
51+
"invest": {
52+
"title": "openInvest",
53+
"desc": "Multi-asset AI investment committee — four roles debate each call."
54+
}
4055
}
4156
},
4257
"footer": {
4358
"brand": "A free, open learning community built by developers. We believe collective effort and radical openness can break down knowledge monopolies — and build something fairer.",
4459
"a11y": {
4560
"github": "GitHub",
4661
"discord": "Discord"
47-
},
48-
"community": {
49-
"title": "Community",
50-
"monitor": "Server Status",
51-
"mc": "Minecraft Server",
52-
"invest": "openInvest"
5362
}
5463
},
5564
"notFound": {

messages/zh.json

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,28 @@
3737
"title": "群友创作",
3838
"desc": "群友随手写的文章,不用等 PR review,发完即在。选题自由,从踩坑记录到技术思考都有。"
3939
}
40+
},
41+
"community": {
42+
"label": "社区网络 · 我们的生态",
43+
"monitor": {
44+
"title": "服务器状态",
45+
"desc": "实时监控全部服务健康、负载与证书,由艾露猫看守。"
46+
},
47+
"mc": {
48+
"title": "Minecraft 服务器",
49+
"desc": "内卷地狱自建 MC 生存服,加入一起联机开荒。"
50+
},
51+
"invest": {
52+
"title": "openInvest",
53+
"desc": "多资产 AI 投资委员会,4 角色辩论给出决策。"
54+
}
4055
}
4156
},
4257
"footer": {
4358
"brand": "一个由开发者自发组织的、完全免费且开放的学习社区。我们相信通过集体协作与开放共享,可以打破技术垄断,创造一个更公平的学习环境。",
4459
"a11y": {
4560
"github": "访问 GitHub",
4661
"discord": "加入 Discord 社区"
47-
},
48-
"community": {
49-
"title": "社区",
50-
"monitor": "服务器状态",
51-
"mc": "Minecraft 服务器",
52-
"invest": "openInvest 投资"
5362
}
5463
},
5564
"notFound": {

0 commit comments

Comments
 (0)