风水蓝图 · FengShui Blueprint
工程化的多伦多建筑风水评估系统。Form 派 + Compass 派融合规则引擎,配合工程蓝图视觉风格——古典出处可查、评分确定、Cloudflare 边缘 ~2 秒出报告。
背景
网上的风水站基本只有两类。一类金边卷轴、紫红水墨、龙凤纹样,读起来像神婆小册子——靠感觉,没有可追溯性。另一类是学术圈写古典堪舆的论文,根本没办法拿一栋具体的楼跑一遍。中间这块是空的。
风水蓝图就长在中间:输入多伦多某栋楼的地址 + 楼层 + 朝向 + 户型(或者直接在地图上点)。大约 2 秒返回一份 CAD 风格的报告——综合分、五个维度分(气场流转 / 财位 / 健康 / 事业 / 煞气)、引用古典出处的大师批注、来自真实 GIS 的周边特征清单、最近 8 项要素的静态地图。
定位是刻意的:娱乐 + 可分享的工程范小作品,像星座但工程感的版本。不做命理、不做咨询。
方法
规则引擎是无依赖的 TypeScript package
packages/rules-toronto 是纯函数,没有任何 I/O。输入一份归一化的「场地读数」——朝向度数、楼层、2km 内的周边要素——输出五个维度分 + 综合分 + 检测到的 defects 列表。同样的输入永远给同样的分。55 个 Vitest 测试 覆盖 6 种煞气检测、24 个朝向 wedge、5 行生克。
这条硬隔离是项目不塌成「LLM 生成风水文」的关键。叙述器只描述引擎算出来的东西。
Form 派 + Compass 派融合
v0.2.0 把形势派和理气派接进同一条流水线:
- 朝向 —— 二十四山(每山 15°)→ 八卦 → 五行 + 阴阳 → 基线乘数
- 楼层 → 五行 —— 河图数理调和
- 煞气检测 —— 六种经典煞(路冲 / 反弓 / 白虎抬头 / 朱雀压堂 / 玄武空虚 / 阴气积聚)
- 四象分析 —— 朱雀得水、玄武有靠、龙虎平衡
- 周边要素 × 五行和谐度 —— 湖、河、公园、地铁、医院、地标、高楼、高速、墓地、学校,距离分段加权
- 楼层高度修正
每个模块都标注出处——《青囊奥语》、《葬书》、《阳宅十书》、《河图》、《雪心赋》——引用本身才是产品。它让评分变得可读。
工程蓝图作为视觉身份
米色蓝图纸、深蓝墨水、等宽数字、工程图框(DRAWING NO. / SHEET / CONFIDENCE)。这种美学是对类目视觉套路的刻意疏远。报告读起来像建筑师在给一栋楼的「气」做制图,不像神婆的小册子。
边缘部署 + 单 key Google Maps 集成
Hono worker 跑在 Cloudflare Workers 上,统一处理 zh-CN 地理编码、反向地理编码、Places 查询、Static Maps 合成——背后只有一个 Google key。KV 缓存结果;每日配额守卫拦截好奇心爆棚的用户烧 key 预算。D1 用 8 字符 Crockford base32 短 id 归档每份评估。R2 留给即将到来的 PNG 分享图。
整个 web app 是 Next.js 15 + React 19,通过 @opennextjs/cloudflare 部署到 Workers——不走 Pages、不分离 host。
跟同类风水站的差异
| 同类站点 | 风水蓝图 |
|---|---|
| 通用八卦图 + 星座式「你的五行是…」 | 场地相关 的报告——真实地址 + GIS 数据 |
| 一句话解读 | 五个维度分 + 综合分 + 引经据典的化煞建议 |
| 静态文字 | 地图驱动 —— 多伦多任何位置都能点 |
| 金边卷轴 / 紫红水墨视觉套路 | 工程蓝图 制图框、等宽字、米色纸 |
| 无可追溯 | 每个分都指向 古典出处 + 确定性规则 |
| 主观挥手 | 规则引擎 55 测试——纯函数,同输入同输出 |
结果与教训
v0.2.0 已上线:fengshui-web.pp-account.workers.dev。最近一轮是 Plan 5 地块评估 + 可拖拽地块工具栏 + 地址联想。Plan 2(LLM 增强批注 + Cloudflare Browser Rendering 出 PNG 分享图 + 短链)正在路上。
两条不太显眼的教训:
引用古典是 load-bearing 的 UX 选择,不是装饰。 人们不信任风水 app,是因为没有可追溯。一旦每条化煞建议都给出《阳宅十书》《青囊奥语》的脚注,报告读起来就不像「算法乱猜」,更像「制图员在读一本真正的参考书」。古典出处不是花边——它是产品挣到「给一个分」资格的方式。
规则引擎保持无依赖是个倍增器。 我差点为了一个日期格式化让它 import dayjs。忍住后整个 package 才能跨 web / worker / 未来的 LLM agent 复用,55 个测试也才可行。叙述器可以乱,引擎不行。
技术栈与链接
前端: Next.js 15 (App Router) · React 19 · TypeScript(严格) · Tailwind · Leaflet + react-leaflet + CartoDB Light · Zod
边缘 API: Hono on Cloudflare Workers · Wrangler 4 · D1(评估归档)· KV(地理编码缓存 + Maps 每日配额守卫)· R2(PNG 分享图,预留)
规则引擎: packages/rules-toronto —— 纯函数,无依赖,55 Vitest 测试
外部 API: Google Maps Geocoding (zh-CN) / Reverse Geocoding / Places / Static Maps
部署: @opennextjs/cloudflare,Next.js 15 → Workers
线上: fengshui-web.pp-account.workers.dev
公开 overview: github.com/YSKM523/fengshui-blueprint-overview(源码私有)
完整说明见 英文版。