diff --git a/.cspell.json b/.cspell.json new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore index 6e52ada..19d55a2 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,6 @@ pnpm-debug.log* # macOS-specific files .DS_Store + +# Playwright MCP artifacts +.playwright-mcp/ diff --git a/.playwright-mcp/console-2026-03-16T04-19-54-407Z.log b/.playwright-mcp/console-2026-03-16T04-19-54-407Z.log new file mode 100644 index 0000000..320acb6 --- /dev/null +++ b/.playwright-mcp/console-2026-03-16T04-19-54-407Z.log @@ -0,0 +1 @@ +[ 89ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://localhost:5173/favicon.ico:0 diff --git a/.playwright-mcp/console-2026-03-16T04-20-14-905Z.log b/.playwright-mcp/console-2026-03-16T04-20-14-905Z.log new file mode 100644 index 0000000..df771d1 --- /dev/null +++ b/.playwright-mcp/console-2026-03-16T04-20-14-905Z.log @@ -0,0 +1 @@ +[ 379ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://localhost:5175/favicon.ico:0 diff --git a/.playwright-mcp/console-2026-03-16T04-24-12-088Z.log b/.playwright-mcp/console-2026-03-16T04-24-12-088Z.log new file mode 100644 index 0000000..30583c8 --- /dev/null +++ b/.playwright-mcp/console-2026-03-16T04-24-12-088Z.log @@ -0,0 +1,3 @@ +[ 81912ms] [ERROR] %cAstro background: linear-gradient(66.77deg, #D83333 0%, #F041FF 100%); color: white; padding-inline: 4px; border-radius: 2px; font-family: monospace; Error while running audit's match function: TypeError: Failed to fetch @ http://localhost:4322/node_modules/.pnpm/astro@5.16.0_@types+node@24.10.1_jiti@2.4.2_rollup@4.53.3_typescript@5.8.3_yaml@2.8.0/node_modules/astro/dist/runtime/client/dev-toolbar/settings.js?v=e30bd504:17 +[ 699585ms] [ERROR] Failed to load resource: the server responded with a status of 500 (Internal Server Error) @ http://localhost:4322/:0 +[ 699609ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://localhost:4322/favicon.ico:0 diff --git a/.playwright-mcp/page-2026-03-16T03-49-12-135Z.png b/.playwright-mcp/page-2026-03-16T03-49-12-135Z.png new file mode 100644 index 0000000..0110a29 Binary files /dev/null and b/.playwright-mcp/page-2026-03-16T03-49-12-135Z.png differ diff --git a/.playwright-mcp/page-2026-03-16T03-49-31-833Z.png b/.playwright-mcp/page-2026-03-16T03-49-31-833Z.png new file mode 100644 index 0000000..edad987 Binary files /dev/null and b/.playwright-mcp/page-2026-03-16T03-49-31-833Z.png differ diff --git a/.playwright-mcp/page-2026-03-16T03-50-39-014Z.png b/.playwright-mcp/page-2026-03-16T03-50-39-014Z.png new file mode 100644 index 0000000..7a026aa Binary files /dev/null and b/.playwright-mcp/page-2026-03-16T03-50-39-014Z.png differ diff --git a/.playwright-mcp/page-2026-03-16T04-09-20-116Z.png b/.playwright-mcp/page-2026-03-16T04-09-20-116Z.png new file mode 100644 index 0000000..f7f7d99 Binary files /dev/null and b/.playwright-mcp/page-2026-03-16T04-09-20-116Z.png differ diff --git a/cspell.json b/cspell.json index efe88c3..aa4c982 100644 --- a/cspell.json +++ b/cspell.json @@ -25,6 +25,23 @@ "ical", "ICAL", "vevents", - "getAllSubcomponents" + "getAllSubcomponents", + "fullimg", + "imgcard", + "NWDC", + "WWDC", + "wechat", + "tcqhxia", + "Pulumi", + "Supabase", + "Pocketbase", + "pocketbase", + "BaaS", + "IaC", + "nwdc", + "lec", + "nbtca", + "wordmark", + "Ningbo" ] } \ No newline at end of file diff --git a/public/favicon.svg b/public/favicon.svg index 0f39062..12cec1a 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1,13 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/public/static/images/about/hero.jpg b/public/static/images/about/hero.jpg new file mode 100644 index 0000000..9c472fe Binary files /dev/null and b/public/static/images/about/hero.jpg differ diff --git a/public/static/images/about/mission.jpg b/public/static/images/about/mission.jpg new file mode 100644 index 0000000..00dc480 Binary files /dev/null and b/public/static/images/about/mission.jpg differ diff --git a/public/static/images/homepage/events.jpg b/public/static/images/homepage/events.jpg new file mode 100644 index 0000000..900d018 Binary files /dev/null and b/public/static/images/homepage/events.jpg differ diff --git a/public/static/images/homepage/gallery-1.jpg b/public/static/images/homepage/gallery-1.jpg new file mode 100644 index 0000000..92c824b Binary files /dev/null and b/public/static/images/homepage/gallery-1.jpg differ diff --git a/public/static/images/homepage/gallery-2.jpg b/public/static/images/homepage/gallery-2.jpg new file mode 100644 index 0000000..f4f64f4 Binary files /dev/null and b/public/static/images/homepage/gallery-2.jpg differ diff --git a/public/static/images/homepage/gallery-3.jpg b/public/static/images/homepage/gallery-3.jpg new file mode 100644 index 0000000..6e5bc3b Binary files /dev/null and b/public/static/images/homepage/gallery-3.jpg differ diff --git a/public/static/images/homepage/gallery-4.jpg b/public/static/images/homepage/gallery-4.jpg new file mode 100644 index 0000000..251ae00 Binary files /dev/null and b/public/static/images/homepage/gallery-4.jpg differ diff --git a/public/static/images/homepage/gallery-5.jpg b/public/static/images/homepage/gallery-5.jpg new file mode 100644 index 0000000..ea63ed3 Binary files /dev/null and b/public/static/images/homepage/gallery-5.jpg differ diff --git a/public/static/images/homepage/gallery-6.jpg b/public/static/images/homepage/gallery-6.jpg new file mode 100644 index 0000000..67cdd49 Binary files /dev/null and b/public/static/images/homepage/gallery-6.jpg differ diff --git a/public/static/images/homepage/hero.jpg b/public/static/images/homepage/hero.jpg new file mode 100644 index 0000000..900d018 Binary files /dev/null and b/public/static/images/homepage/hero.jpg differ diff --git a/public/static/images/homepage/lecture.jpg b/public/static/images/homepage/lecture.jpg new file mode 100644 index 0000000..1f4ac09 Binary files /dev/null and b/public/static/images/homepage/lecture.jpg differ diff --git a/public/static/images/homepage/nwdc.jpg b/public/static/images/homepage/nwdc.jpg new file mode 100644 index 0000000..2e46ceb Binary files /dev/null and b/public/static/images/homepage/nwdc.jpg differ diff --git a/public/static/images/homepage/repair.jpg b/public/static/images/homepage/repair.jpg new file mode 100644 index 0000000..0ab402c Binary files /dev/null and b/public/static/images/homepage/repair.jpg differ diff --git a/public/static/images/homepage/repair.png b/public/static/images/homepage/repair.png new file mode 100644 index 0000000..4aa7958 Binary files /dev/null and b/public/static/images/homepage/repair.png differ diff --git a/public/static/images/homepage/tech.jpg b/public/static/images/homepage/tech.jpg new file mode 100644 index 0000000..a55a2b5 Binary files /dev/null and b/public/static/images/homepage/tech.jpg differ diff --git a/public/static/images/homepage/welcome.jpg b/public/static/images/homepage/welcome.jpg new file mode 100644 index 0000000..d053481 Binary files /dev/null and b/public/static/images/homepage/welcome.jpg differ diff --git a/public/static/images/joinus/gallery-1.jpg b/public/static/images/joinus/gallery-1.jpg new file mode 100644 index 0000000..9c472fe Binary files /dev/null and b/public/static/images/joinus/gallery-1.jpg differ diff --git a/public/static/images/joinus/gallery-2.jpg b/public/static/images/joinus/gallery-2.jpg new file mode 100644 index 0000000..32a6e24 Binary files /dev/null and b/public/static/images/joinus/gallery-2.jpg differ diff --git a/public/static/images/joinus/gallery-3.jpg b/public/static/images/joinus/gallery-3.jpg new file mode 100644 index 0000000..f8c90a1 Binary files /dev/null and b/public/static/images/joinus/gallery-3.jpg differ diff --git a/public/static/images/joinus/gallery-4.jpg b/public/static/images/joinus/gallery-4.jpg new file mode 100644 index 0000000..9d919b2 Binary files /dev/null and b/public/static/images/joinus/gallery-4.jpg differ diff --git a/public/static/images/joinus/gallery-5.jpg b/public/static/images/joinus/gallery-5.jpg new file mode 100644 index 0000000..20e2cd8 Binary files /dev/null and b/public/static/images/joinus/gallery-5.jpg differ diff --git a/public/static/images/joinus/gallery-6.jpg b/public/static/images/joinus/gallery-6.jpg new file mode 100644 index 0000000..85eeffa Binary files /dev/null and b/public/static/images/joinus/gallery-6.jpg differ diff --git a/public/static/images/lecture/classroom.jpg b/public/static/images/lecture/classroom.jpg new file mode 100644 index 0000000..2317570 Binary files /dev/null and b/public/static/images/lecture/classroom.jpg differ diff --git a/public/static/images/lecture/hero.jpg b/public/static/images/lecture/hero.jpg new file mode 100644 index 0000000..1f4ac09 Binary files /dev/null and b/public/static/images/lecture/hero.jpg differ diff --git a/public/static/images/lecture/poster-1.png b/public/static/images/lecture/poster-1.png new file mode 100644 index 0000000..eef2f10 Binary files /dev/null and b/public/static/images/lecture/poster-1.png differ diff --git a/public/static/images/lecture/speaker.jpg b/public/static/images/lecture/speaker.jpg new file mode 100644 index 0000000..5f43068 Binary files /dev/null and b/public/static/images/lecture/speaker.jpg differ diff --git a/public/static/images/nwdc/hero.jpg b/public/static/images/nwdc/hero.jpg new file mode 100644 index 0000000..bedf37c Binary files /dev/null and b/public/static/images/nwdc/hero.jpg differ diff --git a/public/static/images/nwdc/session.jpg b/public/static/images/nwdc/session.jpg new file mode 100644 index 0000000..d3fe419 Binary files /dev/null and b/public/static/images/nwdc/session.jpg differ diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 4b7dc02..615c4fd 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,75 +1,163 @@ --- import { SITE_TITLE, SITE_EMAIL } from "../consts" -const { theme } = Astro.props -import { SITE_NAME } from "../consts" -const date = new Date() -const year = date.getFullYear(); - +const year = new Date().getFullYear() --- -
- + + + +
+
+

