LS0/100加载中
跳到主要内容
Llavisahu
联系
计划 站得住 。不眨眼的供应链。
打个招呼 ✦联系联系
首页作品书库旅行游戏实验室Blog关于
LinkedInGitHubEmail
© 2026 Lavi Sahu
07实验室 — 建站日志

我搭这个站点的方式,就是我希望 AI 供应商搭规划系统的方式:亮出 diff,而不是递上推销词。

实验室 — 开源

八个仓库,不是样机

公开、能跑的代码,不是作品集幻灯片:供应链规划工具、一套 AI 配置系统、一个离线语音听写应用,还有搭起这个页面本身的那套设计系统。点开卡片,看看它究竟能干什么。

Explore GitHub @LaviSahu
Resilience Radar — Python (stdlib only) — self-contained HTML dashboard
View on GitHub →

Supply chain resilience control tower — risk radar, what-if simulation (time-to-recover / time-to-survive), and mitigation ranking. No dependencies to install; the dashboard is one self-contained HTML file.

git clone https://github.com/LaviSahu/resilience-radar.git
What the code actually does
# risk_score = likelihood(1-5) * impact(1-5), range 1-25.
TIER_THRESHOLDS: list[tuple[int, RiskTier]] = [
    (20, RiskTier.CRITICAL),
    (12, RiskTier.HIGH),
    (6, RiskTier.MEDIUM),
    (1, RiskTier.LOW),
]

def likelihood_score(event: Event, classification: Classification) -> int:
    """1-5, from event confidence (0-1) plus a source-reliability adjustment."""
    base = event.confidence * 5
    adjustment = SOURCE_RELIABILITY_ADJUSTMENT.get(classification.source_category, 0)
    return _clamp(base + adjustment, 1, 5)

src/resilience_radar/scoring.py — classic likelihood × impact risk scoring, plus a per-source reliability adjustment (geopolitical/regulatory signals score noisier than, say, a supplier or logistics event).

实验室 — 建站日志

验证台账 — 上面这些东西,每一块实际上是怎么查的

人眼看过

Every animation on the rebuilt pages

The merge-conflict resolutions of 2026-09-19

读了,没跑过

The twin's system prompt

Each repo description (2 of 8 carry verbatim code excerpts)

没人检查过

Everything the twin tells you

Whether anyone has ever used these repos

第三列才是诚实的那列。它只在缺口消失时才会清空 — 不会更早。

实验室 — 建站日志

别只听我说 — 亲手扳动杠杆。

三件能上手玩的工具 — 情景模拟器、库存计算器、牛鞭效应图。没有幻灯片,没有空话:你扳动杠杆的每一刻,每个数字都在你的浏览器里实时算出来。

实验室 — 建站日志

一个真的 AI 功能,不是样机

这不是内嵌一个聊天机器人。这是一个 Cloudflare Pages Function 直接调用 Workers AI — 域名锁定到本站,按 IP 限流,系统提示词要求它宁可说「我不知道」,也不编造客户名字或数字。问问它 S&OP 或库存规划。

问问我的 AI 分身

未经核实

一个演示:一个语言模型,带上一段用我的口吻写的短提示词。它可能错得信心十足 — 别照它说的话行事。问它 S&OP、IBP、o9、库存。

问任何关于规划的事。分身会用我的口吻回答。

Twin 自评 — 语气:接近。事实:没有任何人核实过,包括我。模型:@cf/meta/llama-3.3-70b-instruct-fp8-fast,上限 512 tokens,提示词要求它说「我不知道」而不是编造客户名字或数字。这是一道护栏,不是一份保证。

AI 生成 · 不能替代真正的 Lavi

实验室 — 建站日志已合并,未上线。

建站日志 — 2026-09-19

实验室 — 建站日志refkit

Refkit — 28 ports, 1 in production

Every card below is a real VengeanceUI port — working code, not a screenshot. Exactly one of them, VeCreepy, is actually load-bearing right now: it's the Connect link in this site's own footer. The other twenty-seven are verified to render, not yet asked to carry a real page's weight. Same rule as the build log above — a component only counts as shipped once it's doing a job, not once it looks good in a gallery.

