patx/vegy
major redesign
Commit 6b51037 · patx · 2026-08-05T02:54:32-04:00
Comments
No comments yet.
Diff
diff --git a/docs/_dockcheck.html b/docs/_dockcheck.html
new file mode 100644
index 0000000..a24b761
--- /dev/null
+++ b/docs/_dockcheck.html
@@ -0,0 +1,945 @@
+<!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 puts your wholesale catalog on your customers' phones under your own brand. Customer-specific pricing, order minimums, iOS and Android apps, and QuickBooks sync. $599/mo flat — no revenue share. Book a demo." />
+ <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="Your catalog, your brand, your pricing — on your customers' phones. Orders arrive priced-out and synced to QuickBooks." />
+ <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" />
+</head>
+
+<body>
+
+ <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/meet" 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/meet" target="_blank" rel="noopener">Book a demo</a>
+ </nav>
+ </header>
+
+ <main>
+
+ <!-- ── Hero ─────────────────────────────────────────────────────────── -->
+ <section class="hero">
+ <div class="wrap">
+ <div class="hero-copy">
+ <span class="eyebrow">For produce, meat & specialty food distributors</span>
+
+ <h1 class="h-xl">Take orders<br /><span class="accent">in your sleep</span>.</h1>
+
+ <p class="lede">
+ Vegy puts your full catalog — your brand, your pricing, your minimums — on
+ your customers' phones. They order whenever they think of it. You wake up to
+ priced-out orders that are already in QuickBooks.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-primary" href="https://cal.com/afterdarklabs/meet" 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">
+ White-labeled · Web, iOS & Android · Order by text · 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">
+ <p class="eyebrow">Running on Vegy today</p>
+ <div class="trust-logos">
+ <img src="gardenfresh.webp" width="437" height="132" loading="lazy"
+ alt="Garden Fresh Produce LLC" />
+ <span class="trust-sep" aria-hidden="true"></span>
+ <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">
+ <span class="eyebrow">Why Vegy</span>
+ <h2 class="h-lg">Every order still gets typed in by hand</h2>
+ <p class="lede">
+ Orders reach you a different way every time, and one person turns all of
+ them into something the warehouse can pull. Here is what changes, line by
+ line.
+ </p>
+ </div>
+
+ <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">Voicemail · 11:40 PM</span>
+ <p>“Hey it’s Mike, give me the usual plus a couple cases of romaine, uh — call me back.”</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’s AI picks up, turns the call into a structured order on Mike’s account, and prices it against his tier. It’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>“4 tomato, 2 onion, 6 lettuce” — no pack sizes, no case counts, no 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 · 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>They order from your live catalog instead, so the price is whatever their tier says today — and minimums are checked at checkout.</p>
+ </div>
+ </div>
+ <div class="swap-row">
+ <div class="swap-from">
+ <span class="cell-label">How it arrives today</span>
+ <span class="chan">Then, every time</span>
+ <p>Someone re-keys all of it by hand before the pull sheets go out. That’s where the shorts come from, and the wrong pack sizes, and the credits.</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>Nothing gets typed twice. The order syncs into QuickBooks as a customer, items, and an invoice, and the pull sheet prints itself.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── How it works ─────────────────────────────────────────────────── -->
+ <section class="section" id="how">
+ <div class="wrap">
+ <div class="section-head center reveal">
+ <span class="eyebrow">How it works</span>
+ <h2 class="h-lg">Three steps, and the phone stops ringing</h2>
+ </div>
+
+ <div class="rows">
+ <div class="row reveal">
+ <div class="row-text">
+ <span class="eyebrow">Step 01</span>
+ <h3 class="h-md">We load your catalog</h3>
+ <p>
+ Your item list, pack sizes, categories, and price tiers get imported for
+ you — nothing gets rebuilt by hand. Then it's your logo, your product
+ photos, your category names, on your own domain.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Your catalog</span><span class="tag">Imported</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">
+ <span class="eyebrow">Step 02</span>
+ <h3 class="h-md">Your customers order</h3>
+ <p>
+ From your website, your own iOS and Android app, or straight over voice
+ and text. Last week's order is right there, so a reorder takes seconds
+ instead of a phone call — at 11pm, on a Sunday, from a walk-in cooler.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Sunrise Cafe · 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">
+ <span class="eyebrow">Step 03</span>
+ <h3 class="h-md">You get a clean order</h3>
+ <p>
+ Priced against that customer's tier, checked against your minimums, and
+ synced to QuickBooks or your ERP. Print pull sheets, 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 & 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">
+ <span class="eyebrow">Features</span>
+ <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">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <rect x="5" y="2" width="14" height="20" rx="2.5" /><path d="M12 18h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Order from anywhere</h3>
+ <p>
+ Your own website, mobile web, native iOS and Android apps, or AI-powered
+ ordering by voice and text for customers who will never open an app.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M12.6 2.6 21 11a2 2 0 0 1 0 2.8l-7.2 7.2a2 2 0 0 1-2.8 0L3 12.6V4a1 1 0 0 1 1-1h8.6Z" /><path d="M7.5 7.5h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M3 17l6-6 4 4 8-8" /><path d="M17 7h4v4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Bigger orders, on purpose</h3>
+ <p>
+ Promote featured items, push new products in front of the right accounts,
+ and let favorites and one-tap reorder do the rest.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M21 12a9 9 0 0 1-15.5 6.2L3 16" /><path d="M3 12a9 9 0 0 1 15.5-6.2L21 8" /><path d="M3 21v-5h5" /><path d="M21 3v5h-5" />
+ </svg>
+ </div>
+ <h3 class="h-sm">QuickBooks & ERP sync</h3>
+ <p>
+ Customers, items, and invoices flow into QuickBooks or your existing ERP.
+ No double entry, no end-of-day export ritual.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M14 2H6.5A1.5 1.5 0 0 0 5 3.5v17A1.5 1.5 0 0 0 6.5 22h11a1.5 1.5 0 0 0 1.5-1.5V7Z" /><path d="M14 2v5h5" /><path d="M9 13h6" /><path d="M9 17h4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M2 7h11v10H2z" /><path d="M13 10h4.5l3.5 3.5V17h-8" /><circle cx="7" cy="18.5" r="1.8" /><circle cx="17" cy="18.5" r="1.8" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Inventory & 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>
+ </article>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── Dark: differentiators ────────────────────────────────────────── -->
+ <section class="section band-dark">
+ <div class="wrap">
+ <div class="section-head reveal">
+ <span class="eyebrow">Where Vegy is different</span>
+ <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)">
+ Your customers download your app, from your listing, and see your logo
+ when it opens. Nobody has to know there's a software vendor behind your
+ 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 & colors</span><span class="price ok">Yours</span></div>
+ <div class="mock-line"><span>Catalog & 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">
+ <span class="eyebrow">Pricing</span>
+ <h2 class="h-lg">No revenue share. No per-seat games.</h2>
+ <p class="lede">
+ A flat monthly fee, plus a quarter when our AI takes the order for you. A
+ $4,000 order costs you exactly what a $400 order costs you.
+ </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 — voice, text & web</p>
+ </div>
+ </div>
+
+ <ul class="included">
+ <li>Your white-labeled web storefront and ordering domain</li>
+ <li>Native iOS and Android apps published under your brand</li>
+ <li>Unlimited customer accounts and pricing tiers</li>
+ <li>QuickBooks sync, or integration with your existing ERP</li>
+ <li>Catalog import and account setup, done by us</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/meet" 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 wrap-narrow">
+ <div class="section-head center reveal">
+ <span class="eyebrow">Straight answers</span>
+ <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 of them reorder the same twenty items every week, and that's the case
+ Vegy is built around — their last order is on the first screen, and
+ reordering is a few taps.
+ </p>
+ <p>
+ For the holdouts, voice and text ordering means they keep calling and
+ texting exactly like they do now. The difference is that it lands in your
+ system as a structured, priced order instead of in someone's inbox.
+ </p>
+ </div>
+ </details>
+
+ <details>
+ <summary>What about the customers who insist on calling?</summary>
+ <div class="answer">
+ <p>
+ Keep taking their calls. Your team enters the order on their behalf and it
+ goes through the same pricing, minimums, and QuickBooks sync as everything
+ else. Nobody gets cut off — you just stop re-keying the ones who don't need
+ to 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 do the catalog import — your item list, pack sizes, and price tiers — so
+ the work on your side is mostly reviewing what we loaded and approving the
+ branding.
+ </p>
+ <p>
+ Timeline depends on how many items and accounts you're bringing over. Book
+ a demo and we'll scope it against your actual catalog rather than guessing.
+ </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 & 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 voice, text, 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 your own catalog running on it</h2>
+ <p>
+ Send us a price list before the call and we'll load a slice of your real
+ catalog, so you're looking at your own items — not a generic sandbox.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-white" href="https://cal.com/afterdarklabs/meet" 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 your items, your tiers, and your minimums 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/meet" 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 & 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/meet" 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 customer-specific pricing tiers, order minimums, white-labeled iOS and Android apps, voice and text ordering, and QuickBooks sync.",
+ "offers": {
+ "@type": "Offer",
+ "price": "599",
+ "priceCurrency": "USD",
+ "description": "$599 per month platform fee, plus $0.25 per AI-processed order (voice, text, and 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 of them reorder the same twenty items every week, and that's the case Vegy is built around — their last order is on the first screen, and reordering is a few taps. For the holdouts, voice and text ordering means they keep calling and texting exactly like they do now. The difference is that it lands in your system as a structured, priced order instead of in someone's inbox."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What about the customers who insist on calling?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Keep taking their calls. Your team enters the order on their behalf and it goes through the same pricing, minimums, and QuickBooks sync as everything else. Nobody gets cut off — you just stop re-keying the ones who don't need to 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 do the catalog import — your item list, pack sizes, and price tiers — so the work on your side is mostly reviewing what we loaded and approving the branding. Timeline depends on how many items and accounts you're bringing over."
+ }
+ },
+ {
+ "@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 voice, text, 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>
+
+<script>addEventListener('load',function(){setTimeout(function(){
+ var d=document.getElementById('dock');
+ d.classList.add('is-up');
+ requestAnimationFrame(function(){
+ setTimeout(function(){
+ var r=d.getBoundingClientRect();
+ var tag=document.createElement('div');
+ tag.style.cssText='position:fixed;top:0;left:0;z-index:99999;background:#ff0;color:#000;font:12px monospace;padding:4px';
+ tag.textContent='dock rect top='+Math.round(r.top)+' bottom='+Math.round(r.bottom)+' vh='+innerHeight+' cls='+d.className;
+ document.body.appendChild(tag);
+ },400);
+ });
+},600)});</script></body>
+</html>
diff --git a/docs/_dockcheck2.html b/docs/_dockcheck2.html
new file mode 100644
index 0000000..7704f3b
--- /dev/null
+++ b/docs/_dockcheck2.html
@@ -0,0 +1,942 @@
+<!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 puts your wholesale catalog on your customers' phones under your own brand. Customer-specific pricing, order minimums, iOS and Android apps, and QuickBooks sync. $599/mo flat — no revenue share. Book a demo." />
+ <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="Your catalog, your brand, your pricing — on your customers' phones. Orders arrive priced-out and synced to QuickBooks." />
+ <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" />
+</head>
+
+<body>
+
+ <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/meet" 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/meet" target="_blank" rel="noopener">Book a demo</a>
+ </nav>
+ </header>
+
+ <main>
+
+ <!-- ── Hero ─────────────────────────────────────────────────────────── -->
+ <section class="hero">
+ <div class="wrap">
+ <div class="hero-copy">
+ <span class="eyebrow">For produce, meat & specialty food distributors</span>
+
+ <h1 class="h-xl">Take orders<br /><span class="accent">in your sleep</span>.</h1>
+
+ <p class="lede">
+ Vegy puts your full catalog — your brand, your pricing, your minimums — on
+ your customers' phones. They order whenever they think of it. You wake up to
+ priced-out orders that are already in QuickBooks.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-primary" href="https://cal.com/afterdarklabs/meet" 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">
+ White-labeled · Web, iOS & Android · Order by text · 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">
+ <p class="eyebrow">Running on Vegy today</p>
+ <div class="trust-logos">
+ <img src="gardenfresh.webp" width="437" height="132" loading="lazy"
+ alt="Garden Fresh Produce LLC" />
+ <span class="trust-sep" aria-hidden="true"></span>
+ <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">
+ <span class="eyebrow">Why Vegy</span>
+ <h2 class="h-lg">Every order still gets typed in by hand</h2>
+ <p class="lede">
+ Orders reach you a different way every time, and one person turns all of
+ them into something the warehouse can pull. Here is what changes, line by
+ line.
+ </p>
+ </div>
+
+ <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">Voicemail · 11:40 PM</span>
+ <p>“Hey it’s Mike, give me the usual plus a couple cases of romaine, uh — call me back.”</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’s AI picks up, turns the call into a structured order on Mike’s account, and prices it against his tier. It’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>“4 tomato, 2 onion, 6 lettuce” — no pack sizes, no case counts, no 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 · 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>They order from your live catalog instead, so the price is whatever their tier says today — and minimums are checked at checkout.</p>
+ </div>
+ </div>
+ <div class="swap-row">
+ <div class="swap-from">
+ <span class="cell-label">How it arrives today</span>
+ <span class="chan">Then, every time</span>
+ <p>Someone re-keys all of it by hand before the pull sheets go out. That’s where the shorts come from, and the wrong pack sizes, and the credits.</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>Nothing gets typed twice. The order syncs into QuickBooks as a customer, items, and an invoice, and the pull sheet prints itself.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── How it works ─────────────────────────────────────────────────── -->
+ <section class="section" id="how">
+ <div class="wrap">
+ <div class="section-head center reveal">
+ <span class="eyebrow">How it works</span>
+ <h2 class="h-lg">Three steps, and the phone stops ringing</h2>
+ </div>
+
+ <div class="rows">
+ <div class="row reveal">
+ <div class="row-text">
+ <span class="eyebrow">Step 01</span>
+ <h3 class="h-md">We load your catalog</h3>
+ <p>
+ Your item list, pack sizes, categories, and price tiers get imported for
+ you — nothing gets rebuilt by hand. Then it's your logo, your product
+ photos, your category names, on your own domain.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Your catalog</span><span class="tag">Imported</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">
+ <span class="eyebrow">Step 02</span>
+ <h3 class="h-md">Your customers order</h3>
+ <p>
+ From your website, your own iOS and Android app, or straight over voice
+ and text. Last week's order is right there, so a reorder takes seconds
+ instead of a phone call — at 11pm, on a Sunday, from a walk-in cooler.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Sunrise Cafe · 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">
+ <span class="eyebrow">Step 03</span>
+ <h3 class="h-md">You get a clean order</h3>
+ <p>
+ Priced against that customer's tier, checked against your minimums, and
+ synced to QuickBooks or your ERP. Print pull sheets, 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 & 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">
+ <span class="eyebrow">Features</span>
+ <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">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <rect x="5" y="2" width="14" height="20" rx="2.5" /><path d="M12 18h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Order from anywhere</h3>
+ <p>
+ Your own website, mobile web, native iOS and Android apps, or AI-powered
+ ordering by voice and text for customers who will never open an app.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M12.6 2.6 21 11a2 2 0 0 1 0 2.8l-7.2 7.2a2 2 0 0 1-2.8 0L3 12.6V4a1 1 0 0 1 1-1h8.6Z" /><path d="M7.5 7.5h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M3 17l6-6 4 4 8-8" /><path d="M17 7h4v4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Bigger orders, on purpose</h3>
+ <p>
+ Promote featured items, push new products in front of the right accounts,
+ and let favorites and one-tap reorder do the rest.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M21 12a9 9 0 0 1-15.5 6.2L3 16" /><path d="M3 12a9 9 0 0 1 15.5-6.2L21 8" /><path d="M3 21v-5h5" /><path d="M21 3v5h-5" />
+ </svg>
+ </div>
+ <h3 class="h-sm">QuickBooks & ERP sync</h3>
+ <p>
+ Customers, items, and invoices flow into QuickBooks or your existing ERP.
+ No double entry, no end-of-day export ritual.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M14 2H6.5A1.5 1.5 0 0 0 5 3.5v17A1.5 1.5 0 0 0 6.5 22h11a1.5 1.5 0 0 0 1.5-1.5V7Z" /><path d="M14 2v5h5" /><path d="M9 13h6" /><path d="M9 17h4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M2 7h11v10H2z" /><path d="M13 10h4.5l3.5 3.5V17h-8" /><circle cx="7" cy="18.5" r="1.8" /><circle cx="17" cy="18.5" r="1.8" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Inventory & 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>
+ </article>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── Dark: differentiators ────────────────────────────────────────── -->
+ <section class="section band-dark">
+ <div class="wrap">
+ <div class="section-head reveal">
+ <span class="eyebrow">Where Vegy is different</span>
+ <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)">
+ Your customers download your app, from your listing, and see your logo
+ when it opens. Nobody has to know there's a software vendor behind your
+ 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 & colors</span><span class="price ok">Yours</span></div>
+ <div class="mock-line"><span>Catalog & 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">
+ <span class="eyebrow">Pricing</span>
+ <h2 class="h-lg">No revenue share. No per-seat games.</h2>
+ <p class="lede">
+ A flat monthly fee, plus a quarter when our AI takes the order for you. A
+ $4,000 order costs you exactly what a $400 order costs you.
+ </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 — voice, text & web</p>
+ </div>
+ </div>
+
+ <ul class="included">
+ <li>Your white-labeled web storefront and ordering domain</li>
+ <li>Native iOS and Android apps published under your brand</li>
+ <li>Unlimited customer accounts and pricing tiers</li>
+ <li>QuickBooks sync, or integration with your existing ERP</li>
+ <li>Catalog import and account setup, done by us</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/meet" 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 wrap-narrow">
+ <div class="section-head center reveal">
+ <span class="eyebrow">Straight answers</span>
+ <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 of them reorder the same twenty items every week, and that's the case
+ Vegy is built around — their last order is on the first screen, and
+ reordering is a few taps.
+ </p>
+ <p>
+ For the holdouts, voice and text ordering means they keep calling and
+ texting exactly like they do now. The difference is that it lands in your
+ system as a structured, priced order instead of in someone's inbox.
+ </p>
+ </div>
+ </details>
+
+ <details>
+ <summary>What about the customers who insist on calling?</summary>
+ <div class="answer">
+ <p>
+ Keep taking their calls. Your team enters the order on their behalf and it
+ goes through the same pricing, minimums, and QuickBooks sync as everything
+ else. Nobody gets cut off — you just stop re-keying the ones who don't need
+ to 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 do the catalog import — your item list, pack sizes, and price tiers — so
+ the work on your side is mostly reviewing what we loaded and approving the
+ branding.
+ </p>
+ <p>
+ Timeline depends on how many items and accounts you're bringing over. Book
+ a demo and we'll scope it against your actual catalog rather than guessing.
+ </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 & 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 voice, text, 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 your own catalog running on it</h2>
+ <p>
+ Send us a price list before the call and we'll load a slice of your real
+ catalog, so you're looking at your own items — not a generic sandbox.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-white" href="https://cal.com/afterdarklabs/meet" 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 your items, your tiers, and your minimums 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/meet" 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 & 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/meet" 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 customer-specific pricing tiers, order minimums, white-labeled iOS and Android apps, voice and text ordering, and QuickBooks sync.",
+ "offers": {
+ "@type": "Offer",
+ "price": "599",
+ "priceCurrency": "USD",
+ "description": "$599 per month platform fee, plus $0.25 per AI-processed order (voice, text, and 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 of them reorder the same twenty items every week, and that's the case Vegy is built around — their last order is on the first screen, and reordering is a few taps. For the holdouts, voice and text ordering means they keep calling and texting exactly like they do now. The difference is that it lands in your system as a structured, priced order instead of in someone's inbox."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What about the customers who insist on calling?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Keep taking their calls. Your team enters the order on their behalf and it goes through the same pricing, minimums, and QuickBooks sync as everything else. Nobody gets cut off — you just stop re-keying the ones who don't need to 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 do the catalog import — your item list, pack sizes, and price tiers — so the work on your side is mostly reviewing what we loaded and approving the branding. Timeline depends on how many items and accounts you're bringing over."
+ }
+ },
+ {
+ "@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 voice, text, 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>
+
+<script>addEventListener('load',function(){setTimeout(function(){
+ var d=document.getElementById('dock');
+ d.style.transition='none';
+ d.classList.add('is-up');
+ var r=d.getBoundingClientRect();
+ var tag=document.createElement('div');
+ tag.style.cssText='position:fixed;top:0;left:0;z-index:99999;background:#ff0;color:#000;font:12px monospace;padding:4px';
+ tag.textContent='top='+Math.round(r.top)+' bottom='+Math.round(r.bottom)+' vh='+innerHeight;
+ document.body.appendChild(tag);
+},600)});</script></body>
+</html>
diff --git a/docs/_pa.html b/docs/_pa.html
new file mode 100644
index 0000000..0323924
--- /dev/null
+++ b/docs/_pa.html
@@ -0,0 +1,935 @@
+<!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 puts your wholesale catalog on your customers' phones under your own brand. Customer-specific pricing, order minimums, iOS and Android apps, and QuickBooks sync. $599/mo flat — no revenue share. Book a demo." />
+ <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="Your catalog, your brand, your pricing — on your customers' phones. Orders arrive priced-out and synced to QuickBooks." />
+ <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" />
+</head>
+
+<body>
+
+ <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/meet" 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/meet" target="_blank" rel="noopener">Book a demo</a>
+ </nav>
+ </header>
+
+ <main>
+
+ <!-- ── Hero ─────────────────────────────────────────────────────────── -->
+ <section class="hero">
+ <div class="wrap">
+ <div class="hero-copy">
+ <span class="eyebrow">For produce, meat & specialty food distributors</span>
+
+ <h1 class="h-xl">Take orders<br /><span class="accent">in your sleep</span>.</h1>
+
+ <p class="lede">
+ Vegy puts your full catalog — your brand, your pricing, your minimums — on
+ your customers' phones. They order whenever they think of it. You wake up to
+ priced-out orders that are already in QuickBooks.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-primary" href="https://cal.com/afterdarklabs/meet" 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">
+ White-labeled · Web, iOS & Android · Order by text · 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">
+ <p class="eyebrow">Running on Vegy today</p>
+ <div class="trust-logos">
+ <img src="gardenfresh.webp" width="437" height="132" loading="lazy"
+ alt="Garden Fresh Produce LLC" />
+ <span class="trust-sep" aria-hidden="true"></span>
+ <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">
+ <span class="eyebrow">Why Vegy</span>
+ <h2 class="h-lg">Every order still gets typed in by hand</h2>
+ <p class="lede">
+ Orders reach you a different way every time, and one person turns all of
+ them into something the warehouse can pull. Here is what changes, line by
+ line.
+ </p>
+ </div>
+
+ <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">Voicemail · 11:40 PM</span>
+ <p>“Hey it’s Mike, give me the usual plus a couple cases of romaine, uh — call me back.”</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’s AI picks up, turns the call into a structured order on Mike’s account, and prices it against his tier. It’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>“4 tomato, 2 onion, 6 lettuce” — no pack sizes, no case counts, no 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 · 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>They order from your live catalog instead, so the price is whatever their tier says today — and minimums are checked at checkout.</p>
+ </div>
+ </div>
+ <div class="swap-row">
+ <div class="swap-from">
+ <span class="cell-label">How it arrives today</span>
+ <span class="chan">Then, every time</span>
+ <p>Someone re-keys all of it by hand before the pull sheets go out. That’s where the shorts come from, and the wrong pack sizes, and the credits.</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>Nothing gets typed twice. The order syncs into QuickBooks as a customer, items, and an invoice, and the pull sheet prints itself.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── How it works ─────────────────────────────────────────────────── -->
+ <section class="section" id="how">
+ <div class="wrap">
+ <div class="section-head center reveal">
+ <span class="eyebrow">How it works</span>
+ <h2 class="h-lg">Three steps, and the phone stops ringing</h2>
+ </div>
+
+ <div class="rows">
+ <div class="row reveal">
+ <div class="row-text">
+ <span class="eyebrow">Step 01</span>
+ <h3 class="h-md">We load your catalog</h3>
+ <p>
+ Your item list, pack sizes, categories, and price tiers get imported for
+ you — nothing gets rebuilt by hand. Then it's your logo, your product
+ photos, your category names, on your own domain.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Your catalog</span><span class="tag">Imported</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">
+ <span class="eyebrow">Step 02</span>
+ <h3 class="h-md">Your customers order</h3>
+ <p>
+ From your website, your own iOS and Android app, or straight over voice
+ and text. Last week's order is right there, so a reorder takes seconds
+ instead of a phone call — at 11pm, on a Sunday, from a walk-in cooler.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Sunrise Cafe · 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">
+ <span class="eyebrow">Step 03</span>
+ <h3 class="h-md">You get a clean order</h3>
+ <p>
+ Priced against that customer's tier, checked against your minimums, and
+ synced to QuickBooks or your ERP. Print pull sheets, 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 & 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">
+ <span class="eyebrow">Features</span>
+ <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">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <rect x="5" y="2" width="14" height="20" rx="2.5" /><path d="M12 18h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Order from anywhere</h3>
+ <p>
+ Your own website, mobile web, native iOS and Android apps, or AI-powered
+ ordering by voice and text for customers who will never open an app.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M12.6 2.6 21 11a2 2 0 0 1 0 2.8l-7.2 7.2a2 2 0 0 1-2.8 0L3 12.6V4a1 1 0 0 1 1-1h8.6Z" /><path d="M7.5 7.5h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M3 17l6-6 4 4 8-8" /><path d="M17 7h4v4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Bigger orders, on purpose</h3>
+ <p>
+ Promote featured items, push new products in front of the right accounts,
+ and let favorites and one-tap reorder do the rest.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M21 12a9 9 0 0 1-15.5 6.2L3 16" /><path d="M3 12a9 9 0 0 1 15.5-6.2L21 8" /><path d="M3 21v-5h5" /><path d="M21 3v5h-5" />
+ </svg>
+ </div>
+ <h3 class="h-sm">QuickBooks & ERP sync</h3>
+ <p>
+ Customers, items, and invoices flow into QuickBooks or your existing ERP.
+ No double entry, no end-of-day export ritual.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M14 2H6.5A1.5 1.5 0 0 0 5 3.5v17A1.5 1.5 0 0 0 6.5 22h11a1.5 1.5 0 0 0 1.5-1.5V7Z" /><path d="M14 2v5h5" /><path d="M9 13h6" /><path d="M9 17h4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M2 7h11v10H2z" /><path d="M13 10h4.5l3.5 3.5V17h-8" /><circle cx="7" cy="18.5" r="1.8" /><circle cx="17" cy="18.5" r="1.8" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Inventory & 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>
+ </article>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── Dark: differentiators ────────────────────────────────────────── -->
+ <section class="section band-dark">
+ <div class="wrap">
+ <div class="section-head reveal">
+ <span class="eyebrow">Where Vegy is different</span>
+ <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)">
+ Your customers download your app, from your listing, and see your logo
+ when it opens. Nobody has to know there's a software vendor behind your
+ 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 & colors</span><span class="price ok">Yours</span></div>
+ <div class="mock-line"><span>Catalog & 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">
+ <span class="eyebrow">Pricing</span>
+ <h2 class="h-lg">No revenue share. No per-seat games.</h2>
+ <p class="lede">
+ A flat monthly fee, plus a quarter when our AI takes the order for you. A
+ $4,000 order costs you exactly what a $400 order costs you.
+ </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 — voice, text & web</p>
+ </div>
+ </div>
+
+ <ul class="included">
+ <li>Your white-labeled web storefront and ordering domain</li>
+ <li>Native iOS and Android apps published under your brand</li>
+ <li>Unlimited customer accounts and pricing tiers</li>
+ <li>QuickBooks sync, or integration with your existing ERP</li>
+ <li>Catalog import and account setup, done by us</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/meet" 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 wrap-narrow">
+ <div class="section-head center reveal">
+ <span class="eyebrow">Straight answers</span>
+ <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 of them reorder the same twenty items every week, and that's the case
+ Vegy is built around — their last order is on the first screen, and
+ reordering is a few taps.
+ </p>
+ <p>
+ For the holdouts, voice and text ordering means they keep calling and
+ texting exactly like they do now. The difference is that it lands in your
+ system as a structured, priced order instead of in someone's inbox.
+ </p>
+ </div>
+ </details>
+
+ <details>
+ <summary>What about the customers who insist on calling?</summary>
+ <div class="answer">
+ <p>
+ Keep taking their calls. Your team enters the order on their behalf and it
+ goes through the same pricing, minimums, and QuickBooks sync as everything
+ else. Nobody gets cut off — you just stop re-keying the ones who don't need
+ to 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 do the catalog import — your item list, pack sizes, and price tiers — so
+ the work on your side is mostly reviewing what we loaded and approving the
+ branding.
+ </p>
+ <p>
+ Timeline depends on how many items and accounts you're bringing over. Book
+ a demo and we'll scope it against your actual catalog rather than guessing.
+ </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 & 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 voice, text, 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 your own catalog running on it</h2>
+ <p>
+ Send us a price list before the call and we'll load a slice of your real
+ catalog, so you're looking at your own items — not a generic sandbox.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-white" href="https://cal.com/afterdarklabs/meet" 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 your items, your tiers, and your minimums 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/meet" 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 & 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/meet" 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 customer-specific pricing tiers, order minimums, white-labeled iOS and Android apps, voice and text ordering, and QuickBooks sync.",
+ "offers": {
+ "@type": "Offer",
+ "price": "599",
+ "priceCurrency": "USD",
+ "description": "$599 per month platform fee, plus $0.25 per AI-processed order (voice, text, and 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 of them reorder the same twenty items every week, and that's the case Vegy is built around — their last order is on the first screen, and reordering is a few taps. For the holdouts, voice and text ordering means they keep calling and texting exactly like they do now. The difference is that it lands in your system as a structured, priced order instead of in someone's inbox."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What about the customers who insist on calling?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Keep taking their calls. Your team enters the order on their behalf and it goes through the same pricing, minimums, and QuickBooks sync as everything else. Nobody gets cut off — you just stop re-keying the ones who don't need to 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 do the catalog import — your item list, pack sizes, and price tiers — so the work on your side is mostly reviewing what we loaded and approving the branding. Timeline depends on how many items and accounts you're bringing over."
+ }
+ },
+ {
+ "@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 voice, text, 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>
+
+<script>addEventListener('load',function(){setTimeout(function(){
+ document.getElementById('navToggle').click();
+},500)});</script></body>
+</html>
diff --git a/docs/_pb.html b/docs/_pb.html
new file mode 100644
index 0000000..a24b761
--- /dev/null
+++ b/docs/_pb.html
@@ -0,0 +1,945 @@
+<!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 puts your wholesale catalog on your customers' phones under your own brand. Customer-specific pricing, order minimums, iOS and Android apps, and QuickBooks sync. $599/mo flat — no revenue share. Book a demo." />
+ <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="Your catalog, your brand, your pricing — on your customers' phones. Orders arrive priced-out and synced to QuickBooks." />
+ <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" />
+</head>
+
+<body>
+
+ <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/meet" 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/meet" target="_blank" rel="noopener">Book a demo</a>
+ </nav>
+ </header>
+
+ <main>
+
+ <!-- ── Hero ─────────────────────────────────────────────────────────── -->
+ <section class="hero">
+ <div class="wrap">
+ <div class="hero-copy">
+ <span class="eyebrow">For produce, meat & specialty food distributors</span>
+
+ <h1 class="h-xl">Take orders<br /><span class="accent">in your sleep</span>.</h1>
+
+ <p class="lede">
+ Vegy puts your full catalog — your brand, your pricing, your minimums — on
+ your customers' phones. They order whenever they think of it. You wake up to
+ priced-out orders that are already in QuickBooks.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-primary" href="https://cal.com/afterdarklabs/meet" 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">
+ White-labeled · Web, iOS & Android · Order by text · 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">
+ <p class="eyebrow">Running on Vegy today</p>
+ <div class="trust-logos">
+ <img src="gardenfresh.webp" width="437" height="132" loading="lazy"
+ alt="Garden Fresh Produce LLC" />
+ <span class="trust-sep" aria-hidden="true"></span>
+ <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">
+ <span class="eyebrow">Why Vegy</span>
+ <h2 class="h-lg">Every order still gets typed in by hand</h2>
+ <p class="lede">
+ Orders reach you a different way every time, and one person turns all of
+ them into something the warehouse can pull. Here is what changes, line by
+ line.
+ </p>
+ </div>
+
+ <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">Voicemail · 11:40 PM</span>
+ <p>“Hey it’s Mike, give me the usual plus a couple cases of romaine, uh — call me back.”</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’s AI picks up, turns the call into a structured order on Mike’s account, and prices it against his tier. It’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>“4 tomato, 2 onion, 6 lettuce” — no pack sizes, no case counts, no 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 · 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>They order from your live catalog instead, so the price is whatever their tier says today — and minimums are checked at checkout.</p>
+ </div>
+ </div>
+ <div class="swap-row">
+ <div class="swap-from">
+ <span class="cell-label">How it arrives today</span>
+ <span class="chan">Then, every time</span>
+ <p>Someone re-keys all of it by hand before the pull sheets go out. That’s where the shorts come from, and the wrong pack sizes, and the credits.</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>Nothing gets typed twice. The order syncs into QuickBooks as a customer, items, and an invoice, and the pull sheet prints itself.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── How it works ─────────────────────────────────────────────────── -->
+ <section class="section" id="how">
+ <div class="wrap">
+ <div class="section-head center reveal">
+ <span class="eyebrow">How it works</span>
+ <h2 class="h-lg">Three steps, and the phone stops ringing</h2>
+ </div>
+
+ <div class="rows">
+ <div class="row reveal">
+ <div class="row-text">
+ <span class="eyebrow">Step 01</span>
+ <h3 class="h-md">We load your catalog</h3>
+ <p>
+ Your item list, pack sizes, categories, and price tiers get imported for
+ you — nothing gets rebuilt by hand. Then it's your logo, your product
+ photos, your category names, on your own domain.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Your catalog</span><span class="tag">Imported</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">
+ <span class="eyebrow">Step 02</span>
+ <h3 class="h-md">Your customers order</h3>
+ <p>
+ From your website, your own iOS and Android app, or straight over voice
+ and text. Last week's order is right there, so a reorder takes seconds
+ instead of a phone call — at 11pm, on a Sunday, from a walk-in cooler.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Sunrise Cafe · 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">
+ <span class="eyebrow">Step 03</span>
+ <h3 class="h-md">You get a clean order</h3>
+ <p>
+ Priced against that customer's tier, checked against your minimums, and
+ synced to QuickBooks or your ERP. Print pull sheets, 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 & 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">
+ <span class="eyebrow">Features</span>
+ <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">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <rect x="5" y="2" width="14" height="20" rx="2.5" /><path d="M12 18h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Order from anywhere</h3>
+ <p>
+ Your own website, mobile web, native iOS and Android apps, or AI-powered
+ ordering by voice and text for customers who will never open an app.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M12.6 2.6 21 11a2 2 0 0 1 0 2.8l-7.2 7.2a2 2 0 0 1-2.8 0L3 12.6V4a1 1 0 0 1 1-1h8.6Z" /><path d="M7.5 7.5h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M3 17l6-6 4 4 8-8" /><path d="M17 7h4v4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Bigger orders, on purpose</h3>
+ <p>
+ Promote featured items, push new products in front of the right accounts,
+ and let favorites and one-tap reorder do the rest.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M21 12a9 9 0 0 1-15.5 6.2L3 16" /><path d="M3 12a9 9 0 0 1 15.5-6.2L21 8" /><path d="M3 21v-5h5" /><path d="M21 3v5h-5" />
+ </svg>
+ </div>
+ <h3 class="h-sm">QuickBooks & ERP sync</h3>
+ <p>
+ Customers, items, and invoices flow into QuickBooks or your existing ERP.
+ No double entry, no end-of-day export ritual.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M14 2H6.5A1.5 1.5 0 0 0 5 3.5v17A1.5 1.5 0 0 0 6.5 22h11a1.5 1.5 0 0 0 1.5-1.5V7Z" /><path d="M14 2v5h5" /><path d="M9 13h6" /><path d="M9 17h4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M2 7h11v10H2z" /><path d="M13 10h4.5l3.5 3.5V17h-8" /><circle cx="7" cy="18.5" r="1.8" /><circle cx="17" cy="18.5" r="1.8" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Inventory & 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>
+ </article>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── Dark: differentiators ────────────────────────────────────────── -->
+ <section class="section band-dark">
+ <div class="wrap">
+ <div class="section-head reveal">
+ <span class="eyebrow">Where Vegy is different</span>
+ <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)">
+ Your customers download your app, from your listing, and see your logo
+ when it opens. Nobody has to know there's a software vendor behind your
+ 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 & colors</span><span class="price ok">Yours</span></div>
+ <div class="mock-line"><span>Catalog & 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">
+ <span class="eyebrow">Pricing</span>
+ <h2 class="h-lg">No revenue share. No per-seat games.</h2>
+ <p class="lede">
+ A flat monthly fee, plus a quarter when our AI takes the order for you. A
+ $4,000 order costs you exactly what a $400 order costs you.
+ </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 — voice, text & web</p>
+ </div>
+ </div>
+
+ <ul class="included">
+ <li>Your white-labeled web storefront and ordering domain</li>
+ <li>Native iOS and Android apps published under your brand</li>
+ <li>Unlimited customer accounts and pricing tiers</li>
+ <li>QuickBooks sync, or integration with your existing ERP</li>
+ <li>Catalog import and account setup, done by us</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/meet" 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 wrap-narrow">
+ <div class="section-head center reveal">
+ <span class="eyebrow">Straight answers</span>
+ <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 of them reorder the same twenty items every week, and that's the case
+ Vegy is built around — their last order is on the first screen, and
+ reordering is a few taps.
+ </p>
+ <p>
+ For the holdouts, voice and text ordering means they keep calling and
+ texting exactly like they do now. The difference is that it lands in your
+ system as a structured, priced order instead of in someone's inbox.
+ </p>
+ </div>
+ </details>
+
+ <details>
+ <summary>What about the customers who insist on calling?</summary>
+ <div class="answer">
+ <p>
+ Keep taking their calls. Your team enters the order on their behalf and it
+ goes through the same pricing, minimums, and QuickBooks sync as everything
+ else. Nobody gets cut off — you just stop re-keying the ones who don't need
+ to 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 do the catalog import — your item list, pack sizes, and price tiers — so
+ the work on your side is mostly reviewing what we loaded and approving the
+ branding.
+ </p>
+ <p>
+ Timeline depends on how many items and accounts you're bringing over. Book
+ a demo and we'll scope it against your actual catalog rather than guessing.
+ </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 & 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 voice, text, 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 your own catalog running on it</h2>
+ <p>
+ Send us a price list before the call and we'll load a slice of your real
+ catalog, so you're looking at your own items — not a generic sandbox.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-white" href="https://cal.com/afterdarklabs/meet" 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 your items, your tiers, and your minimums 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/meet" 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 & 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/meet" 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 customer-specific pricing tiers, order minimums, white-labeled iOS and Android apps, voice and text ordering, and QuickBooks sync.",
+ "offers": {
+ "@type": "Offer",
+ "price": "599",
+ "priceCurrency": "USD",
+ "description": "$599 per month platform fee, plus $0.25 per AI-processed order (voice, text, and 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 of them reorder the same twenty items every week, and that's the case Vegy is built around — their last order is on the first screen, and reordering is a few taps. For the holdouts, voice and text ordering means they keep calling and texting exactly like they do now. The difference is that it lands in your system as a structured, priced order instead of in someone's inbox."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What about the customers who insist on calling?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Keep taking their calls. Your team enters the order on their behalf and it goes through the same pricing, minimums, and QuickBooks sync as everything else. Nobody gets cut off — you just stop re-keying the ones who don't need to 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 do the catalog import — your item list, pack sizes, and price tiers — so the work on your side is mostly reviewing what we loaded and approving the branding. Timeline depends on how many items and accounts you're bringing over."
+ }
+ },
+ {
+ "@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 voice, text, 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>
+
+<script>addEventListener('load',function(){setTimeout(function(){
+ var d=document.getElementById('dock');
+ d.classList.add('is-up');
+ requestAnimationFrame(function(){
+ setTimeout(function(){
+ var r=d.getBoundingClientRect();
+ var tag=document.createElement('div');
+ tag.style.cssText='position:fixed;top:0;left:0;z-index:99999;background:#ff0;color:#000;font:12px monospace;padding:4px';
+ tag.textContent='dock rect top='+Math.round(r.top)+' bottom='+Math.round(r.bottom)+' vh='+innerHeight+' cls='+d.className;
+ document.body.appendChild(tag);
+ },400);
+ });
+},600)});</script></body>
+</html>
diff --git a/docs/_probe.html b/docs/_probe.html
new file mode 100644
index 0000000..fbc17d8
--- /dev/null
+++ b/docs/_probe.html
@@ -0,0 +1,979 @@
+<!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 puts your wholesale catalog on your customers' phones under your own brand. Customer-specific pricing, order minimums, iOS and Android apps, and QuickBooks sync. $599/mo flat — no revenue share. Book a demo." />
+ <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="Your catalog, your brand, your pricing — on your customers' phones. Orders arrive priced-out and synced to QuickBooks." />
+ <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" />
+</head>
+
+<body>
+
+ <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/meet" 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/meet" target="_blank" rel="noopener">Book a demo</a>
+ </nav>
+ </header>
+
+ <main>
+
+ <!-- ── Hero ─────────────────────────────────────────────────────────── -->
+ <section class="hero">
+ <div class="wrap">
+ <div class="hero-copy">
+ <span class="eyebrow">For produce, meat & specialty food distributors</span>
+
+ <h1 class="h-xl">Take orders<br /><span class="accent">in your sleep</span>.</h1>
+
+ <p class="lede">
+ Vegy puts your full catalog — your brand, your pricing, your minimums — on
+ your customers' phones. They order whenever they think of it. You wake up to
+ priced-out orders that are already in QuickBooks.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-primary" href="https://cal.com/afterdarklabs/meet" 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">
+ White-labeled · Web, iOS & Android · Order by text · 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">
+ <p class="eyebrow">Running on Vegy today</p>
+ <div class="trust-logos">
+ <img src="gardenfresh.webp" width="437" height="132" loading="lazy"
+ alt="Garden Fresh Produce LLC" />
+ <span class="trust-sep" aria-hidden="true"></span>
+ <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">
+ <span class="eyebrow">Why Vegy</span>
+ <h2 class="h-lg">Every order still gets typed in by hand</h2>
+ <p class="lede">
+ Orders reach you a different way every time, and one person turns all of
+ them into something the warehouse can pull. Here is what changes, line by
+ line.
+ </p>
+ </div>
+
+ <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">Voicemail · 11:40 PM</span>
+ <p>“Hey it’s Mike, give me the usual plus a couple cases of romaine, uh — call me back.”</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’s AI picks up, turns the call into a structured order on Mike’s account, and prices it against his tier. It’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>“4 tomato, 2 onion, 6 lettuce” — no pack sizes, no case counts, no 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 · 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>They order from your live catalog instead, so the price is whatever their tier says today — and minimums are checked at checkout.</p>
+ </div>
+ </div>
+ <div class="swap-row">
+ <div class="swap-from">
+ <span class="cell-label">How it arrives today</span>
+ <span class="chan">Then, every time</span>
+ <p>Someone re-keys all of it by hand before the pull sheets go out. That’s where the shorts come from, and the wrong pack sizes, and the credits.</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>Nothing gets typed twice. The order syncs into QuickBooks as a customer, items, and an invoice, and the pull sheet prints itself.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── How it works ─────────────────────────────────────────────────── -->
+ <section class="section" id="how">
+ <div class="wrap">
+ <div class="section-head center reveal">
+ <span class="eyebrow">How it works</span>
+ <h2 class="h-lg">Three steps, and the phone stops ringing</h2>
+ </div>
+
+ <div class="rows">
+ <div class="row reveal">
+ <div class="row-text">
+ <span class="eyebrow">Step 01</span>
+ <h3 class="h-md">We load your catalog</h3>
+ <p>
+ Your item list, pack sizes, categories, and price tiers get imported for
+ you — nothing gets rebuilt by hand. Then it's your logo, your product
+ photos, your category names, on your own domain.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Your catalog</span><span class="tag">Imported</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">
+ <span class="eyebrow">Step 02</span>
+ <h3 class="h-md">Your customers order</h3>
+ <p>
+ From your website, your own iOS and Android app, or straight over voice
+ and text. Last week's order is right there, so a reorder takes seconds
+ instead of a phone call — at 11pm, on a Sunday, from a walk-in cooler.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Sunrise Cafe · 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">
+ <span class="eyebrow">Step 03</span>
+ <h3 class="h-md">You get a clean order</h3>
+ <p>
+ Priced against that customer's tier, checked against your minimums, and
+ synced to QuickBooks or your ERP. Print pull sheets, 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 & 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">
+ <span class="eyebrow">Features</span>
+ <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">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <rect x="5" y="2" width="14" height="20" rx="2.5" /><path d="M12 18h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Order from anywhere</h3>
+ <p>
+ Your own website, mobile web, native iOS and Android apps, or AI-powered
+ ordering by voice and text for customers who will never open an app.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M12.6 2.6 21 11a2 2 0 0 1 0 2.8l-7.2 7.2a2 2 0 0 1-2.8 0L3 12.6V4a1 1 0 0 1 1-1h8.6Z" /><path d="M7.5 7.5h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M3 17l6-6 4 4 8-8" /><path d="M17 7h4v4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Bigger orders, on purpose</h3>
+ <p>
+ Promote featured items, push new products in front of the right accounts,
+ and let favorites and one-tap reorder do the rest.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M21 12a9 9 0 0 1-15.5 6.2L3 16" /><path d="M3 12a9 9 0 0 1 15.5-6.2L21 8" /><path d="M3 21v-5h5" /><path d="M21 3v5h-5" />
+ </svg>
+ </div>
+ <h3 class="h-sm">QuickBooks & ERP sync</h3>
+ <p>
+ Customers, items, and invoices flow into QuickBooks or your existing ERP.
+ No double entry, no end-of-day export ritual.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M14 2H6.5A1.5 1.5 0 0 0 5 3.5v17A1.5 1.5 0 0 0 6.5 22h11a1.5 1.5 0 0 0 1.5-1.5V7Z" /><path d="M14 2v5h5" /><path d="M9 13h6" /><path d="M9 17h4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M2 7h11v10H2z" /><path d="M13 10h4.5l3.5 3.5V17h-8" /><circle cx="7" cy="18.5" r="1.8" /><circle cx="17" cy="18.5" r="1.8" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Inventory & 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>
+ </article>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── Dark: differentiators ────────────────────────────────────────── -->
+ <section class="section band-dark">
+ <div class="wrap">
+ <div class="section-head reveal">
+ <span class="eyebrow">Where Vegy is different</span>
+ <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)">
+ Your customers download your app, from your listing, and see your logo
+ when it opens. Nobody has to know there's a software vendor behind your
+ 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 & colors</span><span class="price ok">Yours</span></div>
+ <div class="mock-line"><span>Catalog & 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">
+ <span class="eyebrow">Pricing</span>
+ <h2 class="h-lg">No revenue share. No per-seat games.</h2>
+ <p class="lede">
+ A flat monthly fee, plus a quarter when our AI takes the order for you. A
+ $4,000 order costs you exactly what a $400 order costs you.
+ </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 — voice, text & web</p>
+ </div>
+ </div>
+
+ <ul class="included">
+ <li>Your white-labeled web storefront and ordering domain</li>
+ <li>Native iOS and Android apps published under your brand</li>
+ <li>Unlimited customer accounts and pricing tiers</li>
+ <li>QuickBooks sync, or integration with your existing ERP</li>
+ <li>Catalog import and account setup, done by us</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/meet" 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 wrap-narrow">
+ <div class="section-head center reveal">
+ <span class="eyebrow">Straight answers</span>
+ <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 of them reorder the same twenty items every week, and that's the case
+ Vegy is built around — their last order is on the first screen, and
+ reordering is a few taps.
+ </p>
+ <p>
+ For the holdouts, voice and text ordering means they keep calling and
+ texting exactly like they do now. The difference is that it lands in your
+ system as a structured, priced order instead of in someone's inbox.
+ </p>
+ </div>
+ </details>
+
+ <details>
+ <summary>What about the customers who insist on calling?</summary>
+ <div class="answer">
+ <p>
+ Keep taking their calls. Your team enters the order on their behalf and it
+ goes through the same pricing, minimums, and QuickBooks sync as everything
+ else. Nobody gets cut off — you just stop re-keying the ones who don't need
+ to 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 do the catalog import — your item list, pack sizes, and price tiers — so
+ the work on your side is mostly reviewing what we loaded and approving the
+ branding.
+ </p>
+ <p>
+ Timeline depends on how many items and accounts you're bringing over. Book
+ a demo and we'll scope it against your actual catalog rather than guessing.
+ </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 & 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 voice, text, 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 your own catalog running on it</h2>
+ <p>
+ Send us a price list before the call and we'll load a slice of your real
+ catalog, so you're looking at your own items — not a generic sandbox.
+ </p>
+
+ <div class="cta-row center">
+ <a class="btn btn-white" href="https://cal.com/afterdarklabs/meet" 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 your items, your tiers, and your minimums 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/meet" 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 & 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/meet" 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 customer-specific pricing tiers, order minimums, white-labeled iOS and Android apps, voice and text ordering, and QuickBooks sync.",
+ "offers": {
+ "@type": "Offer",
+ "price": "599",
+ "priceCurrency": "USD",
+ "description": "$599 per month platform fee, plus $0.25 per AI-processed order (voice, text, and 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 of them reorder the same twenty items every week, and that's the case Vegy is built around — their last order is on the first screen, and reordering is a few taps. For the holdouts, voice and text ordering means they keep calling and texting exactly like they do now. The difference is that it lands in your system as a structured, priced order instead of in someone's inbox."
+ }
+ },
+ {
+ "@type": "Question",
+ "name": "What about the customers who insist on calling?",
+ "acceptedAnswer": {
+ "@type": "Answer",
+ "text": "Keep taking their calls. Your team enters the order on their behalf and it goes through the same pricing, minimums, and QuickBooks sync as everything else. Nobody gets cut off — you just stop re-keying the ones who don't need to 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 do the catalog import — your item list, pack sizes, and price tiers — so the work on your side is mostly reviewing what we loaded and approving the branding. Timeline depends on how many items and accounts you're bringing over."
+ }
+ },
+ {
+ "@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 voice, text, 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>
+
+
+<script>
+addEventListener('load', function(){
+ setTimeout(function(){
+ var out=[];
+ var mh=document.getElementById('masthead').offsetHeight;
+ out.push('masthead height: '+mh);
+ ['why','how','features','pricing','faq'].forEach(function(id){
+ var el=document.getElementById(id);
+ out.push(id+' scroll-margin-top: '+getComputedStyle(el).scrollMarginTop);
+ });
+ // simulate clicking the Features nav link
+ document.documentElement.style.scrollBehavior='auto';
+ var t=document.getElementById('features');
+ var target=t.getBoundingClientRect().top+scrollY-parseFloat(getComputedStyle(t).scrollMarginTop);
+ scrollTo(0,target);
+ var head=t.querySelector('.section-head');
+ out.push('--- after jumping to #features ---');
+ out.push('section top rel viewport: '+Math.round(t.getBoundingClientRect().top));
+ out.push('heading top rel viewport: '+Math.round(head.getBoundingClientRect().top));
+ out.push('clearance below masthead: '+Math.round(head.getBoundingClientRect().top-mh)+'px');
+ dispatchEvent(new Event('scroll'));
+ var act=[].slice.call(document.querySelectorAll('.nav-links a.is-active')).map(function(a){return a.textContent.trim()});
+ out.push('active nav link: '+(act.join(',')||'(none)'));
+ // dock behaviour
+ var dock=document.getElementById('dock');
+ scrollTo(0,0); dispatchEvent(new Event('scroll'));
+ out.push('--- dock ---');
+ out.push('at top: '+(dock.classList.contains('is-up')?'VISIBLE':'hidden'));
+ scrollTo(0,2000); dispatchEvent(new Event('scroll'));
+ out.push('mid page (2000): '+(dock.classList.contains('is-up')?'VISIBLE':'hidden'));
+ var band=document.querySelector('.cta-banner');
+ scrollTo(0, band.getBoundingClientRect().top+scrollY-innerHeight+200); dispatchEvent(new Event('scroll'));
+ out.push('closing CTA on screen: '+(dock.classList.contains('is-up')?'VISIBLE':'hidden'));
+ scrollTo(0, document.documentElement.scrollHeight); dispatchEvent(new Event('scroll'));
+ out.push('at footer: '+(dock.classList.contains('is-up')?'VISIBLE':'hidden'));
+ var act2=[].slice.call(document.querySelectorAll('.nav-links a.is-active')).map(function(a){return a.textContent.trim()});
+ out.push('active nav at bottom: '+(act2.join(',')||'(none)'));
+ scrollTo(0,0);
+ var pre=document.createElement('pre');
+ pre.style.cssText='position:fixed;inset:0;z-index:9999;background:#fff;color:#000;font:14px monospace;padding:20px;margin:0;white-space:pre-wrap';
+ pre.textContent=out.join('\n');
+ document.body.appendChild(pre);
+ },600);
+});
+</script>
+</body>
+</html>
diff --git a/docs/favicon.svg b/docs/favicon.svg
new file mode 100644
index 0000000..1dc6688
--- /dev/null
+++ b/docs/favicon.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
+ <rect width="32" height="32" rx="7" fill="#16a34a"/>
+ <g fill="none" stroke="#ffffff" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round">
+ <path d="M15 24a7.6 7.6 0 0 1-1.3-15.2C19.8 7.6 21.4 7 23.6 4.4c1.1 2.2 2.2 4.5 2.2 8.7 0 6-5.2 10.9-10.8 10.9Z"/>
+ <path d="M5.2 25.6c0-3.3 2-5.8 5.5-6.5 2.6-.5 5.4-2.2 6.5-3.3"/>
+ </g>
+</svg>
diff --git a/docs/gardenfresh.webp b/docs/gardenfresh.webp
new file mode 100644
index 0000000..b5f864d
Binary files /dev/null and b/docs/gardenfresh.webp differ
diff --git a/docs/index.html b/docs/index.html
index 48523ec..f068d2b 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -2,191 +2,931 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Vegy — Simplify Wholesale Ordering</title>
- <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;800&display=swap" rel="stylesheet" />
- <script src="https://cdn.tailwindcss.com"></script>
-
- <style>
- :root{
- /* PROFESSIONAL TEAL (mature, not “mint”) */
- --vegy-primary:#0f766e; /* teal-700 */
- --vegy-primary-dark:#115e59; /* teal-800 */
- --vegy-primary-soft: rgba(15,118,110,.10);
-
- /* professional neutrals */
- --bg:#f8fafc; /* slate-50 */
- --card:#ffffff;
- --text:#0f172a; /* slate-900 */
- --muted:#64748b; /* slate-500 */
- --border:rgba(15,23,42,.08);
-
- /* glass */
- --glass: rgba(255,255,255,.78);
- --glass-soft: rgba(255,255,255,.62);
- --shadow: 0 20px 60px rgba(15,23,42,.12);
- }
-
- html, body { height: 100%; }
- body {
- font-family: "Poppins", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
- background: var(--bg);
- color: var(--text);
- overflow-x: hidden;
- }
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <title>Vegy — Wholesale ordering software for food distributors</title>
+ <meta name="description" content="Vegy puts your wholesale catalog on your customers' phones under your own brand. Customer-specific pricing, order minimums, iOS and Android apps, and QuickBooks sync. $599/mo flat — no revenue share. Book a demo." />
+ <link rel="canonical" href="https://vegy.app/" />
- /* subtle highlights (teal + neutral) */
- .blob {
- position: absolute;
- width: 720px;
- height: 720px;
- border-radius: 9999px;
- filter: blur(110px);
- opacity: .14;
- background: rgba(15,118,110,.28);
- pointer-events: none;
- }
- .blob.b2{
- width: 600px;
- height: 600px;
- opacity: .10;
- background: rgba(2,132,199,.20); /* tiny cool tint for depth */
- }
+ <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="Your catalog, your brand, your pricing — on your customers' phones. Orders arrive priced-out and synced to QuickBooks." />
+ <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" />
- /* glass */
- .glass {
- background: var(--glass);
- backdrop-filter: blur(18px) saturate(160%);
- -webkit-backdrop-filter: blur(18px) saturate(160%);
- box-shadow: var(--shadow);
- }
+ <link rel="icon" href="favicon.svg" type="image/svg+xml" />
+ <link rel="apple-touch-icon" href="shot-catalog.png" />
- /* animation */
- .animate-fade-up { animation: fadeUp .7s cubic-bezier(.2,.8,.2,1) both; }
- @keyframes fadeUp {
- from { opacity: 0; transform: translateY(12px); }
- to { opacity: 1; transform: translateY(0); }
- }
- .floaty { animation: floaty 6s ease-in-out infinite; }
- @keyframes floaty {
- 0%,100%{ transform: translateY(0); }
- 50%{ transform: translateY(-8px); }
- }
-
- a:focus-visible, button:focus-visible {
- outline: 2px solid var(--vegy-primary);
- outline-offset: 3px;
- border-radius: 12px;
- }
- </style>
+ <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" />
</head>
<body>
- <!-- subtle highlights -->
- <div class="blob" style="top:-280px; left:-260px;"></div>
- <div class="blob b2" style="top:-260px; right:-260px;"></div>
-
- <!-- Nav -->
- <nav class="fixed top-0 inset-x-0 z-20">
- <div class="max-w-6xl mx-auto px-4 pt-4">
- <div class="glass rounded-2xl px-4 md:px-6 py-3 flex items-center justify-between">
- <a href="https://vegy.app/" class="text-2xl font-extrabold tracking-tight" style="color:var(--vegy-primary)">
- Vegy
- </a>
-
- <a href="https://calendly.com/hello-vegy/demo" target="_blank"
- class="px-4 py-2 rounded-xl text-white font-semibold transition"
- style="background:var(--vegy-primary)"
- onmouseover="this.style.background='var(--vegy-primary-dark)'"
- onmouseout="this.style.background='var(--vegy-primary)'">
- Book a Demo
- </a>
- </div>
+ <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/meet" 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>
-
- <!-- Hero -->
- <section class="min-h-screen flex items-center justify-center pt-28 pb-16 relative z-10">
- <div class="max-w-6xl mx-auto px-4">
- <div class="grid grid-cols-1 lg:grid-cols-12 gap-12 items-center">
-
- <!-- Copy -->
- <div class="lg:col-span-6 space-y-6">
- <h1 class="text-4xl md:text-6xl font-extrabold leading-tight tracking-tight animate-fade-up">
- Wholesale ordering,
- <span style="color:var(--vegy-primary)">done right.</span>
- </h1>
-
- <p class="text-lg md:text-xl max-w-xl animate-fade-up" style="animation-delay:.1s; color:var(--muted)">
- A professional, white-labeled ordering platform built for real wholesale businesses.
+ <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/meet" target="_blank" rel="noopener">Book a demo</a>
+ </nav>
+ </header>
+
+ <main>
+
+ <!-- ── Hero ─────────────────────────────────────────────────────────── -->
+ <section class="hero">
+ <div class="wrap">
+ <div class="hero-copy">
+ <span class="eyebrow">For produce, meat & specialty food distributors</span>
+
+ <h1 class="h-xl">Take orders<br /><span class="accent">in your sleep</span>.</h1>
+
+ <p class="lede">
+ Vegy puts your full catalog — your brand, your pricing, your minimums — on
+ your customers' phones. They order whenever they think of it. You wake up to
+ priced-out orders that are already in QuickBooks.
</p>
- <div class="animate-fade-up" style="animation-delay:.15s">
- <a href="https://calendly.com/hello-vegy/demo" target="_blank"
- class="inline-block px-6 py-3 rounded-2xl text-white font-semibold transition"
- style="background:var(--vegy-primary)"
- onmouseover="this.style.background='var(--vegy-primary-dark)'"
- onmouseout="this.style.background='var(--vegy-primary)'">
- See your catalog live, book a demo today
+ <div class="cta-row center">
+ <a class="btn btn-primary" href="https://cal.com/afterdarklabs/meet" 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>
- <!-- Feature list (OG copy) -->
- <div class="pt-4 space-y-4 animate-fade-up" style="animation-delay:.2s">
- <div class="p-4 rounded-2xl bg-white shadow-sm">
- <div class="font-semibold text-sm">Accept orders anytime, and anyhow</div>
- <div class="text-sm mt-1" style="color:var(--muted)">
- Let customers order via your own website, mobile, iOS/Android apps, or AI-powered text messaging. Reorders take seconds.
+ <p class="hero-note">
+ White-labeled · Web, iOS & Android · Order by text · 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">
+ <p class="eyebrow">Running on Vegy today</p>
+ <div class="trust-logos">
+ <img src="gardenfresh.webp" width="437" height="132" loading="lazy"
+ alt="Garden Fresh Produce LLC" />
+ <span class="trust-sep" aria-hidden="true"></span>
+ <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">
+ <span class="eyebrow">Why Vegy</span>
+ <h2 class="h-lg">Every order still gets typed in by hand</h2>
+ <p class="lede">
+ Orders reach you a different way every time, and one person turns all of
+ them into something the warehouse can pull. Here is what changes, line by
+ line.
+ </p>
+ </div>
+
+ <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">Voicemail · 11:40 PM</span>
+ <p>“Hey it’s Mike, give me the usual plus a couple cases of romaine, uh — call me back.”</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’s AI picks up, turns the call into a structured order on Mike’s account, and prices it against his tier. It’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>“4 tomato, 2 onion, 6 lettuce” — no pack sizes, no case counts, no 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 · 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>They order from your live catalog instead, so the price is whatever their tier says today — and minimums are checked at checkout.</p>
+ </div>
+ </div>
+ <div class="swap-row">
+ <div class="swap-from">
+ <span class="cell-label">How it arrives today</span>
+ <span class="chan">Then, every time</span>
+ <p>Someone re-keys all of it by hand before the pull sheets go out. That’s where the shorts come from, and the wrong pack sizes, and the credits.</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>Nothing gets typed twice. The order syncs into QuickBooks as a customer, items, and an invoice, and the pull sheet prints itself.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── How it works ─────────────────────────────────────────────────── -->
+ <section class="section" id="how">
+ <div class="wrap">
+ <div class="section-head center reveal">
+ <span class="eyebrow">How it works</span>
+ <h2 class="h-lg">Three steps, and the phone stops ringing</h2>
+ </div>
+
+ <div class="rows">
+ <div class="row reveal">
+ <div class="row-text">
+ <span class="eyebrow">Step 01</span>
+ <h3 class="h-md">We load your catalog</h3>
+ <p>
+ Your item list, pack sizes, categories, and price tiers get imported for
+ you — nothing gets rebuilt by hand. Then it's your logo, your product
+ photos, your category names, on your own domain.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Your catalog</span><span class="tag">Imported</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="p-4 rounded-2xl bg-white shadow-sm">
- <div class="font-semibold text-sm">Maximize margins and order size</div>
- <div class="text-sm mt-1" style="color:var(--muted)">
- Set customer-specific pricing tiers and order minimums, promote featured items, and push new products to increase order size and profit.
+ <div class="row is-flipped reveal">
+ <div class="row-text">
+ <span class="eyebrow">Step 02</span>
+ <h3 class="h-md">Your customers order</h3>
+ <p>
+ From your website, your own iOS and Android app, or straight over voice
+ and text. Last week's order is right there, so a reorder takes seconds
+ instead of a phone call — at 11pm, on a Sunday, from a walk-in cooler.
+ </p>
+ </div>
+ <div class="row-visual">
+ <div class="mock">
+ <div class="mock-head"><span>Sunrise Cafe · 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="p-4 rounded-2xl bg-white shadow-sm">
- <div class="font-semibold text-sm">Integrates with your workflow</div>
- <div class="text-sm mt-1" style="color:var(--muted)">
- Sync with QuickBooks or your existing ERP for invoicing, payments, inventory, and delivery tracking. Export sales reports, pull slips, and price lists instantly.
+ <div class="row reveal">
+ <div class="row-text">
+ <span class="eyebrow">Step 03</span>
+ <h3 class="h-md">You get a clean order</h3>
+ <p>
+ Priced against that customer's tier, checked against your minimums, and
+ synced to QuickBooks or your ERP. Print pull sheets, 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 & 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">
+ <span class="eyebrow">Features</span>
+ <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">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <rect x="5" y="2" width="14" height="20" rx="2.5" /><path d="M12 18h.01" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Order from anywhere</h3>
+ <p>
+ Your own website, mobile web, native iOS and Android apps, or AI-powered
+ ordering by voice and text for customers who will never open an app.
+ </p>
+ </article>
- <!-- Device -->
- <div class="lg:col-span-6">
- <div class="floaty">
- <div class="mx-auto max-w-md">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 406 852" class="w-full h-auto">
- <image href="order.png"
- x="-43" y="25" width="500" height="800" />
- <image href="iphone.svg"
- x="0" y="0" width="415" height="852" />
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M12.6 2.6 21 11a2 2 0 0 1 0 2.8l-7.2 7.2a2 2 0 0 1-2.8 0L3 12.6V4a1 1 0 0 1 1-1h8.6Z" /><path d="M7.5 7.5h.01" />
</svg>
</div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M3 17l6-6 4 4 8-8" /><path d="M17 7h4v4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Bigger orders, on purpose</h3>
+ <p>
+ Promote featured items, push new products in front of the right accounts,
+ and let favorites and one-tap reorder do the rest.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M21 12a9 9 0 0 1-15.5 6.2L3 16" /><path d="M3 12a9 9 0 0 1 15.5-6.2L21 8" /><path d="M3 21v-5h5" /><path d="M21 3v5h-5" />
+ </svg>
+ </div>
+ <h3 class="h-sm">QuickBooks & ERP sync</h3>
+ <p>
+ Customers, items, and invoices flow into QuickBooks or your existing ERP.
+ No double entry, no end-of-day export ritual.
+ </p>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M14 2H6.5A1.5 1.5 0 0 0 5 3.5v17A1.5 1.5 0 0 0 6.5 22h11a1.5 1.5 0 0 0 1.5-1.5V7Z" /><path d="M14 2v5h5" /><path d="M9 13h6" /><path d="M9 17h4" />
+ </svg>
+ </div>
+ <h3 class="h-sm">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>
+ </article>
+
+ <article class="card">
+ <div class="card-icon">
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <path d="M2 7h11v10H2z" /><path d="M13 10h4.5l3.5 3.5V17h-8" /><circle cx="7" cy="18.5" r="1.8" /><circle cx="17" cy="18.5" r="1.8" />
+ </svg>
+ </div>
+ <h3 class="h-sm">Inventory & 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>
+ </article>
+ </div>
+ </div>
+ </section>
+
+ <!-- ── Dark: differentiators ────────────────────────────────────────── -->
+ <section class="section band-dark">
+ <div class="wrap">
+ <div class="section-head reveal">
+ <span class="eyebrow">Where Vegy is different</span>
+ <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)">
+ Your customers download your app, from your listing, and see your logo
+ when it opens. Nobody has to know there's a software vendor behind your
+ 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 & colors</span><span class="price ok">Yours</span></div>
+ <div class="mock-line"><span>Catalog & 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">
+ <span class="eyebrow">Pricing</span>
+ <h2 class="h-lg">No revenue share. No per-seat games.</h2>
+ <p class="lede">
+ A flat monthly fee, plus a quarter when our AI takes the order for you. A
+ $4,000 order costs you exactly what a $400 order costs you.
+ </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 — voice, text & web</p>
+ </div>
+ </div>
+
+ <ul class="included">
+ <li>Your white-labeled web storefront and ordering domain</li>
+ <li>Native iOS and Android apps published under your brand</li>
+ <li>Unlimited customer accounts and pricing tiers</li>
+ <li>QuickBooks sync, or integration with your existing ERP</li>
+ <li>Catalog import and account setup, done by us</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/meet" target="_blank" rel="noopener">
+ Book a demo <span clas
[Diff truncated. Use the raw view or local clone for the full content.]