Get Involved

+

和我们一起

+

+ 无论你想加入协会、参与活动,还是预约维修,我们都在这里。 +

+ +
+
+ + + + diff --git a/src/pages/blog.astro b/src/pages/blog.astro index df7842c..eb521f1 100644 --- a/src/pages/blog.astro +++ b/src/pages/blog.astro @@ -13,7 +13,7 @@ type Cover = { type Post = { layout: string title: string - pubDate: string // ISO 字符串,可选改为 `Date` 类型 + pubDate: string description: string author: string cover?: Cover @@ -35,28 +35,21 @@ const getCover = (post: MarkdownInstance) => { } return post.frontmatter.cover || { url: "", square: "", alt: "" } } - - // const tags = allPosts.reduce((acc, post) => { - // post.frontmatter.tags.forEach(tag => { - // if (!acc.includes(tag)) { - // acc.push(tag) - // } - // }) - // return acc - // }, [] as string[]).sort((a, b) => a.localeCompare(b)) - --- - -
-
- 博客 + + + + -
-
- + + +
+
+ + + diff --git a/src/pages/index.astro b/src/pages/index.astro index 541138a..a479a6f 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,9 +1,9 @@ --- -import BaseLayout from "../layouts/BaseLayout.astro" -import Tile from "../layouts/Tile.astro" +import HomepageLayout from "../layouts/HomepageLayout.astro" import MoreTile from "../layouts/MoreTile.astro" + const allPosts = await Astro.glob("../pages/posts/*.md") -const Blogs = await Astro.glob("../pages/posts/blogs/**/*.md") + allPosts.sort((a, b) => { if ( a.frontmatter.title @@ -13,126 +13,692 @@ allPosts.sort((a, b) => { } return Date.parse(b.frontmatter.pubDate) - Date.parse(a.frontmatter.pubDate) }) - -Blogs.sort( - (a, b) => - Date.parse(b.frontmatter.pubDate) - Date.parse(a.frontmatter.pubDate), -) --- - -
-
-
    - { - // tile-hero - allPosts.slice(0, 1).map((post) => { - return ( - - ) - }) - } - - { - // tile-2up - allPosts.slice(1, 5).map((post) => { - return ( - - ) - }) - } - - { - // tile-3up - allPosts.slice(5, 11).map((post) => { - return ( - - ) - }) - } -
+ + + +
+
+ NBTCA +
+
+

NBTCA

+

技术与人文的交汇

+

自2002年,帮助他人,共同成长

+ -
- -
-
-

更多文章

- -
    - { - // tile-2up - allPosts.slice(12, 18).map((post) => { - return ( - - ) - }) - } - { - Blogs.slice(0, 4).map((post) => { - return ( - - ) - }) - } -
- +
+ + +
+
+ 维修日 +
+
+
+

维修日

+

用技术帮助他人

+

+ 每月一次,免费维修电脑,解决软硬件问题 +

+ 了解更多 → +
+
+ + +
+
+

技术讲座

+

+ 知识共享
触手可及 +

+

+ 每学期一次,分享计算机基础技能,让技术不再神秘 +

+
+ 技术讲座 +
+ 查看往期讲座 → +
+
+ + +
+
+

NWDC

+

+ 开发者的
技术舞台 +

+

+ 每月两次线上分享,致敬 Apple WWDC,探索技术前沿 +

+
+ NWDC +
+ 观看往期分享 → +
+
+ + +
+
+

+ 运用计算机专业能力帮助他人
+ 聚集相同兴趣的人
+ 彼此启发,共同成长 +

+

NBTCA 使命宣言

+
+
+ + + + + +
+
+ +
+
+
+

准备好加入了吗?

+

成为 NBTCA 的一员,探索技术的无限可能

+ 立即加入 +
+
+ + +
+
+
+
+

最新文章

+

来自成员的技术与生活分享

+ 查看全部 →
-
+
    + { + allPosts.slice(0, 4).map(post => ( + + )) + } +
+ +
+
- -
+ + + + diff --git a/src/pages/join-us.astro b/src/pages/join-us.astro index 148c13f..5cba7fb 100644 --- a/src/pages/join-us.astro +++ b/src/pages/join-us.astro @@ -1,262 +1,329 @@ ---- +--- import BaseLayout from "../layouts/BaseLayout.astro" -import logoAnimated from "./_assets/nbtca.gif"; +import logoAnimated from "./_assets/nbtca.gif" + +const perks = [ + { + icon: "🛠", + title: "真实项目实践", + desc: "参与协会维护的开源项目,积累实际开发经验,而不是课堂上的 CRUD。", + }, + { + icon: "🎙", + title: "技术分享交流", + desc: "参与 NWDC 和技术讲座,在真实场景中输出和吸收技术经验。", + }, + { + icon: "🔧", + title: "维修服务技能", + desc: "加入维修日团队,学习硬件诊断与维修,同时为校内同学提供帮助。", + }, + { + icon: "🤝", + title: "跨届人脉连接", + desc: "认识在校同学和校友从业者,建立技术圈子里真实的人际关系。", + }, + { + icon: "🌐", + title: "开源社区参与", + desc: "协会的大多数项目在 GitHub 上公开,你的贡献会留在互联网上。", + }, + { + icon: "🎓", + title: "零门槛加入", + desc: "不限专业,不限年级,只要你对技术有好奇心,都欢迎来试试。", + }, +] + +const gallery = [ + { src: "/static/images/joinus/gallery-1.jpg", alt: "NBTCA community gathering" }, + { src: "/static/images/joinus/gallery-2.jpg", alt: "NBTCA group photo" }, + { src: "/static/images/joinus/gallery-3.jpg", alt: "Outdoor meetup" }, + { src: "/static/images/joinus/gallery-4.jpg", alt: "Lecture audience" }, + { src: "/static/images/joinus/gallery-5.jpg", alt: "Behind the scenes" }, + { src: "/static/images/joinus/gallery-6.jpg", alt: "Team meeting" }, +] --- -
- -
-
-
- 加入协会 -
-
- 共同创造我们的社区 -
+ + +
+
+ +

+ 加入我们,做有趣的事 +

+

+ 一个由学生自发组织、持续成长的技术社区。
+ 欢迎任何对技术有热情的同学。 +

+ - +
+ + +
+
+

Why Join

+

加入之后,你能做什么

+
+ {perks.map(p => ( +
+ +

{p.title}

+

{p.desc}

+
+ ))}
- +
+ + + + +
+
+

Ready?

+

加入我们

+

+ 填写登记表,我们会联系你。
+ 有任何问题也可以发邮件给我们。 +

+
-
+
+
diff --git a/src/pages/lecture/index.astro b/src/pages/lecture/index.astro new file mode 100644 index 0000000..cf7d288 --- /dev/null +++ b/src/pages/lecture/index.astro @@ -0,0 +1,441 @@ +--- +import BaseLayout from "../../layouts/BaseLayout.astro" + +const highlights = [ + { icon: "📍", label: "线下举办", desc: "面对面交流,更真实的学术氛围" }, + { icon: "🎓", label: "全校开放", desc: "面向在校学生,欢迎跨专业参与" }, + { icon: "🔗", label: "邀请校友", desc: "连接在校成员与已毕业从业者" }, +] +--- + + + + +
+
+ +
+
+
+

每学期 1–2 次 · 线下

+

技术讲座

+

+ 面向全校的线下学术交流活动
+ 邀请在校成员与校友嘉宾分享技术实践 +

+ 查看活动日历 → +
+
+ + +
+
+
+

About

+

传承已久的
学术交流传统

+

+ 技术讲座是 NBTCA 继承已久的传统项目,旨在推动校内线下学术交流, + 并连接不同专业、不同届别的人——包括在校学生与已毕业从业的校友。 +

+

+ 每学期举办 1–2 次,主题围绕计算机应用与技术实践, + 让更多同学以轻松、接地气的方式掌握实用技能。 +

+
+
+ {highlights.map(h => ( +
+ +
+ {h.label} +

{h.desc}

+
+
+ ))} +
+
+
+ + +
+
+

Past Lectures

+

往期讲座

+ +
+
+ 电脑使用和维护讲座海报 +
+
+

技术讲座

+

电脑使用和维护

+

+ 电脑清理、硬件选购及加装的快速入门。 + 收集最常见的问题,为你提供简明的解决方案, + 涵盖散热、硬盘分区、系统维护等实用内容。 +

+
    +
  • 硬件维护
  • +
  • 系统优化
  • +
  • 选购指南
  • +
+
+
+
+
+ + +
+
+
+
+ 讲座演讲者 +
+
+ 讲座现场 +
+
+
+
+ + +
+
+

如何参与

+

+ 讲座活动通过 NBTCA 日历与社群渠道主动宣传。 + 关注活动日历,不错过下一场。 +

+ +
+
+ +
+ + diff --git a/src/pages/members/index.astro b/src/pages/members/index.astro index 3c963fb..baca223 100644 --- a/src/pages/members/index.astro +++ b/src/pages/members/index.astro @@ -3,49 +3,92 @@ import BaseLayout from "../../layouts/BaseLayout.astro" import MembersList from "./MembersList.tsx" --- - -
-
-
- 协会成员 -
- + +
+
+
+

Members

+

协会成员

+

NBTCA 历届在册成员名单

-
-
+
+
+ +
+
+
- + diff --git a/src/pages/nwdc/index.astro b/src/pages/nwdc/index.astro new file mode 100644 index 0000000..c95aa48 --- /dev/null +++ b/src/pages/nwdc/index.astro @@ -0,0 +1,442 @@ +--- +import BaseLayout from "../../layouts/BaseLayout.astro" + +const sessions = [ + { + status: "upcoming" as const, + title: "BaaS — Backend as a Service", + description: "介绍 Supabase 与 Pocketbase,探索后端即服务的现代实践。", + tags: ["Supabase", "Pocketbase", "BaaS"], + }, + { + status: "past" as const, + title: "Infrastructure as Code", + description: + "通过 Pulumi 和 Cloud-init 自动化管理云资源与虚拟机的创建和配置,实践 IaC 理念。", + tags: ["Pulumi", "IaC", "Cloud-init"], + }, + { + status: "past" as const, + title: "Minecraft 服务器开设 & 公益算力", + description: + "从零搭建 Minecraft 服务器,并探索公益算力资源的申请与实际使用。", + tags: ["Minecraft", "Server", "Cloud"], + }, +] +--- + + + + +
+
+ +
+
+
+

每月两次 · 线上技术分享

+

NWDC

+

+ NingboTech Wide
Developer Conference +

+

+ 面向在校学生及毕业从业者
+ 围绕真实项目与技术实践交流与分享 +

+ +
+
+ + +
+
+
+

About NWDC

+

开发者主导的
技术分享活动

+

+ NWDC 名称致敬 Apple WWDC,是 NBTCA 定期举办的线上技术分享活动,通常每月两次。 + 每期由一位或多位成员围绕真实项目与技术实践进行分享,随后参与者展开自由讨论。 +

+

+ 活动面向在校学生及已毕业从业者,无论你是在校成员还是校友, + 只要对技术有热情,都欢迎加入。 +

+
+
+ NWDC session +
+
+
+ + +
+
+

Recent Sessions

+

近期分享

+
+ {sessions.map(s => ( +
+ + {s.status === "upcoming" ? "即将到来" : "已结束"} + +

{s.title}

+

{s.description}

+
    + {s.tags.map(tag =>
  • {tag}
  • )} +
+
+ ))} +
+
+
+ + +
+
+
+
+ 线下活动 + +
+

宁波线下
活动策划

+

+ 本期主题待定。如果你有希望分享的主题,欢迎发送邮件至 + contact@nbtca.space。 +

+ +
+
+
+ +
+ +