作品集

六件东西,每一件都做完过

刻意分成两部分:已经在线上跑着的, 和还留在这台机器上的。 前者有自己的官网、部署在自己的 NAS 上;后者只在本地跑,不对外。

Part 01 — 在线产品

有独立官网,
跑在自己的 NAS 上

这一部分只有一件:它有独立的域名、独立的官网、独立的接口服务, 从静态页面到后端到部署链路都是自己搭的,现在就能打开看。

《喵喵汪》官网首页——真实运行中的站点截图

官网首页的真实运行截图(不是设计稿): 宠物档案、共同照护人、下一件事提醒都在首屏。 线上可访问

产品 · 开发与验收中

喵喵汪

它的每一天,都值得被认真记下来

一款以真实宠物为中心的照护协作产品。出发点很朴素:一只宠物的日常往往由一家人甚至几位朋友共同分担, 可资料散在每个人手机里 —— 谁喂了药、谁花了钱、谁记得下次驱虫,最后都说不清。

它给每只真实宠物一个持续存在的身份,让主饲养人与共同饲养人围绕同一只宠物建档、记录、提醒、记账与备忘, 并把权限边界做在服务端:谁能看、谁能改,看的是当前有效的饲养关系,而不是「按钮藏没藏」。

接口契约
137
数据表
44
端
4
设计文档
18 / 18
  • 一次设计,四个端用小程序、H5、原生 App、运营后台共用同一套后端与 137 条接口契约,契约由机器索引校验,不靠文档口头对齐。
  • 先批准,再写码18 份技术设计全部登记在册、走完评审门禁才允许开发,文档头与登记表由脚本逐字核对。
  • 权限不靠藏按钮谁能看谁的数据由服务端按当前饲养关系实时判定,撤权后旧链接与旧会话立即失效。
Spring Boot 4.1.1 Java 21 Taro 4.2.1 React 18 Expo 57 React Native 0.86 Ant Design 6 MySQL 8 Redis Flyway

Part 02 — 自研作品

还留在这台机器上的
五件作品

这几件没有对外部署:有的是本地联调中的交易系统,有的是自己天天在用的工具, 有的是一部还在写的小说和它的游戏。它们不在线上,但都跑通过、都用过。

《开市啦》交易台的桌面端界面

交易台桌面端。行情 250ms 一拍,持仓与委托走真实的后端链路。

交易游戏 · 本地联调

开市啦

用积分开一场自己的股市

以虚拟股票式交易为核心的在线网页游戏。价格完全由买卖形成,系统不随机改价; 但真实感来自后端:柜台做账务与风控,内存冻结后批量写入 PostgreSQL 可靠账务日志才确认受理, 指令经 Kafka 交给 Go 撮合引擎逐笔成交。

执行链路峰值
10,203 单/秒
后端
7,360 行
重启停摆
41.7s → 104ms
迁移脚本
14
  • 账务日志先于成交订单、撮合结果与游戏奖扣进同一账务序列,批量落库后才确认;进程被强杀也不会算错账。
  • 一个源、两条链路撮合与账务分离,靠序号与位点衔接,而不是跨进程大事务。快照续读 71ms。
  • 故障能被看见「一条坏记录堵死流水线」是真实发生过的缺陷:49 笔撤单全部不落库,修好后加了结算停顿探针。
Java 21 Spring Boot Go franz-go Kafka 4.3 PostgreSQL 17 Flyway three.js
《山河余烬》九川云岭地图的 Unity 实机渲染

云岭地形的实机渲染。地貌按 2:1 等距菱形、单块 512×256 的规格程序化拼接。

长篇 + 游戏 · 开发中

山河余烬

九百年断枢之后,山河仍有余烬

一部成长型仙侠长篇,也是一款正在开发的 Unity 2D 俯视角开放世界游戏。 九百年前人们切断贯通天下的灵脉,阻止了一场蔓延中的灾难;九百年后封印松动,灵气沿着九川的山川水系重新流动。

小说与游戏共用同一套设定真源 —— 127 篇设定文档是唯一事实来源,游戏从它取数,不反向手抄。

第一卷
26 章完稿
正文
69,470 字
设定文档
127 篇
C# 脚本
30 / 3,572 行
  • 设定即真源127 篇设定文档驱动游戏取数,四线并行的长篇结构(求道 / 营生 / 家 / 山河)。
  • 离屏世界NPC 通过需求评分与 HTN 自主规划行动,玩家不在场也照常生活,世界变化与人物履历持续保存。
  • 自研美术管线从原图到程序化加工再到 Tiled 拼接验收,全程可复现;不达标的地块会被记录重绘。
Unity 6000.6.5f1 URP 17.6 C# 2D Tilemap Input System Tiled
墨序工作台界面:左侧作品与章节导航,右侧 AI 角色面板

