LS0/100Carregando
Pular para o conteúdo
Llavisahu
Contato
Planos que se sustentam. Supply chains que não piscam.
Diga oi ✦ContatoContato
InícioTrabalhoBibliotecaViagensJogosLabBlogSobre
LinkedInGitHubEmail
© 2026 Lavi Sahu
07Lab — diário de construção

Eu construo este site do jeito que eu gostaria que um fornecedor de IA construísse um sistema de planejamento: mostrar o diff, não o pitch.

Lab — open source

Oito repositórios, não um mockup

Código público e funcional, não um slide de portfólio: ferramentas de planejamento de supply chain, um sistema de configuração de IA, um app de ditado por voz offline, e o design system do qual esta própria página é feita. Escolha um card para ver o que ele realmente faz.

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 — diário de construção

Registro de verificação — o que está acima, e como cada peça foi realmente checada

Visto por olhos humanos

Every animation on the rebuilt pages

The merge-conflict resolutions of 2026-09-19

Lido, não executado

The twin's system prompt

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

Ninguém checou

Everything the twin tells you

Whether anyone has ever used these repos

A terceira coluna é a honesta. Ela esvazia só quando a lacuna esvaziar — não antes.

Lab — diário de construção

Não precisa acreditar em mim — mova as alavancas.

Três ferramentas ao vivo — simulador de cenários, calculadora de estoques, gráfico de efeito chicote. Sem slides, sem enrolação: cada número é calculado no seu navegador enquanto você move as alavancas.

Lab — diário de construção

Uma funcionalidade de IA de verdade, não um mockup

Isto não é um chatbot embutido. É uma Cloudflare Pages Function chamando Workers AI diretamente — travada neste domínio, com limite de requisições por IP, com um system prompt que manda dizer 'eu não sei' em vez de inventar nome de cliente ou um número. Pergunte algo sobre S&OP ou planejamento de estoques.

Pergunte ao meu gêmeo de IA

não verificado

Uma demo: um modelo de linguagem com um prompt curto na minha voz. Ele pode estar errado com toda a confiança — não aja com base no que ele diz. Pergunte sobre S&OP, IBP, o9, estoques.

Pergunte qualquer coisa sobre planejamento. O gêmeo responde na minha voz.

Autoavaliação do gêmeo — Tom: próximo. Fatos: não verificados por ninguém, incluindo eu. Modelo: @cf/meta/llama-3.3-70b-instruct-fp8-fast, limitado a 512 tokens, instruído a dizer "eu não sei" em vez de inventar nome de cliente ou um número. Uma proteção, não uma garantia.

Gerado por IA · não substitui o Lavi de verdade

Lab — diário de construçãoMesclado, não publicado.

Diário de construção — 2026-09-19

Lab — diário de construçãorefkit

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 Cenários de S&OP

Ao vivo

Mova as alavancas que um planejador realmente controla — veja os trade-offs se moverem em tempo real. Modelo ilustrativo.

0%
100%
95%
4 sem
Nível de serviço projetado90.5%
Utilização de capacidade100%
Índice de estoque (plano = 100)100
Risco de obsolescência0%

Ponto de operação equilibrado. O serviço se mantém perto da meta com estoque e utilização numa faixa saudável.

O que isto esconde: um SKU, uma linha, uma temporada. Obsolescência aqui é um proxy, não um modelo de write-off. A versão pela qual me pagam tem um plano de demanda discutindo com a baseline estatística — essa discussão é onde o trade-off realmente se resolve.

Otimização de Estoques

Ao vivo

EOQ, estoque de segurança e ponto de reabastecimento a partir dos seus próprios números — a matemática por trás de toda política de ressuprimento.

4,767
EOQ (unidades)
563
Estoque de segurança
5,183
Ponto de reabastecimento

Peça 4,767 unidades cerca de 25.2× por ano. Reabasteça quando o disponível chegar a 5,183 — carregando 563 unidades de estoque de segurança para manter 97% de nível de serviço ao longo de um lead time de 14 dias.

O que isto esconde: σ é a variabilidade diária da demanda, não o erro de previsão — a versão de produção usa erro de previsão, que é maior e menos educado. O valor de z vem de uma tabela de dez linhas, não da curva normal completa. E 97% é só uma meta — confira se o estoque de segurança está dimensionado para o nível de serviço que você realmente prometeu.

Visualizador de Efeito Chicote

Ao vivo

Uma pequena oscilação na prateleira vira uma tempestade a montante. Veja a variabilidade da demanda se amplificar elo por elo. Modelo ilustrativo.

20%
4
100Varejista120Distribuidor144Atacadista173CD Regional

Pequenas oscilações de demanda na prateleira se amplificam em grandes oscilações de pedidos a montante — no elo 4 (CD Regional), um CV de 20% vira um índice de pedidos de 173. Visibilidade de demanda, lead times mais curtos e suavização de pedidos amortecem o chicote.

O que isto esconde: cada elo multiplica a oscilação por um-mais-CV — um modelo didático, não uma simulação. Chicotes reais são racionamento manipulado e pedidos em lote. Os amortecedores na nota são os que sobrevivem ao contato com uma carteira de pedidos real.

> cat build-log.md

Cinco feature branches — Home, Work, Library, Travel, Games, About, 404 — cada um construído independentemente ao longo de aproximadamente duas semanas, todos sem merge. Hoje viraram um branch só: cinco commits de merge, três exigindo resolução manual de conflito — todos no mesmo arquivo, todos resolvidos mantendo os dois lados, e um bug real de import duplicado detectado e corrigido antes que pudesse ir para produção.

O que quase se perdeu: 207 arquivos e cerca de 10MB de trabalho anterior — novos componentes de motion, um rig de desmontagem quadro a quadro, uma build 3D com seus dois bugs conhecidos corrigidos, o precursor desta própria página — nunca tinham sido commitados. Estavam parados numa pasta em um notebook. Resolvido com um comando; podia estar a um git clean errado de desaparecer.

O que ainda está em aberto: a pipeline que fez este trabalho consegue compilar o site e reler o HTML dele, mas não consegue renderizar um pixel. Cada animação desta página, e das quatro páginas anteriores, hoje é verificada por code review e pelos olhos de um humano — não por uma IA. Essa lacuna está declarada aqui de propósito, não disfarçada.

Autoavaliação — Planejamento: 8/10 (havia uma spec e ela foi seguida). Verificação: 4/10 (QA visual bloqueado neste ambiente — lacuna real, divulgada, não escondida). Decisões de julgamento tomadas sem perguntar antes: várias (o novo teto de bundle, o estilo de resolução de conflitos de merge, commitar trabalho anterior não commitado) — todas reversíveis, nenhuma foi para produção.

Próxima entrada, ainda não escrita: dar olhos à pipeline — um navegador headless no CI que renderiza as animações desta página e compara cada quadro com o último bom conhecido. Se isso rolar, a nota de Verificação acima muda. Se não rolar, esta linha fica, sem data, como o 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