<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-9DTK945WKB"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-9DTK945WKB');
</script>
<!-- End Google Analytics -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>United Main — Main Street, Upgraded</title>
<meta name="description" content="United Main connects Stoneham's local businesses into a unified discovery and commerce network. Be found. Be chosen. Be local.">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="icon" type="image/png" sizes="32x32" href="/icon-192.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">
<meta name="theme-color" content="#1a1612">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,900;1,700&family=DM+Sans:wght@300;400;500&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
  :root {
    --ink: #1a1612;
    --paper: #f5f0e8;
    --amber: #d4860a;
    --amber-light: #f0a830;
    --amber-pale: #fdf3dc;
    --stone: #6b6058;
    --rule: #d4c8b4;
    --white: #fffdf8;
  }

  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

  html { scroll-behavior: smooth; }

  body {
    font-family: 'DM Sans', sans-serif;
    background: var(--ink);
    color: var(--paper);
    overflow-x: hidden;
  }

  /* ── NOISE OVERLAY ── */
  body::before {
    content: '';
    position: fixed;
    inset: 0;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.04'/%3E%3C/svg%3E");
    pointer-events: none;
    z-index: 1000;
    opacity: 0.5;
  }

  /* ── NAV ── */
  nav {
    position: fixed;
    top: 0; left: 0; right: 0;
    z-index: 100;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 1.25rem 2.5rem;
    background: rgba(26,22,18,0.85);
    backdrop-filter: blur(12px);
    border-bottom: 1px solid rgba(212,200,180,0.12);
  }

  .nav-logo {
    font-family: 'Playfair Display', serif;
    font-size: 1.15rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--amber-light);
    text-decoration: none;
  }

  .nav-logo span {
    color: var(--paper);
    opacity: 0.6;
    font-style: italic;
    font-weight: 400;
  }

  .nav-links {
    display: flex;
    gap: 2rem;
    list-style: none;
  }

  .nav-links a {
    color: var(--paper);
    opacity: 0.65;
    text-decoration: none;
    font-size: 0.8rem;
    font-weight: 500;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    transition: opacity 0.2s;
  }

  .nav-links a:hover { opacity: 1; }

  .nav-cta {
    background: var(--amber);
    color: var(--ink) !important;
    opacity: 1 !important;
    padding: 0.45rem 1.1rem;
    border-radius: 2px;
    font-weight: 500 !important;
  }

  /* ── HERO ── */
  .hero {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: 8rem 2rem 5rem;
    position: relative;
    overflow: hidden;
  }

  .hero-bg {
    position: absolute;
    inset: 0;
    background:
      radial-gradient(ellipse 70% 60% at 60% 40%, rgba(212,134,10,0.12) 0%, transparent 70%),
      radial-gradient(ellipse 40% 40% at 20% 80%, rgba(212,134,10,0.06) 0%, transparent 60%);
  }

  .hero-grid-lines {
    position: absolute;
    inset: 0;
    background-image:
      linear-gradient(rgba(212,200,180,0.04) 1px, transparent 1px),
      linear-gradient(90deg, rgba(212,200,180,0.04) 1px, transparent 1px);
    background-size: 60px 60px;
  }

  .hero-content {
    position: relative;
    max-width: 900px;
    text-align: center;
  }

  .hero-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    font-family: 'DM Mono', monospace;
    font-size: 0.72rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--amber);
    margin-bottom: 1.75rem;
    opacity: 0;
    animation: fadeUp 0.7s ease 0.2s forwards;
  }

  .hero-eyebrow::before, .hero-eyebrow::after {
    content: '';
    width: 30px;
    height: 1px;
    background: var(--amber);
    opacity: 0.5;
  }

  .hero-headline {
    font-family: 'Playfair Display', serif;
    font-size: clamp(3.2rem, 8vw, 7rem);
    font-weight: 900;
    line-height: 1;
    letter-spacing: -0.02em;
    margin-bottom: 0.5rem;
    opacity: 0;
    animation: fadeUp 0.8s ease 0.35s forwards;
  }

  .hero-headline em {
    font-style: italic;
    color: var(--amber-light);
  }

  .hero-sub {
    font-family: 'Playfair Display', serif;
    font-size: clamp(1.5rem, 3vw, 2.4rem);
    font-weight: 700;
    font-style: italic;
    color: var(--stone);
    margin-bottom: 2rem;
    opacity: 0;
    animation: fadeUp 0.8s ease 0.5s forwards;
  }

  .hero-body {
    font-size: 1.05rem;
    font-weight: 300;
    color: rgba(245,240,232,0.7);
    max-width: 560px;
    margin: 0 auto 2.5rem;
    line-height: 1.7;
    opacity: 0;
    animation: fadeUp 0.8s ease 0.65s forwards;
  }

  .hero-actions {
    display: flex;
    gap: 1rem;
    justify-content: center;
    flex-wrap: wrap;
    opacity: 0;
    animation: fadeUp 0.8s ease 0.8s forwards;
  }

  .btn-primary {
    background: var(--amber);
    color: var(--ink);
    padding: 0.85rem 2rem;
    border-radius: 2px;
    font-weight: 500;
    font-size: 0.9rem;
    text-decoration: none;
    letter-spacing: 0.03em;
    transition: background 0.2s, transform 0.15s;
    display: inline-block;
  }

  .btn-primary:hover { background: var(--amber-light); transform: translateY(-1px); }

  .btn-ghost {
    border: 1px solid rgba(212,200,180,0.3);
    color: var(--paper);
    padding: 0.85rem 2rem;
    border-radius: 2px;
    font-weight: 400;
    font-size: 0.9rem;
    text-decoration: none;
    letter-spacing: 0.03em;
    transition: border-color 0.2s, transform 0.15s;
    display: inline-block;
  }

  .btn-ghost:hover { border-color: var(--amber); transform: translateY(-1px); }

  .hero-stat-bar {
    display: flex;
    justify-content: center;
    gap: 3rem;
    margin-top: 4rem;
    padding-top: 2.5rem;
    border-top: 1px solid rgba(212,200,180,0.1);
    opacity: 0;
    animation: fadeUp 0.8s ease 1s forwards;
  }

  .hero-stat { text-align: center; }
  .hero-stat-num {
    font-family: 'Playfair Display', serif;
    font-size: 2rem;
    font-weight: 700;
    color: var(--amber-light);
    display: block;
  }
  .hero-stat-label {
    font-size: 0.72rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--stone);
    margin-top: 0.25rem;
  }

  /* ── SECTION SHARED ── */
  section { position: relative; }

  .section-inner {
    max-width: 1100px;
    margin: 0 auto;
    padding: 5rem 2rem;
  }

  .section-label {
    font-family: 'DM Mono', monospace;
    font-size: 0.68rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--amber);
    margin-bottom: 1rem;
    display: block;
  }

  .section-title {
    font-family: 'Playfair Display', serif;
    font-size: clamp(2rem, 4vw, 3rem);
    font-weight: 700;
    line-height: 1.15;
    margin-bottom: 1.5rem;
  }

  hr.rule {
    border: none;
    border-top: 1px solid var(--rule);
    opacity: 0.2;
    margin: 0;
  }

  /* ── PROBLEM ── */
  .problem {
    background: var(--paper);
    color: var(--ink);
  }

  .problem .section-label { color: var(--amber); }
  .problem .section-title { color: var(--ink); }

  .problem-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 3rem;
    align-items: start;
    margin-top: 3rem;
  }

  .problem-copy {
    font-size: 1.05rem;
    line-height: 1.75;
    color: rgba(26,22,18,0.75);
  }

  .problem-copy p + p { margin-top: 1.25rem; }

  .problem-copy strong { color: var(--ink); font-weight: 500; }

  .audit-card {
    background: var(--ink);
    color: var(--paper);
    border-radius: 4px;
    padding: 1.75rem;
    font-family: 'DM Mono', monospace;
    font-size: 0.78rem;
    line-height: 1.8;
  }

  .audit-card-header {
    font-size: 0.65rem;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--amber);
    margin-bottom: 1rem;
    padding-bottom: 0.75rem;
    border-bottom: 1px solid rgba(212,200,180,0.1);
  }

  .audit-row {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.35rem 0;
    border-bottom: 1px solid rgba(212,200,180,0.05);
  }

  .audit-biz { opacity: 0.75; }

  .audit-badge {
    font-size: 0.65rem;
    padding: 0.15rem 0.5rem;
    border-radius: 2px;
    font-weight: 500;
  }

  .badge-fail { background: rgba(220,60,40,0.15); color: #e05540; }
  .badge-warn { background: rgba(212,134,10,0.15); color: var(--amber); }
  .badge-ok { background: rgba(60,180,100,0.15); color: #4ab87a; }

  /* ── HOW IT WORKS ── */
  .how {
    background: var(--ink);
  }

  .steps {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 2px;
    margin-top: 3rem;
  }

  .step {
    background: rgba(212,200,180,0.04);
    padding: 2.5rem 2rem;
    border: 1px solid rgba(212,200,180,0.08);
    position: relative;
    transition: border-color 0.25s;
  }

  .step:hover { border-color: rgba(212,134,10,0.35); }

  .step-num {
    font-family: 'Playfair Display', serif;
    font-size: 3.5rem;
    font-weight: 900;
    font-style: italic;
    color: rgba(212,134,10,0.15);
    line-height: 1;
    margin-bottom: 1rem;
  }

  .step-title {
    font-size: 1rem;
    font-weight: 500;
    margin-bottom: 0.75rem;
    color: var(--amber-light);
  }

  .step-body {
    font-size: 0.875rem;
    color: rgba(245,240,232,0.6);
    line-height: 1.7;
    font-weight: 300;
  }



  /* ── JOIN ── */
  .join {
    background: var(--ink);
    text-align: center;
  }

  .join .section-inner { padding-top: 6rem; padding-bottom: 6rem; }

  .join-headline {
    font-family: 'Playfair Display', serif;
    font-size: clamp(2.5rem, 6vw, 5rem);
    font-weight: 900;
    line-height: 1.1;
    margin-bottom: 1.5rem;
    max-width: 700px;
    margin-left: auto;
    margin-right: auto;
  }

  .join-headline em {
    font-style: italic;
    color: var(--amber-light);
  }

  .join-body {
    font-size: 1rem;
    color: rgba(245,240,232,0.6);
    max-width: 500px;
    margin: 0 auto 2.5rem;
    line-height: 1.7;
    font-weight: 300;
  }

  .join-form {
    display: flex;
    flex-direction: column;
    gap: 0.65rem;
    max-width: 420px;
    margin: 0 auto 1rem;
  }

  .join-form input {
    width: 100%;
    box-sizing: border-box;
    background: rgba(212,200,180,0.06);
    border: 1px solid rgba(212,200,180,0.2);
    color: var(--paper);
    padding: 0.85rem 1.2rem;
    border-radius: 2px;
    font-family: 'DM Sans', sans-serif;
    font-size: 0.9rem;
    outline: none;
    transition: border-color 0.2s;
  }

  .join-form input::placeholder { color: rgba(245,240,232,0.3); }
  .join-form input:focus { border-color: var(--amber); }

  .join-form .btn-primary {
    width: 100%;
    cursor: pointer;
    border: none;
    font-family: 'DM Sans', sans-serif;
    font-size: 0.85rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    transition: background 0.2s, transform 0.15s, opacity 0.2s;
  }

  .join-form .btn-primary:disabled {
    opacity: 0.6;
    cursor: not-allowed;
    transform: none;
  }

  .join-success {
    display: none;
    max-width: 420px;
    margin: 0 auto 1rem;
    padding: 1.25rem 1.5rem;
    background: rgba(217,119,6,0.08);
    border: 1px solid rgba(217,119,6,0.3);
    border-radius: 2px;
    text-align: center;
    color: var(--amber-light);
    font-family: 'DM Sans', sans-serif;
    font-size: 0.95rem;
    line-height: 1.5;
  }

  .join-error {
    display: none;
    max-width: 420px;
    margin: -0.25rem auto 0.5rem;
    padding: 0.75rem 1rem;
    background: rgba(239,68,68,0.08);
    border: 1px solid rgba(239,68,68,0.25);
    border-radius: 2px;
    text-align: center;
    color: #fca5a5;
    font-family: 'DM Sans', sans-serif;
    font-size: 0.85rem;
  }

  .join-note {
    font-size: 0.75rem;
    color: var(--stone);
    letter-spacing: 0.03em;
  }

  /* ── FOOTER ── */
  footer {
    background: rgba(10,8,6,1);
    padding: 2rem 2.5rem;
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-top: 1px solid rgba(212,200,180,0.08);
    flex-wrap: wrap;
    gap: 1rem;
  }

  .footer-logo {
    font-family: 'Playfair Display', serif;
    font-size: 1rem;
    font-weight: 700;
    color: var(--amber-light);
  }

  .footer-copy {
    font-size: 0.75rem;
    color: var(--stone);
    letter-spacing: 0.04em;
  }

  .footer-links {
    display: flex;
    gap: 1.5rem;
    list-style: none;
  }

  .footer-links a {
    font-size: 0.75rem;
    color: var(--stone);
    text-decoration: none;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    transition: color 0.2s;
  }

  .footer-links a:hover { color: var(--amber); }

  /* ── ANIMATIONS ── */
  @keyframes fadeUp {
    from { opacity: 0; transform: translateY(20px); }
    to { opacity: 1; transform: translateY(0); }
  }

  @keyframes pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.5; transform: scale(1.4); }
  }

  /* ── RESPONSIVE ── */
  @media (max-width: 768px) {
    nav { padding: 1rem 1.25rem; }
    .nav-links { display: none; }
    .problem-grid, .node-zero-grid { grid-template-columns: 1fr; }
    .steps { grid-template-columns: 1fr; }
    .hero-stat-bar { gap: 1.5rem; flex-wrap: wrap; }
    footer { flex-direction: column; text-align: center; }
  }
