1<!DOCTYPE html><html lang="en-US" dir="ltr" class="hl-root"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="Isaac Horowitz leads ZipLyne Agency: custom software, CRMs, and AI automation for real operating problems. Direct builder access, client-owned systems."><meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta name="googlebot" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta name="author" content="Isaac Horowitz"><meta name="application-name" content="ZipLyne"><meta name="theme-color" content="#EFEAE0" media="(prefers-color-scheme: light)"><meta name="theme-color" content="#17110E" media="(prefers-color-scheme: dark)"><!-- NIGHT SHIFT: resolve the theme before the first paint. 2 Runs synchronously in <head>, ahead of any stylesheet, so 3 <html data-theme> is already stamped when the page renders and 4 there is no flash of the wrong palette. The key is shared with the 5 deck (localStorage['zl-theme']), so a visitor who flips the switch 6 on one surface arrives on the other already in their theme. -->
6<script> 7 (function () { 8 try { 9 var saved = localStorage.getItem('zl-theme'); 10 var theme = saved === 'dark' || saved === 'light' 11 ? saved 12 : (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); 13 document.documentElement.setAttribute('data-theme', theme); 14 } catch (e) { 15 /* Private mode, storage disabled, no matchMedia: leave the attribute 16 off entirely. ops.css still resolves the palette through its 17 prefers-color-scheme block, so the page is never unstyled. */ 18 } 19 })(); 20 </script>
20<meta name="facebook-domain-verification" content="z3mcipnuaawzl1jyom8ygv06sgmenf"><meta name="p:domain_verify" content="1b8353770623bb4aa2f1c77d91073028"><link rel="canonical" href="https://ziplyne.agency/about"><link rel="alternate" hreflang="en" href="https://ziplyne.agency/about"><link rel="alternate" hreflang="x-default" href="https://ziplyne.agency/about"><link rel="alternate" type="text/plain" href="/llms.txt" title="ZipLyne LLM summary"><link rel="alternate" type="text/plain" href="/llms-full.txt" title="ZipLyne full LLM reference"><title>About Isaac Horowitz | ZipLyne Agency Custom Software</title><!-- Visit memory. Counts distinct visits (a gap of 30 minutes starts a new one) and 21 remembers the last page, so the homepage hero can greet someone who came back. 22 Everything stays in this browser's localStorage: no network call, no identifier, 23 nothing that leaves the device. Inline and early so the hero can read it before 24 first paint and never shift the layout. -->
24<script> 25 (function () { 26 var KEY = 'zl:visits'; 27 var GAP = 30 * 60 * 1000; 28 function read() { 29 try { return JSON.parse(localStorage.getItem(KEY) || 'null'); } catch (e) { return null; } 30 } 31 function write(value) { 32 try { localStorage.setItem(KEY, JSON.stringify(value)); } catch (e) { /* private mode */ } 33 } 34 function pageTitle() { return (document.title || '').split('|')[0].trim(); } 35 36 var prev = read(); 37 var now = Date.now(); 38 var isNewVisit = !prev || !prev.at || (now - prev.at) > GAP; 39 var n = ((prev && prev.n) || 0) + (isNewVisit ? 1 : 0); 40 if (!n) n = 1; 41 42 // Only a genuinely new visit carries a "last time you were here" pointer; 43 // within one visit the previous page is just the back button. 44 window.__zlVisit = { 45 n: n, 46 previousPath: (isNewVisit && prev && prev.lastPath) || '', 47 previousTitle: (isNewVisit && prev && prev.lastTitle) || '' 48 }; 49 50 write({ n: n, at: now, lastPath: location.pathname, lastTitle: pageTitle() }); 51 52 // Re-read rather than reusing the object above, so a write from another tab 53 // is not overwritten with this tab's older state. 54 addEventListener('pagehide', function () { 55 var current = read() || { n: n }; 56 current.at = Date.now(); 57 current.lastPath = location.pathname; 58 current.lastTitle = pageTitle(); 59 write(current); 60 }); 61 })(); 62 </script>
62<!-- The browser restores a tab's old scroll offset on its own, so reopening the site on a 63 phone could land mid-hero on a page whose whole point is the scroll from the top. Own 64 the restore: a fresh visit or a reload starts at the top, while pages that opt in 65 restore their position on back and forward. Inline in the head so it beats the 66 browser's own restore. -->
66<script>(function(){const restoreScrollOnHistory = true; 67 68 if ('scrollRestoration' in history) history.scrollRestoration = 'manual'; 69 (function () { 70 var key = 'zl:y:' + location.pathname; 71 function save() { 72 try { sessionStorage.setItem(key, String(Math.round(window.scrollY))); } catch (e) { /* private mode */ } 73 } 74 addEventListener('pagehide', save); 75 addEventListener('visibilitychange', function () { if (document.visibilityState === 'hidden') save(); }); 76 function place() { 77 if (location.hash) return; 78 var entry = performance.getEntriesByType('navigation')[0]; 79 var y = 0; 80 if (restoreScrollOnHistory && entry && entry.type === 'back_forward') { 81 try { y = Number(sessionStorage.getItem(key)) || 0; } catch (e) { y = 0; } 82 } 83 window.scrollTo(0, y); 84 requestAnimationFrame(function () { window.scrollTo(0, y); }); 85 } 86 if (document.readyState === 'loading') addEventListener('DOMContentLoaded', place); 87 else place(); 88 addEventListener('load', place, { once: true }); 89 })(); 90 })();</script>
90<!-- The page transition can only start once the next document is here. Prefetch it on 91 pointer-down so a menu tap does not sit on the old page waiting for the network. -->
91<script type="speculationrules"> 92 {"prefetch":[{"where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":"/api/*"}},{"not":{"selector_matches":"[data-cal-modal]"}},{"not":{"selector_matches":"[download]"}}]},"eagerness":"moderate"}]} 93 </script>
93<!-- Fonts --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Unbounded:wght@700;800&family=Instrument+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet"><!-- Favicons (svg first: modern browsers prefer it; ?v cache-busts the rest) --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="icon" type="image/x-icon" href="/favicon.ico?v=2"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v=2"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=2"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=2"><link rel="manifest" href="/manifest.json"><!-- Open Graph --><meta property="og:title" content="About Isaac Horowitz | ZipLyne Agency Custom Software"><meta property="og:description" content="Isaac Horowitz leads ZipLyne Agency: custom software, CRMs, and AI automation for real operating problems. Direct builder access, client-owned systems."><meta property="og:image" content="https://ziplyne.agency/isaac.jpg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:type" content="image/png"><meta property="og:image:alt" content="Isaac Horowitz, founder of ZipLyne Agency"><meta property="og:url" content="https://ziplyne.agency/about"><meta property="og:type" content="website"><meta property="og:site_name" content="ZipLyne Agency"><meta property="og:locale" content="en_US"><!-- Twitter/X Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@iowitz"><meta name="twitter:creator" content="@iowitz"><meta name="twitter:title" content="About Isaac Horowitz | ZipLyne Agency Custom Software"><meta name="twitter:description" content="Isaac Horowitz leads ZipLyne Agency: custom software, CRMs, and AI automation for real operating problems. Direct builder access, client-owned systems."><meta name="twitter:image" content="https://ziplyne.agency/isaac.jpg"><meta name="twitter:image:alt" content="Isaac Horowitz, founder of ZipLyne Agency">
93<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":["Organization","ProfessionalService"],"@id":"https://ziplyne.agency#organization","name":"ZipLyne Agency","alternateName":["ZipLyne","ZipLyne Agency"],"legalName":"ZipLyne LLC","url":"https://ziplyne.agency","logo":"https://ziplyne.agency/brand/wordmark-dark.png","image":"https://ziplyne.agency/og-image-v3.png","email":"[email protected]","description":"ZipLyne Agency maps expensive operating problems and ships custom software, CRMs, and AI automation you own. Talk directly to founder Isaac Horowitz.","slogan":"Custom software for real business problems","founder":{"@id":"https://ziplyne.agency/about#isaac-horowitz"},"sameAs":["https://www.linkedin.com/in/isaac-orocz-seidman-1a5140a0/","https://instagram.com/ziplyne.agency","https://x.com/iowitz","https://cal.com/iowitz/ziplyne","https://iowitz.com"],"areaServed":"Worldwide","knowsAbout":["custom business software","business process diagnosis","AI business automation","admin automation for small business","custom CRM development","freight broker CRM","SaaS development","mobile app development","workflow automation","LLM application development","AI forward deployed engineering","enterprise AI deployment"],"hasOfferCatalog":{"@type":"OfferCatalog","name":"ZipLyne services","itemListElement":[{"@type":"Offer","itemOffered":{"@type":"Service","name":"Custom software development","url":"https://ziplyne.agency/services"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Custom CRM builder","url":"https://ziplyne.agency/services/crm"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"AI automation for small business","url":"https://ziplyne.agency/services/transform"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"AI forward deployed engineering","url":"https://ziplyne.agency/services/ai-forward-deployed-engineering"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Product builds","url":"https://ziplyne.agency/services/build"}}]},"contactPoint":{"@type":"ContactPoint","contactType":"sales","email":"[email protected]","telephone":"+1-478-312-1714","url":"https://ziplyne.agency/contact"}},{"@type":"Person","@id":"https://ziplyne.agency/about#isaac-horowitz","name":"Isaac Horowitz","url":"https://ziplyne.agency/about","worksFor":{"@id":"https://ziplyne.agency#organization"},"jobTitle":"Founder and builder","sameAs":["https://www.linkedin.com/in/isaac-orocz-seidman-1a5140a0/","https://instagram.com/ziplyne.agency","https://x.com/iowitz","https://cal.com/iowitz/ziplyne","https://iowitz.com"],"knowsAbout":["software product development","AI automation","agentic development workflows","mobile applications","growth systems"]},{"@type":"WebSite","@id":"https://ziplyne.agency#website","url":"https://ziplyne.agency","name":"ZipLyne Agency","alternateName":"ZipLyne","publisher":{"@id":"https://ziplyne.agency#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https://ziplyne.agency/about#webpage","url":"https://ziplyne.agency/about","name":"About Isaac Horowitz | ZipLyne Agency Custom Software","description":"Isaac Horowitz leads ZipLyne Agency: custom software, CRMs, and AI automation for real operating problems. Direct builder access, client-owned systems.","isPartOf":{"@id":"https://ziplyne.agency#website"},"about":{"@id":"https://ziplyne.agency#organization"},"breadcrumb":{"@id":"https://ziplyne.agency/about#breadcrumb"},"primaryImageOfPage":{"@type":"ImageObject","url":"https://ziplyne.agency/og-image-v3.png"},"inLanguage":"en-US","dateModified":"2026-07-17"},{"@type":"BreadcrumbList","@id":"https://ziplyne.agency/about#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://ziplyne.agency"},{"@type":"ListItem","position":2,"name":"About","item":"https://ziplyne.agency/about"}]}]}</script>
93<!-- Google Analytics 4 --><link rel="preconnect" href="https://www.googletagmanager.com" crossorigin><link rel="dns-prefetch" href="https://www.googletagmanager.com"><link rel="preconnect" href="https://www.google-analytics.com" crossorigin>
vendor: 63 bytes, line 93
93<script async src="https://www.googletagmanager.com/gtag/js?id=
93G-PTEPM3MSZ5
vendor: 11 bytes, line 93
93"></script>
93<script>(function(){const gaMeasurementId = "G-PTEPM3MSZ5"; 94 95 window.dataLayer = window.dataLayer || []; 96 function gtag() { window.dataLayer.push(arguments); } 97 window.gtag = gtag; 98 gtag('js', new Date()); 99 gtag('config', gaMeasurementId, { 100 send_page_view: true, 101 allow_google_signals: true, 102 allow_ad_personalization_signals: true, 103 }); 104 })();</script>
104<script> 105 (function () { 106 if (!window.gtag) return; 107 var fire = function (name, params) { try { window.gtag('event', name, params || {}); } catch (e) {} }; 108 var slug = function (s) { return (s || '').toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_|_$/g, '').slice(0, 60); }; 109 var sectionOf = function (el) { 110 var d = el.closest('[data-section]'); 111 if (d && d.getAttribute('data-section')) return d.getAttribute('data-section'); 112 var s = el.closest('section[id]'); 113 return s ? s.id : ''; 114 }; 115 116 // --- Marketing attribution (first touch this session) --- 117 var attrObj = { marketing_channel: 'direct', marketing_campaign: '(none)' }; 118 try { 119 var qp = new URLSearchParams(location.search); 120 var chan = qp.get('utm_source') || qp.get('ref'); 121 if (!chan && document.referrer) { try { var rh = new URL(document.referrer).hostname; if (rh && rh !== location.hostname) chan = rh; } catch (e) {} } 122 attrObj.marketing_channel = chan || 'direct'; 123 attrObj.marketing_campaign = qp.get('utm_campaign') || '(none)'; 124 if (!sessionStorage.getItem('zl_attr')) { 125 sessionStorage.setItem('zl_attr', '1'); 126 window.gtag('set', 'user_properties', { 127 marketing_channel: attrObj.marketing_channel, 128 marketing_campaign: attrObj.marketing_campaign, 129 first_seen_landing_page: location.pathname, 130 }); 131 } 132 } catch (e) {} 133 var withAttr = function (p) { p = p || {}; p.marketing_channel = attrObj.marketing_channel; p.marketing_campaign = attrObj.marketing_campaign; return p; }; 134 135 // Footer credits on ZipLyne-built sites land here with a tagged campaign. 136 try { 137 var creditCampaign = new URLSearchParams(location.search).get('utm_campaign'); 138 if (creditCampaign === 'designed-and-developed') { 139 fire('agency_credit_landing', withAttr({ 140 credit_source: attrObj.marketing_channel, 141 credit_placement: new URLSearchParams(location.search).get('utm_content') || 'footer', 142 })); 143 } 144 } catch (e) {} 145 146 // --- Clicks (delegated, capture phase catches everything) --- 147 document.addEventListener('click', function (e) { 148 var el = e.target && e.target.closest ? e.target.closest('a, button, [role="button"], [data-cta]') : null; 149 if (!el) return; 150 var href = el.getAttribute('href') || ''; 151 var text = (el.getAttribute('data-cta') || el.getAttribute('aria-label') || el.textContent || '').trim().replace(/\s+/g, ' ').slice(0, 100); 152 var section = sectionOf(el); 153 var base = withAttr({ cta_id: el.getAttribute('data-cta') || slug(text) || 'unknown', cta_location: section || 'page', section: section || 'page', link_text: text, link_url: href }); 154 var isPrimary = el.matches('.sg-btn--primary, .btn--primary, .header-cta, [data-cta-primary], .nl-btn, .ty-nl-btn, .footer-news-btn'); 155 156 if (/cal\.com/i.test(href)) fire('booking_start', base); 157 else if (href.indexOf('tel:') === 0) fire('phone_click', base); 158 else if (href.indexOf('mailto:') === 0) fire('email_click', base); 159 else if (/^https?:\/\//i.test(href) && href.indexOf(location.host) === -1) fire('outbound_click', base); 160 else if (el.tagName === 'A' && href.charAt(0) === '/') fire('nav_click', base); 161 162 if (isPrimary) fire('cta_click_primary', base); 163 else if (el.matches('button, .sg-btn, .btn, [data-cta], [role="button"]')) fire('cta_click', base); 164 }, true); 165 166 // --- Form submits --- 167 document.addEventListener('submit', function (e) { 168 var f = e.target; 169 if (!f || f.tagName !== 'FORM') return; 170 fire('form_submit', withAttr({ form_id: f.id || f.getAttribute('name') || f.getAttribute('aria-label') || 'form', section: sectionOf(f) || 'page' })); 171 }, true); 172 173 // --- Scroll depth (25/50/75/90) --- 174 var marks = [25, 50, 75, 90], hit = {}, ticking = false; 175 window.addEventListener('scroll', function () { 176 if (ticking) return; ticking = true; 177 requestAnimationFrame(function () { 178 ticking = false; 179 var h = document.documentElement.scrollHeight - window.innerHeight; 180 if (h <= 0) return; 181 var pct = Math.round((window.scrollY / h) * 100); 182 for (var i = 0; i < marks.length; i++) { var m = marks[i]; if (pct >= m && !hit[m]) { hit[m] = 1; fire('scroll', withAttr({ percent_scrolled: m, scroll_depth: m })); } } 183 }); 184 }, { passive: true }); 185 186 // This script runs in <head>, so DOM-querying setup must wait for the body to parse. 187 var ready = function (fn) { 188 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fn); 189 else fn(); 190 }; 191 192 ready(function () { 193 // --- Section views (once each) --- 194 if ('IntersectionObserver' in window) { 195 var so = new IntersectionObserver(function (entries) {
196 entries.forEach(function (x) { 197 if (x.isIntersecting) { 198 if (x.target.__sec) fire('section_view', withAttr({ section: x.target.__sec })); 199 so.unobserve(x.target); 200 } 201 }); 202 }, { threshold: 0.4 }); 203 // Observe every section; derive a stable name from data-section / id / kicker / heading / class. 204 document.querySelectorAll('section, [data-section]').forEach(function (s) { 205 var id = s.getAttribute('data-section') || s.id; 206 if (!id) { 207 var k = s.querySelector('[class*="kicker"]'); 208 var hd = s.querySelector('h1, h2, h3'); 209 id = slug((k && k.textContent) || (hd && hd.textContent) || (s.className || '').split(' ')[0] || ''); 210 } 211 if (id) { s.__sec = id; so.observe(s); } 212 }); 213 } 214 215 // --- Video plays (once each) --- 216 document.querySelectorAll('video').forEach(function (v) { 217 v.addEventListener('play', function () { 218 var id = v.getAttribute('data-video') || (v.getAttribute('poster') || v.currentSrc || 'video').split('/').pop(); 219 fire('video_play', withAttr({ video_id: id })); 220 }, { once: true }); 221 }); 222 }); 223 })(); 224</script>
224<script> 225 (function () { 226 try { 227 if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; 228 var root = document.documentElement; 229 root.classList.add('zl-motion-ready'); 230 // Dead man's switch. If motion.ts fails to parse, 404s, or is blocked, 231 // the page must not be left with invisible sections. 232 setTimeout(function () { 233 if (!window.__zlMotionClaimed) root.classList.remove('zl-motion-ready'); 234 }, 2500); 235 } catch (e) { /* no matchMedia: leave everything visible */ } 236 })(); 237</script>
237
237<script type="module" src="/_astro/Motion.astro_astro_type_script_index_0_lang.B9YJCC3O.js"></script>
237
237<script type="application/ld+json">{"@context":"https://schema.org","@type":"ProfilePage","@id":"https://ziplyne.agency/about#profile","url":"https://ziplyne.agency/about","name":"About Isaac Horowitz and ZipLyne","mainEntity":{"@id":"https://ziplyne.agency/about#isaac-horowitz"}}</script>
237 <style>html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch],.lenis [data-lenis-prevent-vertical],.lenis [data-lenis-prevent-horizontal]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-property:overflow;transition-duration:1ms;transition-behavior:allow-discrete} 238</style> 239<link rel="stylesheet" href="/_astro/ad-studio.I5v2El2-.css"> 240<style>.zl-asset{position:relative;display:block;isolation:isolate;width:100%;aspect-ratio:1;margin:0;pointer-events:none;contain:layout style;--asset-reveal:.7s}.zl-asset__poster,.zl-asset__viewport{position:absolute;inset:0;width:100%;height:100%;display:block}.zl-asset__poster{object-fit:contain;opacity:1;transition:opacity var(--asset-reveal) cubic-bezier(.22,1,.36,1)}.zl-asset__viewport{opacity:0;transition:opacity var(--asset-reveal) cubic-bezier(.22,1,.36,1)}.zl-asset__viewport canvas{display:block;width:100%;height:100%;pointer-events:none}.zl-asset[data-asset-state=ready] .zl-asset__poster{opacity:0}.zl-asset[data-asset-state=ready] .zl-asset__viewport,.zl-asset[data-asset-state=loading] .zl-asset__poster{opacity:1}@media(prefers-reduced-motion:reduce){.zl-asset__poster,.zl-asset__viewport{transition:none!important}.zl-asset__poster{opacity:1!important}.zl-asset__viewport{display:none}}.zl-asset:is([data-asset-state=poster],[data-asset-state=error]) .zl-asset__poster{transition:none} 241</style> 242<link rel="stylesheet" href="/_astro/ad-studio.DfA2HF4N.css"> 243<link rel="stylesheet" href="/_astro/ad-studio.C-xODMFC.css"> 244<link rel="stylesheet" href="/_astro/index.Ck2eErT7.css"> 245<link rel="stylesheet" href="/_astro/ad-studio.DqiM3BlB.css"> 246<link rel="stylesheet" href="/_astro/about.C0Bp1Vt1.css"> 247<style>.pd{display:grid;grid-template-columns:minmax(230px,300px) minmax(0,1fr);gap:clamp(32px,4vw,72px);align-items:start;width:100%}.pd__big{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.pd__big a{display:flex;align-items:baseline;justify-content:space-between;gap:14px;min-height:46px;padding:6px 0;border-bottom:1px solid var(--hl-line, #d9d5d0);font-size:clamp(24px,2.1vw,33px);font-weight:650;line-height:1.05;letter-spacing:-.045em;color:var(--hl-black, #0d0b0a);text-decoration:none}.pd__big a:hover,.pd__big a:focus-visible{color:var(--hl-accent-text, #ae3d0c)}.pd__big small{font-size:12px;font-weight:500;letter-spacing:0;color:var(--hl-muted, #55524e)}.pd__feature{display:grid;gap:6px;margin-top:clamp(22px,3vh,34px);padding:18px 20px 16px;border-radius:14px;background:var(--hl-black, #0d0b0a);color:var(--hl-white, #f5f2ee);text-decoration:none;transition:transform .18s ease}.pd__feature:hover{transform:translateY(-2px)}.pd__feature-kicker{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--hl-accent, #ff5a1f)}.pd__feature-title{font-size:20px;font-weight:650;letter-spacing:-.03em;line-height:1.1}.pd__feature-body{font-size:13.5px;line-height:1.5;color:#ffffffb8}.pd__feature-go{margin-top:4px;font-size:13px;font-weight:650;color:var(--hl-accent, #ff5a1f)}.pd__cols{columns:3;column-gap:clamp(24px,3vw,56px)}.pd__group{break-inside:avoid;-webkit-column-break-inside:avoid;margin-bottom:clamp(20px,2.6vh,32px)}.pd__group-title{margin:0 0 8px;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--hl-accent-text, #ae3d0c)}.pd__list{list-style:none;margin:0;padding:0}.pd__list a{display:block;padding:5px 0;font-size:14.5px;font-weight:550;line-height:1.3;letter-spacing:-.012em;color:var(--hl-black, #0d0b0a);text-decoration:none}.pd__list a:hover,.pd__list a:focus-visible{color:var(--hl-accent-text, #ae3d0c)}@media(max-width:1200px){.pd__cols{columns:2}}@media(max-width:900px){.pd{grid-template-columns:1fr;gap:30px}.pd__big a{font-size:25px;min-height:42px}.pd__cols{columns:2}}@media(max-width:620px){.pd__cols{columns:1}.pd__list a{padding:7px 0;font-size:15px}}@media(prefers-reduced-motion:reduce){.pd__feature{transition:none}} 248</style> 249<link rel="stylesheet" href="/_astro/index.CEiV-cIo.css"></head> <body class="hl-body hl-page hl-inner"> <a class="skip-link" href="#main-content">Skip to main content</a> <header class="hl-header" data-hl-header data-hl-shared-motion> <a class="hl-brand" href="/" aria-label="ZipLyne, home"> <img class="hl-brand__mark hl-brand__mark--dark" src="/brand/wordmark-dark.webp" alt="ZipLyne" width="2400" height="546" decoding="async" fetchpriority="high"> <img class="hl-brand__mark hl-brand__mark--light" src="/brand/wordmark-light.webp" alt="" width="2400" height="546" aria-hidden="true" decoding="async" fetchpriority="low"> </a> <nav class="hl-nav" aria-label="Primary"> <a href="/case-studies">Work</a><a href="/services">Solutions</a><a class="active" href="/about" aria-current="page">About</a><a href="/blog">Blog</a> </nav> <form class="hl-go" role="search" aria-label="Go to a page" data-ttm data-hl-go> <div class="hl-go__pill"> <input type="text" name="query" maxlength="200" autocomplete="off" enterkeyhint="go" placeholder="Where to? Try âSEO workâ" aria-label="Where do you want to go?" tabindex="-1"> <button class="hl-go__toggle" type="submit" aria-label="Search pages" aria-expanded="false" data-hl-go-toggle> <svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"><circle cx="10.5" cy="10.5" r="6.5" fill="none" stroke="currentColor" stroke-width="2.2"></circle><path d="m15.5 15.5 5 5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"></path></svg> </button> </div> <p class="hl-go__hint" aria-live="polite" data-ttm-hint></p> </form> <div class="zl-film zl-film--pill hl-header__film" data-brand-film data-playback-id="emj5QyPzLpLzUtbD
249hIZDJhfXjHcbzfC9VvMKQNCVmFw"> <button class="zl-film__launch" type="button" aria-haspopup="dialog" aria-label="Watch the ZipLyne film, 56 seconds"> <span class="zl-film__disc" aria-hidden="true"> <svg viewBox="0 0 24 24" focusable="false"><path d="M8 5.5 19 12 8 18.5Z" fill="currentColor"></path></svg> </span> <span class="zl-film__label"><strong>Watch The Film</strong><small>56 Sec</small></span> </button> <dialog class="zl-film__dialog" aria-label="Watch the ZipLyne film"> <button class="zl-film__close" type="button" aria-label="Close video"> <svg viewBox="0 0 24 24" aria-hidden="true"><path d="m6 6 12 12M18 6 6 18"></path></svg> </button> <div class="zl-film__player" data-brand-film-player></div> </dialog> </div>
249<script type="module" src="/_astro/BrandFilmLauncher.astro_astro_type_script_index_0_lang.Bfhn8rcG.js"></script>
249 <a class="hl-talk hl-talk--desktop" href="https://cal.com/iowitz/ziplyne" target="_blank" rel="noopener noreferrer">Book A Call</a> <button class="hl-menu-button hl-menu-button--desktop" type="button" aria-haspopup="dialog" aria-expanded="false" data-hl-menu-open> <span>All Pages</span><i aria-hidden="true">+</i> </button> </header> <div class="hl-drawer hl-drawer--mega" role="dialog" aria-modal="true" aria-label="Navigation menu" data-hl-drawer inert> <div class="hl-drawer__top"> <a class="hl-brand" href="/" aria-label="ZipLyne, home"> <img class="hl-brand__mark" src="/brand/wordmark-dark.webp" alt="ZipLyne" width="2400" height="546"> </a> <div class="hl-drawer__top-right"> <div class="zl-film zl-film--pill hl-drawer__film" data-brand-film data-playback-id="emj5QyPzLpLzUtbDhIZDJhfXjHcbzfC9VvMKQNCVmFw"> <button class="zl-film__launch" type="button" aria-haspopup="dialog" aria-label="Watch the ZipLyne film, 56 seconds"> <span class="zl-film__disc" aria-hidden="true"> <svg viewBox="0 0 24 24" focusable="false"><path d="M8 5.5 19 12 8 18.5Z" fill="currentColor"></path></svg> </span> <span class="zl-film__label"><strong>Watch The Film</strong><small>56 Sec</small></span> </button> <dialog class="zl-film__dialog" aria-label="Watch the ZipLyne film"> <button class="zl-film__close" type="button" aria-label="Close video"> <svg viewBox="0 0 24 24" aria-hidden="true"><path d="m6 6 12 12M18 6 6 18"></path></svg> </button> <div class="zl-film__player" data-brand-film-player></div> </dialog> </div> <button class="hl-menu-close" type="button" aria-label="Close menu" data-hl-menu-close>Ã</button> </div> </div> <div class="hl-drawer__body"> <div class="hl-drawer__main"> <p class="hl-drawer__kicker">Explore ZipLyne.</p> <form class="hl-drawer__go" role="search" aria-label="Go to a page" data-ttm> <div class="hl-drawer__go-row"> <input type="text" name="query" maxlength="200" autocomplete="off" enterkeyhint="go" placeholder="Or just type where you want to go" aria-label="Where do you want to go?"> <button type="submit" aria-label="Go">â</button> </div> <p class="hl-go__hint" aria-live="polite" data-ttm-hint></p> </form> <nav class="pd" aria-label="All ZipLyne pages"> <div class="pd__rail"> <ul class="pd__big"> <li> <a href="/"> <span>Home</span> </a> </li><li> <a href="/about"> <span>About</span> </a> </li><li> <a href="/case-studies"> <span>Work</span> </a> </li><li> <a href="/reel"> <span>Reel</span> <small>Ads and films</small> </a> </li><li> <a href="/blog"> <span>Blog</span> </a> </li><li> <a href="/contact"> <span>Contact</span> </a> </li> </ul> <a class="pd__feature" href="/services/ai-music-and-original-songs"> <span class="pd__feature-kicker">New</span> <strong class="pd__feature-title">We make the music too.</strong> <span class="pd__feature-body"> 250Original songs on Spotify, and eight episodes we scored end to end. 251</span> <span class="pd__feature-go" aria-hidden="true">Hear it →</span> </a> </div> <div class="pd__cols"> <section class="pd__group"> <h3 class="pd__group-title">Solutions</h3> <ul class="pd__list"> <li><a href="/services">All Solutions</a></li><li><a href="/services/ai-forward-deployed-engineering">AI Engineering</a></li><li><a href="/services/ai-consulting">AI Consulting</a></li><li><a href="/services/build">Build A Product</a></li><li><a href="/services/transform">Business Automation</a></li><li><a href="/services/crm">Custom CRM</a></li><li><a href="/services/retainer">Ongoing Product Care</a></li><li><a href="/services/custom-software-development">Custom Software Development</a></li><li><a href="/services/web-app-development">Web App Development</a></li><li><a href="/services/mobile-app-development">Mobile App Development</a></li><li><a href="/services/ai-agents">AI Agents</a></li><li><a href="/services/ai-voice-agents">AI Voice Agents</a></li><li><a href="/services/document-ai-and-extraction">Document AI and Extraction</a></li><li><a href="/services/ai-workflow-automation">AI Workflow Automation</a></li><li><a href="/services/ai-image-generation">AI Image Generation</a></li><li><a href="/services/ai-product-photography">AI Product Photography</a></li><li>
251<a href="/services/ai-video-production">AI Video Production</a></li><li><a href="/services/ai-music-and-original-songs">AI Music and Original Songs</a></li><li><a href="/services/ai-jingles-and-brand-sound">AI Jingles and Brand Sound</a></li><li><a href="/services/seo">SEO</a></li> </ul> </section><section class="pd__group"> <h3 class="pd__group-title">Industries</h3> <ul class="pd__list"> <li><a href="/industries">All Industries</a></li><li><a href="/industries/law-firms">Law Firms</a></li><li><a href="/industries/loan-businesses">Loan Businesses</a></li><li><a href="/industries/merchant-cash-advance">Merchant Cash Advance</a></li><li><a href="/industries/accountants-and-cpa-firms">Accountants and CPA Firms</a></li><li><a href="/industries/construction-contractors">Construction Contractors</a></li><li><a href="/industries/logistics-and-freight">Logistics and Freight</a></li><li><a href="/industries/casinos-and-igaming">Casinos and iGaming</a></li><li><a href="/industries/wholesale-distribution">Wholesale Distribution</a></li><li><a href="/industries/import-and-export">Import and Export</a></li><li><a href="/industries/photography-studios">Photography Studios</a></li> </ul> </section><section class="pd__group"> <h3 class="pd__group-title">CRM By Industry</h3> <ul class="pd__list"> <li><a href="/services/crm/law-firms">Law Firms</a></li><li><a href="/services/crm/loan-businesses">Loan Businesses</a></li><li><a href="/services/crm/accountants">Accountants & CPA Firms</a></li><li><a href="/services/crm/insurance-agencies">Insurance Agencies</a></li><li><a href="/services/crm/real-estate-brokerages">Real Estate Brokerages</a></li><li><a href="/services/crm/property-management">Property Management</a></li><li><a href="/services/crm/construction-contractors">Construction & Contractors</a></li><li><a href="/services/crm/logistics-freight">Logistics & Freight</a></li><li><a href="/services/crm/medical-practices">Medical Practices</a></li><li><a href="/services/crm/staffing-agencies">Staffing & Recruiting Agencies</a></li><li><a href="/services/crm/wholesale-distribution">Wholesale & Distribution</a></li><li><a href="/services/crm/manufacturers">Manufacturers</a></li> </ul> </section><section class="pd__group"> <h3 class="pd__group-title">More</h3> <ul class="pd__list"> <li><a href="/privacy">Privacy</a></li><li><a href="/terms">Terms</a></li><li><a href="/presentation">The Presentation</a></li> </ul> </section> </div> </nav> </div> </div> <div class="hl-drawer__foot"> <div class="hl-drawer__foot-left"> <p>Make systems that matter.</p> <div><a href="mailto:[email protected]">[email protected]</a><span>New York · Tel Aviv · Remote</span></div> </div> <div class="hl-drawer__foot-right"> <div class="clutch-mount clutch-mount--badge hl-drawer__clutch" dir="ltr" data-review-mount="clutch"><div class="review-live"><div class="clutch-widget" data-url="https://widget.clutch.co" data-widget-type="2" data-height="45" data-nofollow="true" data-clutchcompany-id="2688963"></div></div><a href="https://clutch.co/profile/ziplyne-0" class="clutch-badge" target="_blank" rel="nofollow noopener noreferrer" data-review-fallback aria-label="Read verified ZipLyne client reviews on Clutch"><svg class="clutch-badge__logo" width="20" height="20" viewBox="0 0 32 32" aria-hidden="true"><circle cx="16" cy="16" r="16" fill="#17313b"></circle><path fill="#fff" d="M22.2 11.4c-1.1-1.1-2.6-1.7-4.2-1.7-3.3 0-6 2.7-6 6s2.7 6 6 6c1.6 0 3.1-.6 4.2-1.7l-1.4-1.4c-.7.7-1.7 1.1-2.8 1.1-2.2 0-4-1.8-4-4s1.8-4 4-4c1.1 0 2.1.4 2.8 1.1l1.4-1.4z"></path></svg><span class="clutch-badge__text">Reviews on Clutch</span></a></div>
251<script type="module" src="/_astro/ClutchWidget.astro_astro_type_script_index_0_lang.Dl6kuzA6.js"></script>
251 <a class="hl-drawer__talk" href="https://cal.com/iowitz/ziplyne" target="_blank" rel="noopener noreferrer">Book A Call <span aria-hidden="true">â</span></a> </div> </div> </div> <noscript><nav class="hl-nojs-nav" aria-label="Mobile navigation"> <a href="/case-studies">Work</a><a href="/services">Solutions</a><a href="/about">About</a><a href="/blog">Blog</a> <a href="https://cal.com/iowitz/ziplyne" target="_blank" rel="noopener noreferrer">Book A Call</a> </nav></noscript> <main id="main-content" tabindex="-1"> <section class="ab-hero" id="isaac-horowitz" data-hl-surface="light" data-astro-cid-kh7btl4r> <div class="ab-hero__copy" data-astro-cid-kh7btl4r> <h1 data-astro-cid-kh7btl4r>We walk in.<br data-astro-cid-kh7btl4r>Find the problem.<br data-astro-cid-kh7btl4r><em data-astro-cid-kh7btl4r>Ship the fix.</em></h1> <p data-astro-cid-kh7btl4r>ZipLyne maps how a business actually runs and solves the expensive problems with custom software. Led by Isaac Horowitz. You own the systems.</p> <div class="zl-film ab-hero__film" data-brand-film data-playback-id="emj5QyPzLpLzUtbDhIZDJhfXjHcbzfC9VvMKQNCVmFw"> <button class="zl-film__launch" type="button" aria-haspopup="dialog" aria-label="Watch the ZipLyne film, 56 seconds"> <span class="zl-film__thumb" aria-hidden="true"> <img src="https://image.mux.com/emj5QyPzLpLzUtbDhIZDJhfXjHcbzfC9VvMKQNCVmFw/thumbnail.webp?time=51&width=480" alt="" width="480" height="270" loading="lazy" decoding="async"> <svg viewBox="0 0 24 24" focusable="false"><path d="M8 5.5 19 12 8 18.5Z" fill="currentColor"></path></svg> </span> <span class="zl-film__label"><strong>Watch The Film</strong><small>56 Sec</small></span> </button> <dialog class="zl-film__dialog" aria-label="Watch the ZipLyne film"> <button class="zl-film__close" type="button" aria-label="Close video"> <svg viewBox="0 0 24 24" aria-hidden="true"><path d="m6 6 12 12M18 6 6 18"></path></svg> </button> <div class="zl-film__player" data-brand-film-player></div> </dialog> </div> </div> <figure class="ab-hero__photo" data-astro-cid-kh7btl4r> <img src="/isaac.webp" srcset="/isaac-600.webp 600w, /isaac.webp 1200w" sizes="(max-width: 900px) 92vw, 44vw" alt="Isaac Horowitz, founder of ZipLyne Agency" width="1200" height="1381" fetchpriority="high" decoding="async" data-astro-cid-kh7btl4r> <figcaption data-astro-cid-kh7btl4r><b data-astro-cid-kh7btl4r>Isaac Horowitz</b><span data-astro-cid-kh7btl4r>Founder and lead builder · Tel Aviv, working worldwide</span></figcaption> </figure> </section> <section class="ab-how" data-hl-surface="light" data-astro-cid-kh7btl4r> <h2 data-zl-drift="90" data-astro-cid-kh7btl4r>Direct access to the builder.<br data-astro-cid-kh7btl4r>Systems you own.</h2> <div class="ab-how__grid" data-astro-cid-kh7btl4r> <div class="ab-how__prose" data-astro-cid-kh7btl4r> <p data-astro-cid-kh7btl4r>Isaac works directly with founders and operators who need someone to walk the business, name the real bottleneck, and ship the software that removes it. No discovery deck, no agency layer, no six-week onboarding before anything is built.</p> <p data-astro-cid-kh7btl4r>The delivery edge is an agentic development workflow: human product judgment, architecture, review and launch ownership, with AI agents running the research, implementation, QA, documentation and iteration loops underneath. AI compresses the grind. Humans own the decisions, and every output is checked before it ships.</p> <p data-astro-cid-kh7btl4r>Engagements start by understanding the problem and agreeing on the outcome. Clients own the repository, deployment accounts, secrets, documentation and the running systems, during the build and after it.</p> </div> <dl class="ab-how__facts" data-astro-cid-kh7btl4r> <div data-astro-cid-kh7btl4r><dt data-astro-cid-kh7btl4r>Based</dt><dd data-astro-cid-kh7btl4r>Tel Aviv, working worldwide</dd></div> <div data-astro-cid-kh7btl4r><dt data-astro-cid-kh7btl4r>Works with</dt><dd data-astro-cid-kh7btl4r>Founders and operators, direct</dd></div> <div data-astro-cid-kh7btl4r><dt data-astro-cid-kh7btl4r>Ownership</dt><dd data-astro-cid-kh7btl4r>Yours, from the first commit</dd></div> <div data-astro-cid-kh7btl4r><dt data-astro-cid-kh7btl4r>Say hello</dt><dd data-astro-cid-kh7btl4r><a href="mailto:[email protected]" data-astro-cid-kh7btl4r>[email protected]</a></dd></div> </dl> </div> </section> <section class="hl-solutions ab-rules" id="approach" aria-labelledby="ab-rules-title" data-hl-surface="dark" data-astro-cid-kh7btl4r> <div class="hl-solutions__pin" data-hl-solutions-pin data-astro-cid-kh7btl4r> <header class="hl-solutions__head" data-zl-drift="110" data-astro-cid-kh7btl4r> <h2 id="ab-rules-title" data-astro-cid-kh7btl4r>Four rules.</h2> <p data-astro-cid-kh7btl4r>They do not bend, whatever the brief says.</p> </header> <ol class="hl-solution-stack" data-hl-surface="light" role="list" data-astro-cid-kh7btl4r> <li class="hl-solution-card" style="--stack-index: 0" data-astro-cid-kh7btl4r> <a href="/services/transform" data-astro-cid-kh7btl4r> <span class="hl-solution-card__number" data-astro-cid-kh7btl4r>01</span> <h3 data-astro-cid-kh7btl4r>Diagnosis before code.</h3> <p data-astro-cid-kh7btl4r>Walk the business first. Sit with the people doing the work, watch where the hours go, and pin the expensive friction. Only then scope the softw
251are that removes it.</p> <div class="hl-solution-card__art" aria-hidden="true" data-astro-cid-kh7btl4r><figure class="zl-asset" aria-hidden="true" data-zl-asset="16-diagnostic-map" data-model="/3d/ziplyne/16-diagnostic-map.glb" data-tone="light" data-asset-motion="still" data-priority="normal" data-asset-state="poster"> <img class="zl-asset__poster" src="/3d/ziplyne/16-diagnostic-map.webp" alt="" width="800" height="800" loading="lazy" fetchpriority="auto" decoding="async"> <span class="zl-asset__viewport" data-asset-viewport></span> </figure></div> <span class="hl-solution-card__arrow" aria-hidden="true" data-astro-cid-kh7btl4r>â</span> </a> </li><li class="hl-solution-card" style="--stack-index: 1" data-astro-cid-kh7btl4r> <a href="/contact" data-astro-cid-kh7btl4r> <span class="hl-solution-card__number" data-astro-cid-kh7btl4r>02</span> <h3 data-astro-cid-kh7btl4r>You talk to the builder.</h3> <p data-astro-cid-kh7btl4r>No account manager translating your brief into tickets. The person answering your email is the person writing the code, and the one who is there when something breaks at eleven at night.</p> <div class="hl-solution-card__art" aria-hidden="true" data-astro-cid-kh7btl4r><figure class="zl-asset" aria-hidden="true" data-zl-asset="22-voice-instrument" data-model="/3d/ziplyne/22-voice-instrument.glb" data-tone="light" data-asset-motion="still" data-priority="normal" data-asset-state="poster"> <img class="zl-asset__poster" src="/3d/ziplyne/22-voice-instrument.webp" alt="" width="800" height="800" loading="lazy" fetchpriority="auto" decoding="async"> <span class="zl-asset__viewport" data-asset-viewport></span> </figure></div> <span class="hl-solution-card__arrow" aria-hidden="true" data-astro-cid-kh7btl4r>â</span> </a> </li><li class="hl-solution-card" style="--stack-index: 2" data-astro-cid-kh7btl4r> <a href="/services/build" data-astro-cid-kh7btl4r> <span class="hl-solution-card__number" data-astro-cid-kh7btl4r>03</span> <h3 data-astro-cid-kh7btl4r>The system is yours on day one.</h3> <p data-astro-cid-kh7btl4r>Repository, deployment accounts, database, domain, secrets and documentation live in your accounts from the first commit. If you want to hire someone else tomorrow, nothing stops you.</p> <div class="hl-solution-card__art" aria-hidden="true" data-astro-cid-kh7btl4r><figure class="zl-asset" aria-hidden="true" data-zl-asset="15-ownership-key" data-model="/3d/ziplyne/15-ownership-key.glb" data-tone="light" data-asset-motion="still" data-priority="normal" data-asset-state="poster"> <img class="zl-asset__poster" src="/3d/ziplyne/15-ownership-key.webp" alt="" width="800" height="800" loading="lazy" fetchpriority="auto" decoding="async"> <span class="zl-asset__viewport" data-asset-viewport></span> </figure></div> <span class="hl-solution-card__arrow" aria-hidden="true" data-astro-cid-kh7btl4r>â</span> </a> </li><li class="hl-solution-card" style="--stack-index: 3" data-astro-cid-kh7btl4r> <a href="/services" data-astro-cid-kh7btl4r> <span class="hl-solution-card__number" data-astro-cid-kh7btl4r>04</span> <h3 data-astro-cid-kh7btl4r>Production, or it does not count.</h3> <p data-astro-cid-kh7btl4r>A demo is a promise. The target is deployed, usable software with real users on it, documentation a new developer can follow, and no lock-in of any kind.</p> <div class="hl-solution-card__art" aria-hidden="true" data-astro-cid-kh7btl4r><figure class="zl-asset" aria-hidden="true" data-zl-asset="17-production-stamp" data-model="/3d/ziplyne/17-production-stamp.glb" data-tone="light" data-asset-motion="still" data-priority="normal" data-asset-state="poster"> <img class="zl-asset__poster" src="/3d/ziplyne/17-production-stamp.webp" alt="" width="800" height="800" loading="lazy" fetchpriority="auto" decoding="async"> <span class="zl-asset__viewport" data-asset-viewport></span> </figure></div> <span class="hl-solution-card__arrow" aria-hidden="true" data-astro-cid-kh7btl4r>â</span> </a> </li> </ol> </div> </section> <section class="ab-model" data-hl-surface="light" data-astro-cid-kh7btl4r> <h2 data-zl-drift="90" data-astro-cid-kh7btl4r>One conversation.<br data-astro-cid-kh7btl4r><em data-astro-cid-kh7btl4r>One accountable team.</em></h2> <ol class="ab-model__steps" role="list" data-astro-cid-kh7btl4r> <li data-astro-cid-kh7btl4r><span data-astro-cid-kh7btl4r>01</span><b data-astro-cid-kh7btl4r>Walk the operation</b></li><li data-astro-cid-kh7btl4r><span data-astro-cid-kh7btl4r>02</span><b data-astro-cid-kh7btl4r>Name the expensive friction</b></li><li data-astro-cid-kh7btl4r><span data-astro-cid-kh7btl4r>03</span><b data-astro-cid-kh7btl4r>Ship the working system</b></li><li data-astro-cid-kh7btl4r><span data-astro-cid-kh7btl4r>04</span><b data-astro-cid-kh7btl4r>Measure it and improve it</b></li> </ol> </section> <section class="ab-close" data-hl-surface="dark" data-astro-cid-kh7btl4r> <h2 data-zl-drift="90" data-astro-cid-kh7btl4r>Tell me what is broken.</h2> <p data-astro-cid-kh7btl4r>One paragraph is enough. Isaac reads every message himself and answers within a day, even when the answer is that ZipLyne is the wrong shop for it.</p> <a class="ab-close__mail" href="mailto:[email protected]" data-astro-cid-kh7btl4r>[email protected]</a> <div class="ab-close__actions" data-astro-cid-kh7btl4r> <a href="https://cal.com/iowitz/ziplyne" target="_blank" rel="noopener noreferrer" class="ab-btn ab-btn--accent" data-astro-cid-kh7btl4r>Book A Call <span aria-hidden="true" data-astro-cid-kh7btl4r>â</span></a> <a href="tel:+14783121714" class="ab-btn" data-astro-cid-kh7btl4r>Call Our Agent</a> <a href="/contact" class="ab-btn" data-astro-cid-kh7btl4r>Send A Brief <span aria-hidden="true" data-astro-cid-kh7btl4r>â</span></a> </div> </section> </main> <footer class="hl-footer" data-hl-surface="dark"> <div class="hl-footer__top"> <p class="hl-footer__bye">What Should<br>Work Better?</p> <div class="hl-footer__intro"> <p>Tell us what you want to build, improve or bring to more people. We will work through the next step together.</p> <div class="zl-film hl-footer__film" data-brand-film data-playback-id="emj5QyPzLpLzUtbD
251hIZDJhfXjHcbzfC9VvMKQNCVmFw"> <button class="zl-film__launch" type="button" aria-haspopup="dialog" aria-label="Watch the ZipLyne film, 56 seconds"> <span class="zl-film__thumb" aria-hidden="true"> <img src="https://image.mux.com/emj5QyPzLpLzUtbDhIZDJhfXjHcbzfC9VvMKQNCVmFw/thumbnail.webp?time=51&width=480" alt="" width="480" height="270" loading="lazy" decoding="async"> <svg viewBox="0 0 24 24" focusable="false"><path d="M8 5.5 19 12 8 18.5Z" fill="currentColor"></path></svg> </span> <span class="zl-film__label"><strong>Watch The Film</strong><small>56 Sec</small></span> </button> <dialog class="zl-film__dialog" aria-label="Watch the ZipLyne film"> <button class="zl-film__close" type="button" aria-label="Close video"> <svg viewBox="0 0 24 24" aria-hidden="true"><path d="m6 6 12 12M18 6 6 18"></path></svg> </button> <div class="zl-film__player" data-brand-film-player></div> </dialog> </div> <div class="hl-footer__actions"> <a class="hl-footer__primary" href="https://cal.com/iowitz/ziplyne" target="_blank" rel="noopener noreferrer">Book A Call <span aria-hidden="true">â</span></a> <a href="tel:+14783121714">Call Our Agent · +1 (478) 312-1714 <span aria-hidden="true">â</span></a> <a href="/contact" data-contact-open>Send A Brief <span aria-hidden="true">â</span></a> </div> </div> </div> <div class="hl-footer__grid"> <div class="hl-footer__signup"> <p>Useful Ideas In Your Inbox.</p> <form data-hl-newsletter toolname="newsletter_signup" tooldescription="Subscribes a work email to the ZipLyne Agency newsletter"> <label class="hl-sr-only" for="hl-email">Work email</label> <div class="hl-footer__field"> <input id="hl-email" name="email" type="email" placeholder="Work email" autocomplete="email" required toolparamdescription="Work email for the ZipLyne newsletter"> <button type="submit" aria-label="Subscribe to the ZipLyne newsletter">â</button> </div> <p class="hl-form-status" role="status" aria-live="polite"></p> </form> </div> <nav class="hl-footer__nav" aria-label="Footer"> <div><a href="/">Home</a><a href="/case-studies">Work</a><a href="/reel">Reel</a><a href="/services">Solutions</a><a href="/about">About</a><a href="/blog">Blog</a></div> <div><a href="/careers">Careers</a><a href="/presentation">Presentation</a><a href="/contact">Contact</a></div> <div><a href="mailto:[email protected]">Email</a><a href="https://x.com/iowitz" target="_blank" rel="me noopener noreferrer">@iowitz</a><a href="/play">Play The Game</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></div> </nav> <div class="hl-footer__proof"> <p>Independent client reviews</p> <div class="clutch-mount clutch-mount--award hl-footer__clutch" dir="ltr"><a href="https://clutch.co/profile/ziplyne-0" class="clutch-award" target="_blank" rel="nofollow noopener noreferrer" aria-label="ZipLyne named Top AI Consulting Company, Florida 2026 by Clutch. Read the reviews behind it."><img class="clutch-award__img" src="/brand/clutch-award-2026.webp" srcset="/brand/clutch-award-2026-320.webp 320w, /brand/clutch-award-2026.webp 640w" sizes="160px" width="640" height="691" alt="Clutch badge: Top AI Consulting Company, Florida 2026" loading="lazy" decoding="async"></a></div> <div class="clutch-mount clutch-mount--badge hl-footer__clutch" dir="ltr" data-review-mount="clutch"><div class="review-live"><div class="clutch-widget" data-url="https://widget.clutch.co" data-widget-type="2" data-height="45" data-nofollow="true" data-clutchcompany-id="2688963"></div></div><a href="https://clutch.co/profile/ziplyne-0" class="clutch-badge" target="_blank" rel="nofollow noopener noreferrer" data-review-fallback aria-label="Read verified ZipLyne client reviews on Clutch"><svg class="clutch-badge__logo" width="20" height="20" viewBox="0 0 32 32" aria-hidden="true"><circle cx="16" cy="16" r="16" fill="#17313b"></circle><path fill="#fff" d="M22.2 11.4c-1.1-1.1-2.6-1.7-4.2-1.7-3.3 0-6 2.7-6 6s2.7 6 6 6c1.6 0 3.1-.6 4.2-1.7l-1.4-1.4c-.7.7-1.7 1.1-2.8 1.1-2.2 0-4-1.8-4-4s1.8-4 4-4c1.1 0 2.1.4 2.8 1.1l1.4-1.4z"></path></svg><span class="clutch-badge__text">Reviews on Clutch</span></a></div> <div class="gf-mount hl-footer__clutch" dir="ltr" data-review-mount="goodfirms"> <div class="review-live"> <div class="goodfirm-widget" data-widget-type="goodfirms-widget-t9" data-widget-pattern="horizontal-inline" data-height="61" data-company-id="218174"></div> </div>
251 <a href="https://www.goodfirms.co/company/ziplyne" class="gf-badge" target="_blank" rel="nofollow noopener noreferrer" data-review-fallback aria-label="Read verified ZipLyne client reviews on GoodFirms"> <svg class="gf-badge__logo" width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"> <path fill="#f5a623" d="M12 1.6 3.4 4.9v6.3c0 5 3.6 9.7 8.6 11.2 5-1.5 8.6-6.2 8.6-11.2V4.9L12 1.6z"></path> <path fill="#fff" d="M16.3 9.1c-.8-1.1-2.1-1.8-3.6-1.8-2.4 0-4.4 2-4.4 4.4s2 4.4 4.4 4.4c2.3 0 4.1-1.7 4.3-3.9h-4.3v-1.6h6v.8c0 3.5-2.7 6.3-6 6.3-3.4 0-6.1-2.7-6.1-6s2.7-6 6.1-6c2 0 3.8 1 4.9 2.5l-1.3.9z"></path> </svg> <span class="gf-badge__text">Reviews on GoodFirms</span> </a> </div>
251<script type="module" src="/_astro/GoodFirmsWidget.astro_astro_type_script_index_0_lang.CVPuJBC-.js"></script>
251 </div> </div> <div class="hl-footer__legal"> <span>Copyright © 2026 ZipLyne LLC.</span> <a href="/">Back To The Start</a> </div> </footer> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
251<script>(()=>{var l=(n,t)=>{let i=async()=>{await(await n())()},e=typeof t.value=="object"?t.value:void 0,s={timeout:e==null?void 0:e.timeout};"requestIdleCallback"in window?window.requestIdleCallback(i,s):setTimeout(i,s.timeout||200)};(self.Astro||(self.Astro={})).idle=l;window.dispatchEvent(new Event("astro:idle"));})();</script>
251<script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script>
251<astro-island uid="6qj7i" prefix="r3" component-url="/_astro/ContactCta.PT05PBR0.js" component-export="default" renderer-url="/_astro/client.B8feUfe4.js" props="{}" ssr client="idle" opts="{"name":"ContactCta","value":true}"></astro-island> <div class="hl-conversion-rail" aria-label="Talk with ZipLyne"> <astro-island uid="Z1dBEE" prefix="r4" component-url="/_astro/VoiceNoteLauncher.CktArRYu.js" component-export="default" renderer-url="/_astro/client.B8feUfe4.js" props="{"variant":[0,"floating"],"label":[0,"Leave A Voice Note"]}" ssr client="idle" opts="{"name":"VoiceNoteLauncher","value":true}" await-children><button type="button" class="vnl vnl--floating" aria-label="Leave A Voice Note"><span class="vnl-bars" aria-hidden="true"><span class="vnl-bar" style="animation-delay:0s"></span><span class="vnl-bar" style="animation-delay:0.12s"></span><span class="vnl-bar" style="animation-delay:0.24s"></span><span class="vnl-bar" style="animation-delay:0.36s"></span><span class="vnl-bar" style="animation-delay:0.48s"></span></span><span class="vnl-label vnl-label--long">Leave A Voice Note</span><span class="vnl-label vnl-label--short">Voice Note</span><span class="vnl-arrow" aria-hidden="true">â</span></button><!--astro:end--></astro-island> </div> <astro-island uid="Z1xG9GH" prefix="r5" component-url="/_astro/AskZippy.fcRbgbg6.js" component-export="default" renderer-url="/_astro/client.B8feUfe4.js" props="{}" ssr client="idle" opts="{"name":"AskZippy","value":true}" await-children><div class="dock"><button type="button" class="dock-pill" aria-expanded="false" aria-controls="dock-panel"><span class="dock-dot" aria-hidden="true"></span><span class="dock-label-long">Chat With Zippy</span><span class="dock-label-short">Chat</span> <span class="dock-shortcut" style="font-size:10px" aria-hidden="true">âK</span></button></div><!--astro:end--></astro-island> <div class="zl-rv" data-zl-rv hidden aria-live="polite"> <div class="zl-rv__card" role="status"> <span class="zl-rv__edge" aria-hidden="true"></span> <button class="zl-rv__x" type="button" data-zl-rv-close aria-label="Dismiss"> <svg viewBox="0 0 14 14" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"> <path d="M1 1l12 12M13 1L1 13"></path> </svg> </button> <p class="zl-rv__title" data-zl-rv-title></p> <p class="zl-rv__body" data-zl-rv-body></p> <div class="zl-rv__actions"> <a class="zl-rv__cta" href="https://cal.com/iowitz/ziplyne" target="_blank" rel="noopener noreferrer"> 252Let's talk <span aria-hidden="true">→</span> </a> <a class="zl-rv__resume" data-zl-rv-resume hidden></a> </div> </div> </div>
252<script type="module">(function(){const e=window.__zlVisit;if(!e||e.n<2)return;try{if(sessionStorage.getItem("zl:rv")==="seen")return}catch{}const t=document.querySelector("[data-zl-rv]"),a=document.querySelector("[data-zl-rv-title]"),i=document.querySelector("[data-zl-rv-body]"),s=document.querySelector("[data-zl-rv-resume]"),r=document.querySelector("[data-zl-rv-close]");if(!t||!a||!i||!s||!r)return;const c=e.n===2?{head:"Hey, you came back.",line:"Second time here. Whatever brought you back, it is probably worth a conversation."}:e.n<5?{head:"You are back again.",line:"That usually means something is worth building. Want to skip ahead and just talk?"}:{head:"Alright, you keep coming back.",line:"We should stop meeting like this and put it on a call."};a.replaceChildren(...c.head.split(" ").flatMap((n,d)=>{const o=document.createElement("span");return o.className="zl-rv__w",o.style.setProperty("--i",String(d)),o.textContent=n,[o,document.createTextNode(" ")]})),i.textContent=c.line,e.previousPath&&e.previousTitle&&e.previousPath!==location.pathname&&(s.href=e.previousPath,s.textContent=`Back to ${e.previousTitle}`,s.hidden=!1);const l=()=>{t.classList.remove("is-in"),t.classList.add("is-out");try{sessionStorage.setItem("zl:rv","seen")}catch{}setTimeout(()=>{t.hidden=!0},260)};r.addEventListener("click",l),setTimeout(()=>{t.hidden=!1,requestAnimationFrame(()=>t.classList.add("is-in"));try{sessionStorage.setItem("zl:rv","seen")}catch{}},1100)})();</script>
252
252<script type="application/json" id="ttm-pages">[{"label":"Home","href":"/"},{"label":"About","href":"/about"},{"label":"Work","href":"/case-studies"},{"label":"SEO Work","href":"/case-studies/seth-dive"},{"label":"Blog","href":"/blog"},{"label":"Contact","href":"/contact"},{"label":"Careers","href":"/careers"},{"label":"Open Source","href":"/open-source"},{"label":"All Solutions","href":"/services"},{"label":"AI Engineering","href":"/services/ai-forward-deployed-engineering"},{"label":"AI Consulting","href":"/services/ai-consulting"},{"label":"Build A Product","href":"/services/build"},{"label":"Business Automation","href":"/services/transform"},{"label":"Custom CRM","href":"/services/crm"},{"label":"Ongoing Product Care","href":"/services/retainer"},{"label":"All Industries","href":"/industries"},{"label":"Privacy","href":"/privacy"},{"label":"Terms","href":"/terms"},{"label":"The Presentation","href":"/presentation"},{"label":"Custom Software Development","href":"/services/custom-software-development"},{"label":"Web App Development","href":"/services/web-app-development"},{"label":"Mobile App Development","href":"/services/mobile-app-development"},{"label":"AI Agents","href":"/services/ai-agents"},{"label":"AI Voice Agents","href":"/services/ai-voice-agents"},{"label":"Document AI and Extraction","href":"/services/document-ai-and-extraction"},{"label":"AI Workflow Automation","href":"/services/ai-workflow-automation"},{"label":"AI Image Generation","href":"/services/ai-image-generation"},{"label":"AI Product Photography","href":"/services/ai-product-photography"},{"label":"AI Video Production","href":"/services/ai-video-production"},{"label":"AI Music and Original Songs","href":"/services/ai-music-and-original-songs"},{"label":"AI Jingles and Brand Sound","href":"/services/ai-jingles-and-brand-sound"},{"label":"SEO","href":"/services/seo"},{"label":"Law Firms","href":"/industries/law-firms"},{"label":"Loan Businesses","href":"/industries/loan-businesses"},{"label":"Merchant Cash Advance","href":"/industries/merchant-cash-advance"},{"label":"Accountants and CPA Firms","href":"/industries/accountants-and-cpa-firms"},{"label":"Construction Contractors","href":"/industries/construction-contractors"},{"label":"Logistics and Freight","href":"/industries/logistics-and-freight"},{"label":"Casinos and iGaming","href":"/industries/casinos-and-igaming"},{"label":"Wholesale Distribution","href":"/industries/wholesale-distribution"},{"label":"Import and Export","href":"/industries/import-and-export"},{"label":"Photography Studios","href":"/industries/photography-studios"},{"label":"CRM for Law Firms","href":"/services/crm/law-firms"},{"label":"CRM for Loan Businesses","href":"/services/crm/loan-businesses"},{"label":"CRM for Accountants & CPA Firms","href":"/services/crm/accountants"},{"label":"CRM for Insurance Agencies","href":"/services/crm/insurance-agencies"},{"label":"CRM for Real Estate Brokerages","href":"/services/crm/real-estate-brokerages"},{"label":"CRM for Property Management","href":"/services/crm/property-management"},{"label":"CRM for Construction & Contractors","href":"/services/crm/construction-contractors"},{"label":"CRM for Logistics & Freight","href":"/services/crm/logistics-freight"},{"label":"CRM for Medical Practices","href":"/services/crm/medical-practices"},{"label":"CRM for Staffing & Recruiting Agencies","href":"/services/crm/staffing-agencies"},{"label":"CRM for Wholesale & Distribution","href":"/services/crm/wholesale-distribution"},{"label":"CRM for Manufacturers","href":"/services/crm/manufacturers"},{"label":"baba","href":"/case-studies/baba"},{"label":"Seth Dive","href":"/case-studies/seth-dive"},{"label":"PatientPartner","href":"/case-studies/patientpartner"},{"label":"Shehebar Law","href":"/case-studies/shehebar"},{"label":"ReplyMagic","href":"/case-studies/replymagic"},{"label":"Ringwell","href":"/case-studies/ringwell"},{"label":"Product QR Guides","href":"/case-studies/product-qr-guides"},{"label":"House of Challah","href":"/case-studies/house-of-challah"},{"label":"MentionWell","href":"/case-studies/mentionwell"},{"label":"BAX","href":"/case-studies/bax"},{"label":"Ascend","href":"/case-studies/ascend"},{"label":"Witz Agents","href":"/case-studies/witz-agents"},{"label":"Witz Trade","href":"/case-studies/trend-pulse"},{"label":"Ad Studio","href":"/case-studies/ad-studio"},{"label":"Zippy CDN","href":"/case-studies/zippy-cdn"},{"label":"Build My Program","href":"/case-studies/program-presenter-pro"},{"label":"CodeGrid","href":"/case-studies/codegrid"},{"label":"WitzLyte","href":"/case-studies/witzlyte"},{"label":"Asteroid Map","href":"/case-studies/asteroid-map"},{"label":"Shelter Now","href":"/case-studies/shelter-now"},{"label":"Onda","href":"/case-studies/onda"},{"label":"To Lose A Dog","href":"/case-studies/toloseadog"},{"label":"H Equities","href":"/case-studies/h-equities"},{"label":"Drabinsky Realty","href":"/case-studies/drabinsky"},{"label":"BlockBeat","href":"/case-studies/blockbeat"}]</script>
252
252<script type="module" src="/_astro/HugeLabFrame.astro_astro_type_script_index_0_lang.D4yNXKgx.js"></script>
252 <div class="zl-ei" id="zl-ei" data-invalid="Enter a valid email address." data-fail="Something went wrong. Please try again." data-sending="Signing you upâ¦" data-cta="Sign me up" hidden data-astro-cid-qdal5lsa> <div class="zl-ei-backdrop" data-ei-close data-astro-cid-qdal5lsa></div> <div class="zl-ei-card" role="dialog" aria-modal="true" aria-labelledby="zl-ei-title" aria-describedby="zl-ei-lede" data-astro-cid-qdal5lsa> <button type="button" class="zl-ei-x" data-ei-close aria-label="Close" data-astro-cid-qdal5lsa> <svg width="14" height="14" viewBox="0 0 14 14" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-qdal5lsa> <path d="M1 1l12 12M13 1L1 13" stroke-linecap="round" data-astro-cid-qdal5lsa></path> </svg> </button> <div class="zl-ei-kicker" data-astro-cid-qdal5lsa><span class="zl-ei-dot" data-astro-cid-qdal5lsa></span>The Zip Newsletter</div> <h2 class="zl-ei-title" id="zl-ei-title" data-astro-cid-qdal5lsa>One email a week. The moves that matter.</h2> <p class="zl-ei-lede" id="zl-ei-lede" data-astro-cid-qdal5lsa>Practical notes on AI-native building, automation, and the products we ship. Plain English, no hype.</p> <ul class="zl-ei-chips" data-astro-cid-qdal5lsa> <li class="zl-ei-chip" data-astro-cid-qdal5lsa>AI moves that matter</li><li class="zl-ei-chip" data-astro-cid-qdal5lsa>What we're shipping</li><li class="zl-ei-chip" data-astro-cid-qdal5lsa>Unsubscribe anytime</li> </ul> <form class="zl-ei-form" id="zl-ei-form" novalidate data-astro-cid-qdal5lsa> <div class="zl-ei-field" data-astro-cid-qdal5lsa> <input type="email" name="email" id="zl-ei-email" required autocomplete="email" inputmode="email" spellcheck="false" placeholder="[email protected]" class="zl-ei-input" aria-label="[email protected]" data-astro-cid-qdal5lsa> <button type="submit" class="zl-ei-btn" id="zl-ei-btn" data-astro-cid-qdal5lsa>Sign me up</button> </div> <p class="zl-ei-msg" id="zl-ei-msg" role="status" aria-live="polite" data-astro-cid-qdal5lsa></p> <p class="zl-ei-fine" data-astro-cid-qdal5lsa>No spam. Unsubscribe in one click.</p> </form> <div class="zl-ei-done" id="zl-ei-done" hidden data-astro-cid-qdal5lsa> <div class="zl-ei-done-mark" aria-hidden="true" data-astro-cid-qdal5lsa> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" stroke="currentColor" stroke-width="2" data-astro-cid-qdal5lsa> <path d="M4 11.5l4.5 4.5L18 6.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-qdal5lsa></path> </svg> </div> <div class="zl-ei-done-title" data-astro-cid-qdal5lsa>Request received.</div> <div class="zl-ei-done-sub" data-astro-cid-qdal5lsa>Thanks. Your signup request was received.</div> </div> <button type="button" class="zl-ei-dismiss" data-ei-close data-astro-cid-qdal5lsa>No thanks, maybe later</button> </div> </div>
252<script> 253 (function () { 254 var root = document.getElementById('zl-ei'); 255 if (!root) return; 256 if (document.querySelector('[data-shredder-game]')) return; 257 258 // ââ Suppression rules âââââââââââââââââââââââââââââââââââââââââââââ 259 var SNOOZE_DAYS = 30; 260 var EXCLUDED = ['/contact', '/thanks', '/yes', '/play', '/404', '/careers']; 261 var path = location.pathname.replace(/\/$/, '') || '/'; 262 for (var i = 0; i < EXCLUDED.length; i++) { 263 if (path === EXCLUDED[i] || path === '/he' + EXCLUDED[i]) return; 264 } 265 266 function ls(key) { try { return window.localStorage.getItem(key); } catch (e) { return null; } } 267 function lsSet(key, val) { try { window.localStorage.setItem(key, val); } catch (e) {} } 268 function ss(key) { try { return window.sessionStorage.getItem(key); } catch (e) { return null; } } 269 function ssSet(key, val) { try { window.sessionStorage.setItem(key, val); } catch (e) {} } 270 271 if (ls('zl_nl_sub') || ls('zl_nl_request')) return; // prior signup/request â never nag 272 if (ss('zl_ei_shown')) return; // one shot per session 273 var seen = parseInt(ls('zl_ei_seen') || '0', 10); 274 if (seen && (Date.now() - seen) < SNOOZE_DAYS * 864e5) return; // snoozed 275 276 // ââ Dialog wiring âââââââââââââââââââââââââââââââââââââââââââââââââ 277 var card = root.querySelector('.zl-ei-card'); 278 var form = document.getElementById('zl-ei-form'); 279 var input = document.getElementById('zl-ei-email'); 280 var btn = document.getElementById('zl-ei-btn'); 281 var msg = document.getElementById('zl-ei-msg'); 282 var done = document.getElementById('zl-ei-done'); 283 var EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; 284 var opened = false; 285 var lastFocus = null; 286 var previousDocumentOverflow = ''; 287 var isolated = []; 288 289 function track(event, extra) { 290 if (!window.gtag) return; 291 var payload = { cta_location: 'exit_intent', section: 'exit_intent' }; 292 if (extra) for (var k in extra) payload[k] = extra[k]; 293 window.gtag('event', event, payload); 294 } 295 296 function focusables() { 297 return card.querySelectorAll('button:not([disabled]), input, a[href], [tabindex]:not([tabindex="-1"])'); 298 } 299 300 function onKey(e) { 301 if (e.key === 'Escape') { close('dismiss'); return; } 302 if (e.key !== 'Tab') return; 303 var f = focusables(); 304 if (!f.length) return; 305 var first = f[0], last = f[f.length - 1]; 306 if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); } 307 else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); } 308 } 309 310 function open() { 311 if (opened || document.querySelector('dialog[open], .zcta-scrim, .vnl-modal') || document.body.matches('.hl-menu-open, .zl-ask-modal-open') || ls('zl_nl_request')) return; 312 window.dispatchEvent(new CustomEvent('zl:modal-open', { detail: { source: 'exit-intent' } })); 313 opened = true; 314 teardownTriggers(); 315 ssSet('zl_ei_shown', '1'); 316 lastFocus = document.activeElement; 317 root.hidden = false; 318 document.body.classList.add('zl-newsletter-open'); 319 var branch = root; 320 while (branch.parentElement && branch !== document.body) { 321 Array.from(branch.parentElement.children).forEach(function (el) { 322 if (el !== branch && el instanceof HTMLElement) { isolated.push([el, el.inert]); el.inert = true; } 323 }); 324 branch = branch.parentElement; 325 } 326 previousDocumentOverflow = document.documentElement.style.overflow; 327 document.documentElement.style.overflow = 'hidden'; 328 document.addEventListener('keydown', onKey, true); 329 // focus after the entrance frame so screen readers announce the dialog 330 requestAnimationFrame(function () { try { input.focus({ preventScroll: true }); } catch (e) {} }); 331 track('newsletter_modal_view'); 332 } 333 334 function close(reason) { 335 if (!opened) return; 336 opened = false;
337 root.hidden = true; 338 document.body.classList.remove('zl-newsletter-open'); 339 isolated.forEach(function (entry) { entry[0].inert = entry[1]; }); 340 isolated = []; 341 document.documentElement.style.overflow = previousDocumentOverflow; 342 document.removeEventListener('keydown', onKey, true); 343 if (reason === 'dismiss') { lsSet('zl_ei_seen', String(Date.now())); track('newsletter_modal_dismiss'); } 344 if (lastFocus && lastFocus.focus) { try { lastFocus.focus(); } catch (e) {} } 345 } 346 347 root.addEventListener('click', function (e) { 348 if (e.target.closest('[data-ei-close]')) close('dismiss'); 349 }); 350 window.addEventListener('zl:modal-open', function (e) { 351 var detail = e instanceof CustomEvent ? e.detail : null; 352 if (detail && detail.source !== 'exit-intent') close('superseded'); 353 }); 354 355 function show(text, kind) { 356 msg.textContent = text; 357 msg.className = 'zl-ei-msg' + (kind ? ' ' + kind : ''); 358 } 359 360 form.addEventListener('submit', async function (e) { 361 e.preventDefault(); 362 if (btn.disabled) return; 363 var value = (input.value || '').trim(); 364 if (!EMAIL_RE.test(value)) { show(root.dataset.invalid, 'err'); input.focus(); return; } 365 366 btn.disabled = true; 367 btn.textContent = 'â¦'; 368 show(root.dataset.sending, ''); 369 370 var controller = new AbortController(); 371 var timeout = setTimeout(function () { controller.abort(); }, 15000); 372 try { 373 var res = await fetch('/api/subscribe', { 374 signal: controller.signal, 375 method: 'POST', 376 headers: { 'Content-Type': 'application/json' }, 377 body: JSON.stringify({ email: value }), 378 }); 379 var data = await res.json().catch(function () { return {}; }); 380 if (res.ok && data.ok) { 381 lsSet('zl_nl_request', '1'); 382 form.hidden = true; 383 done.hidden = false; 384 if (window.gtag) { window.gtag('set', 'user_properties', { signup_source: 'exit_intent' }); } 385 track('newsletter_signup_request'); 386 setTimeout(function () { close('requested'); }, 2600); 387 return; 388 } 389 show(data.error || root.dataset.fail, 'err'); 390 } catch (_) { 391 show(root.dataset.fail, 'err'); 392 } finally { clearTimeout(timeout); } 393 btn.disabled = false; 394 btn.textContent = root.dataset.cta; 395 }); 396 397 // ââ Triggers ââââââââââââââââââââââââââââââââââââââââââââââââââââââ 398 var armed = false; 399 var timers = []; 400 var listeners = []; 401 402 function on(target, type, fn, opts) { 403 target.addEventListener(type, fn, opts); 404 listeners.push([target, type, fn, opts]); 405 } 406 407 function teardownTriggers() { 408 for (var i = 0; i < timers.length; i++) clearTimeout(timers[i]); 409 for (var j = 0; j < listeners.length; j++) { 410 var l = listeners[j]; 411 l[0].removeEventListener(l[1], l[2], l[3]); 412 } 413 timers = []; 414 listeners = []; 415 } 416 417 // Arm the desktop exit-intent only after 5s so instant bounces are spared. 418 timers.push(setTimeout(function () { armed = true; }, 5000)); 419 420 var finePointer = window.matchMedia && window.matchMedia('(pointer: fine)').matches; 421 422 if (finePointer) { 423 // Mouse leaves through the top edge â heading for the tab/address bar/close. 424 on(document, 'mouseout', function (e) { 425 if (armed && e.clientY <= 0 && !e.relatedTarget) open(); 426 }); 427 } else { 428 // Touch: no cursor to read. Use a fast scroll-up after real engagement, 429 // plus a timed fallback for anyone who lingers. 430 var maxScroll = 0; 431 var lastY = window.scrollY; 432 var engaged = false; 433 on(window, 'scroll', function () { 434 var y = window.scrollY; 435 var doc = document.documentElement; 436 var depth = (y + window.innerHeight) / (doc.scrollHeight || 1); 437 if (depth > 0.5) engaged = true; 438 if (y > maxScroll) maxScroll = y; 439 // fast upward fling after they've been deep in the page 440 if (armed && engaged && lastY - y > 60 && y < maxScroll - 240) open(); 441 lastY = y; 442 }, { passive: true }); 443 // Dwell fallback: 35s in, only if they actually engaged with the page. 444 timers.push(setTimeout(function () { if (engaged) open(); }, 35000)); 445 } 446 })(); 447</script>
447 <div class="zl-reading-progress" aria-hidden="true"><span data-reading-progress></span></div>
447<script type="module" src="/_astro/Experience.astro_astro_type_script_index_0_lang.CSU7pQze.js"></script>
447
447<script type="module">const r={tap:8,light:5,medium:12,heavy:20,success:[10,30,10],warning:[15,50,15],error:[20,60,20,60,20],selection:4};function c(o="tap"){if(!(typeof window>"u"))try{if(!window.matchMedia?.("(hover: none) and (pointer: coarse)").matches)return;const t=navigator.vibrate?.bind(navigator);typeof t=="function"&&t(r[o]),window.dispatchEvent(new CustomEvent("ziplyne:haptic",{detail:{pattern:o}}))}catch{}}function s(){if(typeof window>"u"||window.__zlHapticsInstalled||(window.__zlHapticsInstalled=!0,!window.matchMedia?.("(hover: none) and (pointer: coarse)").matches))return;const a=[".btn",".filter-btn",".chip",".toggle-btn",".faq-question",".dock-pill",".dock-send",".dock-chip",".pkg-card",".path-card",".work-tile",".page-btn",".mobile-menu-toggle",".mobile-menu-sheet a",".site-nav a",".brand-link",'button[type="submit"]'].join(",");document.addEventListener("touchstart",t=>{const e=t.target;if(!e)return;const n=e.closest(a);if(!n)return;let i="light";n.matches('.btn:not(.ghost), button[type="submit"]')&&(i="medium"),n.matches(".dock-send, .pkg-card")&&(i="medium"),n.matches(".path-card, .work-tile")&&(i="tap"),c(i)},{passive:!0,capture:!0}),document.addEventListener("input",t=>{const e=t.target;e&&e.type==="range"&&c("selection")},{passive:!0,capture:!0})}s();</script>
447
447<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"df70696f837f49c59795c8d3b6194078","r":1,"spa":2}' crossorigin="anonymous"></script>
447 448</body> </html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.