const { useState, useEffect } = React; const PLANS = [ { id: "starter", name: "Starter", devices: "Up to 25 devices", price: 3, features: [ "MDM management", "Fleet dashboard & analytics", "Declarative Device Management (DDM)", "Osquery telemetry & ad-hoc queries", "Community support", ], excluded: ["IdP login / Platform SSO"], }, { id: "business", name: "Business", devices: "Up to 250 devices", price: 4, popular: true, features: [ "Everything in Starter, plus:", "IdP login / Platform SSO", "Telemetry / SIEM forwarding", "Auto-deploy rules", "API access", "Priority email & chat support", ], }, { id: "enterprise", name: "Enterprise", devices: "Unlimited devices", price: 5, features: [ "Everything in Business", "Dedicated infrastructure", "SLA guarantee", "Onboarding call", "Custom integrations", ], }, ]; const features = [ { icon: "🔐", title: "All the MDM Essentials", desc: "Signed enrollment with DEP/ADE zero-touch onboarding, push .mobileconfig profiles and .pkg packages fleet-wide — Wi-Fi, VPN, certificates, passcode policies, restrictions — everything you expect from MDM, ready out of the box.", }, { icon: "⚡", title: "DDM and Profile Templates", desc: "Use Apple Declarative Device Management together with reusable configuration profile templates. Define passcode rules, software update deadlines, restrictions, and settings once — devices enforce them locally and stay compliant without constant server check-ins.", }, { icon: "🔑", title: "IdP Login / Platform SSO", desc: "Users log into their Mac with Okta, Azure AD, Google Workspace, or JumpCloud credentials. Automatic account creation from IdP attributes — no manual provisioning.", badge: "Business+", }, { icon: "🔍", title: "Osquery Telemetry & Ad-Hoc Queries", desc: "Push SQL query packs to enrolled devices — monitor running processes, browser extensions, installed certificates, USB devices, and 200+ osquery tables. Run ad-hoc queries for instant fleet-wide answers.", }, { icon: "📡", title: "Telemetry Forwarding", desc: "Forward osquery results to Datadog, Prometheus, Grafana, Splunk, or any custom webhook endpoint. Configurable batch intervals and API key auth — plug straight into your existing observability stack.", badge: "Business+", }, { icon: "🛡️", title: "Security Change Alerts", desc: "Detect newly added local administrators and certificates in the system keychain or trust store during agent check-ins. ZenMDM records each change in the device log and emits an OTLP security event when telemetry export is configured.", }, { icon: "🔌", title: "Bring Your Own Security", desc: "ZenMDM stays lean and integrates instead of locking you in. Forward device telemetry and audit events to your SIEM, and pair with the endpoint-security stack you already trust — CrowdStrike, Santa, ZenShield, or your own EDR agent deployed as a package.", }, { icon: "🐧", title: "Linux & Android, Too", desc: "Not just Apple. A lightweight Go agent brings Linux endpoints under management (package + config policies, remote scripts, osquery), and Android Enterprise policies and apps are managed from the same console.", }, { icon: "🤖", title: "AI Co-Pilot", desc: "A chat-style assistant inside the admin UI that translates plain-language intents into MDM artifacts and helps diagnose device and fleet issues.", }, { icon: "🏗️", title: "GitOps: Terraform + CLI", desc: "Manage your entire MDM server as code — profiles, packages, device groups, DDM policies, IdP settings, osquery packs, and telemetry forwarding in version-controlled HCL, plus a fleet-as-code CLI (plan / apply / export). Review changes in PRs before they hit your fleet.", }, ]; function MDMLanding() { // Platform URL for the Sign in and brand links: /site-config's app_url // (#842). The platform serves this page on the MDM host and routes /api/ on // every host, so the fetch is same-origin. Guessing from the hostname was // wrong under the zensys.app layout (stripping "mdm." from mdm.zensys.app // gives the marketing apex, not app.zensys.app). Until it loads — or if it // fails — links stay on this origin rather than on a guessed host. Sign-ups // are currently disabled in the UI: Get Started / Start free trial render as // disabled buttons. const [platform, setPlatform] = useState(window.location.origin); useEffect(() => { fetch("/api/v1/site-config") .then(r => { if (!r.ok) throw new Error(r.status); return r.json(); }) .then(data => { // Only an absolute http(s) URL may become an href: a javascript: or // other value from a misconfigured server must not reach the links. if (data && typeof data.app_url === "string" && /^https?:\/\/[^\s]+$/.test(data.app_url)) { setPlatform(data.app_url.replace(/\/+$/, "")); } }) .catch(err => console.warn("site-config fetch failed:", err)); }, []); const [hoveredCard, setHoveredCard] = useState(null); return (
{/* Nav */} {/* Hero */}
{/* Grid */}
MACOS FLEET MANAGEMENT

Device management{" "} that ships today

Deploy a fully managed macOS MDM server in minutes. Push profiles, enforce policies, collect telemetry — manage it all with Terraform, API or the dashboard. No infrastructure expertise required.

See features

Signups are disabled currently

{/* Terminal preview */}
$ terraform apply
zenmdm_ddm_settings.policy: Creating...
zenmdm_profile.wifi_corp: Creating...
zenmdm_osquery_pack.security: Creating...

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

Outputs:
enrolled_devices = ["MacBook-Pro-Eng-01", "MacBook-Air-Design-03"]
{/* Features */}
Features

Everything you need to manage macOS at scale

{features.map((f, i) => (
{ e.currentTarget.style.borderColor = "#22c55e"; e.currentTarget.style.transform = "translateY(-2px)"; e.currentTarget.style.boxShadow = "0 8px 32px rgba(34,197,94,0.08)"; }} onMouseLeave={(e) => { e.currentTarget.style.borderColor = "#f0f0f0"; e.currentTarget.style.transform = "none"; e.currentTarget.style.boxShadow = "none"; }} style={{ padding: 28, borderRadius: 12, border: "1px solid #f0f0f0", transition: "all 0.25s ease", position: "relative", }} >
{f.icon}
{f.badge && ( {f.badge} )}

{f.title}

{f.desc}

))}
{/* Pricing */}
Pricing

Simple, transparent pricing

14-day free trial on all plans. No credit card required. All prices in EUR.

{PLANS.map((plan) => (
setHoveredCard(plan.id)} onMouseLeave={() => setHoveredCard(null)} style={{ padding: 32, borderRadius: 16, border: plan.popular ? "2px solid #22c55e" : "1px solid #222", background: plan.popular ? "linear-gradient(180deg, #0f1a0f, #0a0a0a)" : "#111", position: "relative", transition: "transform 0.2s", transform: hoveredCard === plan.id ? "translateY(-4px)" : "none", }} > {plan.popular && (
MOST POPULAR
)}

{plan.name}

{plan.devices}

€{plan.price} /month
    {plan.features.map((f, i) => (
  • ✓ {f}
  • ))}
{plan.excluded && plan.excluded.length > 0 && (
    {plan.excluded.map((f, i) => (
  • ✗ {f}
  • ))}
)}

Signups are disabled currently

))}
{/* Footer */}
); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();