</style>
</head>
<body>

<!-- NAV -->
<nav>
  <a href="#" class="nav-logo">United<span> Main</span></a>
  <ul class="nav-links">
    <li><a href="#problem">The Problem</a></li>
    <li><a href="#how">How It Works</a></li>
    <li><a href="https://stoneham-fm.unitedmain.com">Farmers Market</a></li>
    <li><a href="#join" class="nav-cta">Join the Network</a></li>
  </ul>
</nav>

<!-- HERO -->
<section class="hero">
  <div class="hero-bg"></div>
  <div class="hero-grid-lines"></div>
  <div class="hero-content">
    <span class="hero-eyebrow">Stoneham, MA · Est. 2026</span>
    <h1 class="hero-headline">Main Street,<br><em>Upgraded.</em></h1>
    <p class="hero-sub">Local business. AI-ready. Connected.</p>
    <p class="hero-body">United Main is Stoneham's unified digital infrastructure — making every local business discoverable, transactable, and competitive in the age of AI search.</p>
    <div class="hero-actions">
      <a href="#join" class="btn-primary">Claim Your Node</a>
      <a href="#how" class="btn-ghost">See How It Works</a>
    </div>
    <div class="hero-stat-bar">
      <div class="hero-stat">
        <span class="hero-stat-num">10</span>
        <span class="hero-stat-label">Stoneham Businesses Audited</span>
      </div>
      <div class="hero-stat">
        <span class="hero-stat-num">8/10</span>
        <span class="hero-stat-label">Invisible to AI Search</span>
      </div>
      <div class="hero-stat">
        <span class="hero-stat-num">5</span>
        <span class="hero-stat-label">Charter Spots Available</span>
      </div>
    </div>
  </div>
