{"id":18084,"date":"2026-04-19T15:56:15","date_gmt":"2026-04-19T23:56:15","guid":{"rendered":"https:\/\/golive.vegas\/?page_id=18084"},"modified":"2026-04-19T16:09:23","modified_gmt":"2026-04-20T00:09:23","slug":"las-vegas-local-deals","status":"publish","type":"page","link":"https:\/\/golive.vegas\/en\/las-vegas-local-deals\/","title":{"rendered":"Las Vegas Local Deals"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"18084\" class=\"elementor elementor-18084\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9cb0eff e-flex e-con-boxed e-con e-parent \" data-id=\"9cb0eff\" data-element_type=\"container\" data-e-type=\"container\">\t\t\t<div class=\"e-con-inner\">\r\n\t\t\t\t<div class=\"elementor-element elementor-element-1f8f9b2 elementor-widget elementor-widget-spacer\" data-id=\"1f8f9b2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t<div class=\"elementor-element elementor-element-428825e e-flex e-con-boxed e-con e-parent \" data-id=\"428825e\" data-element_type=\"container\" data-e-type=\"container\">\t\t\t<div class=\"e-con-inner\">\r\n\t\t\t\t<div class=\"elementor-element elementor-element-b065e09 elementor-widget elementor-widget-html\" data-id=\"b065e09\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\nGo Live Vegas - Local Deals Elementor HTML Widget\nSAFE VERSION: uses a public Cloud Function endpoint instead of direct Firestore reads.\n\nWHAT YOU NEED TO EDIT:\n1) Deploy the publicLocalDeals function.\n2) Paste the function URL into API_URL below.\n3) Paste this whole file into an Elementor HTML widget.\n-->\n\n<div id=\"glv-local-deals-root\">\n  <div class=\"glv-local-deals-shell\">\n    <div class=\"glv-local-deals-hero\">\n      <h2>Go Live Vegas Local Deals<\/h2>\n      <p>Discover featured local deals, specials, offers, and business promotions in Las Vegas.<\/p>\n\n      <div class=\"glv-local-deals-support\">\n        <h3>Why supporting local Las Vegas businesses matters<\/h3>\n        <p>When locals and visitors support Las Vegas businesses, more dollars stay in the community, more small business owners can grow, and more unique local experiences stay alive. It helps real people, local jobs, neighborhood services, and independent brands that make Vegas feel like Vegas.<\/p>\n        <p>If you own a local business, offer a special, or want your promotion seen on our website and inside the Go Live Vegas app, you can submit your information here.<\/p>\n        <div class=\"glv-local-deals-support-actions\">\n          <a class=\"glv-local-deals-btn glv-local-deals-btn-primary\" href=\"https:\/\/golive.vegas\/?page_id=17942\" target=\"_blank\" rel=\"noopener noreferrer\">Add Your Business or Deal<\/a>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"glv-local-deals-toolbar\">\n      <input id=\"glv-local-deals-search\" type=\"text\" placeholder=\"Search deals, businesses, categories...\" \/>\n      <select id=\"glv-local-deals-category\">\n        <option value=\"\">All Categories<\/option>\n      <\/select>\n      <button id=\"glv-local-deals-refresh\" type=\"button\">Refresh<\/button>\n    <\/div>\n\n    <div id=\"glv-local-deals-status\" class=\"glv-local-deals-status\">Loading local deals...<\/div>\n\n    <section class=\"glv-local-deals-section\">\n      <div class=\"glv-local-deals-section-head\">\n        <h3>Featured Local Deals<\/h3>\n        <p>Highlighted business offers and premium local promotions.<\/p>\n      <\/div>\n      <div id=\"glv-local-deals-featured\" class=\"glv-local-deals-grid\"><\/div>\n    <\/section>\n\n    <section class=\"glv-local-deals-section\">\n      <div class=\"glv-local-deals-section-head\">\n        <h3>All Local Deals<\/h3>\n        <p>Browse approved deals, discounts, and local offers from Go Live Vegas.<\/p>\n      <\/div>\n      <div id=\"glv-local-deals-grid\" class=\"glv-local-deals-grid\"><\/div>\n    <\/section>\n  <\/div>\n<\/div>\n\n<style>\n  #glv-local-deals-root {\n    color: #ffffff;\n    font-family: Arial, Helvetica, sans-serif;\n  }\n\n  #glv-local-deals-root * {\n    box-sizing: border-box;\n  }\n\n  .glv-local-deals-shell {\n    max-width: 1240px;\n    margin: 0 auto;\n    padding: 20px;\n  }\n\n  .glv-local-deals-hero {\n    margin-bottom: 18px;\n  }\n\n  .glv-local-deals-hero h2 {\n    margin: 0 0 10px;\n    font-size: 34px;\n    line-height: 1.08;\n    color: #ffffff;\n  }\n\n  .glv-local-deals-hero p {\n    margin: 0;\n    color: rgba(255,255,255,.82);\n    font-size: 16px;\n    line-height: 1.55;\n    max-width: 820px;\n  }\n\n\n  .glv-local-deals-support {\n    margin-top: 18px;\n    padding: 18px;\n    border-radius: 16px;\n    background: rgba(255,255,255,.06);\n    border: 1px solid rgba(255,255,255,.10);\n  }\n\n  .glv-local-deals-support h3 {\n    margin: 0 0 10px;\n    font-size: 22px;\n    line-height: 1.2;\n    color: #ffffff;\n  }\n\n  .glv-local-deals-support p {\n    margin: 0 0 12px;\n    color: rgba(255,255,255,.84);\n    font-size: 15px;\n    line-height: 1.6;\n    max-width: 980px;\n  }\n\n  .glv-local-deals-support p:last-of-type {\n    margin-bottom: 0;\n  }\n\n  .glv-local-deals-support-actions {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin-top: 16px;\n  }\n\n  .glv-local-deals-toolbar {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n    margin: 18px 0 16px;\n  }\n\n  .glv-local-deals-toolbar input,\n  .glv-local-deals-toolbar select {\n    min-width: 220px;\n    padding: 12px 14px;\n    border-radius: 12px;\n    border: 1px solid rgba(255,255,255,.16);\n    background: rgba(255,255,255,.08);\n    color: #fff;\n    outline: none;\n    font-size: 15px;\n  }\n\n  .glv-local-deals-toolbar input {\n    flex: 1 1 280px;\n  }\n\n  .glv-local-deals-toolbar option {\n    color: #111;\n  }\n\n  .glv-local-deals-toolbar button,\n  .glv-local-deals-btn {\n    appearance: none;\n    border: 0;\n    border-radius: 12px;\n    padding: 12px 16px;\n    text-decoration: none;\n    cursor: pointer;\n    font-weight: 700;\n    font-size: 14px;\n    transition: transform .15s ease, opacity .15s ease;\n  }\n\n  .glv-local-deals-toolbar button {\n    background: #f9b000;\n    color: #111;\n  }\n\n  .glv-local-deals-toolbar button:hover,\n  .glv-local-deals-btn:hover {\n    transform: translateY(-1px);\n    opacity: .95;\n  }\n\n  .glv-local-deals-status {\n    margin: 6px 0 18px;\n    color: rgba(255,255,255,.74);\n    font-size: 14px;\n  }\n\n  .glv-local-deals-section {\n    margin-top: 28px;\n  }\n\n  .glv-local-deals-section-head {\n    margin-bottom: 14px;\n  }\n\n  .glv-local-deals-section-head h3 {\n    margin: 0 0 6px;\n    font-size: 26px;\n    line-height: 1.15;\n    color: #ffffff;\n  }\n\n  .glv-local-deals-section-head p {\n    margin: 0;\n    color: rgba(255,255,255,.72);\n    font-size: 14px;\n  }\n\n  .glv-local-deals-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n    gap: 18px;\n  }\n\n  .glv-local-deals-card {\n    background: linear-gradient(180deg, rgba(255,255,255,.10), rgba(255,255,255,.05));\n    border: 1px solid rgba(255,255,255,.10);\n    border-radius: 18px;\n    overflow: hidden;\n    backdrop-filter: blur(8px);\n    box-shadow: 0 10px 28px rgba(0,0,0,.24);\n  }\n\n  .glv-local-deals-card.is-featured {\n    border-color: rgba(249,176,0,.35);\n    box-shadow: 0 10px 28px rgba(0,0,0,.24), 0 0 0 1px rgba(249,176,0,.18) inset;\n  }\n\n  .glv-local-deals-media {\n    aspect-ratio: 16 \/ 9;\n    overflow: hidden;\n    background: rgba(255,255,255,.05);\n  }\n\n  .glv-local-deals-media img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  .glv-local-deals-media-fallback {\n    width: 100%;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: rgba(255,255,255,.55);\n    font-size: 14px;\n    background: rgba(255,255,255,.04);\n  }\n\n  .glv-local-deals-body {\n    padding: 16px;\n  }\n\n  .glv-local-deals-badges {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-bottom: 10px;\n  }\n\n  .glv-local-deals-badge {\n    display: inline-flex;\n    align-items: center;\n    border-radius: 999px;\n    padding: 6px 10px;\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: .04em;\n    text-transform: uppercase;\n  }\n\n  .glv-local-deals-badge.featured {\n    background: rgba(249,176,0,.18);\n    color: #ffd36a;\n    border: 1px solid rgba(249,176,0,.28);\n  }\n\n  .glv-local-deals-badge.standard {\n    background: rgba(255,255,255,.10);\n    color: #ffffff;\n    border: 1px solid rgba(255,255,255,.16);\n  }\n\n  .glv-local-deals-title {\n    margin: 0 0 10px;\n    font-size: 22px;\n    line-height: 1.24;\n    color: #ffffff;\n  }\n\n  .glv-local-deals-meta {\n    margin: 0 0 6px;\n    font-size: 14px;\n    color: rgba(255,255,255,.80);\n    line-height: 1.45;\n  }\n\n  .glv-local-deals-desc {\n    margin: 12px 0 16px;\n    font-size: 14px;\n    line-height: 1.55;\n    color: rgba(255,255,255,.88);\n  }\n\n  .glv-local-deals-actions {\n    display: flex;\n    gap: 10px;\n    flex-wrap: wrap;\n  }\n\n  .glv-local-deals-btn-primary {\n    background: #f9b000;\n    color: #111;\n  }\n\n  .glv-local-deals-btn-secondary {\n    background: rgba(255,255,255,.10);\n    color: #ffffff;\n    border: 1px solid rgba(255,255,255,.12);\n  }\n\n  .glv-local-deals-empty,\n  .glv-local-deals-error {\n    padding: 22px;\n    border-radius: 16px;\n    background: rgba(255,255,255,.06);\n    border: 1px solid rgba(255,255,255,.08);\n    color: #ffffff;\n  }\n\n  @media (max-width: 767px) {\n    .glv-local-deals-shell {\n      padding: 14px;\n    }\n\n    .glv-local-deals-hero h2 {\n      font-size: 28px;\n    }\n\n    .glv-local-deals-section-head h3 {\n      font-size: 22px;\n    }\n  }\n<\/style>\n\n<script>\n  (function () {\n    const API_URL = \"https:\/\/us-central1-go-vegas-live.cloudfunctions.net\/publicLocalDeals\";\n\n    const searchEl = document.getElementById(\"glv-local-deals-search\");\n    const categoryEl = document.getElementById(\"glv-local-deals-category\");\n    const refreshBtn = document.getElementById(\"glv-local-deals-refresh\");\n    const statusEl = document.getElementById(\"glv-local-deals-status\");\n    const featuredGrid = document.getElementById(\"glv-local-deals-featured\");\n    const dealsGrid = document.getElementById(\"glv-local-deals-grid\");\n\n    let allDeals = [];\n    let featuredDeals = [];\n\n    function escapeHtml(value) {\n      return String(value ?? \"\")\n        .replace(\/&\/g, \"&amp;\")\n        .replace(\/<\/g, \"&lt;\")\n        .replace(\/>\/g, \"&gt;\")\n        .replace(\/\"\/g, \"&quot;\")\n        .replace(\/'\/g, \"&#039;\");\n    }\n\n    function normalizeUrl(url) {\n      const value = String(url || \"\").trim();\n      if (!value) return \"\";\n      if (value.startsWith(\"http:\/\/\") || value.startsWith(\"https:\/\/\") || value.startsWith(\"tel:\")) return value;\n      if (\/^\\+?[0-9()\\-\\s]+$\/.test(value)) {\n        return \"tel:\" + value.replace(\/\\s+\/g, \"\");\n      }\n      return \"https:\/\/\" + value.replace(\/^\\\/+\/, \"\");\n    }\n\n    function truncate(text, max) {\n      const str = String(text || \"\").trim();\n      if (str.length <= max) return str;\n      return str.slice(0, max).trimEnd() + \"...\";\n    }\n\n    function buildCategories(deals) {\n      const categories = new Set();\n      deals.forEach((d) => {\n        if (d.category) categories.add(d.category);\n        if (d.subCategory) categories.add(d.subCategory);\n      });\n\n      const current = categoryEl.value;\n      const options = ['<option value=\"\">All Categories<\/option>']\n        .concat(Array.from(categories).sort().map((c) => `<option value=\"${escapeHtml(c)}\">${escapeHtml(c)}<\/option>`));\n      categoryEl.innerHTML = options.join(\"\");\n      categoryEl.value = current;\n    }\n\n    function dealMatches(deal, term, category) {\n      const matchesCategory = !category ||\n        deal.category === category ||\n        deal.subCategory === category;\n\n      if (!matchesCategory) return false;\n\n      if (!term) return true;\n\n      const haystack = [\n        deal.title,\n        deal.businessName,\n        deal.description,\n        deal.address,\n        deal.area,\n        deal.category,\n        deal.subCategory,\n        deal.zone,\n        deal.dealType,\n        deal.packageType,\n        Array.isArray(deal.tags) ? deal.tags.join(\" \") : \"\"\n      ].join(\" \").toLowerCase();\n\n      return haystack.includes(term);\n    }\n\n    function dealCardHtml(deal) {\n      const imageUrl = normalizeUrl(deal.imageUrl || \"\");\n      const offerUrl = normalizeUrl(deal.offerUrl || \"\");\n      const phone = normalizeUrl(deal.phone || \"\");\n      const title = escapeHtml(deal.title || \"Local Deal\");\n      const businessName = escapeHtml(deal.businessName || \"\");\n      const category = escapeHtml(deal.category || \"\");\n      const subCategory = escapeHtml(deal.subCategory || \"\");\n      const area = escapeHtml(deal.area || \"\");\n      const address = escapeHtml(deal.address || \"\");\n      const desc = escapeHtml(truncate(deal.description || deal.fullDescription || \"\", 180));\n      const price = escapeHtml(deal.priceLabel || \"\");\n      const dealType = escapeHtml(deal.dealType || \"\");\n      const packageType = escapeHtml(deal.packageType || \"\");\n      const dateLabel = escapeHtml(\n        [deal.startDate || \"\", deal.endDate ? (\"Ends \" + deal.endDate) : \"\"].filter(Boolean).join(\" \u2022 \")\n      );\n\n      return `\n        <article class=\"glv-local-deals-card ${deal.featured ? \"is-featured\" : \"\"}\">\n          <div class=\"glv-local-deals-media\">\n            ${imageUrl\n              ? `<img decoding=\"async\" src=\"${escapeHtml(imageUrl)}\" alt=\"${title}\" loading=\"lazy\">`\n              : '<div class=\"glv-local-deals-media-fallback\">Go Live Vegas Deals<\/div>'}\n          <\/div>\n          <div class=\"glv-local-deals-body\">\n            <div class=\"glv-local-deals-badges\">\n              ${deal.featured ? '<span class=\"glv-local-deals-badge featured\">Featured<\/span>' : ''}\n              ${category ? `<span class=\"glv-local-deals-badge standard\">${category}<\/span>` : \"\"}\n              ${subCategory ? `<span class=\"glv-local-deals-badge standard\">${subCategory}<\/span>` : \"\"}\n              ${dealType ? `<span class=\"glv-local-deals-badge standard\">${dealType}<\/span>` : \"\"}\n            <\/div>\n            <h3 class=\"glv-local-deals-title\">${title}<\/h3>\n            ${businessName && businessName !== title ? `<p class=\"glv-local-deals-meta\"><strong>Business:<\/strong> ${businessName}<\/p>` : \"\"}\n            ${price ? `<p class=\"glv-local-deals-meta\"><strong>Price:<\/strong> ${price}<\/p>` : \"\"}\n            ${packageType ? `<p class=\"glv-local-deals-meta\"><strong>Package:<\/strong> ${packageType}<\/p>` : \"\"}\n            ${area || address ? `<p class=\"glv-local-deals-meta\"><strong>Location:<\/strong> ${[area, address].filter(Boolean).join(\" \u2014 \")}<\/p>` : \"\"}\n            ${dateLabel ? `<p class=\"glv-local-deals-meta\"><strong>Dates:<\/strong> ${dateLabel}<\/p>` : \"\"}\n            ${desc ? `<p class=\"glv-local-deals-desc\">${desc}<\/p>` : \"\"}\n            <div class=\"glv-local-deals-actions\">\n              ${offerUrl ? `<a class=\"glv-local-deals-btn glv-local-deals-btn-primary\" href=\"${escapeHtml(offerUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\">View Offer<\/a>` : \"\"}\n              ${phone ? `<a class=\"glv-local-deals-btn glv-local-deals-btn-secondary\" href=\"${escapeHtml(phone)}\">Call Business<\/a>` : \"\"}\n            <\/div>\n          <\/div>\n        <\/article>\n      `;\n    }\n\n    function render() {\n      const term = (searchEl.value || \"\").trim().toLowerCase();\n      const category = categoryEl.value || \"\";\n\n      const filteredAll = allDeals.filter((deal) => dealMatches(deal, term, category));\n      const filteredFeatured = featuredDeals.filter((deal) => dealMatches(deal, term, category));\n\n      featuredGrid.innerHTML = filteredFeatured.length\n        ? filteredFeatured.map((deal) => dealCardHtml(deal)).join(\"\")\n        : '<div class=\"glv-local-deals-empty\">No featured local deals found right now.<\/div>';\n\n      dealsGrid.innerHTML = filteredAll.length\n        ? filteredAll.map((deal) => dealCardHtml(deal)).join(\"\")\n        : '<div class=\"glv-local-deals-empty\">No local deals found right now.<\/div>';\n\n      statusEl.textContent = filteredFeatured.length + ' featured deal(s) and ' + filteredAll.length + ' total deal(s) loaded';\n    }\n\n    async function loadData() {\n      if (!API_URL || API_URL.indexOf(\"PASTE_YOUR_PUBLIC_LOCAL_DEALS_FUNCTION_URL_HERE\") !== -1) {\n        statusEl.textContent = \"Add your local deals Cloud Function URL in the API_URL constant first.\";\n        featuredGrid.innerHTML = '<div class=\"glv-local-deals-error\">API URL missing. Paste your deployed publicLocalDeals function URL into the HTML file.<\/div>';\n        dealsGrid.innerHTML = '<div class=\"glv-local-deals-error\">API URL missing. Paste your deployed publicLocalDeals function URL into the HTML file.<\/div>';\n        return;\n      }\n\n      statusEl.textContent = \"Loading local deals...\";\n      featuredGrid.innerHTML = \"\";\n      dealsGrid.innerHTML = \"\";\n\n      try {\n        const response = await fetch(API_URL, {\n          method: \"GET\",\n          headers: { \"Accept\": \"application\/json\" }\n        });\n\n        const data = await response.json();\n        if (!response.ok || !data || data.ok !== true) {\n          throw new Error((data && data.error) || \"Unable to load local deals\");\n        }\n\n        allDeals = Array.isArray(data.deals) ? data.deals : [];\n        featuredDeals = Array.isArray(data.featuredDeals) ? data.featuredDeals : [];\n        buildCategories(allDeals);\n        render();\n      } catch (error) {\n        console.error(error);\n        statusEl.textContent = error && error.message ? error.message : \"Load failed\";\n        featuredGrid.innerHTML = '<div class=\"glv-local-deals-error\">Unable to load featured local deals right now.<\/div>';\n        dealsGrid.innerHTML = '<div class=\"glv-local-deals-error\">Unable to load local deals right now.<\/div>';\n      }\n    }\n\n    searchEl.addEventListener(\"input\", render);\n    categoryEl.addEventListener(\"change\", render);\n    refreshBtn.addEventListener(\"click\", loadData);\n\n    loadData();\n  })();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Go Live Vegas Local Deals Discover featured local deals, specials, offers, and business promotions in Las Vegas. Why supporting local Las Vegas businesses matters When locals and visitors support Las Vegas businesses, more dollars stay in the community, more small business owners can grow, and more unique local experiences stay alive. It helps real people, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"footnotes":""},"class_list":["post-18084","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/pages\/18084","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/comments?post=18084"}],"version-history":[{"count":5,"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/pages\/18084\/revisions"}],"predecessor-version":[{"id":18097,"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/pages\/18084\/revisions\/18097"}],"wp:attachment":[{"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/media?parent=18084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}