// WhyUs.jsx — differentiators with cursor-tilt bento + mouse-tracking glow const WhyUs = () => { const useVP = window.useIsMobile || (() => false); const isMobile = useVP(900); return (

Why GreySurface

Why teams choose GreySurface

A tester with a nine-year median tenure leads your engagement from scoping to retest.

The tester named in your statement of work does the testing, writes the report, and presents it to your team. The same person stays with you for the whole engagement.

{['#5e6ad2','#828fff','#7a7fad','#3a44a8','#27a644'].map((c, i) => (
{['MR','SK','AT','PD','LH'][i]}
))}
OSCP · OSEP · OSWE · OSED · CRTO · GXPN
Certifications held across the team, refreshed quarterly
90 days

We retest every High and Critical finding once you have fixed it, at no charge, and your tester signs off on the result.

Every finding comes with a working reproduction

Your engineers can reproduce the exploit themselves before they fix it.

Critical findings disclosed within one hour

Daily updates during testing, a call when something is urgent, and a channel that stays open through retest.

OWASP · OSSTMM · NIST · PTES · MITRE ATT&CK

Findings are mapped to the frameworks your auditor uses, so you can hand over the report as it is.

We build our own tooling

When existing tools do not fit your environment, we write what is needed.

One report covering every framework your customers and regulators ask about

{['ISO 27001','SOC 2','PCI DSS','HIPAA','GDPR','DORA','RBI','NIS2','CMMC'].map(c => ( {c} ))}
); }; // Tilt-on-cursor card with mouse-tracked accent glow const TiltCard = ({ children, span = 'span 2', rows = 'span 1' }) => { const ref = React.useRef(null); const useVP = window.useIsMobile || (() => false); const isMobile = useVP(900); const [t, setT] = React.useState({ rx: 0, ry: 0, mx: 50, my: 50, hover: false }); const onMove = (e) => { if (isMobile) return; const r = ref.current.getBoundingClientRect(); const x = (e.clientX - r.left) / r.width; const y = (e.clientY - r.top) / r.height; setT({ rx: (0.5 - y) * 6, // tilt up/down ry: (x - 0.5) * 6, // tilt left/right mx: x * 100, my: y * 100, hover: true, }); }; const onLeave = () => setT(s => ({ ...s, rx: 0, ry: 0, hover: false })); return (
{children}
); }; const Eyebrow = ({ icon, label }) => (
{label}
); // Live build-pulse implant box const ImplantBuildBox = () => { const [phase, setPhase] = React.useState(0); React.useEffect(() => { const id = setInterval(() => setPhase(p => (p + 1) % 4), 1100); return () => clearInterval(id); }, []); const lines = [ { c: '#828fff', t: '$ gs-implant build' }, { c: '#62666d', t: '→ compiling stage-0' }, { c: '#62666d', t: '→ stripping symbols' }, { c: '#27a644', t: '✓ implant.bin · ready' }, ]; return (
{lines.map((l, i) => (
{l.t}
))}
); }; Object.assign(window, { WhyUs, TiltCard });