1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <!-- Required meta tags --> 6 <meta charset="utf-8"> 7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 8 9 <title>Sign in or create your account | StartupBase</title> 10 11 <!-- CSRF Protection --> 12 <meta name="_csrf" content="q_hmYfRU1UFlqbBoPkIG0iSTw4UxrBkShzTKXWKTblwKXzJuk5wEU8UxtCJImYENX28y5Eer7uQAlHg_twf6aleiWGg9bQda" /> 13 <meta name="_csrf_header" content="X-XSRF-TOKEN" /> 14 15 16 17 <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"> 18 19 <link rel="canonical" href="https://startupbase.io/login"> 20 <link rel="alternate" type="application/rss+xml" title="StartupBase Blog RSS" href="/rss.xml"> 21 <link rel="alternate" type="application/atom+xml" title="StartupBase Blog Atom" href="/atom.xml"> 22 23 24
24<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://startupbase.io/#organization","name":"StartupBase","alternateName":"StartupBase.io","url":"https://startupbase.io","foundingDate":"2017","founder":{"@type":"Person","@id":"https://startupbase.io/#founder","name":"Atta","url":"https://attacomsian.com","sameAs":["https://x.com/attacomsian"]},"description":"StartupBase is a product launch platform and Product Hunt alternative where founders, indie makers, and AI tool creators launch products, get discovered by early adopters, and build long-term visibility.","logo":{"@type":"ImageObject","@id":"https://startupbase.io/#logo","url":"https://startupbase.io/img/ico/web-app-manifest-512x512.png"},"knowsAbout":["Product launches","Startup discovery","SaaS products","AI tools","Indie makers","Product Hunt alternatives"],"sameAs":["https://x.com/startupbaseio","https://www.instagram.com/startupbaseio","https://www.threads.net/@startupbaseio","https://www.linkedin.com/company/startupbaseio"],"contactPoint":{"@type":"ContactPoint","contactType":"customer support","email":"[email protected]"}},{"@type":"WebSite","@id":"https://startupbase.io/#website","name":"StartupBase","url":"https://startupbase.io","publisher":{"@id":"https://startupbase.io/#organization"}}]}</script>
24 25 26 27 <link rel="preconnect" href="https://statics.startupbase.io"> 28 <link rel="preconnect" href="https://fonts.googleapis.com"> 29 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 30 <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin> 31 32 <!-- Bootstrap Fonts --> 33 <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css" 34 rel="preload" as="style"> 35 <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css" 36 rel="stylesheet" media="print" onload="this.media='all'"> 37 38 <!-- Google Fonts --> 39 <link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Geist:ital,wght@0,100..900;1,100..900&family=Geist+Mono:[email protected]&family=Caveat:[email protected]&family=Zeyada&family=Courgette&display=swap" 40 rel="preload" as="style"> 41 <link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Geist:ital,wght@0,100..900;1,100..900&family=Geist+Mono:[email protected]&
41family=Caveat:[email protected]&family=Zeyada&family=Courgette&display=swap" 42 rel="stylesheet" media="print" onload="this.media='all'"> 43 44 <noscript> 45 <link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css" 46 rel="stylesheet" media="all"> 47 <link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Geist:ital,wght@0,100..900;1,100..900&family=Geist+Mono:[email protected]&family=Caveat:[email protected]&family=Zeyada&family=Courgette&display=swap" 48 rel="stylesheet" media="all"> 49 </noscript> 50 51 <!--Custom Styles--> 52 <link href="/css/styles.min.1790567378260.css" 53 rel="stylesheet" media="all"> 54 55 56 <link rel="icon" type="image/png" href="/img/ico/favicon-96x96.png" sizes="96x96" /> 57 <link rel="icon" type="image/svg+xml" href="/img/ico/favicon.svg" /> 58 <link rel="shortcut icon" href="/img/ico/favicon.ico" /> 59 <link rel="apple-touch-icon" sizes="180x180" href="/img/ico/apple-touch-icon.png" /> 60 <meta name="apple-mobile-web-app-title" content="StartupBase" /> 61 <link rel="manifest" href="/img/ico/site.webmanifest" /> 62 63 64 <!-- Google tag (gtag.js) -->
vendor: 73 bytes, lines 64-65
64 65 <script async src="https://www.googletagmanager.com/gtag/js?id=
65G-PFVLSPPFCH
vendor: 21 bytes, lines 65-66
65"></script> 66
66<script> 67
vendor: 164 bytes, lines 67-71
67window.dataLayer = window.dataLayer || []; 68 function gtag(){dataLayer.push(arguments);} 69 gtag('js', new Date()); 70 71 gtag('config', '
71G-PFVLSPPFCH
vendor: 17 bytes, lines 71-73
71'); 72 73
73window.startupBaseAnalytics = (function () { 74 function toSnakeCase(value) { 75 return String(value || "") 76 .replace(/^[A-Z]/, function (match) { 77 return match.toLowerCase(); 78 }) 79 .replace(/[A-Z]/g, function (match) { 80 return "_" + match.toLowerCase(); 81 }); 82 } 83 84 function normalizeValue(value) { 85 if (typeof value !== "string") { 86 return value; 87 } 88 89 const trimmed = value.trim(); 90 if (trimmed === "true") { 91 return true; 92 } 93 if (trimmed === "false") { 94 return false; 95 } 96 if (/^-?\d+(\.\d+)?$/.test(trimmed)) { 97 return Number(trimmed); 98 } 99 100 return trimmed.substring(0, 120); 101 } 102 103 function cleanParams(params) { 104 const cleaned = {}; 105 Object.keys(params || {}).forEach(function (key) { 106 const value = params[key]; 107 if (value === undefined || value === null || value === "") { 108 return; 109 } 110 cleaned[key] = normalizeValue(value); 111 }); 112 return cleaned; 113 } 114 115 function readJsonParams(value) { 116 if (!value) { 117 return {}; 118 } 119 120 try { 121 const parsed = JSON.parse(value); 122 return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {}; 123 } catch (_error) { 124 return {}; 125 } 126 } 127 128 function elementText(element) { 129 const text = element.getAttribute("aria-label") 130 || element.getAttribute("title") 131 || element.innerText 132 || element.value 133 || ""; 134 135 return String(text).replace(/\s+/g, " ").trim().substring(0, 120); 136 } 137 138 function addLinkParams(element, params) { 139 const href = element.getAttribute("href"); 140 if (!href || href.indexOf("#") === 0) { 141 return; 142 } 143 144 if (href.indexOf("mailto:") === 0) { 145 params.link_domain = "email"; 146 params.outbound = true; 147 return; 148 } 149 150 try { 151 const url = new URL(href, window.location.href); 152 params.link_domain = url.hostname; 153 params.outbound = url.origin !== window.location.origin; 154 if (url.origin === window.location.origin) { 155 params.link_path = url.pathname; 156 } 157 } catch (_error) { 158 // Ignore malformed href values. 159 } 160 } 161
162 function elementParams(element) { 163 const params = { 164 page_path: window.location.pathname 165 }; 166 167 if (element.id) { 168 params.element_id = element.id; 169 } 170 171 const text = elementText(element); 172 if (text) { 173 params.element_text = text; 174 } 175 176 if (element.dataset.network) { 177 params.network = element.dataset.network; 178 } 179 180 addLinkParams(element, params); 181 182 Object.keys(element.dataset || {}).forEach(function (key) { 183 if (key === "gaEvent" || key === "gaSubmitEvent" || key === "gaParams") { 184 return; 185 } 186 if (key.indexOf("ga") !== 0 || key.length <= 2) { 187 return; 188 } 189 190 params[toSnakeCase(key.substring(2))] = element.dataset[key]; 191 }); 192 193 return Object.assign(params, readJsonParams(element.dataset.gaParams)); 194 } 195 196 function track(eventName, params) { 197 const name = String(eventName || "").trim(); 198 if (!name || typeof gtag !== "function") { 199 return; 200 } 201 202 const payload = cleanParams(params); 203 if (!payload.transport_type) { 204 payload.transport_type = "beacon"; 205 } 206 207 gtag("event", name, payload); 208 } 209 210 document.addEventListener("click", function (event) { 211 const target = event.target && event.target.closest 212 ? event.target.closest("[data-ga-event]") 213 : null; 214 215 if (!target || target.disabled) { 216 return; 217 } 218
219 track(target.dataset.gaEvent, elementParams(target)); 220 }, true); 221 222 document.addEventListener("submit", function (event) { 223 const target = event.target && event.target.matches && event.target.matches("[data-ga-submit-event]") 224 ? event.target 225 : null; 226 227 if (!target) { 228 return; 229 } 230 231 track(target.dataset.gaSubmitEvent, elementParams(target)); 232 }, true); 233 234 return { 235 track: track 236 }; 237 })(); 238 </script>
238 239 240 241 <meta name="msvalidate.01" content="3DB770F4A810C935BDEFF665F0D70536" /> 242 <meta name="p:domain_verify" content="51e7ec6d6d985d4e7a911f52c0666434" /> 243 244 245 <meta name="description" content="Sign in to StartupBase, or create an account with Google, LinkedIn, or X to launch your product." /> 246 247 <meta name="twitter:card" content="summary_large_image" /> 248 <meta name="twitter:site" content="@startupbaseio" /> 249 <meta name="twitter:creator" content="@startupbaseio" /> 250 <meta name="twitter:title" content="Sign in or create your account | StartupBase" /> 251 <meta name="twitter:description" content="Sign in to StartupBase, or create an account with Google, LinkedIn, or X to launch your product." /> 252 <meta name="twitter:image" content="https://startupbase.io/img/banner.png?v4" /> 253 254 <meta property="og:title" content="Sign in or create your account | StartupBase" /> 255 <meta property="og:description" content="Sign in to StartupBase, or create an account with Google, LinkedIn, or X to launch your product." /> 256 <meta property="og:url" content="https://startupbase.io/login" /> 257 <meta property="og:type" content="website" /> 258 <meta property="og:site_name" content="startupbase.io" /> 259 <meta property="og:image" content="https://startupbase.io/img/banner.png?v4" /> 260 261</head> 262 263<body 264 class="bg-gradient-lightest-warning"> 265 266 <!--cookie consent--> 267 <!-- <div th:replace="~{fragments/cookies :: cookies}"></div> --> 268 269 <!--Exit Ghost Login--> 270 271 272 273 274 <nav class="navbar navbar-expand-lg navbar-light sticky-top bg-white py-3"> 275 <div class="align-items-center container"> 276 <a class="navbar-brand mr-0 mr-lg-4" href="/" aria-label="StartupBase"> 277 <img src="/img/branding/icon.svg" alt="StartupBase" height="40" loading="lazy"> 278 </a> 279 280 <button aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation" 281 class="navbar-toggler bg-transparent" data-target="#navbarNav" data-toggle="collapse" type="button"> 282 <span data-lucide="text"></span> 283 </button> 284 <div class="collapse navbar-collapse" id="navbarNav"> 285 286 <ul class="navbar-nav d-lg-flex align-items-lg-center pt-0 ml-auto"> 287 <li class="nav-item mr-lg-3"> 288 <a class="btn btn-white border border-gray-200 btn-sm btn-pill mt-4 mt-lg-0" 289 href="/login" data-ga-event="login_cta_clicked" data-ga-source="nav"> 290 <span class="icon svg-icon-xs mr-1"> 291 <i data-lucide="log-in"></i> 292 </span> 293 Login 294 </a> 295 </li> 296 297 298 299 300 301 302 <li class="nav-item"> 303 <a class="btn btn-primary btn-sm btn-pill mt-4 mt-lg-0" href="/launch"> 304 <span class="icon svg-icon-xs mr-1"> 305 <i data-lucide="rocket"></i> 306 </span> 307 Launch 308 </a> 309 </li> 310 311 312 </ul> 313 </div> 314 </div> 315 </nav> 316 317 318 <section class="py-5 py-md-7"> 319 <div class="container"> 320 <div class="row bg-pattern-7"> 321 <div class="col-md-8 col-lg-5 mx-auto"> 322 <div class="card"> 323 <div class="card-body"> 324 325 326 327 328 329 330 <div id="login-social-panel"> 331 <h3 class="text-center">Welcome to StartupBase</h3> 332 <p class="font-size-ml text-muted text-center mb-4"> 333 Join a community of founders sharing their products and discovering what others 334 are building. 335 </p> 336 337 <div class="form-group mb-3"> 338 <a href="/auth/google?origin=" class="btn btn-white flex-center-center"> 339 <img src="/img/svg/social/google.svg" width="20" height="20" class="mr-2" alt="Google"> 340 Continue with Google 341 </a> 342 </div> 343 344 <div class="form-group mb-3"> 345 <a href="/auth/linkedin?origin=" class="btn btn-white flex-center-center"> 346 <img src="/img/svg/social/linkedin.svg" alt="LinkedIn" width="20" height="20" class="mr-2"> 347 Continue with LinkedIn 348 </a> 349 </div> 350 351 <div class="form-group mb-3"> 352 <a href="/auth/x?origin=" class="btn btn-white flex-center-center"> 353 <img src="/img/svg/social/x.svg" alt="X" width="18" height="18" class="mr-2"> 354 Continue with X 355 </a> 356 </div> 357 358 <div class="form-group mb-2"> 359 <button type="button" class="btn btn-white btn-block flex-center-center" id="continueWithEmailBtn"> 360 <img src="/img/svg/social/email.svg" alt="Email" width="20" height="20" class="mr-2"> 361 Sign in with Email 362 </button> 363 </div> 364 365 366 <p class="font-size-sm text-muted text-center mb-0"> 367 Email sign-in is for existing accounts. New here? Use Google, LinkedIn, or X above 368 — your account is created automatically. 369 </p> 370 </div> 371 372 <div class="d-none" id="login-email-panel"> 373 <input type="hidden" id="login-email-origin" value=""> 374 375 <div class="d-flex align-items-center justify-content-between mb-3"> 376 <h4 class="mb-0">Continue with email</h4> 377 <button type="button" class="btn btn-link link-muted font-weight-medium p-0 font-size-sm" 378 id="backToSocialBtn"> 379 <em class="bi bi-chevron-left mr-1"></em> Back 380 </button> 381 </div> 382 383 <p class="font-size-base text-muted mb-4" id="loginEmailRequestIntro"> 384 Enter the email address on your existing account and we'll send you a one-time 385 sign-in code. This does not create an account — to sign up, go back and 386 continue with Google, LinkedIn, or X. 387 </p> 388 389 <p class="font-size-base text-muted mb-4 d-none" id="loginEmailVerify
389Intro"> 390 Enter the verification code we sent to your email address. 391 </p> 392 393 <div id="login-email-notify"></div> 394 395 <div id="login-email-request-step"> 396 <form id="loginEmailRequestForm"> 397 <div class="form-group"> 398 <label for="login-email-address">Email address</label> 399 <input type="email" class="form-control" id="login-email-address" autocomplete="email" 400 placeholder="[email protected]"> 401 </div> 402 403 <button type="submit" class="btn btn-primary btn-block" id="loginEmailRequestBtn"> 404 Continue with Email 405 </button> 406 </form> 407 </div> 408 409 <div class="d-none" id="login-email-verify-step"> 410 <form id="loginEmailVerifyForm"> 411 <div class="form-group"> 412 <label for="login-email-otp">Verification code</label> 413 <input type="text" class="form-control" id="login-email-otp" inputmode="numeric" 414 autocomplete="one-time-code" maxlength="6" placeholder="Enter verification code"> 415 </div> 416 417 <button type="submit" class="btn btn-primary btn-block" id="loginEmailVerifyBtn"> 418 Verify and Continue 419 </button> 420 </form> 421 422 <div class="text-center mt-3"> 423 <a href="#" class="border-link link-muted font-size-sm" id="loginEmailResendBtn"> 424 Resend code 425 </a> 426 </div> 427 </div> 428 </div> 429 430 <p class="font-size-sm pt-4 text-center mb-0"> 431 By continuing, you agree to our 432 <a href="/terms" class="border-link font-weight-medium" target="_blank">Terms 433 of 434 Service</a> 435 & <a href="/privacy" class="border-link font-weight-medium" target="_blank">Privacy 436 Policy</a>. 437 </p> 438 439 </div> 440 </div> 441 </div> 442 </div> 443 </div> 444 </section> 445 446 447 448 449 450 451 452 453 454 <!-- Scroll Top --> 455 <div class="scroll-top bg-primary rounded-circle"> 456 <i class="bi bi-arrow-up" aria-hidden="true"></i> 457 </div> 458 459 460
460<script defer src="/js/scripts.min.1790567378260.js?v=1790567422256"></script>
460 461 462 463 464
464<script> 465 (function () { 466 window.onload = function () { 467 // Logout All 468 if ($('#logoutAll').length > 0 || $('#expiredAlert').length > 0) { 469 localStorage.setItem('logout-event', 'logout' + Math.random()); 470 } 471 } 472 })() 473 </script>
473 474
475<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"61b2839f2f8244888b21b582c1fc1b24","r":1,"spa":2}' crossorigin="anonymous"></script>
475 476</body> 477 478</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.