1<!DOCTYPE html> 2<html lang="de"> 3 4<head> 5 <meta charset="UTF-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" /> 8 <title>OnRep AI: Empfohlen von KI, auf Autopilot</title> 9 <meta name="description" 10 content="OnRep AI zeigt dir, wann ChatGPT, Claude und Co. dich empfehlen, und sorgt automatisch dafür, dass es öfter passiert." /> 11 <meta name="author" content="OnRep AI" /> 12 13 <!-- OG-Texte angeglichen an die Helmet-Copy der Landing (src/pages/LandingPage.tsx). 14 Das OG-Bild ist ein festes 1200x630-Asset; ein Austausch bleibt reiner Dateitausch. --> 15 <meta property="og:title" content="OnRep AI: Empfohlen von KI, auf Autopilot" /> 16 <meta property="og:description" 17 content="OnRep AI zeigt dir, wann ChatGPT, Claude und Co. dich empfehlen, und sorgt automatisch dafür, dass es öfter passiert." /> 18 <meta property="og:type" content="website" /> 19 <meta property="og:url" content="https://onrep.ai/" /> 20 <meta property="og:site_name" content="OnRep AI" /> 21 <meta property="og:image" content="https://onrep.ai/og/onrep-og-1200x630.png" /> 22 <meta property="og:image:width" content="1200" /> 23 <meta property="og:image:height" content="630" /> 24 <meta property="og:image:type" content="image/png" /> 25 <meta property="og:image:alt" content="Empfohlen von KI, auf Autopilot." /> 26 27 <meta name="twitter:card" content="summary_large_image" /> 28 <meta name="twitter:title" content="OnRep AI: Empfohlen von KI, auf Autopilot" /> 29 <meta name="twitter:description" 30 content="OnRep AI zeigt dir, wann ChatGPT, Claude und Co. dich empfehlen, und sorgt automatisch dafür, dass es öfter passiert." /> 31 <meta name="twitter:image" content="https://onrep.ai/og/onrep-og-1200x630.png" /> 32 <meta name="twitter:image:alt" content="Empfohlen von KI, auf Autopilot." /> 33 34 <!-- Prevent white first-paint on slow mobile; real UI is rendered by React. --> 35 <style> 36 html, 37 body { 38 /* Ein Dunkelton fuer Boot, Loader und App-Shell (Lade-Audit 21.08.). */ 39 background: #0d0d13; 40 } 41 </style> 42 43 <link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32"> 44 <link rel="icon" href="/favicon.png" type="image/png" sizes="512x512"> 45 <link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180"> 46 47 <!-- Fraunces, Archivo und JetBrains Mono liegen seit 23.09.2026 selbst in 48 /fonts (vorher Google Fonts): kein Umweg über Google-CSS vor dem ersten 49 Text und keine Besucher-IP an Google ohne Einwilligung. Die Regeln 50 stehen im <style> unten, damit document.fonts.load() sie beim Parse 51 kennt. Auf Landing, Funnel und Onboarding lädt das Skript die Schriften der ersten 52 Ansicht sofort mit, statt erst beim Rendern. --> 53 <!-- Mitwachsen auf groÃen Bildschirmen: setzt die Wurzel-SchriftgröÃe (1rem) über einer 54 Innenfläche von 1728 x 1000 Punkten, höchstens 1,5-fach, ohne Browser-Zoom aufzuheben. 55 Begründung, Zoom-Erkennung und bekannte Fehllesungen: src/lib/rootScale.ts. --> 56
56<script> 57 (function () { 58 var root = document.documentElement; 59 var densities = [1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 3, 3.5, 4]; 60 var ua = navigator.userAgent; 61 var safari = /^((?!chrome|chromium|android|crios|fxios|edg).)*safari/i.test(ua); 62 // Nur die Stufen der eigenen Engine, damit keine fremde Stufe knapp ins Fenster passt. 63 var levels = safari 64 ? [0.5, 0.63, 0.75, 0.85, 1.15, 1.25, 1.5, 1.75, 2, 2.5, 3] 65 : /firefox/i.test(ua) 66 ? [0.3, 0.5, 0.67, 0.8, 0.9, 1.1, 1.2, 1.33, 1.5, 1.7, 2, 2.4, 3, 4, 5] 67 : [0.25, 1 / 3, 0.5, 2 / 3, 0.75, 0.8, 0.9, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5]; 68 // 0,5 %: Chrome meldet devicePixelRatio fast exakt; 1 % lieà 2,2 / 1,25 = 1,76 als 69 // Dichte 1,75 durch (110 % als 125 % gelesen, Review 26.09.). 70 var near = function (list, value) { 71 for (var i = 0; i < list.length; i++) { 72 if (Math.abs(value / list[i] - 1) < 0.005) return list[i]; 73 } 74 return 0; 75 }; 76 var browserZoom = function () { 77 var ow = window.outerWidth; 78 var oh = window.outerHeight; 79 var iw = window.innerWidth; 80 var ih = window.innerHeight; 81 var dpr = window.devicePixelRatio || 1; 82 // Füllt die Seite das Fenster genau (keine Seitenleiste), ist kein Zoom aktiv; das gilt 83 // auch bei einer Bildschirmdichte, die nicht in der Liste steht (ChromeOS, eigene 84 // Skalierung). Mit Seitenleiste wächst die Seite dort nicht mit; Rauszoomen erkennt das 85 // Skript dort nicht (siehe src/lib/rootScale.ts). 86 if (Math.abs(iw - ow) <= 2 && (!oh || ih <= oh + 2)) return 1; 87 var zoom = 0; 88 var candidates = levels.concat([1]); 89 for (var i = 0; i < candidates.length; i++) { 90 var z = candidates[i]; 91 if (!safari && !near(densities, dpr / z)) continue; 92 // 2 Punkte Spielraum für abgerundete innerWidth/innerHeight. 93 if (iw * z > ow + 2 || (oh && ih * z > oh + 2)) continue; 94 if (z > zoom) zoom = z; 95 } 96 return zoom || 1; 97 }; 98 var apply = function () { 99 var iw = window.innerWidth; 100 var bz = browserZoom(); 101 var w = iw * bz; 102 var h = window.innerHeight * bz; 103 var scale = w < 1024 ? 1 : Math.min(1.5, Math.max(1, Math.min(w / 1728, h / 1000))); 104 var breakpoint = iw >= 1536 ? 1536 : iw >= 1280 ? 1280 : 1024; 105 scale = Math.max(1, Math.min(scale, iw / breakpoint)); 106 scale = Math.floor(scale * 100) / 100; 107 root.style.fontSize = scale === 1 ? '' : Math.round(scale * 100) + '%'; 108 }; 109 apply(); 110 window.addEventListener('resize', apply); 111 document.addEventListener('visibilitychange', apply); 112 })(); 113 </script>
113 114 115
115<script> 116 (function () { 117 var path = location.pathname; 118 if (!/^\/(repscan|ki-scan|ki-analyse|wettbewerber|kundenfragen|onboarding)?\/?$/.test(path)) return; 119 ['fraunces-latin', 'fraunces-italic-latin', 'archivo-latin', 'jetbrains-mono-latin'].forEach(function (name) { 120 var link = document.createElement('link'); 121 link.rel = 'preload'; link.as = 'font'; link.type = 'font/woff2'; link.crossOrigin = 'anonymous'; 122 link.href = '/fonts/' + name + '.woff2'; 123 document.head.appendChild(link); 124 }); 125 })(); 126 </script>
126 127 128 <!-- Fonts - Local only for maximum performance --> 129 <link rel="preload" href="/fonts/inter-400.woff2" as="font" type="font/woff2" crossorigin> 130 <link rel="preload" href="/fonts/inter-600.woff2" as="font" type="font/woff2" crossorigin> 131
131<script> 132 // Die Funnel-Seiten nutzen Space Grotesk nicht; dort kostete das Vorladen 133 // nur Bandbreite vor dem ersten Bild (05.10.2026). Inter bleibt fuer den 134 // Cookie-Banner, der auch dort in der ersten Ansicht steht. 135 if (!/^\/(repscan|ki-scan|ki-analyse)\/?$/.test(location.pathname)) { 136 (function () { 137 var link = document.createElement('link'); 138 link.rel = 'preload'; link.as = 'font'; link.type = 'font/woff2'; link.crossOrigin = 'anonymous'; 139 link.href = '/fonts/space-grotesk-600.woff2'; 140 document.head.appendChild(link); 141 })(); 142 } 143 </script>
143 144 <style> 145 @font-face { 146 font-family: 'Inter'; 147 font-style: normal; 148 font-weight: 400; 149 font-display: swap; 150 src: url('/fonts/inter-400.woff2') format('woff2'); 151 } 152 153 @font-face { 154 font-family: 'Inter'; 155 font-style: normal; 156 font-weight: 500; 157 font-display: swap; 158 src: url('/fonts/inter-500.woff2') format('woff2'); 159 } 160 161 @font-face { 162 font-family: 'Inter'; 163 font-style: normal; 164 font-weight: 600; 165 font-display: swap; 166 src: url('/fonts/inter-600.woff2') format('woff2'); 167 } 168 169 @font-face { 170 font-family: 'Poppins'; 171 font-style: normal; 172 font-weight: 600; 173 font-display: swap; 174 src: url('/fonts/poppins-600.woff2') format('woff2'); 175 } 176 177 @font-face { 178 font-family: 'Poppins'; 179 font-style: normal; 180 font-weight: 700; 181 font-display: swap; 182 src: url('/fonts/poppins-700.woff2') format('woff2'); 183 } 184 185 @font-face { 186 font-family: 'Space Grotesk'; 187 font-style: normal; 188 font-weight: 600; 189 font-display: swap; 190 src: url('/fonts/space-grotesk-600.woff2') format('woff2'); 191 } 192 193 @font-face { 194 font-family: 'Space Grotesk'; 195 font-style: normal; 196 font-weight: 700; 197 font-display: swap; 198 src: url('/fonts/space-grotesk-700.woff2') format('woff2'); 199 } 200 201 @font-face { 202 font-family: 'IBM Plex Sans'; 203 font-style: normal; 204 font-weight: 400; 205 font-display: swap; 206 src: url('/fonts/ibm-plex-sans-400.woff2') format('woff2'); 207 } 208 209 @font-face { 210 font-family: 'IBM Plex Sans'; 211 font-style: normal; 212 font-weight: 500; 213 font-display: swap; 214 src: url('/fonts/ibm-plex-sans-500.woff2') format('woff2'); 215 } 216 217 @font-face { 218 font-family: 'IBM Plex Sans'; 219 font-style: normal; 220 font-weight: 600; 221 font-display: swap; 222 src: url('/fonts/ibm-plex-sans-600.woff2') format('woff2'); 223 } 224 225 @font-face { font-family: 'Fraunces'; font-style: italic; font-weight: 300 700; font-display: swap; src: url('/fonts/fraunces-italic-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 226 @font-face { font-family: 'Fraunces'; font-style: italic; font-weight: 300 700; font-display: swap; src: url('/fonts/fraunces-italic-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 227 @font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 300 700; font-display: swap; src: url('/fonts/fraunces-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 228 @font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 300 700; font-display: swap; src: url('/fonts/fraunces-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 229 @font-face { font-family: 'Archivo'; font-style: normal; font-weight: 400 700; font-display: swap; src: url('/fonts/archivo-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 230 @font-face { font-family: 'Archivo'; font-style: normal; font-weight: 400 700; font-display: swap; src: url('/fonts/archivo-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 231 @font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 400 700; font-display: swap; src: url('/fonts/jetbrains-mono-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1D
231BF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } 232 @font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 400 700; font-display: swap; src: url('/fonts/jetbrains-mono-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } 233 </style> 234 235 <link rel="manifest" href="/manifest.json"> 236 237 <!-- Theme Color für Mobile Browser --> 238 <meta name="theme-color" content="#8B5CF6"> 239 <meta name="msapplication-TileColor" content="#8B5CF6"> 240 <meta name="msapplication-config" content="/browserconfig.xml"> 241
241<script type="module" crossorigin src="/assets/main-DhU5eqLE.js"></script>
241 242 <link rel="modulepreload" crossorigin href="/assets/vendor-react-aN6Dlr_y.js"> 243 <link rel="modulepreload" crossorigin href="/assets/vendor-utils-BkLtITBR.js"> 244 <link rel="modulepreload" crossorigin href="/assets/vendor-supabase-BRnnG8cy.js"> 245 <link rel="modulepreload" crossorigin href="/assets/vendor-icons-DRcc6iTl.js"> 246
246<script>(function(){if(!/^\/(repscan|ki-scan|ki-analyse)\/?$/.test(location.pathname))return;[["modulepreload","assets/RepScan-CCG2ODTO.js"],["modulepreload","assets/GlobalProgress-DArR471M.js"],["modulepreload","assets/PlatIcon-CYqOuFZD.js"],["modulepreload","assets/funnelTerminal-BeAuBEOO.js"],["modulepreload","assets/LoadErrorState-a4Iiw8GN.js"],["modulepreload","assets/PricingSection-C_31X_tS.js"],["modulepreload","assets/planData-Ch7aysZN.js"],["modulepreload","assets/useFunnelRun-VNAJNjLO.js"],["modulepreload","assets/functionError-BcEvMsBr.js"],["preload","assets/RepScan-DyZwgsuj.css"],["preload","assets/PlatIcon-m3oYcQKQ.css"],["preload","assets/PricingSection-FfgTr1i6.css"]].forEach(function(l){var e=document.createElement('link');e.rel=l[0];if(l[0]==='preload')e.as='style';e.crossOrigin='';e.href='/'+l[1];document.head.appendChild(e);});})();</script>
246 247 <link rel="stylesheet" crossorigin href="/assets/main-DnxeSytT.css"> 248</head> 249 250<body> 251 <!-- SEO: Strukturierter Inhalt für Crawler im initialen HTML --> 252 <noscript> 253 <h1>Empfohlen von KI, auf Autopilot.</h1> 254 <p>OnRep AI zeigt dir, wann ChatGPT, Claude und Co. dich empfehlen, und sorgt automatisch dafür, dass es öfter passiert.</p> 255 </noscript> 256 <!-- Structured Data für SEO --> 257
257<script type="application/ld+json"> 258 { 259 "@context": "https://schema.org", 260 "@type": "WebSite", 261 "name": "OnRep AI", 262 "url": "https://onrep.ai", 263 "description": "OnRep AI zeigt dir, wann ChatGPT, Claude und Co. dich empfehlen, und sorgt automatisch dafür, dass es öfter passiert.", 264 "potentialAction": { 265 "@type": "SearchAction", 266 "target": "https://onrep.ai/?q={search_term_string}", 267 "query-input": "required name=search_term_string" 268 } 269 } 270 </script>
270 271
271<script type="application/ld+json"> 272 { 273 "@context": "https://schema.org", 274 "@type": "Organization", 275 "name": "OnRep AI", 276 "url": "https://onrep.ai", 277 "logo": "https://onrep.ai/lovable-uploads/onrep-logo-192.png", 278 "description": "OnRep AI zeigt dir, wann ChatGPT, Claude und Co. dich empfehlen, und sorgt automatisch dafür, dass es öfter passiert.", 279 "sameAs": [] 280 } 281 </script>
281 282 <div id="root"></div> 283</body> 284 285</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.