1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4
4<script> 5 (function () { 6 var proto = XMLHttpRequest.prototype; 7 var open = proto.open, setRequestHeader = proto.setRequestHeader, send = proto.send; 8 var TOKEN_KEY = 'base44_access_token'; 9 var storedTokenHeader = function () { 10 try { return 'Bearer ' + localStorage.getItem(TOKEN_KEY); } catch (e) { return null; } 11 }; 12 var forgetStoredToken = function () { 13 try { localStorage.removeItem(TOKEN_KEY); localStorage.removeItem('token'); } catch (e) {} 14 }; 15 16 proto.open = function (method, url) { 17 this.__b44IsAuthCheck = /\/entities\/User\/me(\?|$)/.test(url); 18 return open.apply(this, arguments); 19 }; 20 21 proto.setRequestHeader = function (name, value) { 22 if (this.__b44IsAuthCheck && name.toLowerCase() === 'authorization' && value === storedTokenHeader()) { 23 this.__b44SentToken = value; 24 } 25 return setRequestHeader.call(this, name, value); 26 }; 27 28 proto.send = function () { 29 this.addEventListener('loadend', function () { 30 var rejectedTokenStillStored = this.status === 401 && this.__b44SentToken === storedTokenHeader(); 31 if (rejectedTokenStillStored) forgetStoredToken(); 32 }); 33 return send.apply(this, arguments); 34 }; 35})(); 36 </script>
36 37 <meta charset="utf-8"/> 38 <link href="https://media.base44.com/images/public/68ecf4db11684411d719d34a/2827bd0fc_compiloicon.png" rel="icon" type="image/png"/> 39 <link href="https://media.base44.com/images/public/68ecf4db11684411d719d34a/2827bd0fc_compiloicon.png" rel="apple-touch-icon"/> 40 <meta content="width=device-width, initial-scale=1.0" name="viewport"/> 41 <link href="/manifest.json" rel="manifest"/> 42 <!-- Security meta-headers (client-side enforcement) --> 43 <meta content="nosniff" http-equiv="X-Content-Type-Options"/> 44 <meta content="SAMEORIGIN" http-equiv="X-Frame-Options"/> 45 <meta content="strict-origin-when-cross-origin" http-equiv="Referrer-Policy"/> 46 <meta content="camera=(), microphone=(), geolocation=(), payment=()" http-equiv="Permissions-Policy"/> 47 <meta content="default-src 'self' https:; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com https://www.google-analytics.com https://media.base44.com https://sc.lfeeder.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self' https:; frame-src 'none'; object-src 'none'; base-uri 'self'; form-action 'self';" http-equiv="Content-Security-Policy"/> 48 <!-- Google Search Console Verification (verified) --> 49 <meta content="ymlvH0wSZqr-H02mCy3NMA3Lt9WXfD-G2LpKu_nDPkQ" name="google-site-verification"/> 50 <!-- Bing Webmaster Tools Verification â SAFE LOCATION for the owner's token. 51 To verify: 1) sign in to Bing Webmaster Tools, 2) add property compilo.ai, 52 3) choose "Meta Tag" verification, 4) copy the content value, 53 5) uncomment the line below and paste the token between the quotes. 54 Do NOT commit a placeholder/fake token. --> 55 <!-- <meta name="msvalidate.01" content="PASTE_BING_VERIFICATION_TOKEN_HERE" /> --> 56 <!-- Primary SEO â brand identity from src/lib/brand.js (canonical: Compilo.ai) --> 57 <title> 58 En / En Product | Compilo.ai 59 </title> 60 <meta content="En / En Product on Compilo.ai. Compilo." name="description"/> 61 <meta content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" name="robots"/> 62 <meta content="Compilo.ai" name="author"/> 63 <!-- Open Graph --> 64 <meta content="website" property="og:type"/> 65 <meta content="Compilo.ai" property="og:site_name"/> 66 <meta content="En / En Product | Compilo.ai" property="og:title"/> 67 <meta content="En / En Product on Compilo.ai. Compilo." property="og:description"/> 68 <meta content="https://compilo.ai/Product" property="og:url"/> 69 <meta content="https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/render/image/public/base44-prod/public/68ecf4db11684411d719d34a/cb9b62df9_compilofaviconiconlogo.jpg?width=1200&height=630&resize=contain" property="og:image"/> 70 <meta content="en_GB" property="og:locale"/> 71 <!-- Additional legitimacy signals for web filters --> 72 <meta content="sv_SE" property="og:locale:alternate"/> 73 <meta content="https://compilo.ai/about" property="og:see_also"/> 74 <meta content="https://compilo.ai/security" property="og:see_also"/> 75 <meta content="https://compilo.ai/trust" property="og:see_also"/> 76 <meta content="Business Software, Compliance, Cybersecurity" name="category"/> 77 <meta content="Business/Software/Compliance" name="classification"/> 78 <meta content="Europe" name="coverage"/> 79 <meta content="Tech Brows AB, org. 559434-1967, Stockholm, Sweden" name="owner"/> 80 <meta content="[email protected]" name="reply-to"/> 81 <meta content="general" name="rating"/> 82 <!-- Twitter --> 83 <meta content="summary_large_image" name="twitter:card"/> 84 <meta content="En / En Product | Compilo.ai" name="twitter:title"/> 85 <meta content="En / En Product on Compilo.ai. Compilo." name="twitter:description"/> 86 <meta content="https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/render/image/public/base44-prod/public/68ecf4db11684411d719d34a/cb9b62df9_compilofaviconiconlogo.jpg?width=1200&height=630&resize=contain" name="twitter:image"/> 87 <!-- Structured Data: Organization + WebSite (@graph with stable @id references) --> 88
88<script type="application/ld+json"> 89 { 90 "@context": "https://schema.org", 91 "@graph": [ 92 { 93 "@id": "https://compilo.ai/#organization", 94 "@type": "Organization", 95 "name": "Compilo.ai", 96 "legalName": "Tech Brows AB", 97 "url": "https://compilo.ai", 98 "slogan": "Company control. Powered by AI.", 99 "logo": { 100 "@type": "ImageObject", 101 "url": "https://media.base44.com/images/public/68ecf4db11684411d719d34a/dad82ab23_compilologgaSTORSLOGANiconeller.png" 102 }, 103 "email": "[email protected]", 104 "description": "Compilo.ai helps organisations perform and maintain compliance work across GDPR, NIS 2, the EU AI Act, ISO 27001 and broader GRC.", 105 "foundingDate": "2025", 106 "foundingLocation": "Stockholm, Sweden", 107 "areaServed": "EU", 108 "knowsAbout": ["GDPR", "NIS2", "AI Act", "GRC", "ISO 27001", "Compliance automation"], 109 "sameAs": ["https://www.linkedin.com/company/109693142"], 110 "address": { 111 "@type": "PostalAddress", 112 "streetAddress": "Motalavägen 15", 113 "addressLocality": "Stockholm", 114 "addressCountry": "SE" 115 }, 116 "contactPoint": { 117 "@type": "ContactPoint", 118 "contactType": "sales", 119 "email": "[email protected]", 120 "areaServed": "EU" 121 } 122 }, 123 { 124 "@id": "https://compilo.ai/#website", 125 "@type": "WebSite", 126 "name": "Compilo.ai", 127 "url": "https://compilo.ai", 128 "inLanguage": ["en", "sv"], 129 "publisher": { "@id": "https://compilo.ai/#organization" } 130 } 131 ] 132 } 133 </script>
133 134 <!-- Google Tag Manager --> 135
135<script> 136 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 137 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 138 j=d.createElement(s),dl=l!='data-layer'?'&l='+l:'';j.async=true;j.src= 139 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 140 })(window,document,'script','dataLayer','GTM-N85H7G9M'); 141 </script>
141 142 <!-- End Google Tag Manager --> 143 <!-- Google tag (gtag.js) â Google Analytics -->
vendor: 69 bytes, lines 143-144
143 144 <script async="" src="https://www.googletagmanager.com/gtag/js?id=
144G-NK95PD2HWD
vendor: 17 bytes, lines 144-146
144"> 145 </script> 146
146<script> 147
vendor: 145 bytes, lines 147-150
147window.dataLayer = window.dataLayer || []; 148 function gtag(){dataLayer.push(arguments);} 149 gtag('js', new Date()); 150 gtag('config', '
150G-NK95PD2HWD
vendor: 6 bytes, lines 150-151
150'); 151
151</script>
151 152 <!-- End Google tag (gtag.js) --> 153 <!-- LeadFeeder --> 154
154<script> 155 (function(ss,ex){ window.ldfdr=window.ldfdr||function(){(ldfdr._q=ldfdr._q||[]).push([].slice.call(arguments));}; (function(d,s){ fs=d.getElementsByTagName(s)[0]; function ce(src){ var cs=d.createElement(s); cs.src=src; cs.async=1; fs.parentNode.insertBefore(cs,fs); }; ce('https://sc.lfeeder.com/lftracker_v1_'+ss+(ex?'_'+ex:'')+'.js'); })(document,'script'); })('3P1w24dwEDz7mY5n'); 156 </script>
156 157 <!-- End LeadFeeder --> 158
158<script crossorigin="" src="/assets/index-Bjvscozi.js" type="module"> 159 </script>
159 160 <link crossorigin="" href="/assets/index-UAi22YRu.css" rel="stylesheet"/> 161 <meta content="https://compilo.ai/Product" name="twitter:url"/> 162
162<script> 163 (function () { 164 var titles = {"/login": "Login | Compilo.ai", "/register": "Register | Compilo.ai", "/forgot-password": "Forgot Password | Compilo.ai", "/reset-password": "Reset Password | Compilo.ai", "/": "Compilo.ai", "/sv": "Compilo.ai", "/no": "Compilo.ai", "/da": "Compilo.ai", "/fi": "Compilo.ai", "/villkor": "Villkor | Compilo.ai", "/dpa": "DPA | Compilo.ai", "/terms": "Terms | Compilo.ai", "/disclaimer": "Disclaimer | Compilo.ai", "/nda": "NDA | Compilo.ai", "/privacy-policy": "Privacy Policy | Compilo.ai", "/about": "About | Compilo.ai", "/contact": "Contact | Compilo.ai", "/investors": "Investors | Compilo.ai", "/try-for-free": "Try For Free | Compilo.ai", "/book-demo": "Book Demo | Compilo.ai", "/product": "En / En Product | Compilo.ai", "/nis2": "En / En Product | Compilo.ai", "/gdpr": "En / En Product | Compilo.ai", "/security": "En / Trust / En Trust And Security | Compilo.ai", "/en/product": "En / En Product | Compilo.ai", "/en/nis2-software": "En / En Product | Compilo.ai", "/en/gdpr-software": "En / En Product | Compilo.ai", "/en/trust-and-security": "En / Trust / En Trust And Security | Compilo.ai", "/crm": "CRM | Compilo.ai", "/crm-dashboard": "CRM Dashboard | Compilo.ai", "/crmdashboard": "CRM Dashboard | Compilo.ai", "/entitymaster": "Admin / Entity Master | Compilo.ai", "/entity-master": "Admin / Entity Master | Compilo.ai", "/crmstats": "CRM Stats | Compilo.ai", "/crm-stats": "CRM Stats | Compilo.ai", "/utmstats": "Utm Stats | Compilo.ai", "/utm-stats": "Utm Stats | Compilo.ai", "/vad-ar-compilo": "Vad Ar Compilo | Compilo.ai", "/blog": "Gone410 | Compilo.ai", "/home": "Compilo.ai"}; 165 // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind 166 // (old Safari fails to PARSE a lookbehind, taking the whole script down). 167 var dashed = function (s) { 168 return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2"); 169 }; 170 var decode = function (s) { 171 // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a 172 // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title. 173 try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; } 174 }; 175 var segments = function (path) { return path.split("/").filter(Boolean).map(decode); }; 176 var norm = function (path) { 177 var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); }); 178 return parts.length ? "/" + parts.join("/") : "/"; 179 }; 180 var lastPath = location.pathname, written = document.title, on = true; 181 var sync = function () { 182 // Path only: a hash/query change is the same page, and the SDK strips its own auth 183 // params with replaceState -- neither must clobber a server-rendered title in place. 184 if (!on || location.pathname === lastPath) return; 185 lastPath = location.pathname; 186 if (document.title !== written) { on = false; return; } 187 // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the 188 // map cannot carry, and writing a placeholder there is destructive, not merely vague: the 189 // prerender worker runs no setUserAgent, so its capture browser reads as human and executes 190 // this script, and coordinator.js's settle wait explicitly tolerates a full navigation -- 191 // a redirect landing on an unmapped path would bake the placeholder into the stored 192 // snapshot. Leaving the title alone degrades to today's behavior instead. 193 // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up 194 // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the 195 // dashes there, and the client cannot tell the two apart. The map emits every reachable 196 // shape per segment instead (_client_url_variants). 197 var title = titles[norm(location.pathname)]; 198 if (title === undefined) return; 199 document.title = title; 200 // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so 201 // keeping the assigned string would make the next sync() read our own write as the app's. 202 written = document.title; 203 }; 204 var wrap = function (fn) { 205 // The history entry is already pushed by the time sync() runs, so a throw here would 206 // surface inside the host app's router and break navigation. This is injected into apps 207 // we cannot test, so it swallows rather than trusting the trace. 208 return function () { 209 var r = fn.apply(this, arguments);
210 try { sync(); } catch (e) {} 211 return r; 212 }; 213 }; 214 history.pushState = wrap(history.pushState); 215 history.replaceState = wrap(history.replaceState); 216 window.addEventListener("popstate", sync); 217})(); 218 </script>
218 219 <meta content="yes" name="mobile-web-app-capable"/> 220 <meta content="black" name="apple-mobile-web-app-status-bar-style"/> 221 <meta content="Compilo.ai" name="apple-mobile-web-app-title"/> 222 <link href="https://compilo.ai/Product" rel="canonical"/> 223
223<script data-seo-source="builder" type="application/ld+json"> 224 {"name": "Compilo.ai", "@context": "https://schema.org", "@type": "WebSite", "url": "https://compilo.ai"} 225 </script>
225 226
226<script data-seo-source="builder" type="application/ld+json"> 227 {"name": "Compilo.ai", "logo": "https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/object/public/base44-prod/public/68ecf4db11684411d719d34a/cb9b62df9_compilofaviconiconlogo.jpg", "@context": "https://schema.org", "@type": "Organization", "url": "https://compilo.ai"} 228 </script>
228 229
229<script data-seo-source="builder" type="application/ld+json"> 230 {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://compilo.ai/"}, {"@type": "ListItem", "position": 2, "name": "En / En Product", "item": "https://compilo.ai/Product"}]} 231 </script>
231 232 </head> 233 <body> 234 <!-- Google Tag Manager (noscript) --> 235 <noscript> 236 <iframe height="0" src="https://www.googletagmanager.com/ns.html?id=GTM-N85H7G9M" style="display:none;visibility:hidden" width="0"> 237 </iframe> 238 </noscript> 239 <!-- End Google Tag Manager (noscript) --> 240 <div id="root"> 241 <div data-seo-source="builder" id="seo-snapshot" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"> 242 <main> 243 <header> 244 <h1> 245 En / En Product | Compilo.ai 246 </h1> 247 <p> 248 En / En Product on Compilo.ai. Compilo. 249 </p> 250 </header> 251 <nav aria-label="Pages"> 252 <h2> 253 Pages 254 </h2> 255 <ul> 256 <li> 257 <a href="/"> 258 Home 259 </a> 260 </li> 261 <li> 262 <a href="/login"> 263 Login 264 </a> 265 â Login on Compilo.ai. Compilo. 266 </li> 267 <li> 268 <a href="/register"> 269 Register 270 </a> 271 â Register on Compilo.ai. Compilo. 272 </li> 273 <li> 274 <a href="/forgot-password"> 275 Forgot Password 276 </a> 277 â Forgot Password on Compilo.ai. Compilo. 278 </li> 279 <li> 280 <a href="/reset-password"> 281 Reset Password 282 </a> 283 â Reset Password on Compilo.ai. Compilo. 284 </li> 285 <li> 286 <a href="/Villkor"> 287 Villkor 288 </a> 289 â Villkor on Compilo.ai. Compilo. 290 </li> 291 <li> 292 <a href="/dpa"> 293 DPA 294 </a> 295 â DPA on Compilo.ai. Compilo. 296 </li> 297 <li> 298 <a href="/terms"> 299 Terms 300 </a> 301 â Terms on Compilo.ai. Compilo. 302 </li> 303 <li> 304 <a href="/disclaimer"> 305 Disclaimer 306 </a> 307 â Disclaimer on Compilo.ai. Compilo. 308 </li> 309 <li> 310 <a href="/nda"> 311 NDA 312 </a> 313 â NDA on Compilo.ai. Compilo. 314 </li> 315 <li> 316 <a href="/privacy-policy"> 317 Privacy Policy 318 </a> 319 â Privacy Policy on Compilo.ai. Compilo. 320 </li> 321 <li> 322 <a href="/about"> 323 About 324 </a> 325 â About on Compilo.ai. Compilo. 326 </li> 327 <li> 328 <a href="/contact"> 329 Contact 330 </a> 331 â Contact on Compilo.ai. Compilo. 332 </li> 333 <li> 334 <a href="/investors"> 335 Investors 336 </a> 337 â Investors on Compilo.ai. Compilo. 338 </li> 339 <li> 340 <a href="/try-for-free"> 341 Try For Free 342 </a> 343 â Try For Free on Compilo.ai. Compilo. 344 </li> 345 <li> 346 <a href="/book-demo"> 347 Book Demo 348 </a> 349 â Book Demo on Compilo.ai. Compilo. 350 </li> 351 <li> 352 <a href="/Product"> 353 En Product 354 </a> 355 â En / En Product on Compilo.ai. Compilo. 356 </li> 357 <li> 358 <a href="/security"> 359 En Trust And Security 360 </a> 361 â En / Trust / En Trust And Security on Compilo.ai. Compilo. 362 </li> 363 <li> 364 <a href="/CRM"> 365 CRM 366 </a> 367 â CRM on Compilo.ai. Compilo. 368 </li> 369 <li> 370 <a href="/CRMDashboard"> 371 CRM Dashboard 372 </a> 373 â CRM Dashboard on Compilo.ai. Compilo. 374 </li> 375 <li> 376 <a href="/EntityMaster"> 377 Entity Master 378 </a> 379 â Admin / Entity Master on Compilo.ai. Compilo. 380 </li> 381 <li> 382 <a href="/CRMStats"> 383 CRM Stats 384 </a> 385 â CRM Stats on Compilo.ai. Compilo. 386 </li> 387 <li> 388 <a href="/UtmStats"> 389 Utm Stats 390 </a> 391 </li> 392 <li> 393 <a href="/Vad-ar-compilo"> 394 Vad Ar Compilo 395 </a> 396 â Vad Ar Compilo on Compilo.ai. Compilo. 397 </li> 398 <li> 399 <a href="/blog"> 400 Gone410 401 </a> 402 â Gone410 on Compilo.ai. Compilo. 403 </li> 404 </ul> 405 </nav> 406 </main> 407 </div> 408 </div> 409 </body> 410</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.