ポートフォリオのスライドではなく、公開されて動くコード: サプライチェーン計画ツール、AI設定システム、オフライン音声入力アプリ、そしてこのページ自体が使っているデザインシステム。カードを選ぶと、実際に何をするものか分かります。
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# 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
The third column is the honest one. It empties only when the gap does — not before.
計画のトレードオフが実際どう動くかを見せる、2つの動くツール。スライドも、ごまかしもなし。
これはチャットボットの埋め込みではありません。Cloudflare Pages FunctionがWorkers AIを直接呼ぶ仕組みです — このドメインに限定され、IPごとにレート制限があり、クライアント名や数字をでっち上げる代わりに「知りません」と答えるようシステムプロンプトで指示されています。S&OPや在庫計画について聞いてみてください。
デモです: 私の口調の短いプロンプトを与えた言語モデル。自信たっぷりに間違えることがあります — 言われたことを鵜呑みにしないでください。S&OP、IBP、o9、在庫について聞いてみてください。
計画について何でも聞いてください。ツインが私の口調で答えます。
Twin self-grade — Tone: close. Facts: unverified by anyone, including me. Model: @cf/meta/llama-3.3-70b-instruct-fp8-fast, capped at 512 tokens, prompted to say "I don't know" rather than invent a client name or a number. A guardrail, not a guarantee.
AI生成 · 本物のLaviの代用にはなりません
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.
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 →
プランナーが実際に制御するレバーを動かす — トレードオフがリアルタイムで動くのを見てください。説明用のモデルです。
均衡した操業点。 在庫と稼働率が健全な範囲にあり、サービスは目標近くで維持されています。
What this hides: one SKU, one line, one season. Obsolescence here is a proxy, not a write-off model. The version I get paid for has a demand plan arguing with the statistical baseline — that argument is where the trade-off actually gets settled.
自分の数値からEOQ、安全在庫、発注点を算出 — あらゆる補充ポリシーの背後にある数学です。
4,767個を、年に約25.2×回発注します。在庫が5,183に達したら発注 — 14日間のリードタイムをまたいで97%のサービスレベルを維持するため、563個の安全在庫を保有します。
What this hides: σ is daily demand variability, not forecast error — the production version uses forecast error, which is bigger and less polite. The z-value comes from a ten-row table, not the full normal curve. And 97% is only a target — check whether the safety stock is sized for the service level you actually promised.
棚での小さな揺らぎが、上流では嵐になる。需要変動が階層ごとに増幅していくのを見てください。説明用のモデルです。
棚での小さな需要の揺らぎが、上流では大きな発注の揺らぎに増幅します — 階層4(地域DC)では、20%のCVが発注指数173になります。需要の可視化、リードタイムの短縮、発注の平準化がこの鞭を鎮めます。
What this hides: each tier multiplies the swing by one-plus-CV — a teaching model, not a simulation. Real whips are gamed rationing and batched orders. The dampeners in the note are the ones that survive contact with a real order book.
5つのフィーチャーブランチ — Home、Work、Library、Travel、Games、About、404 — それぞれ約2週間かけて独立に作られ、未マージのまま置かれていました。今日、それらが1つのブランチになりました: マージコミット5つ、うち3つは手動のコンフリクト解消 — すべて同じファイル内で、すべて両側を残す形で解決。出荷前に、実際の重複インポートバグを1つ見つけて修正しました。
ほとんど失われるところだったもの: 207ファイル、約10MBに及ぶ過去の作業 — 新しいモーションコンポーネント、フレームごとの分解リグ、既知のバグを両方直した3Dビルド、そしてこのページの前身 — が、一度もコミットされていなかった。1台のノートPCのフォルダの中に眠っていたのです。コマンド1つで復旧。タイミングの悪いgit clean一発で消えていてもおかしくなかった。
まだ残っている課題: この作業を行ったパイプラインは、サイトをコンパイルしてHTMLを読み返すことはできるものの、ピクセルを1つも描画できません。このページとその前の4ページのすべてのアニメーションは、いまのところコードレビューと人間の目で検証されています — AIの目ではなく。このギャップは、意図的にここに記しておきます。取り繕いません。
自己評価 — 計画: 8/10(スペックがあり、それに従った)。検証: 4/10(この環境ではビジュアルQAがブロック — 実際のギャップであり、隠さず公開)。事前に確認せずに下した判断: いくつか(新しいバンドル上限の数値、マージコンフリクトの解消方針、未コミットだった過去作業のコミット)— すべて可逆で、本番には何もプッシュしていません。
Next entry, not yet written: giving the pipeline eyes — a headless browser in CI that renders this page's animations and diffs each frame against the last known good one. If it lands, the Verification score above moves. If it doesn't, this line stays, undated, as the receipt.
refkit · VengeanceUI ports
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.
Interactive Edition
Each piece starts as a registry component and lands here as one TSX file plus a CSS batch.
Tailwind classes go first, swapped for POP tokens: ink outlines, hard shadows, cream ground.
Springs move to motion/react and every animation learns to sit still under reduced motion.
The End
The people behind the product
A small, multidisciplinary team building thoughtful tools for ambitious people.
one word morphs into the next
Lines split, blur, and snap back into focus.