// 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) =>
)}
);
}
// --- 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) =>
)}
{/* 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;