LS0/100Loading
Skip to content
Llavisahu
Connect
Plans that hold. Supply chains that don't blink.
Say hello ✦ConnectConnect
HomeWorkLibraryTravelGamesLabBlogAbout
LinkedInGitHubEmail
© 2026 Lavi Sahu
07Lab — build log

I build this site the way I'd want an AI vendor to build a planning system: show the diff, not the pitch.

Lab — open source

Eight repos, not a mockup

Public, working code, not a portfolio slide: supply-chain planning tools, an AI-config system, an offline voice-dictation app, and the design system this page itself is built from. Pick a card to see what it actually does.

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).

Lab — build log

Verification ledger — what's above, and how each piece was actually checked

Seen by human eyes

Every animation on the rebuilt pages

The merge-conflict resolutions of 2026-09-19

Read, not run

The twin's system prompt

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

Nobody has checked

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.

Lab — build log

Don't take my word for it — move the levers.

Three live tools — scenario simulator, inventory calculator, bullwhip chart. No slides, no hand-waving: every figure is computed in your browser as you move the levers.

Lab — build log

An actual AI feature, not a mockup

This isn't a chatbot embed. It's a Cloudflare Pages Function calling Workers AI directly — origin-locked to this domain, rate-limited per IP, with a system prompt that tells it to say 'I don't know' rather than invent a client name or a number. Ask it something about S&OP or inventory planning.

Ask my AI twin

unverified

A demo: a language model with a short prompt in my voice. It can be confidently wrong — don't act on what it says. Ask it about S&OP, IBP, o9, inventory.

Ask anything about planning. The twin answers in my voice.

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-generated · not a substitute for the real Lavi

Lab — build logMerged, not shipped.

Build log — 2026-09-19

Lab — build logrefkit

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 Scenario Simulator

Live

Move the levers a planner actually controls — watch the trade-offs move in real time. Illustrative model.

0%
100%
95%
4 wk
Projected service level90.5%
Capacity utilization100%
Inventory index (plan = 100)100
Obsolescence risk0%

Balanced operating point. Service holds near target with inventory and utilization in a healthy range.

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.

Inventory Optimization

Live

EOQ, safety stock and reorder point from your own numbers — the math behind every replenishment policy.

4,767
EOQ (units)
563
Safety stock
5,183
Reorder point

Order 4,767 units about 25.2× a year. Reorder at 5,183 on-hand — carrying 563 units of safety stock to hold a 97% service level across a 14-day lead time.

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.

Bullwhip Visualizer

Live

A small wiggle at the shelf becomes a storm upstream. Watch demand variability amplify tier by tier. Illustrative model.

20%
4
100Retailer120Distributor144Wholesaler173Regional DC

Small demand swings at the shelf amplify into large order swings upstream — by tier 4 (Regional DC), a 20% CV becomes an order index of 173. Demand visibility, shorter lead times and order smoothing dampen the whip.

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.

> cat build-log.md

Five feature branches — Home, Work, Library, Travel, Games, About, 404 — each built independently over roughly two weeks, sitting unmerged. Today they became one branch: five merge commits, three needing manual conflict resolution — all in the same file, all resolved by keeping both sides, one real duplicate-import bug caught and fixed before it could ship.

What almost got lost: 207 files and about 10MB of prior work — new motion components, a frame-by-frame pull-apart rig, a 3D build with both its known bugs fixed, this page's own precursor — had never been committed. Sitting in a folder on one laptop. Fixed with one command; could have been one bad git clean away from gone.

What's still open: the pipeline that did this work can compile the site and read back its HTML, but can't render a pixel. Every animation on this page, and on the four pages before it, is currently verified by code review and a human's own eyes — not by an AI's. That gap is stated here on purpose, not smoothed over.

Self-grade — Planning: 8/10 (a spec existed and was followed). Verification: 4/10 (visual QA blocked in this environment — real gap, disclosed, not hidden). Judgment calls made without asking first: several (the new bundle ceiling number, the merge-conflict resolution style, committing prior uncommitted work) — all reversible, none pushed to production.

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

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