</section>

<hr class="rule">

<!-- PROBLEM -->
<section class="problem" id="problem">
  <div class="section-inner">
    <span class="section-label">// The Problem</span>
    <h2 class="section-title">Your neighbors search AI.<br>Your business doesn't show up.</h2>
    <div class="problem-grid">
      <div class="problem-copy">
        <p>When someone asks an AI assistant for the best coffee spot in Stoneham, or a reliable local plumber, or where to pick up fresh produce — <strong>most Main Street businesses simply don't exist in the answer.</strong></p>
        <p>It's not because they're not great. It's because their menus are PDFs. Their hours are buried in images. Their story is locked in a Facebook post from 2019. <strong>AI can't read any of that.</strong></p>
        <p>United Main changes that. We rebuild each business as a proper "node" — fast, structured, AI-readable — and connect it to a unified Stoneham discovery layer that no single business could afford to build alone.</p>
      </div>
      <div class="audit-card">
        <div class="audit-card-header">// Digital Health Scan · Stoneham Square</div>
        <div class="audit-row"><span class="audit-biz">Andrea's Restaurant</span><span class="audit-badge badge-fail">Menu: PDF ✗</span></div>
        <div class="audit-row"><span class="audit-biz">The Stones Restaurant</span><span class="audit-badge badge-warn">No Online Order</span></div>
        <div class="audit-row"><span class="audit-biz">Book Oasis</span><span class="audit-badge badge-fail">Not Indexed</span></div>
        <div class="audit-row"><span class="audit-biz">Stoneham Barber Co.</span><span class="audit-badge badge-fail">No Website</span></div>
        <div class="audit-row"><span class="audit-biz">Main St. Florist</span><span class="audit-badge badge-warn">Mobile Broken</span></div>
        <div class="audit-row"><span class="audit-biz">Stoneham Dry Goods</span><span class="audit-badge badge-fail">No AI Indexing</span></div>
        <br>
        <div style="font-size:0.65rem;opacity:0.4;letter-spacing:0.1em;">8 of 10 businesses: AI-invisible · May 2026</div>
      </div>
    </div>
  </div>
