<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="icon" type="image/x-icon" href="/favicon.png?v=3">
    <link rel="icon" type="image/png" sizes="512x512" href="/favicon-512.png?v=3">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=3">
    <title>Website Builder for Small Businesses | Funnls</title>
    <meta name="description" content="Funnls helps small businesses launch better websites without managing freelancers, hosting, plugins, or updates. One platform. One team. One monthly price.">
    <meta name="author" content="Funnls" />
    <meta name="google-site-verification" content="PztKFEvftQHXzFyioQx8neid-cPoZDqK4kloZSEl3XE" />

    <!-- Per-route meta injector: sets <title> + <meta description> before React mounts so crawlers see the right tags on first response. -->
    <script>
    (function () {
      var META = {
        "/": ["Small Business Web Design from $150/mo | Funnls", "Conversion-first websites for small businesses. Custom design, hosting, unlimited edits, and support — one flat monthly fee from $150. Launch in ~14 days."],
        "/pricing": ["Pricing — Funnls Small Business Websites", "Simple, transparent pricing for small business websites. One flat monthly fee covers design, hosting, maintenance, and support."],
        "/solutions": ["Small Business Website Design — Funnls", "Affordable, professional website design for small businesses. Custom design, hosting, maintenance, and support — all in one flat monthly price."],
        "/product": ["Product — How the Funnls Mapper Works", "Conversion architecture is the missing layer between strategy and design. Learn how Funnls maps your goals into a clear page hierarchy."],
        "/work": ["Our Approach — Systems-Driven Design | Funnls", "We think in systems. We design for outcomes. Learn the principles behind Funnls' conversion architecture practice."],
        "/launched-projects": ["Launched Projects — Recent Client Websites | Funnls", "Real client websites launched by Funnls. See the live sites we've built for small businesses across home services, irrigation, HVAC, and more."],
        "/services": ["Services — Conversion-First Website Design | Funnls", "Architecture-led website design, brand identity, redesigns, landing pages, and ongoing optimization. We design and build websites that convert."],
        "/about": ["About — 15 Years of Conversion Architecture | Funnls", "Since 2010, Funnls has built over 500 websites that have driven millions in revenue. We believe structure precedes design."],
        "/map": ["Map Your Website — Conversion Architecture Wizard | Funnls", "Answer 7 questions and get a custom conversion architecture map for your website — page hierarchy, traffic flow, and CTA strategy."],
        "/blog": ["Blog — Conversion Architecture Insights | Funnls", "Conversion architecture, intent-first design, and the strategy behind every page. Read the Funnls blog."],
        "/get-started": ["Get Started — Funnls Small Business Websites", "Tell us about your business and we'll build you a professional website. Flat monthly fee includes design, hosting, and support."],
        "/contact": ["Contact Funnls — Visit Us in Naples, FL", "Visit the Funnls office in Naples, FL or get in touch about your website project. 1110 Pine Ridge Rd, Suite 201, Naples, FL 34108."],
        "/terms": ["Terms of Service — Funnls", "Read the Terms of Service governing your use of Funnls LLC's managed website design, hosting, and management services."],
        "/privacy": ["Privacy Policy — Funnls LLC", "Privacy Policy for Funnls LLC — how we collect, use, and protect your information across our managed website services."],
        "/industries": ["Web Design for Every Industry | Funnls", "Conversion-first websites tailored to your industry. Custom architecture for HVAC, plumbing, irrigation, law, medical, dental, restaurants and more — no cookie-cutter templates."],
        "/web-design-for-custom-projects": ["Web Design for Custom & Enterprise Projects | Funnls", "Custom web design for unique businesses, multi-location brands, and enterprise operators. Custom integrations, franchise architecture, e-commerce, and bespoke design systems."],
        
        "/auth": ["Sign In — Funnls", "Sign in to your Funnls account."],
        "/dashboard": ["Dashboard — Funnls", "Your Funnls projects and saved architectures."]
      };

      function titleize(slug) {
        return (slug || "").replace(/-/g, " ").replace(/\b\w/g, function (c) { return c.toUpperCase(); });
      }

      function resolve(path) {
        if (META[path]) return META[path];
        // Industry pages — curated SEO meta per slug (must mirror src/lib/industries-data.ts)
        var INDUSTRY_META = {
          "/web-design-for-hvac": ["HVAC Web Design That Books Service Calls | Funnls", "Conversion-first HVAC websites built to capture emergency searches and turn local clicks into booked service calls. Flat monthly pricing — launch in ~14 days."],
          "/web-design-for-plumbers": ["Plumber Web Design That Generates Service Calls | Funnls", "Mobile-first plumbing websites engineered for emergency searches, service-area pages, and click-to-call leads. One flat monthly fee from $150."],
          "/web-design-for-law-firms": ["Law Firm Web Design That Generates Cases | Funnls", "Authority-driven law firm websites with practice-area architecture, attorney bios, and bar-compliant intake. Built to convert visitors into consultations."],
          "/web-design-for-medical-practices": ["Medical Practice Web Design That Fills Calendars | Funnls", "HIPAA-aware medical websites with condition pages, provider bios, and online scheduling integration. Designed to grow new patient bookings."],
          "/web-design-for-dentists": ["Dental Web Design That Books New Patients | Funnls", "Dental practice websites with smile galleries, service-specific pages, and online scheduling. Built to grow implants, cosmetic, and hygiene bookings."],
          "/web-design-for-roofers": ["Roofing Web Design That Generates Quality Leads | Funnls", "Roofing websites built for storm response, replacement, and repair searches. Trust-first design with drone galleries and insurance-claim guidance."],
          "/web-design-for-real-estate": ["Real Estate Web Design for Agents & Brokerages | Funnls", "IDX-ready agent and brokerage websites with neighborhood guides, seller-focused valuation pages, and CRM integration. Built to win listings."],
          "/web-design-for-home-services": ["Home Service Web Design That Books More Jobs | Funnls", "Websites for electricians, landscapers, painters, and home service pros — service pages, online booking, and local SEO that keeps crews busy."],
          "/web-design-for-restaurants": ["Restaurant Web Design That Drives Reservations | Funnls", "Visual-first restaurant websites with web-native menus, reservations, and online ordering. Built to capture diners searching in your neighborhood."],
          "/web-design-for-auto-repair": ["Auto Repair Web Design That Books More Jobs | Funnls", "Auto repair shop websites with service-specific pages, online scheduling, and ASE trust signals. Built to win local searches and repeat customers."],
          "/web-design-irrigation": ["Irrigation & Sprinkler Web Design | Funnls", "Sprinkler and irrigation websites built for repair, install, and seasonal-service searches. Service-area pages and click-to-call CTAs that convert."],
          "/web-design-for-contractors": ["Contractor Web Design That Wins Bigger Jobs | Funnls", "Paving, concrete, and general contractor websites with project galleries, commercial vs. residential paths, and estimate flows that close bids."]
        };
        if (INDUSTRY_META[path]) return INDUSTRY_META[path];
        // Fallback for any future /web-design-for-* page not yet in the curated list
        if (/^\/web-design-for-[a-z0-9-]+$/.test(path)) {
          var label = titleize(path.replace("/web-design-for-", ""));
          return [label + " Web Design | Funnls", "Conversion-first web design for " + label.toLowerCase() + ". Custom architecture, managed hosting, and ongoing support — one flat monthly fee from $150."];
        }
        // Blog category: /blog/category/*
        var bc = path.match(/^\/blog\/category\/([a-z0-9-]+)\/?$/);
        if (bc) {
          var c = titleize(bc[1]);
          return [c + " Articles | Funnls Blog", "Read Funnls articles on " + c.toLowerCase() + " — conversion architecture, intent-first design, and the strategy behind every page."];
        }
        // Blog post: /blog/* (single segment, not /category/)
        var bp = path.match(/^\/blog\/([a-z0-9-]+)\/?$/);
        if (bp) {
          var t = titleize(bp[1]);
          return [t + " | Funnls Blog", "Read \"" + t + "\" on the Funnls blog — conversion architecture insights for small business websites."];
        }
        // Project view (private): /project/*
        if (/^\/project\//.test(path)) return ["Project — Funnls", "View your Funnls project architecture."];
        // Admin (private)
        if (path === "/admin") return ["Admin — Funnls", "Funnls admin dashboard."];
        return null;
      }

      try {
        var path = location.pathname.replace(/\/+$/, "") || "/";
        var meta = resolve(path);
        if (meta) {
          document.title = meta[0];
          function setMeta(selector, attr, name, content) {
            var el = document.head.querySelector(selector);
            if (!el) {
              el = document.createElement("meta");
              el.setAttribute(attr, name);
              document.head.appendChild(el);
            }
            el.setAttribute("content", content);
          }
          setMeta('meta[name="description"]', "name", "description", meta[1]);
          setMeta('meta[property="og:title"]', "property", "og:title", meta[0]);
          setMeta('meta[property="og:description"]', "property", "og:description", meta[1]);
          setMeta('meta[property="og:url"]', "property", "og:url", "https://funnls.com" + (path === "/" ? "/" : path));
          setMeta('meta[name="twitter:title"]', "name", "twitter:title", meta[0]);
          setMeta('meta[name="twitter:description"]', "name", "twitter:description", meta[1]);
        }
      } catch (e) {}
    })();
    </script>

    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=DM+Sans:wght@300;400;500;600;700&family=Instrument+Serif:ital@0;1&display=swap" rel="stylesheet" />

    <!-- Google tag (gtag.js) -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-VQSL9WZPW4"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'G-VQSL9WZPW4');
    </script>

    <meta property="og:type" content="website" />
    <meta property="og:url" content="https://funnls.com/" />
    <meta property="og:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/fgYtVpppMVg5Shm5Z0w9PF57Bey1/social-images/social-1779386648175-website-builder.webp">
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="640" />
    <meta property="og:site_name" content="Funnls" />
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:site" content="@Funnls" />
    <meta name="twitter:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/fgYtVpppMVg5Shm5Z0w9PF57Bey1/social-images/social-1779386648175-website-builder.webp">
    <meta name="theme-color" content="#0a1628" />

    <!-- Organization + LocalBusiness JSON-LD -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@graph": [
        {
          "@type": "Organization",
          "@id": "https://funnls.com/#organization",
          "name": "Funnls",
          "alternateName": "Funnls LLC",
          "url": "https://funnls.com",
          "logo": {
            "@type": "ImageObject",
            "url": "https://funnls.com/favicon-512.png",
            "width": 512,
            "height": 512
          },
          "image": "https://funnls.com/og-image.jpg",
          "description": "Funnls builds affordable small business websites for one flat monthly fee. Design, hosting, maintenance, and support included.",
          "foundingDate": "2010",
          "sameAs": [
            "https://twitter.com/Funnls"
          ],
          "contactPoint": {
            "@type": "ContactPoint",
            "contactType": "Customer Service",
            "areaServed": "US",
            "availableLanguage": "English"
          }
        },
        {
          "@type": "LocalBusiness",
          "@id": "https://funnls.com/#localbusiness",
          "name": "Funnls",
          "image": "https://funnls.com/og-image.jpg",
          "url": "https://funnls.com",
          "priceRange": "$$",
          "description": "Small business website design, hosting, and management — one flat monthly fee.",
          "address": {
            "@type": "PostalAddress",
            "streetAddress": "1110 Pine Ridge Rd, Suite 201",
            "addressLocality": "Naples",
            "addressRegion": "FL",
            "postalCode": "34108",
            "addressCountry": "US"
          },
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 26.2226,
            "longitude": -81.7956
          },
          "areaServed": "US",
          "parentOrganization": { "@id": "https://funnls.com/#organization" }
        },
        {
          "@type": "WebSite",
          "@id": "https://funnls.com/#website",
          "url": "https://funnls.com",
          "name": "Funnls",
          "publisher": { "@id": "https://funnls.com/#organization" },
          "inLanguage": "en-US"
        }
      ]
    }
    </script>
    
  
  
  
  <meta property="og:title" content="Website Builder for Small Businesses | Funnls">
  <meta name="twitter:title" content="Website Builder for Small Businesses | Funnls">
  <meta property="og:description" content="Funnls helps small businesses launch better websites without managing freelancers, hosting, plugins, or updates. One platform. One team. One monthly price.">
  <meta name="twitter:description" content="Funnls helps small businesses launch better websites without managing freelancers, hosting, plugins, or updates. One platform. One team. One monthly price.">
  <script type="module" crossorigin src="/assets/index-QT5fcZ3L.js"></script>
  <link rel="stylesheet" crossorigin href="/assets/index-DyHwCNmh.css">