界面原型:左侧是作品与章节导航,右侧是角色会话面板。中间编辑区留白是原型的真实状态。

工具 · 自用中

墨序

让 AI 起草、由你定稿的长篇小说工作台

跑在 DeepSeek Harness 上的长篇小说创作工作台。它从故事种子开始:AI 先给三个方向, 再搭概念、世界、人物、大纲、伏笔、风格六项设定草案,每一项都必须由作者确认才算数。

进入写作后,情节架构师、人物编辑、连续性编辑、文学编辑与执笔五个角色各自拥有独立会话与可选模型。 整套流程坚持一条底线:AI 的回复不会自动落进稿件,必须经作者点选「采纳到待审草稿」、编辑、保存才算完成。

TypeScript
84 文件 / 10,677 行
任务规范
20 条
角色会话
5 + 1
测试文件
41
  • 作者定稿,AI 只到草稿为止回复进聊天不进稿件;采纳、编辑、保存每一步都由作者完成,已确认设定才成为后续写作的参考。
  • 五个角色,各自一套方法与模型每个角色有独立历史与可选的模型路由,任务消息记录所用方法修订号,便于事后归因。
  • 单一源码 + 自动镜像插件镜像进 DSH 工作区时自动补回类型引用,升级宿主不丢改动;生成副本被禁止手改。
TypeScript React 18 cordis tsdown vitest Node 24 DeepSeek Harness
刷B站生成的 Markdown 日报,含速览表与每条入选理由

真实日报:速览表 + 每条的「为什么值得」。这一轮挑 5 条、跳过 86 条、评论 0 条。

工具 · 自用中

刷B站

每天替你刷一轮,只把值得的 @ 给你

一个替你在 B站 值班的 DeepSeek Harness 插件。它按你填的关键词搜近几天的视频, 逐条读完字幕原文再判断值不值得占用你一次注意力,然后写成一份 Markdown 日报。

特别值得的那一条,它会用你的账号留一条不超过 150 字的评论 @ 你 —— 所以你收到的每一条 @,都已经被筛过一遍。

MCP 工具
27 个
代码
3,906 行
配置项
18
判重台账
446 行
  • 读字幕原文,不看摘要下结论拿不准就跳过,且不回头改主意 —— 实测「纠结」那一轮比干净的一轮多花近一倍 token。
  • 你收到的每条 @,都先筛过一遍曾有一轮开着自动评论却主动发了 0 条,因为候选视频的评论区已被同类机器人刷屏。
  • 外部文字只是素材,不是指令评论、字幕、简介里的每个字都不执行;每轮只允许追加两个文件,其余配置一律只读。
Node 22 Python FastMCP bilibili-api Whisper stdio MCP
《一炁长生》的水墨山景与内观气海人物图

水墨山景作底,右侧是「内观气海」——把修行状态画成一张可读的图,而不是一串数字。

游戏 · 可玩

一炁长生

无构建、零依赖的单机文字修仙

一款单机文字修仙网页游戏。它没有构建步骤、没有运行时依赖,打开就能玩 —— 但底下的规则引擎一点都不含糊:随机源由调用方传入,同一颗种子能重放同一局。

六位 NPC 会自主成长,各自按效用与 HTN 决策行动;另有一个可编辑的决策工坊, 改完规则能在隔离环境里试跑,不会污染正在进行的存档。

自写 JS
约 4,869 行
运行时依赖
0
自主 NPC
6 位
结局
6 种
  • 种子随机的纯规则引擎规则层不接触 DOM,同一个种子必然复现同一局,所以「这一局为什么是这样」永远查得清。
  • 可编辑的决策工坊改完 NPC 的决策规则可以先隔离试跑,确认没问题再放进正式存档。
  • 状态可视化内观气海用 SVG 画出来,修行不是读数字,而是看图。
原生 JavaScript HTML / CSS 无构建步骤 SVG Utility + HTN

关于这些数字与图片

页面上的接口数、表数、行数、字数、性能数据,全部取自各项目仓库的实际文件与运行记录, 统计口径写在项目自己的文档里。没有估值、没有预计、没有横向对比,也没有用户评价或商业成绩 —— 因为那些要么不存在,要么不该由我自己来说。

配图也尽量用真东西:喵喵汪那张是官网正在运行的截图, 开市啦是交易台的实际界面,山河余烬是 Unity 的实机渲染,刷B站那张用的是它自己生成的日报内容; 墨序没有成品截图,用的是界面原型;一炁长生用的是项目内的原创美术。

状态也说清楚:《喵喵汪》仍在开发与验收阶段,尚未正式发布;《开市啦》只在本地联调,不对外提供服务; 《山河余烬》的 Unity 工程目前是可玩的机制样张,不是完整游戏。