</section>

<hr class="rule">

<!-- HOW -->
<section class="how" id="how">
  <div class="section-inner">
    <span class="section-label">// How It Works</span>
    <h2 class="section-title">Three steps from invisible<br>to indispensable.</h2>
    <div class="steps">
      <div class="step">
        <div class="step-num">01</div>
        <div class="step-title">Digital Health Audit</div>
        <p class="step-body">We scan your current digital presence — website, menu, hours, booking, social — and score it against modern AI search requirements. You get a full scorecard in 24 hours.</p>
      </div>
      <div class="step">
        <div class="step-num">02</div>
        <div class="step-title">Node Build & Launch</div>
        <p class="step-body">We build your "node" — a blazing-fast, AI-readable site that actually converts. No templates. No WordPress debt. Structured data baked in. Live in days, not months.</p>
      </div>
      <div class="step">
        <div class="step-num">03</div>
        <div class="step-title">Network Connection</div>
        <p class="step-body">Your node joins the United Main network. Local discovery, unified inventory, cross-business pre-ordering. The rising tide that lifts every ship on Main Street.</p>
      </div>
    </div>
  </div>
</section>



<hr class="rule">

<!-- JOIN -->
<section class="join" id="join">
  <div class="section-inner">
    <span class="section-label" style="display:block;margin-bottom:1rem;">//&nbsp;Charter&nbsp;Nodes&nbsp;·&nbsp;Limited&nbsp;Spots</span>
    <h2 class="join-headline">Ready to put your business<br>on the <em>map</em>?</h2>
    <p class="join-body">Charter nodes get better pricing, more influence over the platform, and the benefit of launching during Stoneham's Farmers Market season. Five spots. First come, first served.</p>
    <div class="join-form" id="audit-form">
      <input type="text" id="audit-business" placeholder="Business name" autocomplete="organization" />
      <input type="text" id="audit-contact" placeholder="Your name" autocomplete="name" />
      <input type="email" id="audit-email" placeholder="your@email.com" autocomplete="email" />
      <button class="btn-primary" id="audit-submit" onclick="submitAudit()">Get Audited Free</button>
    </div>
    <div class="join-success" id="audit-success">
      ✓ &nbsp;Request submitted. We'll be in touch within 2 business days.
    </div>
    <div class="join-error" id="audit-error">
      Something went wrong — please try again or email <a href="mailto:hello@unitedmain.com" style="color:inherit;">hello@unitedmain.com</a>
    </div>
    <p class="join-note">Free digital health audit · No commitment · Stoneham businesses only</p>
  </div>