<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script><script defer src="/__l5e/events.js" data-artifact-kind="preview_commit_sha" data-artifact-id="713738dffa231672e5c297fecfad647654832c78" data-commit-sha="713738dffa231672e5c297fecfad647654832c78" data-context-token="v1.eyJwcm9qZWN0X2lkIjoiZDVhZTE0YWItYzA3Zi00MzI5LWEyNjYtZjE5ZThjYTY1MjY0IiwiYXJ0aWZhY3Rfa2luZCI6InByZXZpZXdfY29tbWl0X3NoYSIsImFydGlmYWN0X2lkIjoiNzEzNzM4ZGZmYTIzMTY3MmU1YzI5N2ZlY2ZhZDY0NzY1NDgzMmM3OCIsImNvbW1pdF9zaGEiOiI3MTM3MzhkZmZhMjMxNjcyZTVjMjk3ZmVjZmFkNjQ3NjU0ODMyYzc4IiwiZXhwIjoxNzgwOTI1MTQxfQ.YdByj5nDDJAStFTYPkaE9qkgPmM6dXDbEwZBqkQCmZg"></script></head>

  <body>
    <div id="root"></div>
  <!-- CRM Tracker: Funnls — paste before </body> -->
  <script>
  (function() {
    var TRACK_URL = 'https://dwoncjehdqhgcwwecjpe.supabase.co/functions/v1/track';
    var BRAND_ID  = '6ee9f8c9-4c5c-458a-946d-202c9cb7bd7b';
    var SID_KEY   = 'crm_sid_6ee9f8c9';
    var CID_KEY   = 'crm_cid_6ee9f8c9';

    function getCookie(n) {
      var m = document.cookie.match('(?:^|; )' + n + '=([^;]*)');
      return m ? decodeURIComponent(m[1]) : null;
    }
    function setCookie(n, v, days) {
      var d = new Date();
      d.setTime(d.getTime() + days * 864e5);
      document.cookie = n + '=' + encodeURIComponent(v)
        + ';expires=' + d.toUTCString() + ';path=/;SameSite=Lax';
    }
    function uid() {
      return Math.random().toString(36).slice(2) + Date.now().toString(36);
    }

    // Persist session & contact across pages
    var sessionId = getCookie(SID_KEY);
    if (!sessionId) { sessionId = uid(); setCookie(SID_KEY, sessionId, 1); }
    var contactId = getCookie(CID_KEY);

    // Auto-identify from email click-through (?cid= param)
    var urlParams = new URLSearchParams(location.search);
    var cidParam = urlParams.get('cid');
    if (cidParam && !contactId) {
      contactId = cidParam;
      setCookie(CID_KEY, cidParam, 365);
    }

    function pixel(params) {
      new Image().src = TRACK_URL + '?' + params.toString();
    }

    function track(eventType) {
      var p = new URLSearchParams({
        brand_id: BRAND_ID, event_type: eventType,
        session_id: sessionId, url: location.href
      });
      if (contactId) p.set('contact_id', contactId);
      pixel(p);
    }

    window.CRMTracker = {
      /**
       * Call this when a visitor submits a form with their email.
       * Their anonymous page history is merged into their CRM contact.
       *
       * CRMTracker.identify('visitor@email.com');
       */
      identify: function(email) {
        var p = new URLSearchParams({
          brand_id: BRAND_ID, event_type: 'identify',
          session_id: sessionId, url: location.href,
          email: email
        });
        fetch(TRACK_URL + '?' + p.toString())
          .then(function(r) { return r.json(); })
          .then(function(data) {
            if (data.contact_id) {
              contactId = data.contact_id;
              setCookie(CID_KEY, data.contact_id, 365);
            }
          })
          .catch(function() {});
      },
      track: track
    };

    // Auto-track every page view
    track('page_view');
  })();
  </script>

  <!-- HubSpot Embed Code -->
  <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/51482591.js"></script>
  </body>
</html>
