// Planilha vs BinGest — animated split that ranges from chaos to clarity on scroll/hover. function Comparison() { const ref = React.useRef(null); const [progress, setProgress] = React.useState(0); // 0 = chaos, 1 = clarity React.useEffect(() => { const onScroll = () => { if (!ref.current) return; const rect = ref.current.getBoundingClientRect(); const wh = window.innerHeight; // Progress 0..1 as the section moves from bottom-of-viewport to upper-third const p = 1 - Math.min(1, Math.max(0, (rect.top - wh * 0.1) / (wh * 0.7))); setProgress(p); }; onScroll(); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); return (
Sua planilha vs. BinGest

Você reconhece esse caos?

Toda obra começa com uma planilha. Em 3 meses ela vira um Frankenstein de abas, fórmulas quebradas e cores que ninguém entende. Compare lado a lado.

{/* Result strip */}
{[ { k: "−85%", v: "tempo gasto em fechamento mensal" }, { k: "0", v: "fórmulas quebradas (porque não tem fórmula)" }, { k: "3 cliques", v: "para exportar o DRE auditado" }, { k: "+30", v: "noites de sono por mês" }]. map((s, i) =>
{s.k}
{s.v}
)}
); } // --- Spreadsheet card ----------------------------------------------------- function SpreadsheetCard({ chaos }) { // chaos: 0..1 (1 = full chaos, 0 = calm) const tilt = -2 + chaos * 0.5; const cells = [ ["A", "B", "C", "D", "E"], ["Funcionario", "Diaria", "Dias", "Total", "Obra"], ["Carlos S.", "180", "22", "=B3*C3", "Acácias"], ["Joao P.", "200", "18", "3.600", "Acácias"], ["?? Maria", "180", "20", "#REF!", "??"], ["Pedro", "180", "24", "4.320,00", "Vila Sul"], ["Lucas", "180", "", "#DIV/0!", "Vila Sul"], ["Roberto X.", "150", "26", "3.900", "Acácias?"], ["", "TOTAL", "", "=SOMA(D3:D9)", ""]]; const ann = [ { row: 4, msg: "ver com o mestre" }, { row: 6, msg: "faltou dia" }]; return (
{/* Excel-ish chrome */}
X controle_obras_FINAL_v8_USAR_ESTE.xlsx
{/* Cell grid */}
{cells.map((row, ri) =>
{ri === 0 ? "" : ri}
{row.map((c, ci) => { const isHeader = ri === 0; const isLabel = ri === 1; const isError = c.includes("#") || c.includes("?"); const isFormula = c.startsWith("="); return (
{c}
); })}
)} {/* Hand-scribbled annotations */} {ann.map((a, i) =>
← {a.msg}
)} {/* Red squiggle highlight */}
{/* Footer chip */}
2 erros detectados · Última edição há 3 dias por "meu primo"
{/* Label */}
Hoje · sua planilha
); } // --- BinGest card ----------------------------------------------------------- function BingestCard({ order }) { // Mini glimpse of BinGest result. Becomes more saturated/crisp as order increases. return (
{/* Chrome */}
BinGest — DRE consolidado · maio de 2026 Online
{/* Quick KPI strip */}
{[ { l: "Receita", v: "R$ 47.200", c: "var(--ink)" }, { l: "Custos diretos", v: "−R$ 19.840", c: "var(--red-600)" }, { l: "Resultado op.", v: "R$ 27.360", c: "var(--green-600)" }]. map((k, i) =>
{k.l}
{k.v}
)}
{/* DRE rows */}
{[ { l: "Receita Bruta Total", v: "R$ 47.200,00", strong: true }, { l: "Obras", v: "R$ 47.200,00", indent: true }, { l: "(−) Custos Diretos", v: "−R$ 19.840,00", neg: true, strong: true }, { l: "Equipe Obras", v: "−R$ 14.620,00", neg: true, indent: true }, { l: "Materiais", v: "−R$ 5.220,00", neg: true, indent: true }, { l: "= Lucro Bruto", v: "R$ 27.360,00", strong: true, hilite: true }]. map((r, i) =>
{r.l} {r.v}
)}
{/* Footer chip */}
Atualizado há 12 segundos · 0 erros · Exportável em PDF
Mesma obra · no BinGest
); } window.Comparison = Comparison;