</section>

<!-- FOOTER -->
<footer>
  <div class="footer-logo">United Main</div>
  <p class="footer-copy">© 2026 · Stoneham, Massachusetts</p>
  <ul class="footer-links">
    <li><a href="#problem">Problem</a></li>
    <li><a href="#how">How It Works</a></li>
    <li><a href="#join">Join</a></li>
  </ul>
</footer>

<script>
async function submitAudit() {
  const businessName = document.getElementById('audit-business').value.trim();
  const contactName  = document.getElementById('audit-contact').value.trim();
  const email        = document.getElementById('audit-email').value.trim();
  const btn          = document.getElementById('audit-submit');
  const errEl        = document.getElementById('audit-error');

  errEl.style.display = 'none';

  if (!email || !email.includes('@')) {
    errEl.textContent = 'Please enter a valid email address.';
    errEl.style.display = 'block';
    document.getElementById('audit-email').focus();
    return;
  }

  btn.textContent = 'Submitting…';
  btn.disabled = true;

  try {
    const res = await fetch('/api/audit-request', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ email, businessName, contactName }),
    });

    if (res.ok) {
      document.getElementById('audit-form').style.display = 'none';
      document.getElementById('audit-success').style.display = 'block';
    } else {
      const data = await res.json().catch(() => ({}));
      errEl.textContent = data.error || 'Something went wrong — please try again.';
      errEl.style.display = 'block';
      btn.textContent = 'Get Audited Free';
      btn.disabled = false;
    }
  } catch (e) {
    errEl.innerHTML = 'Something went wrong — please email <a href="mailto:hello@unitedmain.com" style="color:inherit;">hello@unitedmain.com</a>';
    errEl.style.display = 'block';
    btn.textContent = 'Get Audited Free';
    btn.disabled = false;
  }
}

// Allow Enter key to submit
document.addEventListener('DOMContentLoaded', function () {
  ['audit-business','audit-contact','audit-email'].forEach(function(id) {
    var el = document.getElementById(id);
    if (el) el.addEventListener('keydown', function(e) {
      if (e.key === 'Enter') submitAudit();
    });
  });
});
</script>


</body>
</html>
