patx/vegy

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Vegy — Wholesale ordering software for food distributors</title>
  <meta name="description" content="Vegy gives food distributors a branded online catalog with photos, current pricing, promotions, and ordering by app, web, email, text, or VoIP." />
  <link rel="canonical" href="https://vegy.app/" />

  <meta property="og:type" content="website" />
  <meta property="og:url" content="https://vegy.app/" />
  <meta property="og:site_name" content="Vegy" />
  <meta property="og:title" content="Vegy — Wholesale ordering software for food distributors" />
  <meta property="og:description" content="Give customers a branded catalog with photos, current pricing, promotions, and ordering by app, web, email, text, or VoIP." />
  <meta property="og:image" content="https://vegy.app/shot-catalog.png" />
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="theme-color" content="#16a34a" />

  <link rel="icon" href="favicon.svg" type="image/svg+xml" />
  <link rel="apple-touch-icon" href="shot-catalog.png" />

  <link rel="preconnect" href="https://fonts.googleapis.com" />
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Inter:wght@400;500;600;700&display=swap" />
  <link rel="stylesheet" href="styles.css?v=20260921-logos-spacing-2" />
</head>

<body class="marketing">

  <header class="masthead" id="masthead">
    <div class="wrap">
      <a class="wordmark" href="/">
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
          <path d="M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z" />
          <path d="M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12" />
        </svg>
        Vegy
      </a>

      <nav class="nav-links" aria-label="Primary">
        <a href="#why">Why Vegy</a>
        <a href="#how">How it works</a>
        <a href="#features">Features</a>
        <a href="#pricing">Pricing</a>
        <a href="#faq">FAQ</a>
      </nav>

      <a class="btn btn-primary btn-sm" href="https://cal.com/afterdarklabs/vegy.app-free-demo" target="_blank" rel="noopener">
        Book a demo
      </a>
      <button class="nav-toggle" id="navToggle" type="button"
              aria-expanded="false" aria-controls="mobileNav" aria-label="Open menu">
        <span></span><span></span><span></span>
      </button>
    </div>
    <nav class="mobile-nav" id="mobileNav" aria-label="Mobile">
      <a class="m-link" href="#why">Why Vegy</a>
      <a class="m-link" href="#how">How it works</a>
      <a class="m-link" href="#features">Features</a>
      <a class="m-link" href="#pricing">Pricing</a>
      <a class="m-link" href="#faq">FAQ</a>
      <a class="btn btn-primary" href="https://cal.com/afterdarklabs/vegy.app-free-demo" target="_blank" rel="noopener">Book a demo</a>
    </nav>
  </header>

  <main>

    <!-- ── Hero ─────────────────────────────────────────────────────────── -->
    <section class="hero">
      <div class="wrap">
        <div class="hero-copy">

          <h1 class="h-xl">Take orders<br />in your sleep.</h1>

          <p class="lede">
            Vegy helps produce, meat, and specialty food distributors take orders.
            Give customers a branded catalog in your app and on the web, with product
            photos, current pricing, promotions, and announcements. Customers can order
            there, or keep emailing, texting, and calling while Vegy&rsquo;s AI handles the rest.
          </p>

          <div class="cta-row center">
            <a class="btn btn-primary" href="https://cal.com/afterdarklabs/vegy.app-free-demo" target="_blank" rel="noopener">
              Book a demo <span class="arrow" aria-hidden="true">→</span>
            </a>
            <a class="btn btn-outline" href="#how">See how it works</a>
          </div>

          <p class="hero-note">
            Take orders by email, text, or VoIP, or through the web, iOS, and Android apps, with QuickBooks sync.
          </p>
        </div>

        <div class="hero-visual">
          <div class="shots" id="shots" tabindex="0" role="group"
               aria-label="Vegy product screens — scroll sideways to see all four">
          <figure class="shot">
            <img src="shot-catalog.webp" width="476" height="871" fetchpriority="high"
                 alt="Your storefront on a customer's phone: produce by the case and by the each, with pricing, quantity steppers and a running cart total." />
          </figure>
          <figure class="shot">
            <img src="shot-order.webp" width="476" height="871" fetchpriority="low" loading="lazy"
                 alt="An incoming order: customer and delivery details, order notes, priced line items, and buttons to print a pull slip, export CSV, or convert it to an invoice." />
          </figure>
          <figure class="shot">
            <img src="shot-deliveries.webp" width="476" height="871" fetchpriority="low" loading="lazy"
                 alt="The day's deliveries: every order for the date with its status, order number, and QuickBooks connection state." />
          </figure>
          <figure class="shot">
            <img src="shot-dashboard.webp" width="476" height="871" fetchpriority="low" loading="lazy"
                 alt="An instance dashboard under the distributor's own branding, with quick actions for new orders, AI orders, items, accounts and price lists." />
          </figure>
          </div>
          <div class="shot-dots" id="shotDots"></div>
        </div>

        <div class="trust" aria-label="Vegy order volume and distributors">
          <a class="trust-result" href="https://afterdarklabs.io/" aria-label="Over $2M in orders processed. Read the Vegy project write-up at After Dark Labs.">Over $2M in orders processed</a>
          <div class="trust-logos">
            <img src="gardenfresh.webp" width="437" height="132" loading="lazy" alt="Garden Fresh Produce LLC" />
            <img src="prima.webp" width="315" height="132" loading="lazy" alt="Prima Produce" />
          </div>
        </div>
      </div>
    </section>

    <!-- ── Why Vegy: the problem, paired with the fix ───────────────────── -->
    <section class="section band-soft" id="why">
      <div class="wrap">
        <div class="section-head center reveal">
          <h2 class="h-lg">Stop piecing together orders from every channel</h2>
          <p class="lede">
            Your branded catalog — in the app and on the web — gives customers a better
            way to buy. Vegy&rsquo;s AI keeps email, text, and voice orders flowing into the
            same clean workflow.
          </p>
        </div>

        <p class="example-note">Examples of incoming orders and how Vegy handles them.</p>
        <div class="swap reveal">
          <div class="swap-head">
            <span>How it arrives today</span>
            <span aria-hidden="true"></span>
            <span class="is-vegy">What Vegy does with it</span>
          </div>

          <div class="swap-row">
            <div class="swap-from">
              <span class="cell-label">How it arrives today</span>
              <span class="chan">VoIP call at 11:40 PM</span>
              <p>&ldquo;Hey it&rsquo;s Mike, give me the usual plus a couple cases of romaine, uh — call me back.&rdquo;</p>
            </div>
            <div class="swap-arrow" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"/><path d="m13 6 6 6-6 6"/></svg></div>
            <div class="swap-to">
              <span class="cell-label">What Vegy does with it</span>
              <p>Vegy&rsquo;s AI picks up, turns the call into a structured order on Mike&rsquo;s account, and prices it against his tier. It&rsquo;s waiting for you at 6am.</p>
            </div>
          </div>
          <div class="swap-row">
            <div class="swap-from">
              <span class="cell-label">How it arrives today</span>
              <span class="chan">Text message</span>
              <p>&ldquo;4 tomato, 2 onion, 6 lettuce&rdquo; — missing pack sizes, case counts, and the customer account.</p>
            </div>
            <div class="swap-arrow" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"/><path d="m13 6 6 6-6 6"/></svg></div>
            <div class="swap-to">
              <span class="cell-label">What Vegy does with it</span>
              <p>The same text comes back as real line items from your catalog, with your pack sizes and case counts already attached.</p>
            </div>
          </div>
          <div class="swap-row">
            <div class="swap-from">
              <span class="cell-label">How it arrives today</span>
              <span class="chan">Email with a PDF attached</span>
              <p>An order sheet from 2019, with prices that expired two seasons ago.</p>
            </div>
            <div class="swap-arrow" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"/><path d="m13 6 6 6-6 6"/></svg></div>
            <div class="swap-to">
              <span class="cell-label">What Vegy does with it</span>
              <p>Vegy&rsquo;s AI reads the email and attachment, matches each item to your live catalog, applies the customer&rsquo;s pricing, and flags anything unclear.</p>
            </div>
          </div>
          <div class="swap-row">
            <div class="swap-from">
              <span class="cell-label">How it arrives today</span>
              <span class="chan">Calls, texts &amp; old order sheets</span>
              <p>Customers only see what they remember to ask for. Price changes, new items, promotions, and important updates get missed.</p>
            </div>
            <div class="swap-arrow" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"/><path d="m13 6 6 6-6 6"/></svg></div>
            <div class="swap-to">
              <span class="cell-label">What Vegy does with it</span>
              <p>Your branded catalog, available in the app and on the web, shows product photos, current account pricing, featured items, promotions, and announcements before they order.</p>
            </div>
          </div>
        </div>
      </div>
    </section>

    <!-- ── How it works ─────────────────────────────────────────────────── -->
    <section class="section" id="how">
      <div class="wrap">
        <div class="section-head center reveal">
          <h2 class="h-lg">Save time, reduce errors, and prevent shorts</h2>
          <p class="lede">The sample orders below illustrate the workflow; names and amounts are examples.</p>
        </div>

        <div class="rows">
          <div class="row reveal">
            <div class="row-text">
              <h3 class="h-md">We brand it. You fill it.</h3>
              <p>
                We set up your logo, colors, login page, app, and web storefront. Your team
                uploads items, pack sizes, photos, and price tiers, then adds customer
                accounts and keeps the catalog and pricing up to date.
              </p>
            </div>
            <div class="row-visual">
              <div class="mock">
                <div class="mock-head"><span>Your catalog</span><span class="tag">Live</span></div>
                <div class="mock-body">
                  <div class="mock-line"><span>Artichoke 12CT</span><span class="pack">Case</span><span class="price">$71.82</span></div>
                  <div class="mock-line"><span>Arugula, Baby 2/1.5lb</span><span class="pack">Case</span><span class="price">$22.28</span></div>
                  <div class="mock-line"><span>Romaine Hearts 12CT</span><span class="pack">Case</span><span class="price">$43.89</span></div>
                  <div class="mock-line"><span>Tomato, Roma 25lb</span><span class="pack">Case</span><span class="price">$31.40</span></div>
                </div>
              </div>
            </div>
          </div>

          <div class="row is-flipped reveal">
            <div class="row-text">
              <h3 class="h-md">Your customers order</h3>
              <p>
                In your app or on the web, customers see photos, current account pricing,
                promotions, announcements, favorites, and past orders. If they email, text,
                or call instead, Vegy&rsquo;s AI turns that request into the same clean order.
              </p>
            </div>
            <div class="row-visual">
              <div class="mock">
                <div class="mock-head"><span>Sunrise Cafe on Tuesday</span><span class="tag">Tier 2</span></div>
                <div class="mock-body">
                  <div class="mock-line"><span>Artichoke 12CT</span><span class="pack">2 cases</span><span class="price">$143.64</span></div>
                  <div class="mock-line"><span>Arugula, Baby 2/1.5lb</span><span class="pack">6 cases</span><span class="price">$133.68</span></div>
                  <div class="mock-line"><span>Romaine Hearts 12CT</span><span class="pack">4 cases</span><span class="price">$175.56</span></div>
                </div>
                <div class="mock-foot"><span>Order total</span><span class="amt">$452.88</span></div>
              </div>
            </div>
          </div>

          <div class="row reveal">
            <div class="row-text">
              <h3 class="h-md">You get a clean order</h3>
              <p>
                Items and pack sizes are matched, pricing and minimums are applied, and
                the order syncs to QuickBooks or your ERP. Print accurate pull slips,
                route lists, and price lists straight from it.
              </p>
            </div>
            <div class="row-visual">
              <div class="mock">
                <div class="mock-head"><span>QuickBooks</span><span class="tag">Synced 6:02 AM</span></div>
                <div class="mock-body">
                  <div class="mock-line"><span>Customer record</span><span class="price ok">Updated</span></div>
                  <div class="mock-line"><span>Items &amp; pack sizes</span><span class="price ok">Updated</span></div>
                  <div class="mock-line"><span>Invoice #4417</span><span class="price ok">Created</span></div>
                  <div class="mock-line"><span>Pull sheet</span><span class="price ok">Ready</span></div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>

    <!-- ── Feature grid ─────────────────────────────────────────────────── -->
    <section class="section band-soft" id="features">
      <div class="wrap">
        <div class="section-head center reveal">
          <h2 class="h-lg">The rest of what the ordering desk was doing</h2>
          <p class="lede">
            Case pricing, customer tiers, minimums, and the paperwork your warehouse runs
            on — not a retail cart with a wholesale sticker on it.
          </p>
        </div>

        <div class="cards reveal">
          <article class="card">
            <h3 class="h-sm">Every order channel, one workflow</h3>
            <p>
              Vegy&rsquo;s AI takes orders by email, text, voice calls over VoIP, or your
              branded app and web catalog — then structures them in one place.
            </p>
          </article>
          <article class="card">
            <h3 class="h-sm">A catalog that stays current</h3>
            <p>
              Show product photos, live account pricing, featured items, promotions, and
              important announcements — more than a caller or old order sheet ever sees.
            </p>
          </article>
          <article class="card">
            <h3 class="h-sm">QuickBooks &amp; ERP sync</h3>
            <p>
              Customers, items, and invoices flow into QuickBooks or your existing ERP.
              Syncing removes the need for double entry and end-of-day exports.
            </p>
          </article>
        </div>

        <div class="rows feature-details">
          <article class="row reveal">
            <div class="row-text">
              <h3 class="h-md">Pricing that knows the customer</h3>
            <p>
              Customer-specific pricing tiers and contract pricing applied automatically,
              plus per-account order minimums enforced at checkout.
            </p>
            </div>
            <div class="row-visual">
              <div class="mock">
                <div class="mock-head">Customer pricing example</div>
                <div class="mock-body">
                  <div class="mock-line"><span>Customer account</span><span class="price">Contract pricing</span></div>
                  <div class="mock-line"><span>Order minimum</span><span class="price">Applied at checkout</span></div>
                </div>
              </div>
            </div>
          </article>
          <article class="row reveal">
            <div class="row-text">
              <h3 class="h-md">Paperwork in one click</h3>
            <p>
              Pull sheets, price lists, and sales reports export instantly — in the format
              your warehouse and your bookkeeper already expect.
            </p>
            </div>
            <div class="row-visual">
              <div class="mock">
                <div class="mock-head">Export options</div>
                <div class="mock-body">
                  <div class="mock-line"><span>Warehouse</span><span class="price">Pull sheets</span></div>
                  <div class="mock-line"><span>Sales desk</span><span class="price">Price lists</span></div>
                  <div class="mock-line"><span>Bookkeeping</span><span class="price">Sales reports</span></div>
                </div>
              </div>
            </div>
          </article>
          <article class="row reveal">
            <div class="row-text">
              <h3 class="h-md">Inventory &amp; delivery tracking</h3>
            <p>
              Keep inventory and payment status attached to the order, and track
              deliveries through to the door without a second system.
            </p>
            </div>
            <div class="row-visual">
              <div class="mock">
                <div class="mock-head">Order tracking example</div>
                <div class="mock-body">
                  <div class="mock-line"><span>Inventory</span><span class="price">Attached to order</span></div>
                  <div class="mock-line"><span>Payment status</span><span class="price">Attached to order</span></div>
                  <div class="mock-line"><span>Delivery</span><span class="price">Tracked to the door</span></div>
                </div>
              </div>
            </div>
          </article>
        </div>
      </div>
    </section>

    <!-- ── Dark: differentiators ────────────────────────────────────────── -->
    <section class="section band-dark">
      <div class="wrap">
        <div class="section-head reveal">
          <h2 class="h-lg">Your brand in front, your books untouched</h2>
          <p class="lede">
            Vegy runs underneath your business — it doesn't put itself between you and
            your customers, or between you and your accountant.
          </p>
        </div>

        <div class="rows">
          <div class="row reveal">
            <div class="row-text">
            <h3 class="h-md">It's your name on it, not ours</h3>
            <p style="color:rgba(255,255,255,.72)">
                We set up the storefront with your logo, colors, login page, ordering
                domain, and app listing. Your customers see your brand at every step;
                nobody has to know there is a software vendor behind the ordering.
              </p>
            </div>
            <div class="row-visual">
              <div class="mock">
                <div class="mock-head"><span>What your customers see</span></div>
                <div class="mock-body">
                  <div class="mock-line"><span>App Store listing</span><span class="price ok">Your company</span></div>
                  <div class="mock-line"><span>Ordering domain</span><span class="price ok">orders.yourco.com</span></div>
                  <div class="mock-line"><span>Logo &amp; colors</span><span class="price ok">Yours</span></div>
                  <div class="mock-line"><span>Catalog &amp; photos</span><span class="price ok">Yours</span></div>
                </div>
              </div>
            </div>
          </div>

          <div class="row is-flipped reveal">
            <div class="row-text">
              <h3 class="h-md">Your books stay your books</h3>
              <p style="color:rgba(255,255,255,.72)">
                Vegy creates and updates customers, items, and invoices in QuickBooks. It
                does not post journal entries, recognize revenue, or reconcile — your
                accountant's workflow stays exactly where it is.
              </p>
            </div>
            <div class="row-visual">
              <div class="mock">
                <div class="mock-head"><span>QuickBooks scope</span></div>
                <div class="mock-body">
                  <div class="mock-line"><span>Customers, items, invoices</span><span class="price ok">Vegy writes</span></div>
                  <div class="mock-line"><span>Journal entries</span><span class="price muted-cell">Untouched</span></div>
                  <div class="mock-line"><span>Revenue recognition</span><span class="price muted-cell">Untouched</span></div>
                  <div class="mock-line"><span>Reconciliation</span><span class="price muted-cell">Untouched</span></div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>

    <!-- ── Pricing ──────────────────────────────────────────────────────── -->
    <section class="section band-soft" id="pricing">
      <div class="wrap">
        <div class="section-head center reveal">
          <h2 class="h-lg">A monthly fee plus 25¢ per AI order</h2>
          <p class="lede">
            The AI fee is 25¢ whether the order is $400 or $4,000.
            You pay for each order processed, with no percentage of sales or per-seat charges.
          </p>
        </div>

        <div class="price-card reveal">
          <div class="price-row">
            <div class="price-unit">
              <p class="price-figure">$599<span class="per">/mo</span></p>
              <p class="price-cap">Platform fee</p>
            </div>

            <div class="price-plus" aria-hidden="true">+</div>

            <div class="price-unit">
              <p class="price-figure">25¢<span class="per">/order</span></p>
              <p class="price-cap">AI orders — email, text, voice, app &amp; web</p>
            </div>
          </div>

          <ul class="included">
            <li>Your white-labeled web catalog, promotions, and announcements</li>
            <li>Native iOS and Android apps published under your brand</li>
            <li>Branding setup — your logo, colors, login page, and domain</li>
            <li>Unlimited customer accounts and pricing tiers</li>
            <li>QuickBooks sync, or integration with your existing ERP</li>
            <li>Tools to upload your catalog and onboard customer accounts</li>
            <li>Email and phone support from people who know your instance</li>
          </ul>

          <p class="price-note">
            Billed monthly. Final pricing depends on item count, number of accounts, and
            whether you need a custom ERP integration — you'll get the exact number on
            the demo call.
          </p>

          <a class="btn btn-white" style="margin-top:1.8rem"
             href="https://cal.com/afterdarklabs/vegy.app-free-demo" target="_blank" rel="noopener">
            Book a demo <span class="arrow" aria-hidden="true">→</span>
          </a>
        </div>
      </div>
    </section>

    <!-- ── FAQ ──────────────────────────────────────────────────────────── -->
    <section class="section" id="faq">
      <div class="wrap faq-layout">
        <div class="section-head reveal">
          <h2 class="h-lg">The questions you're actually asking</h2>
        </div>

        <div class="faq reveal">
          <details>
            <summary>My customers aren't tech people. Will they really use this?</summary>
            <div class="answer">
              <p>
                Most reorder the same twenty items every week. Vegy puts favorites and past
                orders up front, while product photos, current pricing, promotions, and
                important announcements help them see what else is available.
              </p>
              <p>
                They can also keep emailing, texting, and calling exactly like they do now.
                Vegy&rsquo;s AI turns every channel — including orders placed in your app or
                online — into the same structured, priced order.
              </p>
            </div>
          </details>

          <details>
            <summary>What about the customers who insist on calling?</summary>
            <div class="answer">
              <p>
                They keep calling. Vegy answers through your VoIP line, captures the order,
                matches it to the customer and your catalog, and sends your team a structured,
                priced order. Nobody gets cut off, and nobody has to re-key the call.
              </p>
            </div>
          </details>

          <details>
            <summary>Do I have to leave QuickBooks?</summary>
            <div class="answer">
              <p>
                No. Vegy creates and updates customers, items, and invoices in QuickBooks
                for you. It does not post journal entries, recognize revenue, or reconcile
                your books — your accountant's workflow stays exactly where it is.
              </p>
              <p>
                Already on a different ERP? Custom integrations are part of what we scope
                on the demo call.
              </p>
            </div>
          </details>

          <details>
            <summary>How long does setup take?</summary>
            <div class="answer">
              <p>
                We set up your logo, colors, login page, app, and web storefront. Your team
                uploads the item list, pack sizes, photos, and price tiers, then onboards
                customer accounts and assigns their pricing.
              </p>
              <p>
                Timing depends on branding approval, how many items and accounts you are
                adding, and any QuickBooks or custom ERP integration in your rollout.
              </p>
            </div>
          </details>

          <details>
            <summary>Who owns my customer list and pricing?</summary>
            <div class="answer">
              <p>
                You do. Each wholesaler runs their own instance, and Vegy processes that
                data on your behalf as your service provider — your accounts, your pricing,
                your order history. The details are spelled out in our
                <a class="link" href="legal.html">Terms &amp; Privacy</a>.
              </p>
            </div>
          </details>

          <details>
            <summary>What does it actually cost?</summary>
            <div class="answer">
              <p>
                $599 a month for the platform, plus 25¢ for every order our AI takes for
                you by email, text, voice, app, or web. We don't take a percentage of your
                sales — a $4,000 order and a $400 order cost you exactly the same.
              </p>
              <p>
                Where you land depends on item count, number of accounts, and whether you
                need a custom ERP integration. You'll get the exact number on the demo
                call, not a proposal three weeks later.
              </p>
            </div>
          </details>
        </div>
      </div>
    </section>

    <!-- ── Closing CTA ──────────────────────────────────────────────────── -->
    <section class="cta-banner">
      <div class="wrap">
        <h2 class="h-lg">See how your catalog works in Vegy</h2>
        <p>
          Bring a sample price list to the call. We&rsquo;ll show you how your team uploads
          items, sets customer pricing, and manages the catalog in your app and on the web.
        </p>

        <div class="cta-row center">
          <a class="btn btn-white" href="https://cal.com/afterdarklabs/vegy.app-free-demo" target="_blank" rel="noopener">
            Book a demo <span class="arrow" aria-hidden="true">→</span>
          </a>
          <a class="btn btn-outline" href="mailto:[email protected]">Email [email protected]</a>
        </div>

        <ul class="expect">
          <li><span class="n">01</span>We look at how orders reach you today, and where they get re-keyed.</li>
          <li><span class="n">02</span>You see how items, tiers, and minimums work inside a live instance.</li>
          <li><span class="n">03</span>We scope the QuickBooks or ERP connection against your setup.</li>
          <li><span class="n">04</span>You get a price and a timeline on the call.</li>
        </ul>
      </div>
    </section>

  </main>

  <!-- floats up once the hero screens are past, retires into the closing CTA -->
  <div class="dock" id="dock">
    <a class="btn btn-primary" href="https://cal.com/afterdarklabs/vegy.app-free-demo" target="_blank" rel="noopener">
      Book a demo <span class="arrow" aria-hidden="true">→</span>
    </a>
  </div>

  <footer class="site-footer">
    <div class="wrap">
      <div class="footer-grid">
        <div>
          <a class="wordmark" href="/">
            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
              <path d="M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z" />
              <path d="M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12" />
            </svg>
            Vegy
          </a>
          <p class="footer-blurb">
            White-labeled wholesale ordering for produce, meat, and specialty food
            distributors.
          </p>
          <p class="footer-by">
            Built &amp; operated by
            <a href="https://afterdarklabs.io" target="_blank" rel="noopener">After Dark Labs</a>
          </p>
        </div>

        <div>
          <h4>Product</h4>
          <div class="footer-links">
            <a href="#how">How it works</a>
            <a href="#features">Features</a>
            <a href="#pricing">Pricing</a>
            <a href="#faq">FAQ</a>
          </div>
        </div>

        <div>
          <h4>Contact</h4>
          <div class="footer-links">
            <a href="support.html">Support center</a>
            <a href="mailto:[email protected]">[email protected]</a>
            <a href="tel:+19546218027">(954) 621-8027</a>
          </div>
        </div>

        <div>
          <h4>Company</h4>
          <div class="footer-links">
            <a href="https://cal.com/afterdarklabs/vegy.app-free-demo" target="_blank" rel="noopener">Book a demo</a>
            <a href="legal.html">Terms of Use</a>
            <a href="legal.html#privacy">Privacy Policy</a>
          </div>
        </div>
      </div>

      <div class="footer-base">
        <span>© <span data-year></span> After Dark Labs. All rights reserved.</span>
        <span>Built for the people who load the truck at 4am.</span>
      </div>
    </div>
  </footer>

  <script>
    document.querySelectorAll('[data-year]').forEach(function (el) {
      el.textContent = new Date().getFullYear();
    });

    var masthead = document.getElementById('masthead');
    if (masthead) {
      var onScroll = function () {
        masthead.classList.toggle('is-stuck', window.scrollY > 8);
      };
      onScroll();
      addEventListener('scroll', onScroll, { passive: true });
    }


    // Mobile menu
    (function () {
      var toggle = document.getElementById('navToggle');
      var panel = document.getElementById('mobileNav');
      if (!toggle || !panel) return;

      function setOpen(open) {
        panel.classList.toggle('is-open', open);
        toggle.setAttribute('aria-expanded', String(open));
        toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
      }

      toggle.addEventListener('click', function () {
        setOpen(toggle.getAttribute('aria-expanded') !== 'true');
      });

      panel.addEventListener('click', function (e) {
        if (e.target.closest('a')) setOpen(false);
      });

      addEventListener('keydown', function (e) {
        if (e.key === 'Escape' && toggle.getAttribute('aria-expanded') === 'true') {
          setOpen(false);
          toggle.focus();
        }
      });

      // a resize back to desktop should not leave the panel stuck open
      addEventListener('resize', function () {
        if (innerWidth > 900) setOpen(false);
      });
    })();

    // Nav scroll-spy: highlight whichever section is under the masthead
    (function () {
      var links = [].slice.call(
        document.querySelectorAll('.nav-links a[href^="#"], .mobile-nav .m-link[href^="#"]')
      );
      if (!links.length) return;

      var ids = [];
      links.forEach(function (a) {
        var id = a.getAttribute('href').slice(1);
        if (document.getElementById(id) && ids.indexOf(id) === -1) ids.push(id);
      });

      function sync() {
        var line = scrollY + (masthead ? masthead.offsetHeight : 74) + 28;
        var current = '';
        ids.forEach(function (id) {
          var top = document.getElementById(id).getBoundingClientRect().top + scrollY;
          if (top <= line) current = id;
        });
        // clamp to the last section once the page bottoms out
        if (innerHeight + scrollY >= document.documentElement.scrollHeight - 4) {
          current = ids[ids.length - 1];
        }
        links.forEach(function (a) {
          a.classList.toggle('is-active', a.getAttribute('href') === '#' + current);
        });
      }
      sync();
      addEventListener('scroll', sync, { passive: true });
      addEventListener('resize', sync);
    })();

    // Booking dock: rises once the hero screens are behind you, retires when
    // the closing CTA arrives so the two never compete.
    (function () {
      var dock = document.getElementById('dock');
      var after = document.querySelector('.hero-visual');
      var until = document.querySelector('.cta-banner');
      if (!dock || !after || !until) return;

      function sync() {
        var past = scrollY > after.getBoundingClientRect().bottom + scrollY - 120;
        var landed = until.getBoundingClientRect().top < innerHeight - 40;
        dock.classList.toggle('is-up', past && !landed);
      }
      sync();
      addEventListener('scroll', sync, { passive: true });
      addEventListener('resize', sync);
    })();

    // Hero screens: a plain row on desktop, a snap carousel once it overflows.
    // Dots mirror scroll position and can drive it; vertical scrolling is never
    // intercepted, so the page still behaves normally under a thumb.
    (function () {
      var strip = document.getElementById('shots');
      var dots = document.getElementById('shotDots');
      if (!strip || !dots) return;

      var slides = [].slice.call(strip.querySelectorAll('.shot'));
      slides.forEach(function (slide, i) {
        var b = document.createElement('button');
        b.type = 'button';
        b.className = 'shot-dot' + (i === 0 ? ' is-active' : '');
        b.setAttribute('aria-label', 'Show screen ' + (i + 1) + ' of ' + slides.length);
        b.addEventListener('click', function () {
          strip.scrollTo({ left: slide.offsetLeft - strip.offsetLeft, behavior: 'smooth' });
        });
        dots.appendChild(b);
      });

      var buttons = [].slice.call(dots.children);
      var ticking = false;
      strip.addEventListener('scroll', function () {
        if (ticking) return;
        ticking = true;
        requestAnimationFrame(function () {
          var nearest;
          if (strip.scrollLeft + strip.clientWidth >= strip.scrollWidth - 2) {
            nearest = slides.length - 1;          // pinned at the end
          } else {
            var mid = strip.scrollLeft + strip.clientWidth / 2;
            var best = Infinity;
            nearest = 0;
            slides.forEach(function (slide, i) {
              var d = Math.abs(slide.offsetLeft + slide.clientWidth / 2 - mid);
              if (d < best) { best = d; nearest = i; }
            });
          }
          buttons.forEach(function (b, i) {
            b.classList.toggle('is-active', i === nearest);
          });
          ticking = false;
        });
      }, { passive: true });
    })();

    var reveals = document.querySelectorAll('.reveal');
    if (matchMedia('(prefers-reduced-motion: reduce)').matches || !('IntersectionObserver' in window)) {
      // leave everything in its default visible state
    } else {
      document.documentElement.classList.add('js');
      var io = new IntersectionObserver(function (entries) {
        entries.forEach(function (entry) {
          if (entry.isIntersecting) {
            entry.target.classList.add('is-in');
            io.unobserve(entry.target);
          }
        });
      }, { rootMargin: '0px 0px -8% 0px', threshold: 0.06 });
      reveals.forEach(function (el) { io.observe(el); });
    }
  </script>

  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@graph": [
      {
        "@type": "Organization",
        "@id": "https://vegy.app/#org",
        "name": "After Dark Labs",
        "url": "https://afterdarklabs.io/",
        "email": "[email protected]",
        "telephone": "+1-954-621-8027",
        "description": "After Dark Labs builds and operates Vegy, a white-labeled wholesale ordering platform for produce, meat, and specialty food distributors."
      },
      {
        "@type": "SoftwareApplication",
        "name": "Vegy",
        "applicationCategory": "BusinessApplication",
        "operatingSystem": "Web, iOS, Android",
        "publisher": { "@id": "https://vegy.app/#org" },
        "description": "Wholesale ordering software with a white-labeled catalog on iOS, Android, and the web for product photos, current pricing, promotions, and announcements, plus AI ordering by email, text, and VoIP voice calls.",
        "offers": {
          "@type": "Offer",
          "price": "599",
          "priceCurrency": "USD",
          "description": "$599 per month platform fee, plus $0.25 per AI-processed order (email, text, voice, app, or web).",
          "priceSpecification": {
            "@type": "UnitPriceSpecification",
            "price": "599",
            "priceCurrency": "USD",
            "referenceQuantity": {
              "@type": "QuantitativeValue",
              "value": "1",
              "unitCode": "MON"
            }
          }
        }
      },
      {
        "@type": "FAQPage",
        "mainEntity": [
          {
            "@type": "Question",
            "name": "My customers aren't tech people. Will they really use this?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Most reorder the same twenty items every week. Vegy puts favorites and past orders up front, while product photos, current pricing, promotions, and important announcements help them see what else is available. They can also keep emailing, texting, and calling exactly like they do now. Vegy's AI turns every channel — including orders placed in your app or online — into the same structured, priced order."
            }
          },
          {
            "@type": "Question",
            "name": "What about the customers who insist on calling?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "They keep calling. Vegy answers through your VoIP line, captures the order, matches it to the customer and your catalog, and sends your team a structured, priced order. Nobody gets cut off, and nobody has to re-key the call."
            }
          },
          {
            "@type": "Question",
            "name": "Do I have to leave QuickBooks?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "No. Vegy creates and updates customers, items, and invoices in QuickBooks for you. It does not post journal entries, recognize revenue, or reconcile your books — your accountant's workflow stays exactly where it is. Already on a different ERP? Custom integrations are part of what we scope on the demo call."
            }
          },
          {
            "@type": "Question",
            "name": "How long does setup take?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "We set up your logo, colors, login page, app, and web storefront. Your team uploads the item list, pack sizes, photos, and price tiers, then onboards customer accounts and assigns their pricing. Timing depends on branding approval, how many items and accounts you are adding, and any QuickBooks or custom ERP integration in your rollout."
            }
          },
          {
            "@type": "Question",
            "name": "Who owns my customer list and pricing?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "You do. Each wholesaler runs their own instance, and Vegy processes that data on your behalf as your service provider — your accounts, your pricing, your order history."
            }
          },
          {
            "@type": "Question",
            "name": "What does it actually cost?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "$599 a month for the platform, plus 25¢ for every order our AI takes for you by email, text, voice, app, or web. We don't take a percentage of your sales — a $4,000 order and a $400 order cost you exactly the same. Where you land depends on item count, number of accounts, and whether you need a custom ERP integration."
            }
          }
        ]
      }
    ]
  }
  </script>

</body>
</html>