Lab — essays

Five frameworks, worked through properly

Not case studies from my own client work — original, research-driven essays on real named frameworks and formulas (bullwhip ratio, TTR/TTS resilience, the Kraljic matrix, Theory of Constraints, digital twins), each grounded in a cited real source, not invented. Pick a card for the summary, or read the full essay.

For the fuller story behind the bullwhip math — two 2000s-era factory fires and what they cost — see Buffer Shock, on the Blog →

S&OP 情景模拟器

实时

扳动规划员真正能控制的那些杠杆 — 看取舍实时移动。示意模型。

0%
100%
95%
4 周
预计服务水平90.5%
产能利用率100%
库存指数(计划 = 100)100
呆滞风险0%

均衡运营点。 服务水平贴着目标走,库存和利用率都在健康区间。

这个模型藏掉了什么:单个 SKU、单条产线、单个季度。这里的呆滞是个代理指标,不是报废模型。我收钱做的那一版,需求计划和统计基线是要吵出结果的 — 那场争吵,才是取舍真正落定的地方。

库存优化

实时

用你自己的数字算 EOQ、安全库存和再订货点 — 每一套补货策略背后的那点数学。

4,767
EOQ(件)
563
安全库存
5,183
再订货点

每次订购 4,767 件,一年大约订 25.2 次。在手持量降到 5,183 件时补货 — 备上 563 件安全库存,撑过 14 天提前期,守住 97% 的服务水平。

这个模型藏掉了什么:这里的 σ 是日需求波动,不是预测误差 — 正式版本用的是预测误差,它更大,也没这么客气。z 值来自一张十行的表,不是完整的正态曲线。还有,97% 只是个目标 — 去查查安全库存到底是不是按你真正承诺过的服务水平来定的。

牛鞭效应可视化

实时

货架上一丝小抖动,到上游成了风暴。看需求波动逐层放大。示意模型。

20%
4
100零售商120分销商144批发商173区域配送中心

货架上的小幅需求摆动,向上游放大成大额订单摆动 — 到第 4 层(区域配送中心),20% 的 CV 会变成 173 的订单指数。需求透明、更短的提前期、订单平滑,都能给牛鞭效应降幅。

这个模型藏掉了什么:每一层都把波动乘上一加 CV — 这是教学模型,不是仿真。真实的牛鞭来自被博弈的配给和批量下单。笔记里的那些阻尼器,是真正在真实订单簿面前存活下来的那几招。

> cat build-log.md

五个功能分支 — Home、Work、Library、Travel、Games、About、404 — 每个都各自搭了大约两周,一直挂着没合并。今天它们合成了一个分支:五笔合并提交,其中三笔要手工解冲突 — 全都出在同一个文件,全都用「两边都保留」解掉;还有一个真实的重复导入 bug,赶在上产线之前抓出来修掉了。

差点弄丢的东西:207 个文件、大约 10MB 的既有成果 — 新的动效组件、一套逐帧拆解动画的 rig、一个修好了两个已知 bug 的 3D 场景、还有这一页自己的前身 — 从来没有被 commit 过。就躺在一台笔记本的文件夹里。一条命令救了回来;再差一步,一条 git clean 就能让它们彻底消失。

还没解决的事:做出这些成果的流水线能编译整个站点、能读回它的 HTML,但渲染不出一个像素。这一页、以及之前四页上的每一个动画,目前靠代码审查和人眼验证 — 不是靠 AI。这个缺口是有意写在这里的,没有被抹平。

自评 — 规划:8/10(有 spec,也照着做了)。验证:4/10(视觉 QA 在这个环境里做不了 — 真实缺口,如实披露,没有掩盖)。没先问就拍的决定:好几处(新的 bundle 体积上限数字、合并冲突的解法风格、把之前没提交的工作提交了)— 全部可逆,也都没有推上生产。

