PageSourceSearch

https://app.ruit.es/login?utm_source=ruit.es&utm_medium=referral&u…&utm_content=header_login&lang=es

html ruit.es collected 2026-10-01 23:52:18 UTC 14,148 bytes, 47 lines download raw bytes

1<!doctype html><html lang="es"><base href="/"><meta name="viewport" content="width=device-width,initial-scale=1"><meta charset="UTF-8"><meta content="IE=Edge" http-equiv="X-UA-Compatible"><title>Ruit · Tu panel para vender en Wallapop, Vinted y eBay</title><meta name="description" content="Publica una vez en Wallapop, Vinted, eBay y más, sincroniza el stock y centraliza los mensajes en una bandeja. Entra en tu cuenta de Ruit."><link rel="canonical" href="https://app.ruit.es/?lang=es" />
2    <link rel="alternate" hreflang="x-default" href="https://app.ruit.es/" />
3    <link rel="alternate" hreflang="en" href="https://app.ruit.es/" />
4    <link rel="alternate" hreflang="es" href="https://app.ruit.es/?lang=es" />
5    <link rel="alternate" hreflang="fr" href="https://app.ruit.es/?lang=fr" />
6    <link rel="alternate" hreflang="it" href="https://app.ruit.es/?lang=it" />
7    <link rel="alternate" hreflang="de" href="https://app.ruit.es/?lang=de" />
8    <link rel="alternate" hreflang="nl" href="https://app.ruit.es/?lang=nl" />
9    <link rel="alternate" hreflang="pl" href="https://app.ruit.es/?lang=pl" />
10    <link rel="alternate" hreflang="pt" href="https://app.ruit.es/?lang=pt" /><meta name="theme-color" content="#35bd00"><meta property="og:type" content="website"><meta property="og:site_name" content="Ruit"><meta property="og:url" content="https://app.ruit.es/?lang=es"><meta property="og:title" content="Ruit · Tu panel para vender en Wallapop, Vinted y eBay"><meta property="og:description" content="Publica una vez en Wallapop, Vinted, eBay y más, sincroniza el stock y centraliza los mensajes en una bandeja. Entra en tu cuenta de Ruit."><meta property="og:image" content="https://app.ruit.es/og-image.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="Ruit"><meta property="og:locale" content="es_ES">
11    <meta property="og:locale:alternate" content="en_US" />
12    <meta property="og:locale:alternate" content="fr_FR" />
13    <meta property="og:locale:alternate" content="it_IT" />
14    <meta property="og:locale:alternate" content="de_DE" />
15    <meta property="og:locale:alternate" content="nl_NL" />
16    <meta property="og:locale:alternate" content="pl_PL" />
17    <meta property="og:locale:alternate" content="pt_PT" /><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Ruit · Tu panel para vender en Wallapop, Vinted y eBay"><meta name="twitter:description" content="Publica una vez en Wallapop, Vinted, eBay y más, sincroniza el stock y centraliza los mensajes en una bandeja. Entra en tu cuenta de Ruit."><meta name="twitter:image" content="https://app.ruit.es/og-image.png"><meta name="twitter:image:alt" content="Ruit">
17<script type="application/ld+json">
18      {
19        "@context": "https://schema.org",
20        "@graph": [
21          {
22            "@type": "Organization",
23            "@id": "https://ruit.es/#organization",
24            "name": "Ruit",
25            "url": "https://ruit.es",
26            "logo": {
27              "@type": "ImageObject",
28              "url": "https://ruit.es/images/logo.png"
29            }
30          },
31          {
32            "@type": "SoftwareApplication",
33            "@id": "https://app.ruit.es/#webapp",
34            "name": "Ruit",
35            "url": "https://app.ruit.es/",
36            "applicationCategory": "BusinessApplication",
37            "operatingSystem": "Web, Android, iOS",
38            "inLanguage": "es-ES",
39            "description": "Publica una vez en Wallapop, Vinted, eBay y más, sincroniza el stock y centraliza los mensajes en una bandeja. Entra en tu cuenta de Ruit.",
40            "image": "https://app.ruit.es/og-image.png",
41            "publisher": {
42              "@id": "https://ruit.es/#organization"
43            }
44          }
45        ]
46      }
47    </script>
47<script>!function(){var n=null;Object.defineProperty(window,"onGoogleLibraryLoad",{configurable:!0,get:function(){return n},set:function(e){if("function"==typeof e){var o=!1;n=function(){if(!o)return o=!0,e()}}else n=e}})}()</script>
47<script src="https://accounts.google.com/gsi/client" async defer="defer"></script>
47<script src="zstd.js" defer="defer"></script>
47<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/ort.min.js" defer="defer"></script>
47<meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-mobile-web-app-title" content="Ruit"><link rel="apple-touch-icon" href="icons/Icon-192.png"><link rel="icon" type="image/png" href="favicon.png"><link rel="manifest" href="manifest.es.json"><link rel="preconnect" href="https://www.gstatic.com" crossorigin><link rel="preconnect" href="https://accounts.google.com" crossorigin><link rel="preconnect" href="https://cdn.jsdelivr.net"><link rel="preload" as="fetch" href="assets/assets/fonts/NotoColorEmoji/NotoColorEmoji-subset.ttf" crossorigin><link rel="preload" as="fetch" href="assets/assets/fonts/Inter/Inter-subset.ttf" crossorigin><style>body,html{margin:0;padding:0;background:#fff;height:100%;overflow:hidden}#splash{position:fixed;top:0;left:0;width:100vw;height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fff;z-index:9999;gap:64px}#splash img{max-width:20%;max-height:20%}.spinner{width:20px;height:20px;border:2px solid #35bd00;border-top:2px solid transparent;border-radius:50%;animation:spin .75s linear infinite}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><div id="splash"><img src="assets/assets/images/ruit.png" alt="ruit logo"><div class="spinner"></div></div>
47<script>const GOOGLE_CLIENT_ID="617898041894-2p49rr7r3a414b86tr1ocbl900ratjqh.apps.googleusercontent.com",isVanillaChrome=/Chrome\//.test(navigator.userAgent)&&!/Edg\/|Brave|OPR\//.test(navigator.userAgent),FEDCM_SUPPORTED=isVanillaChrome&&"IdentityCredential"in window;function getApiUrl(){const e=window.location.hostname;return"app.ruit.es"===e?"https://api.ruit.es":"dev-app.ruit.es"===e?"https://dev-api.ruit.es":"dev2-app.ruit.es"===e?"https://dev2-api.ruit.es":"https://dev-api.ruit.es"}function handleGoogleCredential(e){console.log("🔐 Google credential received"),window.dispatchEvent(new CustomEvent("google-signin-credential",{detail:{credential:e.credential}}))}console.log("[GSI] FedCM supported:",FEDCM_SUPPORTED),function(){var e=document.createElement("link");e.rel="preconnect",e.href=getApiUrl(),e.crossOrigin="anonymous",document.head.appendChild(e)}(),window.initGoogleSignIn=function(){if("undefined"==typeof google||!google.accounts||!google.accounts.id)return console.warn("[GSI] SDK not loaded yet"),!1;const e={client_id:GOOGLE_CLIENT_ID,callback:handleGoogleCredential,use_fedcm_for_prompt:FEDCM_SUPPORTED,use_fedcm_for_button:FEDCM_SUPPORTED};return FEDCM_SUPPORTED||(e.ux_mode="redirect",e.login_uri=getApiUrl()+"/api/v1/auth/google/redirect/",console.log("[GSI] Using redirect mode for non-FedCM browser, login_uri:",e.login_uri)),google.accounts.id.initialize(e),window._gsiInitialized=!0,console.log("✅ Google Sign-In initialized",FEDCM_SUPPORTED?"with FedCM":"with redirect"),!0};const GSI_RENDER_BUDGET_MS=15e3,GSI_LATE_WATCH_CEILING_MS=12e4,GSI_LATE_WATCH_INTERVAL_MS=1e3;function gsiButtonIsPainted(e){const t=e&&e.firstElementChild;if(!t)return!1;const n=t.getBoundingClientRect();return n.width>0&&n.height>0}function gsiReportGiveUp(e,t,n,o){if(window._gsiGaveUp[e])return;window._gsiGaveUp[e]=!0;const i=gsiButtonIsPainted(t),r=Date.now()-o,d={elementId:e,elementFound:!!t,sdkReady:!!n,painted:i,msWaited:r,summary:"elementFound="+!!t+" sdkReady="+!!n+" painted="+i+" elementId="+e+" msWaited="+r};console.error("[GSI] Giving up rendering sign-in button:",d.summary),window.dispatchEvent(new CustomEvent("google-button-render-failed",{detail:d}))}function gsiReportRecoveryIfNeeded(e,t){const n=!!window._gsiGaveUp[e];if(gsiStopLateWatch(e),!n)return;const o=Date.now()-t,i={elementId:e,msWaited:o,summary:"elementId="+e+" msWaited="+o};console.log("[GSI] Sign-in button recovered after give-up:",i.summary),window.dispatchEvent(new CustomEvent("google-button-render-recovered",{detail:i}))}function gsiWatchAfterGiveUp(e,t,n){if(window._gsiLateWatchers[e])return;const o=Date.now(),i=window._gsiRenderStartedAt[e]||o;window._gsiLateWatchers[e]=setInterval(function(){if(Date.now()-o>12e4)return void gsiStopLateWatch(e);const r=document.getElementById(e);r&&(gsiButtonIsPainted(r)?gsiReportRecoveryIfNeeded(e,i):window.renderGoogleButton(e,t,n,Date.now()+1e3))},1e3)}function gsiStopLateWatch(e){window._gsiLateWatchers[e]&&(clearInterval(window._gsiLateWatchers[e]),delete window._gsiLateWatchers[e]),delete window._gsiRenderStartedAt[e],delete window._gsiGaveUp[e]}window._gsiRenderStartedAt=window._gsiRenderStartedAt||{},window._gsiLateWatchers=window._gsiLateWatchers||{},window._gsiGaveUp=window._gsiGaveUp||{},window.renderGoogleButton=function(e,t,n,o){const i=window._gsiRenderStartedAt[e]||(window._gsiRenderStartedAt[e]=Date.now());o=o||i+15e3;const r=document.getElementById(e),d="undefined"!=typeof google&&google.accounts&&google.accounts.id;if(r&&d&&window._gsiInitialized){if(gsiButtonIsPainted(r))return void gsiReportRecoveryIfNeeded(e,i);0===r.childElementCount&&google.accounts.id.renderButton(r,{type:"standard",theme:"outline",size:"large",text:n||"signin_with",locale:t||void 0,shape:"pill",logo_alignment:"center",width:280})}else d&&!window._gsiInitialized&&window.initGoogleSignIn();Date.now()<o?setTimeout(()=>window.renderGoogleButton(e,t,n,o),100):(gsiReportGiveUp(e,r,d,i),gsiWatchAfterGiveUp(e,t,n))},function(){const e=setInterval(function(){"undefined"!=typeof google&&google.accounts&&google.accounts.id&&(clearInterval(e),window._gsiInitialized||window.initGoogleSignIn())},100);setTimeout(()=>clearInterval(e),1e4)}(),function(){const e=window.location.hash;if(!e||!e.includes("google_tokens"))return;console.log("[GSI] Detected Google redirect tokens in URL");const t=new URLSearchParams(e.substring(e.indexOf("&")+1)),n=t.get("access"),o=t.get("refresh");n&&o?(console.log("[GSI] Tokens extracted successfully"),window.googleRedirectTokens={access:n,refresh:o},window.dispatchEvent(new CustomEvent("google-redirect-tokens",{detail:{access:n,refresh:o}})),history.replaceState(null,"",window.location.pathname+window.location.search)):console.warn("[GSI] Tokens missing from redirect")}(),function(){const e=new URLSearchParams(window.location.search),t=e.get("error");
47if(t){console.error("[GSI] Google redirect error:",t),window.googleRedirectError=t,window.dispatchEvent(new CustomEvent("google-redirect-error",{detail:{error:t}})),e.delete("error");const n=e.toString(),o=window.location.pathname+(n?"?"+n:"");history.replaceState(null,"",o)}}()</script>
47<script src="flutter_bootstrap.js" defer="defer"></script>
47<script>window.addEventListener("flutter-first-frame",()=>{const e=document.getElementById("splash");e&&(e.style.transition="opacity 0.4s ease",e.style.opacity="0",setTimeout(()=>e.remove(),400))})</script>
47<script>"serviceWorker"in navigator&&window.addEventListener("load",function(){navigator.serviceWorker.register("/firebase-messaging-sw.js").then(function(e){console.log("✅ Firebase Service Worker registered:",e.scope)}).catch(function(e){console.error("❌ Firebase Service Worker registration failed:",e)})})</script>
47<script>window._pendingPushTaps=window._pendingPushTaps||[],window._drainPushTaps=function(){if(window._onPushTap){var n=window._pendingPushTaps;window._pendingPushTaps=[];for(var i=0;i<n.length;i++)window._onPushTap(n[i])}},"serviceWorker"in navigator&&navigator.serviceWorker.addEventListener("message",function(n){if(n.data)if("push_action"===n.data.type&&window._onPushAction)window._onPushAction(n.data.action);else if("push_tap"===n.data.type){var i=JSON.stringify(n.data.data||{});window._onPushTap?window._onPushTap(i):window._pendingPushTaps.push(i)}})</script>
47<script>window.chatwootSettings={hideMessageBubble:!0,position:"right",type:"standard"},window.ruitSetChatwootLocale=function(o){"string"==typeof o&&""!==o&&(window.chatwootSettings.locale=o,window.$chatwoot&&"function"==typeof window.$chatwoot.setLocale&&window.$chatwoot.setLocale(o))},window.ruitOpenChatwootConversation=function(){var o=[400,1200,3e3,6e3],t=!1;function n(){if(window.$chatwoot&&!0===window.$chatwoot.isOpen){t=!0;try{window.$chatwoot.toggle("close"),window.$chatwoot.toggle("open")}finally{t=!1}}}return window.addEventListener("chatwoot:closed",function(){t||"function"!=typeof window._onChatwootClosed||window._onChatwootClosed()}),function(){window.$chatwoot&&"function"==typeof window.$chatwoot.toggle?(window.$chatwoot.toggle("open"),o.forEach(function(o){window.setTimeout(n,o)})):console.error("[Chatwoot] cannot open the chat: the SDK is not on the page")}}(),window.ruitLoadChatwoot=function(){var o="https://chatwoot.ruit.es",t=null;return function(){return t||((t=new Promise(function(t,n){if(window.$chatwoot)t();else{var e=!1,w=null,i=setTimeout(function(){r("SDK request never completed in 30000ms")},3e4);window.addEventListener("chatwoot:ready",d,{once:!0});var c=document.createElement("script");c.src=o+"/packs/js/sdk.js",c.defer=!0,c.async=!0,c.onerror=function(){r("SDK failed to load from "+o)},c.onload=function(){if(window.$chatwoot)d();else{w=setTimeout(function(){window.$chatwoot?d():r("SDK loaded but chatwoot:ready never fired in 20000ms")},2e4);try{window.chatwootSDK.run({websiteToken:"ehpE5SCDpQmThooARt9UGZW6",baseUrl:o})}catch(o){r("chatwootSDK.run threw: "+o)}}},document.head.appendChild(c)}function a(){null!==w&&clearTimeout(w),null!==i&&clearTimeout(i),i=null}function d(){e||(e=!0,a(),t())}function r(o){e||(e=!0,a(),window.removeEventListener("chatwoot:ready",d),console.error("[Chatwoot] "+o),n(new Error(o)))}})).catch(function(){t=null}),t)}}(),window.addEventListener("flutter-first-frame",function(){function o(){window.ruitLoadChatwoot().catch(function(){})}"function"==typeof window.requestIdleCallback?window.requestIdleCallback(o,{timeout:1e4}):window.setTimeout(o,3e3)},{once:!0})</script>

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.