// SR SOFT — App shell: Navbar + Hero + page composition
// (Sections live in sections.jsx)
const { useState, useEffect, useRef, useMemo } = React;
// ── Reveal hook (IntersectionObserver) ──────────────────────────
function useReveal() {
useEffect(() => {
const els = document.querySelectorAll(".reveal:not(.in)");
if (!("IntersectionObserver" in window)) {
els.forEach((el) => el.classList.add("in"));
return;
}
const io = new IntersectionObserver(
(entries) => {
entries.forEach((e) => {
if (e.isIntersecting) {
e.target.classList.add("in");
io.unobserve(e.target);
}
});
},
{ threshold: 0.12, rootMargin: "0px 0px -40px 0px" }
);
els.forEach((el) => io.observe(el));
return () => io.disconnect();
});
}
// ── Navbar ───────────────────────────────────────────────────────
const NAV_LINKS = [
{ href: "#home", label: "Home" },
{ href: "#servizi", label: "Servizi" },
{ href: "#metodo", label: "Metodo" },
{ href: "#soluzioni", label: "Soluzioni" },
{ href: "#tecnologie", label: "Tecnologie" },
{ href: "#contatti", label: "Contatti" },
];
function Navbar() {
const [scrolled, setScrolled] = useState(false);
const [open, setOpen] = useState(false);
useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 12);
onScroll();
window.addEventListener("scroll", onScroll, { passive: true });
return () => window.removeEventListener("scroll", onScroll);
}, []);
useEffect(() => {
document.body.style.overflow = open ? "hidden" : "";
}, [open]);
const close = () => setOpen(false);
return (
);
}
function Arrow({ size = 14 }) {
return (
);
}
// ── Hero ─────────────────────────────────────────────────────────
function Hero({ headline }) {
const words = headline.split(" ");
return (
Consulenza · Sviluppo · Integrazione
{words.map((w, i) => (
{w}
{i < words.length - 1 ? " " : ""}
))}
SR SOFT affianca le aziende nell'analisi, progettazione e sviluppo di
soluzioni digitali personalizzate: gestionali, piattaforme web, app
mobile, integrazioni API e automazioni per rendere il lavoro più
efficiente, controllabile e scalabile.
Raccontaci il tuo progetto
Scopri cosa realizziamo
Disponibili Q2 2026
Progetti attivi 11
Tempo medio analisi 2 settimane
Uptime medio 99.4%
);
}
function HeroVisual() {
const ref = useRef(null);
usePointerParallax(ref, 16);
return (
{/* Rotating rings */}
{/* Network lines + nodes + packets */}
{/* Terminal card */}
~/srsoft/analyze.ts
// analisi processo cliente
const flow = await analyze(
"ordini → magazzino → fatturazione"
)
return flow.optimize().automate ()
{/* Dashboard card */}
Operativo · Real-time
↑ 24%
{/* Floating chips */}
);
}
function Sparkline() {
const path = "M 0 40 L 28 32 L 56 36 L 84 22 L 112 28 L 140 14 L 168 20 L 196 8 L 224 16 L 252 4";
return (
);
}
// ── App composition ─────────────────────────────────────────────
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"accent": "#e94f37",
"headline": "Progettiamo e sviluppiamo sistemi digitali su misura per far evolvere la tua azienda.",
"density": "regular",
"showGrid": true,
"aurora": true,
"spotlight": true
}/*EDITMODE-END*/;
const HEADLINES = [
"Progettiamo e sviluppiamo sistemi digitali su misura per far evolvere la tua azienda.",
"Trasformiamo processi complessi in soluzioni digitali semplici, scalabili e potenti.",
"Consulenza informatica e software su misura per aziende che vogliono crescere.",
];
const ACCENTS = ["#e94f37", "#ff8c73", "#f59e0b", "#34d399", "#a78bfa"];
function App() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
useReveal();
useEffect(() => {
const root = document.documentElement;
root.style.setProperty("--accent", t.accent);
root.style.setProperty("--accent-glow", hexA(t.accent, 0.32));
document.body.dataset.density = t.density;
document.body.dataset.aurora = t.aurora ? "on" : "off";
document.body.dataset.spot = t.spotlight ? "on" : "off";
}, [t.accent, t.density, t.aurora, t.spotlight]);
useEffect(() => {
const grid = document.querySelector(".hero-grid-bg");
if (grid) grid.style.display = t.showGrid ? "" : "none";
}, [t.showGrid]);
useMethodProgress();
return (
setTweak("accent", v)}
/>
({ value: h, label: `Variante ${i + 1}` }))}
onChange={(v) => setTweak("headline", v)}
/>
setTweak("showGrid", v)}
/>
setTweak("aurora", v)}
/>
setTweak("spotlight", v)}
/>
setTweak("density", v)}
/>
);
}
// ── helpers ──────────────────────────────────────────────────────
function hexA(hex, a) {
const m = hex.replace("#", "");
const n = m.length === 3 ? m.split("").map((c) => c + c).join("") : m;
const r = parseInt(n.slice(0, 2), 16);
const g = parseInt(n.slice(2, 4), 16);
const b = parseInt(n.slice(4, 6), 16);
return `rgba(${r}, ${g}, ${b}, ${a})`;
}
// Mount
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render( );