LS0/100Cargando
Saltar al contenido
Llavisahu
Contacto
Planes que aguantan. cadenas de suministro que no parpadean.
Di hola ✦ContactoContacto
InicioTrabajoBibliotecaViajesJuegosLabBlogSobre mí
LinkedInGitHubEmail
© 2026 Lavi Sahu
07Lab — registro de construcción

Construyo este sitio como querría que un proveedor de IA construyera un sistema de planificación: mostrar el diff, no el discurso.

Lab — código abierto

Ocho repos, no un mockup

Código público y funcional, no una diapositiva de portafolio: herramientas de planificación de cadena de suministro, un sistema de configuración de IA, una app de dictado por voz offline, y el design system con el que esta misma página está construida. Elige una tarjeta para ver qué hace de verdad.

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 — registro de construcción

Libro de verificación — qué hay arriba y cómo se comprobó realmente cada pieza

Visto por ojos humanos

Every animation on the rebuilt pages

The merge-conflict resolutions of 2026-09-19

Leído, no ejecutado

The twin's system prompt

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

Nadie lo ha comprobado

Everything the twin tells you

Whether anyone has ever used these repos

La tercera columna es la honesta. Se vacía solo cuando lo hace el vacío — no antes.

Lab — registro de construcción

No te fíes de mi palabra — mueve las palancas.

Tres herramientas en vivo — simulador de escenarios, calculadora de inventario, gráfico de efecto látigo. Sin diapositivas, sin humo: cada cifra se calcula en tu navegador mientras mueves las palancas.

Lab — registro de construcción

Una función de IA real, no un mockup

Esto no es un chatbot incrustado. Es una Cloudflare Pages Function llamando a Workers AI directamente — fijada al origen de este dominio, con límite de tasa por IP, con un system prompt que le dice que diga 'no lo sé' en vez de inventar un nombre de cliente o un número. Pregúntale algo sobre S&OP o planificación de inventario.

Pregúntale a mi gemelo de IA

sin verificar

Una demo: un modelo de lenguaje con un prompt corto en mi voz. Puede estar equivocado con total confianza — no actúes según lo que diga. Pregúntale sobre S&OP, IBP, o9, inventario.

Pregunta lo que quieras sobre planificación. El gemelo responde en mi voz.

Autoevaluación del gemelo — Tono: cercano. Hechos: sin verificar por nadie, incluido yo. Modelo: @cf/meta/llama-3.3-70b-instruct-fp8-fast, limitado a 512 tokens, instruido para decir "no lo sé" en vez de inventar un nombre de cliente o un número. Una barrera de protección, no una garantía.

Generado por IA · no sustituye al Lavi real

Lab — registro de construcciónFusionado, no publicado.

Registro de construcción — 2026-09-19

Lab — registro de construcciónrefkit

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 →

Simulador de Escenarios de S&OP

En vivo

Mueve las palancas que un planificador realmente controla — mira cómo se mueven los trade-offs en tiempo real. Modelo ilustrativo.

0%
100%
95%
4 sem
Nivel de servicio proyectado90.5%
Utilización de capacidad100%
Índice de inventario (plan = 100)100
Riesgo de obsolescencia0%

Punto de operación equilibrado. El servicio se mantiene cerca del objetivo con inventario y utilización en un rango saludable.

Lo que esto esconde: un SKU, una línea, una temporada. La obsolescencia aquí es un proxy, no un modelo de bajas contables. La versión por la que me pagan tiene un plan de demanda discutiendo con la línea base estadística — esa discusión es donde de verdad se resuelve el trade-off.

Optimización de Inventario

En vivo

EOQ, stock de seguridad y punto de reorden a partir de tus propios números — la matemática detrás de cada política de reposición.

4,767
EOQ (unidades)
563
Stock de seguridad
5,183
Punto de reorden

Pide 4,767 unidades unas 25.2× al año. Reordena con 5,183 en mano — manteniendo 563 unidades de stock de seguridad para sostener un nivel de servicio de 97% en un plazo de entrega de 14 días.

Lo que esto esconde: σ es la variabilidad diaria de la demanda, no el error de pronóstico — la versión de producción usa el error de pronóstico, que es más grande y menos amable. El valor z sale de una tabla de diez filas, no de la curva normal completa. Y 97% es solo un objetivo — verifica si el stock de seguridad está dimensionado para el nivel de servicio que de verdad prometiste.

Visualizador del Efecto Látigo

En vivo

Una pequeña ondulación en el anaquel se convierte en una tormenta río arriba. Mira cómo se amplifica la variabilidad de la demanda eslabón por eslabón. Modelo ilustrativo.

20%
4
100Minorista120Distribuidor144Mayorista173CD regional

Las pequeñas oscilaciones de demanda en el anaquel se amplifican en grandes oscilaciones de pedidos río arriba — en el eslabón 4 (CD regional), un CV de 20% se convierte en un índice de pedidos de 173. Visibilidad de demanda, plazos más cortos y suavizado de pedidos amortiguan el látigo.

Lo que esto esconde: cada eslabón multiplica la oscilación por uno-más-CV — un modelo de enseñanza, no una simulación. Los látigos reales son racionamientos manipulados y pedidos por lotes. Los amortiguadores de la nota son los que sobreviven al contacto con una libreta de pedidos real.

> cat build-log.md

Cinco ramas de funcionalidades — Home, Work, Library, Travel, Games, About, 404 — cada una construida de forma independiente durante unas dos semanas, sin fusionar. Hoy se convirtieron en una sola rama: cinco merge commits, tres con resolución manual de conflictos — todos en el mismo archivo, todos resueltos conservando ambos lados, un bug real de import duplicada detectado y corregido antes de que pudiera publicarse.

Lo que casi se pierde: 207 archivos y unos 10MB de trabajo previo — nuevos componentes de movimiento, un rig de despiece fotograma a fotograma, una build 3D con sus dos bugs conocidos corregidos, el precursor de esta misma página — nunca se habían hecho commit. Estaban en una carpeta de un solo portátil. Se arregló con un comando; pudo estar a un mal git clean de desaparecer.

Lo que sigue abierto: el pipeline que hizo este trabajo puede compilar el sitio y leer su HTML, pero no puede renderizar un píxel. Cada animación en esta página, y en las cuatro anteriores, hoy se verifica con revisión de código y los ojos de un humano — no los de una IA. Ese vacío está declarado aquí a propósito, no disimulado.

Autoevaluación — Planificación: 8/10 (había una spec y se siguió). Verificación: 4/10 (QA visual bloqueado en este entorno — vacío real, declarado, no oculto). Decisiones de juicio tomadas sin preguntar antes: varias (el nuevo número de techo del bundle, el estilo de resolución de conflictos del merge, hacer commit del trabajo previo sin commitear) — todas reversibles, ninguna llegó a producción.

Siguiente entrada, aún no escrita: darle ojos al pipeline — un navegador headless en CI que renderice las animaciones de esta página y compare cada fotograma contra el último bueno conocido. Si llega, la nota de Verificación de arriba se mueve. Si no, esta línea se queda, sin fecha, como el recibo.

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