← back to Ventura Claw

server/public/login.html

63 lines

<!doctype html>
<html lang="en"><head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="theme-color" content="#0e0e10" />
<title>VenturaClaw — AI agent for 67 business connectors</title>
<meta name="description" content="Connect Stripe, Shopify, Slack, and 53 more SaaS tools to one AI command line. Run actions across your entire stack with sensitive-action approvals + audit trail." />
<link rel="canonical" href="https://venturaclaw.com/" />
<meta property="og:type" content="website" />
<meta property="og:title" content="VenturaClaw — AI agent for 67 business connectors" />
<meta property="og:description" content="Connect Stripe, Shopify, Slack, and 53 more SaaS tools to one AI command line." />
<meta property="og:url" content="https://venturaclaw.com/" />
<meta property="og:image" content="https://venturaclaw.com/static/og-cover.png" />
<meta property="og:site_name" content="VenturaClaw" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="VenturaClaw — AI agent for 67 business connectors" />
<meta name="twitter:description" content="Connect Stripe, Shopify, Slack, and 53 more SaaS tools to one AI command line." />
<meta name="twitter:image" content="https://venturaclaw.com/static/og-cover.png" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"SoftwareApplication","name":"VenturaClaw","applicationCategory":"BusinessApplication","description":"AI agent that runs actions across 67 business connectors including Stripe, Shopify, Slack, Cloudflare, Notion, HubSpot, and Discord.","operatingSystem":"Web","url":"https://venturaclaw.com","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"publisher":{"@type":"Organization","name":"Steve Abrams","email":"info@venturaclaw.com"}}
</script>
<link rel="stylesheet" href="/static/style.css" />
</head><body>
<main style="min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px">
<div class="signin-card">
  <div class="brand">
    <div class="logo-dot"></div>
    <div>
      <div class="brand-name">Ventura<em style="font-style:italic;color:var(--gold)">Claw</em></div>
      <div class="brand-sub">Connected Operations</div>
    </div>
  </div>
  <h2>Sign <em style="font-style:italic;color:var(--gold)">in</em></h2>
  <div class="sub">67 connectors. One command.</div>
  <form id="f" style="display:flex;flex-direction:column;gap:12px">
    <input id="email" placeholder="email" required />
    <input id="password" placeholder="password" type="password" required />
    <button type="submit" class="btn btn-primary" style="justify-content:center;padding:12px 18px">Sign in</button>
    <div id="err" style="color:var(--bad);font-family:var(--mono);font-size:11px;letter-spacing:.06em;display:none"></div>
  </form>
  <p style="font-family:var(--mono);font-size:10px;letter-spacing:.08em;color:var(--ink-mute);margin-top:32px;line-height:1.7;border-top:1px solid var(--rule);padding-top:20px">
    All 67 connectors pre-wired. After login your chat is connected and ready.<br>
    <span style="color:var(--ink-faint)">Access by invite — contact <a href="mailto:steve@designerwallcoverings.com" style="color:inherit;text-decoration:underline">steve@designerwallcoverings.com</a> to request credentials.</span>
  </p>
</div>
</main>
<div class="footer">VenturaClaw</div>
<script>
const f = document.getElementById('f'), err = document.getElementById('err');
f.addEventListener('submit', async e => {
  e.preventDefault();
  err.style.display = 'none';
  const r = await fetch('/api/auth/login', {
    method: 'POST', headers: {'content-type':'application/json'},
    body: JSON.stringify({ email: email.value, password: password.value })
  });
  const d = await r.json();
  if (r.ok) location.href = d.role === 'admin' ? '/admin' : '/chat';
  else { err.textContent = d.error || 'login failed'; err.style.display = 'block'; }
});
</script>
</body></html>