下一篇日志,还没写:给流水线装上眼睛 — 在 CI 里放一个无头浏览器,把这一页的动画渲染出来,每一帧都和上一版已知正确的帧做对比。做成了,上面的验证分数就会动。做不成,这行字就留在这儿,不带日期,当一张凭证。

refkit · VengeanceUI ports

The port wall

28 components ported from the VengeanceUI registry to plain POP-token CSS — every demo below is live. The heavy WebGL pieces wait until you scroll to them. Tap a card's name for what it demonstrates and its real-vs-demo status.

VeAnimatedTooltipVengeanceUI port
What is this?
VeMaskedAvatarsVengeanceUI port
  • Ada
    Ada
  • Bram
    Bram
  • Cleo
    Cleo
  • Dario
    Dario
  • Esme
    Esme
VeDiagonalCarouselVengeanceUI port

Harbor Line

Kiln Study

North Pier

Paper Hills

Tidal Steps

VePerspectiveCarouselVengeanceUI port

Harbor Line

Kiln Study

North Pier

Paper Hills

Tidal Steps

VeImageTrailVengeanceUI port
VeStatsCounterVengeanceUI port
0ports
0batches
0new deps
VeInteractiveBookVengeanceUI port

Porting Notes

refkit

Porting Notes

Interactive Edition

1

Why port

Each piece starts as a registry component and lands here as one TSX file plus a CSS batch.

2
2
3

Token pass

Tailwind classes go first, swapped for POP tokens: ink outlines, hard shadows, cream ground.

4
4
5

Motion pass

Springs move to motion/react and every animation learns to sit still under reduced motion.

6
6

The End

Click to Open
VeScrollDissolveRevealVengeanceUI port — WebGL, mounts on scroll
VeLineHoverLinkVengeanceUI port
Slide underlineArc underlineScribble underline
VePerspectiveGridVengeanceUI port
VeImageRevealListVengeanceUI port
  • Field Notes on Slow Mail01Field Notes on Slow MailEssay
  • The Torii Trail at Dawn02The Torii Trail at DawnTravel
  • Shipping a Type Foundry03Shipping a Type FoundryInterview
  • Notes from the Night Market04Notes from the Night MarketPhoto
VeTeamRevealGridVengeanceUI port

The people behind the product

Meet the team

A small, multidisciplinary team building thoughtful tools for ambitious people.

VeGlowBorderCardVengeanceUI port
glow ring
VeTypingKeyboardVengeanceUI port
VePixelatedImageTrailVengeanceUI port
VeAsciiGlitchRippleVengeanceUI port
VeMorphTextVengeanceUI port
SHIPSHAPESHOW

one word morphs into the next

VeLiquidTextVengeanceUI port — WebGL, mounts on scroll
VeAnimatedFooterVengeanceUI port

Refkit

VeImageScatterVengeanceUI port

VeStaggeredGridVengeanceUI port
POP
ExploreProjects
ExploreWriting
ExploreContact
ExploreProjects
ExploreWriting
ExploreContact
ExploreProjects
ExploreWriting
ExploreContact
ExploreProjects
ExploreWriting
ExploreContact
ExploreProjects
ExploreWriting
ExploreContact
ExploreProjects
Builds

Builds

Builds
Notes

Notes

Notes
Reach out

Reach out

Reach out
ExploreWriting
ExploreContact
Built with refkitMore demos
VeCircularGalleryVengeanceUI port
VeVerseCardsVengeanceUI port
Work
Atlas
Nimbus
Vertex
Harbor
Quill
Click the front card to deal it away.
VeGooeyTextRevealVengeanceUI port

Goo in, goo out.

Lines split, blur, and snap back into focus.

VeInteractiveParticlesVengeanceUI port — WebGL, mounts on scroll
VeMusicPlayerVengeanceUI port — dark zone, white-on-glass UI
Paper Signals artwork
Paper Signals
Refkit Radio
VeBooksShowcaseVengeanceUI port — WebGL, mounts on scroll
VeCreepyVengeanceUI port
Don't hoverDon't hover
btn-ve-pophand-made — refkit-vengeance.css