// Metis — Page Components const T = { cream: '#F6F7FA', dark: '#16213E', sage: '#5B6B8C', accent: '#1F5FBF', creamDark: '#E9ECF3', }; // Real self-serve signup entry point (Individual / Team / Enterprise chooser). // Every "Get Started" CTA across the marketing site goes here. const SIGNUP_URL = '/signup-choice.html'; const goToSignup = () => { window.location.href = SIGNUP_URL; }; const Label = ({ children, color = T.accent }) => (
{children}
); const EditorialHeading = ({ children, size = 72, style = {} }) => (

{children}

); const SansBody = ({ children, style = {} }) => (

{children}

); const DarkBtn = ({ children, onClick }) => { const [hov, setHov] = React.useState(false); return ( ); }; const GhostBtn = ({ children, onClick }) => { const [hov, setHov] = React.useState(false); return ( ); }; // ─── CUSTOM SELECT ──────────────────────────────────────────────────────── const CustomSelect = ({ value, onChange, options, placeholder = 'Select…', error }) => { const [open, setOpen] = React.useState(false); const ref = React.useRef(null); const selected = options.find(o => o.value === value); React.useEffect(() => { const handler = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); }; document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, []); return (
{/* Trigger */}
setOpen(o => !o)} style={{ padding: '11px 0', borderBottom: `1px solid ${error ? T.accent : open ? T.dark : 'rgba(22,33,62,0.2)'}`, display: 'flex', justifyContent: 'space-between', alignItems: 'center', cursor: 'pointer', transition: 'border-color 0.2s', fontFamily: "Cormorant Garamond, Georgia, serif", fontSize: '19px', color: selected ? T.dark : 'rgba(22,33,62,0.65)', }} > {selected ? selected.label : placeholder}
{/* Dropdown panel */} {open && (
{options.map(opt => (
{ onChange(opt.value); setOpen(false); }} style={{ padding: '14px 16px', fontFamily: "Cormorant Garamond, Georgia, serif", fontSize: '18px', color: value === opt.value ? T.dark : 'rgba(22,33,62,0.85)', background: value === opt.value ? T.creamDark : 'transparent', borderBottom: '1px solid rgba(22,33,62,0.06)', cursor: 'pointer', transition: 'background 0.15s', display: 'flex', alignItems: 'center', justifyContent: 'space-between', }} onMouseEnter={e => { if (value !== opt.value) e.currentTarget.style.background = T.creamDark; }} onMouseLeave={e => { if (value !== opt.value) e.currentTarget.style.background = 'transparent'; }} > {opt.label} {value === opt.value && ( )}
))}
)}
); }; const Divider = ({ style = {} }) => (
); const ImgPlaceholder = ({ label, width = '100%', height = 320, bg = T.creamDark }) => (
{label}
); // ─── PRODUCT SHOWCASE (real report shape, sample data) ───────────────────── // XYZ Corp is the same illustrative example already used in the overview // deck (metisinsured.com never shows a real customer's report publicly) — // kept byte-consistent with that deck rather than inventing new "facts." const ProductShowcase = () => (
Sample Report
metisinsured.com/app
XYZ Corp
General Contractor · Sacramento, CA
Workers Comp — Contractor
{[ { label: 'Secretary of State', status: 'ACTIVE', rows: [['Entity #', 'C4471902'], ['Formed', '03/14/2016']] }, { label: 'Experience Modification', status: '0.91 — 2026', rows: [['Class Code', '5645 — Carpentry'], ['5-Yr Trend', 'Improving']] }, { label: 'Licensing & Compliance', status: 'CSLB ACTIVE', rows: [['OSHA Violations', 'None on file'], ['Web Presence', 'Confirmed']] }, ].map(card => (
{card.label}
{card.status}
{card.rows.map(([k, v]) => (
{k}
{v}
))}
))}
{['Entity verified against live SOS records', 'Real WCIRB experience-mod history', 'Licensing, OSHA, and web presence in one place'].map((c, i) => (
{i + 1} {c}
))}
XYZ Corp is an illustrative example, not a real business — built to match the exact structure of a real Metis report.
); // ─── TRUST / RESPONSIBLE-AI SECTION ───────────────────────────────────────── const TrustSection = () => (
Built to support underwriting judgment — not replace it. Metis gathers and organizes information for your team to review. It never makes a pricing, eligibility, or coverage decision on its own.
{[ { num: 'Sourcing', title: 'Public record, or clearly licensed.', body: 'Secretary of State filings, OSHA history, contractor licensing, and DOT safety records are public record. Our WCIRB experience-mod data comes through a direct, paid data license — not scraped, not guessed.' }, { num: 'Judgment', title: 'A person always reviews the result.', body: 'Every card in a Metis report is a signal to verify, not a verdict. Uncertain matches are labeled as unconfirmed rather than presented as fact — your team makes the call.' }, { num: 'Your Data', title: 'Your reports stay in your account.', body: 'Every search and report is scoped to your agency — never pooled with, or visible to, another organization on Metis.' }, ].map(item => (
{item.num}
{item.title}
{item.body}
))}
); // ─── HOME PAGE ────────────────────────────────────────────────────────────── const HomeEditorial = ({ setPage }) => (
{/* Hero */}
Underwriting research in seconds,
not hours.
Metis automatically gathers and organizes the background research workers' comp professionals need to evaluate a business — Secretary of State standing, licensing, experience mod, OSHA history, and more — in about 15 seconds.
Get Started setPage('contact')}>View a Demo setPage('solutions')}>See How It Works
{/* The real stat, sized to do some work */}
Hours 15 seconds
Typical time to a complete underwriting report
{[['39', 'States Covered'], ['10+', 'Sources Checked'], ['1', 'Search, Start to Finish']].map(([n, l]) => (
{n}
{l}
))}
{/* Value Props */}
{[ { num: '01', title: 'Instant Business Verification', body: 'Pull entity status, OSHA history, contractor licensing, and X-Mod scores from authoritative sources — in seconds, not hours.' }, { num: '02', title: 'Pre-Submission Risk Scoring', body: 'Evaluate workers\' comp risk before the submission leaves your desk. Catch red flags early and improve placement rates.' }, { num: '03', title: 'Built for Agents', body: 'Designed for the way agents work. No complex onboarding, no carrier dependency. Start verifying on day one.' }, ].map(item => (
{item.num}
{item.title}
{item.body}
))}
{/* CTA Band */}
Ready to transform your workflow?
Get Started setPage('contact')}>View a Demo
); const HomeSplit = ({ setPage }) => (
{/* Hero Split */}
Verify every business.
Instantly.
Metis digitizes the pre-submission workers' comp risk evaluation process — giving insurance agents the speed and confidence to quote more, faster.
Get Started setPage('contact')}>View a Demo setPage('solutions')}>Explore Solutions
{[['10x', 'Faster Evaluation'], ['Zero', 'Carrier Dependency'], ['100%', 'Agent-Focused']].map(([stat, label]) => (
{stat}
{label}
))}
Risk Evaluation Dashboard
{[ { label: 'Business Verified', status: 'complete' }, { label: 'FEIN Confirmed', status: 'complete' }, { label: 'Payroll Estimate', status: 'complete' }, { label: 'Risk Score Generated', status: 'active' }, { label: 'Submission Ready', status: 'pending' }, ].map(row => (
{row.label} {row.status === 'complete' ? '✓ Done' : row.status === 'active' ? '● Live' : '– Pending'}
))}
Risk Score A–
{/* Features row */}
{[ { title: 'Instant Verification', body: 'Real-time business data from authoritative sources.' }, { title: 'Pre-Sub Risk Scoring', body: 'Evaluate risk before the submission leaves your desk.' }, { title: 'Agent-Native Design', body: 'No complex onboarding. Start quoting on day one.' }, { title: 'Carrier Independent', body: 'Works across markets. No lock-in, no gatekeeping.' }, ].map(f => (
{f.title}
{f.body}
))}
{/* Dark CTA */}
Ready to transform your submission workflow?
Get Started setPage('contact')}>View a Demo
); // ─── ABOUT PAGE ───────────────────────────────────────────────────────────── const AboutPage = ({ setPage }) => (
Counsel for insurance agents.
We built the tool we wished existed. Workers' compensation is one of the most complex, data-intensive lines of insurance — yet the pre-submission process for agents is still largely manual, fragmented, and slow. Metis changes that. Our platform transforms hours of underwriting research into minutes, giving agents instant access to the business intelligence they need to evaluate risk, build stronger submissions, and move opportunities forward faster. Less research. Better submissions. More placement.
A front-row seat to the industry. Metis began with a front-row seat to the workers' compensation industry. Growing up, our founder watched his father build and operate a workers' compensation underwriting agency and saw firsthand the challenges caused by incomplete information, manual research, and lengthy underwriting processes. Years later, after working closely with underwriters and agents—including family members in the industry—he gained a deeper understanding of the hours spent gathering data, verifying businesses, and preparing submissions. What started as a mission to help one agency work more efficiently became a platform built to help insurance professionals everywhere spend less time researching and more time placing business.
{[ { title: 'Deep Domain Expertise', body: 'Built by people who understand workers\' comp — the nuances, the gotchas, and the agent workflow that makes or breaks a placement.' }, { title: 'Agent-First Philosophy', body: 'We sit on your side of the table. Our product serves agents, not carriers. Every decision we make reflects that.' }, { title: 'Speed as a Feature', body: 'Time kills deals. Metis compresses the pre-submission research cycle from days to seconds — without sacrificing accuracy.' }, ].map(item => (
{item.title}
{item.body}
))}
Interested in learning more?
Get Started setPage('contact')}>View a Demo
); // ─── SOLUTIONS PAGE ────────────────────────────────────────────────────────── const SolutionsPage = ({ setPage }) => (
Everything you need to know before you quote. Metis pulls business entity status, OSHA history, contractor licenses, x-mod scores, DOT safety records, Google satellite and street views, and more into a single report — in under a minute. No more manual research. No more surprises at the carrier.
{/* How it works */}
{[ { step: '01', title: 'Enter the Business', body: 'Enter the business name, choose the appropriate industry report, and provide the business address. Metis can automatically populate address details from a copied address and instantly recognize previously researched businesses, pulling historical information to streamline the process.' }, { step: '02', title: 'Metis Does the Research', body: 'In under a minute, Metis pulls Secretary of State status, OSHA violation history, contractor license standing, experience modification scores, DOT safety records, and more — all from authoritative sources, automatically.' }, { step: '03', title: 'Quote with Confidence', body: 'Review a clean, structured report with a Green / Yellow / Red appetite indicator. Add notes, export to PDF, and walk into the carrier conversation with everything already done.' }, ].map((item, i) => (
{item.step}
{item.title}
{item.body}
))}
{/* Features detail */}
{[ { title: 'Secretary of State Verification', body: 'Instant business entity status. Active / Suspended / Terminated status, FTB and SOS standing, officers, registered agent, and formation date — confirmed in seconds, not tabs.' }, { title: 'OSHA Violation History', body: 'Surface Cal/OSHA citations, violation types, and penalty history before your carrier asks. One of the most overlooked risk signals in workers\' comp underwriting, automated.' }, { title: 'Contractor License Verification', body: 'Real-time state licensing board lookup for license status, classifications, bond amounts, and expiration dates. Disciplinary actions flagged automatically — no more manual license board searches.' }, { title: 'Experience Modification (X-Mod) Lookup', body: 'NCCI x-mod access across 39 states, with California WCIRB x-mod coming soon. Most agents don\'t know they can pull this data before quoting — now it\'s automatic on every report.' }, { title: 'DOT & FMCSA Safety Records', body: 'For commercial auto and trucking risks, Metis pulls SAFER carrier profiles, safety ratings, inspection history, and out-of-service violations. Every commercial risk, fully researched.' }, { title: 'Appetite Score & Carrier-Ready Report', body: 'Every search delivers a Green / Yellow / Red appetite indicator with all key data points formatted for the carrier conversation. Export to PDF in one click and submit with confidence.' }, { title: 'Full Report History', body: 'Every report your agency has ever run is saved, searchable, and available in one place. Re-run a report on a returning client in seconds using saved business profiles — no re-entering information.' }, { title: 'Submission Notes & Deal Tracking', body: 'Add private notes directly to any report to track where a submission stands — carrier conversations, follow-ups, declinations, and wins. Your entire pipeline, organized by risk.' }, { title: 'Agency Admin Dashboard', body: 'Agency leaders get a real-time view of team activity — reports run, appetite trends, and usage by agent. Know what your team is working on and how the book is shaping up, without asking.' }, ].map(f => (
{f.title}
{f.body}
))}
See Metis in action.
Get Started setPage('contact')}>View a Demo setPage('about')}>Learn About Us
); // ─── INLINE LIGHT BUTTON (for dark backgrounds) ──────────────────────────── const InlineLightBtn = ({ children, onClick }) => { const [hov, setHov] = React.useState(false); return ( ); }; // ─── VIEW DEMO PAGE ────────────────────────────────────────────────────────── const ContactPage = () => { const [playing, setPlaying] = React.useState(false); const videoRef = React.useRef(null); const handlePlay = () => { setPlaying(true); if (videoRef.current) videoRef.current.play(); }; return (
{/* Header */}
See Metis in action. Watch how Metis transforms the pre-submission workers' comp risk evaluation process — from hours of manual research to instant, agent-ready intelligence.
Get Started window.__metisNav && window.__metisNav('contact_us')}>Book a Demo
{/* Video Player */}
{/* Placeholder — swap src for your real video URL */}
{/* Caption */}
Metis Platform Walkthrough
Workers' Compensation · Risk Intelligence
Metis, 2026
{/* What you'll see */}
{[ { num: '01', title: 'Business Lookup', body: 'Enter any business and watch Metis pull authoritative data in seconds.' }, { num: '02', title: 'Risk Evaluation', body: 'See how our scoring engine surfaces red flags and signals in real time.' }, { num: '03', title: 'Submission Summary', body: 'Auto-generated packet ready for your carrier conversation.' }, ].map(item => (
{item.num}
{item.title}
{item.body}
))}
{/* Dark footer CTA */}
Want to see more? Book time with our team for a live, personalized walkthrough — or get started today.
Get Started window.__metisNav && window.__metisNav('contact_us')}>Book a Demo
); }; // ─── CONTACT US PAGE ──────────────────────────────────────────────────────── const contactInputStyle = (err) => ({ width: '100%', padding: '11px 0', background: 'transparent', border: 'none', borderBottom: `1px solid ${err ? T.accent : 'rgba(22,33,62,0.2)'}`, fontFamily: "Cormorant Garamond, Georgia, serif", fontSize: '19px', color: T.dark, outline: 'none', boxSizing: 'border-box', transition: 'border-color 0.2s', }); const InquiryField = ({ label, id, type, form, setForm, errors, setErrors, children }) => (
{children || ( { setForm(f => ({ ...f, [id]: e.target.value })); setErrors(err => ({ ...err, [id]: null })); }} style={contactInputStyle(errors[id])} onFocus={e => e.target.style.borderBottomColor = T.dark} onBlur={e => e.target.style.borderBottomColor = errors[id] ? T.accent : 'rgba(22,33,62,0.2)'} /> )}
); const CONTACT_INQUIRY_URL = 'https://metisinsured.com/contact-inquiry'; // No calendar integration yet - Lachlan follows up by email/phone himself, // so these are just a hint for when to try him, not a hard-booked slot. const DAY_OPTIONS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']; const TIME_OPTIONS = ['Morning', 'Afternoon', 'Evening']; const Chip = ({ label, active, onClick }) => ( ); const ChipField = ({ label, options, selected, onToggle }) => (
{options.map(opt => ( onToggle(opt)} /> ))}
); const ContactUsPage = () => { const [inquiryType, setInquiryType] = React.useState(''); const [form, setForm] = React.useState({ name: '', phone: '', email: '', business: '', preferred_days: [], preferred_times: [] }); const [submitted, setSubmitted] = React.useState(false); const [submitting, setSubmitting] = React.useState(false); const [submitError, setSubmitError] = React.useState(''); const [errors, setErrors] = React.useState({}); const teamContacts = [ { name: 'Lachlan Van Rosmalen', title: 'Founder & CEO', email: 'Lachlan@metisinsured.com', phone: '(213) 572-9852' }, { name: 'John Rosmalen', title: 'Partner', email: 'Johnrosmalen@imacoinsurance.com', phone: '(213) 239-3825' }, ]; const validate = () => { const e = {}; if (!form.name.trim()) e.name = 'Required'; if (!form.phone.trim()) e.phone = 'Required'; if (!form.email.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)) e.email = 'Valid email required'; if (!form.business.trim()) e.business = 'Required'; return e; }; const handleSubmit = async (e) => { e.preventDefault(); const errs = validate(); if (Object.keys(errs).length) { setErrors(errs); return; } setSubmitting(true); setSubmitError(''); try { const res = await fetch(CONTACT_INQUIRY_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(form), }); if (!res.ok) throw new Error('Request failed'); setSubmitted(true); } catch (err) { setSubmitError("Something went wrong sending this — please email us directly instead, or try again in a moment."); } finally { setSubmitting(false); } }; const fieldProps = { form, setForm, errors, setErrors }; return (
{/* Header */}
Contact Us Want a live walkthrough? Tell us a bit about you and when's good — we'll follow up to find a time.
{/* Two-column body */}
{/* LEFT — Team Contacts */}
{teamContacts.map((c, i) => ( ))}
{/* RIGHT — Inquiry Form */}
{submitted ? (
*
Thank you, {form.name.split(' ')[0]}. We've received your inquiry and will be in touch shortly.
) : (
setForm(f => ({ ...f, preferred_days: f.preferred_days.includes(d) ? f.preferred_days.filter(x => x !== d) : [...f.preferred_days, d], }))} /> setForm(f => ({ ...f, preferred_times: f.preferred_times.includes(t) ? f.preferred_times.filter(x => x !== t) : [...f.preferred_times, t], }))} /> {submitError && (
{submitError}
)} )}
); }; Object.assign(window, { HomeEditorial, HomeSplit, AboutPage, SolutionsPage, ContactPage, ContactUsPage, InlineLightBtn, CustomSelect });