PageSourceSearch

https://www.getminerhub.com/

html getminerhub.com collected 2026-09-24 14:43:37 UTC 6,252 bytes, 111 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
4    <meta charset="UTF-8" />
5    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6    
7    <!-- Preconnect to backend for faster API calls -->
8    <link rel="preconnect" href="https://iovnyexapjybvvmrtpgy.supabase.co" crossorigin />
9    <link rel="dns-prefetch" href="https://iovnyexapjybvvmrtpgy.supabase.co" />
10
11    <!-- Favicon -->
12    <link rel="icon" type="image/png" href="/favicon.png" />
13    
14    <meta name="theme-color" content="#0a0a0a" />
15
16    <!-- Pinta o tema do board salvo ANTES do primeiro paint (evita o flash do
17         azul padrão para quem usa outro tema). O snapshot já vem resolvido
18         para claro/escuro; o React reaplica e corrige logo em seguida. -->
19    
19<script>
20      (function () {
21        try {
22          var vars = JSON.parse(localStorage.getItem('board-theme-vars') || 'null');
23          if (!vars || typeof vars !== 'object') return;
24          var el = document.documentElement;
25          for (var k in vars) {
26            if (/^--[a-z-]+$/.test(k) && typeof vars[k] === 'string') {
27              el.style.setProperty(k, vars[k]);
28            }
29          }
30        } catch (e) { /* sem snapshot: fica o default do CSS */ }
31      })();
32    </script>
32
33
34    <!-- SEO (defaults, overridden by react-helmet-async per page) -->
35    <title>MinerHub — Inteligência Competitiva para Anúncios</title>
36    <meta name="description" content="Mineração, análise e validação de anúncios em tempo real. Descubra ofertas vencedoras, monitore concorrentes e escale suas campanhas com dados." />
37    <meta name="author" content="MinerHub" />
38
39    <!-- Open Graph -->
40    <meta property="og:title" content="MinerHub — Inteligência Competitiva para Anúncios" />
41    <meta property="og:description" content="Mineração, análise e validação de anúncios em tempo real. Descubra ofertas vencedoras, monitore concorrentes e escale suas campanhas com dados." />
42    <meta property="og:type" content="website" />
43    <meta property="og:url" content="https://app.getminerhub.com" />
44    <meta property="og:site_name" content="MinerHub" />
45
46    <!-- Twitter -->
47    <meta name="twitter:card" content="summary_large_image" />
48    <meta name="twitter:title" content="MinerHub — Inteligência Competitiva para Anúncios" />
49    <meta name="twitter:description" content="Mineração, análise e validação de anúncios em tempo real. Descubra ofertas vencedoras, monitore concorrentes e escale suas campanhas com dados." />
50    
50<script type="module" crossorigin src="/assets/index-D5Z3iEdy.js"></script>
50
51    <link rel="modulepreload" crossorigin href="/assets/vendor-helmet-C1O7rrm-.js">
52    <link rel="modulepreload" crossorigin href="/assets/vendor-motion-C5FObYmw.js">
53    <link rel="modulepreload" crossorigin href="/assets/vendor-ui-DH9CwqBQ.js">
54    <link rel="modulepreload" crossorigin href="/assets/vendor-charts-sgZODtTB.js">
55    <link rel="modulepreload" crossorigin href="/assets/vendor-query-S2mA_Wh8.js">
56    <link rel="modulepreload" crossorigin href="/assets/vendor-react-B8Ra2ABZ.js">
57    <link rel="modulepreload" crossorigin href="/assets/vendor-flow-4lyVEpXM.js">
58    <link rel="modulepreload" crossorigin href="/assets/vendor-dnd-BVlXN6uJ.js">
59    <link rel="stylesheet" crossorigin href="/assets/index-BMb6Tzqt.css">
60  </head>
61
62  <body class="theme-pro">
63    <div id="root">
64      <!-- Inline loading spinner — shown instantly before React hydrates -->
65      <style>
66        .pre-spinner{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#f0f2f5;z-index:9999}
67        @media(prefers-color-scheme:dark){.pre-spinner{background:#0a0a0a}}
68        .pre-spinner-box{position:relative;width:48px;height:48px}
69        .pre-spinner-box img{position:absolute;inset:0;width:100%;height:100%;-o-object-fit:contain;object-fit:contain;opacity:0;animation:ps-frame 1.6s steps(1) infinite}
70        .pre-spinner-box img:nth-child(1){animation-delay:0s}
71        .pre-spinner-box img:nth-child(2){animation-delay:.4s}
72        .pre-spinner-box img:nth-child(3){animation-delay:.8s}
73        .pre-spinner-box img:nth-child(4){animation-delay:1.2s}
74        @keyframes ps-frame{0%{opacity:1}25%,100%{opacity:0}}
75      </style>
76      <div class="pre-spinner" id="pre-spinner">
77        <div class="pre-spinner-box">
78          <img src="/images/spinner/s1.png" alt="" width="48" height="48"/>
79          <img src="/images/spinner/s2.png" alt="" width="48" height="48"/>
80          <img src="/images/spinner/s3.png" alt="" width="48" height="48"/>
81          <img src="/images/spinner/s4.png" alt="" width="48" height="48"/>
82        </div>
83        <p id="pre-spinner-text" style="margin-top:16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;color:#8b8fa3;letter-spacing:.02em">Loading...</p>
84      </div>
85      
85<script>
86        (function(){var p=window.location.pathname,t=document.getElementById('pre-spinner-text');if(!t)return;var l='';if(p.startsWith('/pt'))l='pt';else if(p.startsWith('/es'))l='es';else{try{var s=localStorage.getItem('preferred-language');if(s==='pt'||s==='es')l=s;}catch(e){}}if(l==='pt')t.textContent='Carregando...';else if(l==='es')t.textContent='Cargando...';})();
87      </script>
87
88    </div>
89    
89<script>
90      // PWA REMOVIDO — mata qualquer Service Worker legado e limpa os caches
91      // em toda carga (sem trava de sessao). Recarrega uma unica vez se achou SW.
92      if ('serviceWorker' in navigator) {
93        navigator.serviceWorker.getRegistrations().then(function(regs) {
94          if (regs.length === 0) return;
95          Promise.all(regs.map(function(r) { return r.unregister(); }))
96            .then(function() {
97              return (window.caches ? caches.keys().then(function(names) {
98                return Promise.all(names.map(function(n) { return caches.delete(n); }));
99              }) : Promise.resolve());
100            })
101            .then(function() {
102              if (!sessionStorage.getItem('sw-killed')) {
103                sessionStorage.setItem('sw-killed', '1');
104                window.location.reload();
105              }
106            });
107        });
108      }
109    </script>
109
110  </body>
111</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.