{"id":17942,"date":"2026-04-17T18:18:31","date_gmt":"2026-04-18T02:18:31","guid":{"rendered":"https:\/\/golive.vegas\/?page_id=17942"},"modified":"2026-05-23T18:25:18","modified_gmt":"2026-05-24T02:25:18","slug":"advertise-your-deal-in-go-live-vegas","status":"publish","type":"page","link":"https:\/\/golive.vegas\/en\/advertise-your-deal-in-go-live-vegas\/","title":{"rendered":"Post your flyer or local deal in the app"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"17942\" class=\"elementor elementor-17942\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4c6b140 e-flex e-con-boxed e-con e-parent \" data-id=\"4c6b140\" 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-fd6d88d elementor-widget elementor-widget-spacer\" data-id=\"fd6d88d\" 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-68fd4d5 e-flex e-con-boxed e-con e-parent \" data-id=\"68fd4d5\" 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-b0a6d38 elementor-widget elementor-widget-html\" data-id=\"b0a6d38\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n  <title>Post Your Flyer | Go Live Vegas Local Deals<\/title>\n  <style>\n    :root{\n      --bg:#0a0914;--card:#101322;--border:#ffffff1a;--text:#f4f4ff;--muted:#c2c2de;\n      --brand1:#7a00ff;--brand2:#00d5ff;--radius:22px;--shadow:0 18px 45px rgba(0,0,0,.35);\n      --sans:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial\n    }\n    *{box-sizing:border-box}\n    body{\n      margin:0;font-family:var(--sans);color:var(--text);\n      background:\n        radial-gradient(1200px 500px at 10% -20%, rgba(122,0,255,.26), transparent 60%),\n        radial-gradient(900px 420px at 100% 0%, rgba(0,213,255,.15), transparent 55%),\n        var(--bg)\n    }\n    .wrap{max-width:1120px;margin:0 auto;padding:24px 18px 50px}\n    .hero{padding:28px;border:1px solid var(--border);background:linear-gradient(180deg, rgba(255,255,255,.07), rgba(255,255,255,.03));border-radius:28px;box-shadow:var(--shadow);margin-bottom:20px}\n    h1{margin:0 0 8px 0;font-size:34px;line-height:1.05}\n    .sub{color:var(--muted);font-size:15px;max-width:820px;line-height:1.5}\n    .grid{display:grid;grid-template-columns:1.15fr .85fr;gap:18px;align-items:start}\n    @media(max-width:980px){.grid{grid-template-columns:1fr}}\n    .card{border:1px solid var(--border);background:linear-gradient(180deg, rgba(255,255,255,.07), rgba(255,255,255,.03));border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}\n    .hd{padding:16px 18px;border-bottom:1px solid var(--border);font-weight:800}\n    .bd{padding:18px}\n    .fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n    .fields3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}\n    @media(max-width:760px){.fields,.fields3{grid-template-columns:1fr}}\n    label{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}\n    input,textarea,select{\n      width:100%;border:1px solid var(--border);background:rgba(7,7,18,.5);color:var(--text);\n      border-radius:14px;padding:12px 13px;font-size:14px\n    }\n    input[readonly]{background:rgba(255,255,255,.06);color:#dfe4ff}\n    input.invalid, textarea.invalid, select.invalid{border-color:rgba(239,68,68,.6); box-shadow:0 0 0 1px rgba(239,68,68,.25) inset}\n    textarea{min-height:100px;resize:vertical}\n    .row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}\n    .btn{cursor:pointer;border:1px solid var(--border);background:rgba(255,255,255,.08);color:var(--text);border-radius:14px;padding:13px 16px;font-size:14px;font-weight:800;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}\n    .btn.primary{background:linear-gradient(135deg, rgba(122,0,255,.95), rgba(0,213,255,.7));color:#06101a}\n    .pill{padding:7px 10px;border:1px solid var(--border);border-radius:999px;background:rgba(255,255,255,.06);font-size:12px;display:inline-flex}\n    .notice{padding:14px;border:1px solid var(--border);border-radius:16px;background:rgba(255,255,255,.05);color:var(--muted);font-size:13px;line-height:1.55}\n    .muted{color:var(--muted)}\n    .thumbList{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}\n    .thumb{min-height:88px;border:1px solid var(--border);border-radius:14px;background:rgba(255,255,255,.05);display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--muted);padding:8px;text-align:center;overflow:hidden}\n    .thumb img{width:100%;height:100%;object-fit:cover}\n    .stickyBox{position:sticky;top:18px}\n    .price{font-size:28px;font-weight:900}\n    .termTabs{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-bottom:14px}\n    @media(max-width:760px){.termTabs{grid-template-columns:repeat(3,minmax(0,1fr))}}\n    .termBtn{cursor:pointer;border:1px solid var(--border);background:rgba(255,255,255,.05);color:var(--text);border-radius:14px;padding:12px 10px;font-size:13px;font-weight:800;text-align:center}\n    .termBtn.active{background:linear-gradient(135deg, rgba(122,0,255,.95), rgba(0,213,255,.70));color:#06101a}\n    .planGrid{display:grid;grid-template-columns:1fr;gap:12px}\n    .plan{border:1px solid var(--border);border-radius:18px;padding:14px;background:rgba(0,0,0,.14);cursor:pointer}\n    .plan.active{outline:2px solid rgba(0,213,255,.4)}\n    .plan small{display:block;color:var(--muted);margin-top:4px;line-height:1.35}\n    .hidden{display:none}\n    .progress{font-size:12px;color:var(--muted);margin-top:8px}\n    .ok{color:#90f2b0}.err{color:#ffb1b1}.warn{color:#ffd28f}\n    .disclaimer{margin-top:16px;padding:16px;border:1px solid rgba(255,255,255,.14);border-radius:18px;background:rgba(255,255,255,.04);font-size:12px;line-height:1.6;color:var(--muted)}\n    .sectionTitle{margin-top:18px;font-weight:800}\n  <\/style>\n<\/head>\n<body>\n  <div class=\"wrap\">\n    <div class=\"hero\">\n      <div class=\"pill\">GO LIVE VEGAS LOCAL DEALS<\/div>\n      <h1>Post your flyer or local deal in the app.<\/h1>\n      <div class=\"sub\">\n        Promote weekly specials, discount offers, local services, happy hours, limited-time campaigns, and local business deals inside Go Live Vegas.\n        All submissions are reviewed before going live. Businesses can request featured placement and ad upgrades during checkout.\n      <\/div>\n    <\/div>\n\n    <div class=\"grid\">\n      <div class=\"card\">\n        <div class=\"hd\">Local Deals Submission<\/div>\n        <div class=\"bd\">\n          <div class=\"fields\">\n            <div><label>Business Name *<\/label><input id=\"businessName\"><\/div>\n            <div><label>Contact Name *<\/label><input id=\"contactName\"><\/div>\n          <\/div>\n          <div class=\"fields\">\n            <div><label>Email *<\/label><input id=\"email\" type=\"email\"><\/div>\n            <div><label>Phone<\/label><input id=\"phone\"><\/div>\n          <\/div>\n\n          <div class=\"fields\">\n            <div>\n              <label>Category *<\/label>\n              <select id=\"category\">\n                <option value=\"\">Select category<\/option>\n                <option>Food & Drink<\/option>\n                <option>Beauty<\/option>\n                <option>Fitness<\/option>\n                <option>Auto<\/option>\n                <option>Retail<\/option>\n                <option>Entertainment<\/option>\n                <option>Professional Services<\/option>\n                <option>Home Services<\/option>\n                <option>Real Estate<\/option>\n                <option>Tourism<\/option>\n                <option>Other<\/option>\n              <\/select>\n            <\/div>\n            <div><label>Subcategory<\/label><input id=\"subCategory\" placeholder=\"Optional subcategory\"><\/div>\n          <\/div>\n\n          <div class=\"fields\">\n            <div><label>Deal \/ Flyer Title *<\/label><input id=\"title\"><\/div>\n            <div><label>Subtitle<\/label><input id=\"subtitle\"><\/div>\n          <\/div>\n\n          <div class=\"fields\">\n            <div><label>Discount Text<\/label><input id=\"discountText\" placeholder=\"20% off, Buy 1 Get 1, etc.\"><\/div>\n            <div><label>Price Label<\/label><input id=\"priceLabel\" type=\"text\" inputmode=\"decimal\" placeholder=\"29.99\"><\/div>\n          <\/div>\n\n          <div class=\"fields\">\n            <div><label>Website URL (optional)<\/label><input id=\"websiteUrl\" placeholder=\"www.yoursite.com or https:\/\/www.yoursite.com\"><\/div>\n            <div><label>Offer URL (optional)<\/label><input id=\"offerUrl\" placeholder=\"www.yoursite.com\/deal or https:\/\/www.yoursite.com\/deal\"><\/div>\n          <\/div>\n\n          <div class=\"fields\">\n            <div>\n              <label>Zone<\/label>\n              <select id=\"zone\">\n                <option>LAS VEGAS STRIP<\/option>\n                <option>LAS VEGAS<\/option>\n                <option>SUMMERLIN<\/option>\n                <option>HENDERSON<\/option>\n                <option>NORTH LAS VEGAS<\/option>\n                <option>DOWNTOWN LAS VEGAS<\/option>\n                <option>BEYOND VEGAS<\/option>\n              <\/select>\n            <\/div>\n            <div><label>Area \/ Neighborhood<\/label><input id=\"area\"><\/div>\n          <\/div>\n\n          <div><label>Address<\/label><input id=\"address\"><\/div>\n\n          <div class=\"fields\">\n            <div><label>Start Date *<\/label><input id=\"startDate\" type=\"date\"><\/div>\n            <div>\n              <label>End Date (auto-calculated)<\/label>\n              <input id=\"endDate\" type=\"date\" readonly>\n              <div class=\"muted\">This fills in automatically from the selected package and your chosen start date.<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"fields\">\n            <div>\n              <label>Deal Type *<\/label>\n              <select id=\"dealType\">\n                <option value=\"discount\">Discount<\/option>\n                <option value=\"special\">Special<\/option>\n                <option value=\"service_offer\">Service Offer<\/option>\n                <option value=\"coupon\">Coupon<\/option>\n                <option value=\"bundle\">Bundle<\/option>\n                <option value=\"launch\">Launch \/ Grand Opening<\/option>\n                <option value=\"event\">Event<\/option>\n              <\/select>\n            <\/div>\n            <div><label>Redemption Code (optional)<\/label><input id=\"redemptionCode\"><\/div>\n          <\/div>\n\n          <div class=\"notice hidden\" id=\"eventNotice\">\n            <strong>This sounds like an event.<\/strong> Event-style submissions belong in your Events \/ Local Networking form so they publish into the right section of the app.\n            <div class=\"row\" style=\"margin-top:10px;\">\n              <a class=\"btn\" href=\"https:\/\/golive.vegas\/?page_id=17395\" target=\"_blank\" rel=\"noopener\">Go to Events Submission<\/a>\n            <\/div>\n          <\/div>\n\n          <div><label>Short Description<\/label><input id=\"shortDescription\"><\/div>\n          <div><label>Description<\/label><textarea id=\"description\"><\/textarea><\/div>\n          <div><label>Terms \/ Restrictions<\/label><textarea id=\"terms\"><\/textarea><\/div>\n          <div><label>Tags (comma separated)<\/label><input id=\"tags\"><\/div>\n          <div><label>Notes for Review<\/label><textarea id=\"reviewNotes\"><\/textarea><\/div>\n\n          <div class=\"sectionTitle\">Flyer \/ Images<\/div>\n          <div class=\"fields\">\n            <div><label>Main Flyer Image *<\/label><input id=\"mainImageFile\" type=\"file\" accept=\"image\/*\"><\/div>\n            <div><label>Extra Images (optional)<\/label><input id=\"extraImageFiles\" type=\"file\" accept=\"image\/*\" multiple><\/div>\n          <\/div>\n          <div class=\"thumbList\" id=\"thumbList\"><\/div>\n\n          <div class=\"sectionTitle\">Optional Upgrades<\/div>\n          <div class=\"fields3\">\n            <div><label><input id=\"wantsFeatured\" type=\"checkbox\"> Request featured placement<\/label><\/div>\n            <div><label><input id=\"wantsHomeScreen\" type=\"checkbox\"> Ask about home-screen visibility<\/label><\/div>\n            <div><label><input id=\"wantsPush\" type=\"checkbox\"> Ask about push promotion<\/label><\/div>\n          <\/div>\n          <div class=\"fields3\">\n            <div><label><input id=\"wantsFeedAds\" type=\"checkbox\"> Ask about feed ads<\/label><\/div>\n            <div><label><input id=\"wantsVideoAds\" type=\"checkbox\"> Ask about video ads<\/label><\/div>\n            <div><\/div>\n          <\/div>\n\n          <div class=\"notice\" style=\"margin-top:12px\">\n            Review policy: Low-quality images, blurry screenshots, misleading deals, expired offers, duplicate spam, broken links, adult\/sexual content, illegal offers, or junk content may be rejected. Submitting does not charge your card. Go Live Vegas reviews the deal first. If approved, we email a secure Stripe recurring payment link for the selected package.\n          <\/div>\n\n          <div style=\"margin-top:18px\" class=\"notice\">\n            <label><input id=\"acceptedTerms\" type=\"checkbox\"> I confirm the business information is accurate and agree that all submissions are subject to manual review and approval.<\/label><br><br>\n            <label><input id=\"acceptedMarketing\" type=\"checkbox\"> I agree to receive application, reminder, and renewal emails.<\/label>\n          <\/div>\n\n          <div class=\"disclaimer\">\n            <strong>Important terms:<\/strong> Payment does not guarantee approval, publication, a specific rank, or featured placement. All submissions are subject to Go Live Vegas manual review.\n            Go Live Vegas may edit formatting, trim headlines, adjust descriptions, reject or pause non-compliant offers, and remove expired or misleading deals.\n            By submitting, you confirm you have the rights to use all submitted text, images, branding, flyers, and links.\n          <\/div>\n\n          <div class=\"row\" style=\"margin-top:16px\">\n            <button class=\"btn primary\" id=\"btnSubmit\" type=\"button\">Continue to Submit for Review<\/button>\n            <div class=\"progress\" id=\"progressText\"><\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"stickyBox card\">\n        <div class=\"hd\">Choose Your Plan<\/div>\n        <div class=\"bd\">\n          <div class=\"termTabs\">\n            <button class=\"termBtn active\" data-term=\"1week\" type=\"button\">1 Week<\/button>\n            <button class=\"termBtn\" data-term=\"2weeks\" type=\"button\">2 Weeks<\/button>\n            <button class=\"termBtn\" data-term=\"1month\" type=\"button\">1 Month<\/button>\n            <button class=\"termBtn\" data-term=\"3months\" type=\"button\">3 Months<\/button>\n            <button class=\"termBtn\" data-term=\"6months\" type=\"button\">6 Months<\/button>\n            <button class=\"termBtn\" data-term=\"12months\" type=\"button\">12 Months<\/button>\n          <\/div>\n\n          <div class=\"planGrid\" id=\"planGrid\"><\/div>\n\n          <div class=\"notice\" style=\"margin-top:14px\">\n            After payment, your submission goes into <strong>pending review<\/strong>. Approval is manual.\n            If you choose a featured-request plan, placement is still subject to review, inventory, and approval.\n          <\/div>\n          <div class=\"notice\" style=\"margin-top:14px\">\n            <strong>Why this helps your business:<\/strong> Go Live Vegas Local Deals gives Las Vegas, Henderson, Summerlin, North Las Vegas, Downtown Las Vegas, and surrounding area businesses a clean, approved place to promote specials, services, limited-time campaigns, and local offers inside the app. Instead of getting buried on social media, your flyer or deal can appear in front of locals and visitors already using Go Live Vegas to discover what is happening in real time. This helps increase local visibility, clicks, calls, bookings, walk-ins, and overall awareness while keeping the app useful and trusted for users.\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <script>\n    const UPLOAD_IMAGE_URL = 'https:\/\/us-central1-go-vegas-live.cloudfunctions.net\/uploadImageDirect';\n    const APPLICATION_URL = 'https:\/\/us-central1-go-vegas-live.cloudfunctions.net\/createLocalDealApplication';\n\n    const PLAN_MATRIX = {\n      \"1week\": [\n        { code: 'standard_weekly', title: 'Standard Weekly', price: '$29', note: 'Basic approved listing for one week' },\n        { code: 'premium_weekly', title: 'Premium Weekly', price: '$49', note: 'Stronger visibility and priority placement' },\n        { code: 'featured_weekly', title: 'Featured Request Weekly', price: '$99', note: 'Best visibility request, subject to approval' }\n      ],\n      \"2weeks\": [\n        { code: 'standard_2weeks', title: 'Standard 2 Weeks', price: '$49', note: 'Two-week approved listing' },\n        { code: 'premium_2weeks', title: 'Premium 2 Weeks', price: '$79', note: 'Priority visibility for two weeks' },\n        { code: 'featured_2weeks', title: 'Featured Request 2 Weeks', price: '$149', note: 'Featured request for two weeks' }\n      ],\n      \"1month\": [\n        { code: 'standard_monthly', title: 'Standard Monthly', price: '$79', note: 'Basic approved listing for one month' },\n        { code: 'premium_monthly', title: 'Premium Monthly', price: '$149', note: 'Priority placement for one month' },\n        { code: 'featured_monthly', title: 'Featured Request Monthly', price: '$249', note: 'Featured request for one month' }\n      ],\n      \"3months\": [\n        { code: 'standard_3months', title: 'Standard 3 Months', price: '$199', note: 'Quarter campaign starter' },\n        { code: 'premium_3months', title: 'Premium 3 Months', price: '$349', note: 'Priority visibility for a quarter' },\n        { code: 'featured_3months', title: 'Featured Request 3 Months', price: '$599', note: 'Featured request for a quarter' }\n      ],\n      \"6months\": [\n        { code: 'standard_6months', title: 'Standard 6 Months', price: '$349', note: 'Longer-run approved campaign' },\n        { code: 'premium_6months', title: 'Premium 6 Months', price: '$649', note: 'Priority visibility for six months' },\n        { code: 'featured_6months', title: 'Featured Request 6 Months', price: '$999', note: 'Featured request for six months' }\n      ],\n      \"12months\": [\n        { code: 'standard_12months', title: 'Standard 12 Months', price: '$599', note: 'Full-year listing' },\n        { code: 'premium_12months', title: 'Premium 12 Months', price: '$1099', note: 'Priority visibility for one year' },\n        { code: 'featured_12months', title: 'Featured Request 12 Months', price: '$1699', note: 'Featured request for one year' }\n      ]\n    };\n\n    let selectedTerm = '1week';\n    let selectedPlanCode = 'standard_weekly';\n\n    function $(id){ return document.getElementById(id); }\n    function safe(v){ return String(v ?? '').trim(); }\n    function toast(msg, kind=''){ const el = $('progressText'); el.textContent = msg; el.className = 'progress ' + kind; }\n    function clearInvalid(){ document.querySelectorAll('.invalid').forEach(el => el.classList.remove('invalid')); }\n    function markInvalid(id){ const el = $(id); if (el) el.classList.add('invalid'); }\n\n    function planTermToMonths(term){\n      return ({ \"1week\": 0, \"2weeks\": 0, \"1month\": 1, \"3months\": 3, \"6months\": 6, \"12months\": 12 }[term] ?? 0);\n    }\n\n    function planTermToDays(term){\n      return ({ \"1week\": 7, \"2weeks\": 14 }[term] ?? 0);\n    }\n\n    function formatDateLocal(dateObj){\n      const y = dateObj.getFullYear();\n      const m = String(dateObj.getMonth() + 1).padStart(2, '0');\n      const d = String(dateObj.getDate()).padStart(2, '0');\n      return `${y}-${m}-${d}`;\n    }\n\n    function computeEndDate(startDateStr, term){\n      if (!startDateStr || !term) return '';\n      const d = new Date(startDateStr + 'T12:00:00');\n      if (Number.isNaN(d.getTime())) return '';\n      const days = planTermToDays(term);\n      if (days > 0) {\n        d.setDate(d.getDate() + days - 1);\n        return formatDateLocal(d);\n      }\n      const months = planTermToMonths(term);\n      if (months > 0) {\n        d.setMonth(d.getMonth() + months);\n        d.setDate(d.getDate() - 1);\n        return formatDateLocal(d);\n      }\n      return '';\n    }\n\n    function updateEndDate(){\n      $('endDate').value = computeEndDate($('startDate').value, selectedTerm);\n    }\n\n    function renderPlans(){\n      const grid = $('planGrid');\n      const plans = PLAN_MATRIX[selectedTerm] || [];\n      grid.innerHTML = plans.map(plan => `\n        <div class=\"plan ${plan.code === selectedPlanCode ? 'active' : ''}\" data-code=\"${plan.code}\">\n          <strong>${plan.title}<\/strong>\n          <div class=\"price\">${plan.price}<\/div>\n          <small>${plan.note}<\/small>\n        <\/div>\n      `).join('');\n\n      grid.querySelectorAll('.plan').forEach(el => {\n        el.addEventListener('click', () => {\n          grid.querySelectorAll('.plan').forEach(x => x.classList.remove('active'));\n          el.classList.add('active');\n          selectedPlanCode = el.dataset.code;\n          updateEndDate();\n        });\n      });\n\n      if (!plans.some(x => x.code === selectedPlanCode)) {\n        selectedPlanCode = plans[0]?.code || '';\n      }\n      updateEndDate();\n    }\n\n    document.querySelectorAll('.termBtn').forEach(btn => {\n      btn.addEventListener('click', () => {\n        document.querySelectorAll('.termBtn').forEach(x => x.classList.remove('active'));\n        btn.classList.add('active');\n        selectedTerm = btn.dataset.term;\n        selectedPlanCode = (PLAN_MATRIX[selectedTerm] || [])[0]?.code || '';\n        renderPlans();\n      });\n    });\n\n    function normalizeExternalUrlForDisplay(value){\n      const raw = safe(value);\n      if (!raw) return '';\n      let candidate = raw.replace(\/\\s+\/g, '');\n      if (!\/^https?:\\\/\\\/\/i.test(candidate)) {\n        candidate = 'https:\/\/' + candidate.replace(\/^\\\/+\/, '');\n      }\n      return candidate;\n    }\n\n    function autoNormalizeUrlField(id){\n      const el = $(id);\n      const raw = safe(el.value);\n      if (!raw) return;\n      el.value = normalizeExternalUrlForDisplay(raw);\n      el.classList.remove('invalid');\n    }\n\n    function enforceNumericPriceInput(){\n      const el = $('priceLabel');\n      let value = el.value || '';\n      value = value.replace(\/[^\\d.]\/g, '');\n      const firstDot = value.indexOf('.');\n      if (firstDot !== -1) {\n        value = value.slice(0, firstDot + 1) + value.slice(firstDot + 1).replace(\/\\.\/g, '');\n      }\n      const parts = value.split('.');\n      if (parts[1]) parts[1] = parts[1].slice(0, 2);\n      el.value = parts.join('.');\n    }\n\n    function handleDealTypeUi(){\n      const isEvent = $('dealType').value === 'event';\n      $('eventNotice').classList.toggle('hidden', !isEvent);\n      $('btnSubmit').textContent = isEvent ? 'Go to Events Submission' : 'Continue to Submit for Review';\n    }\n\n    async function uploadOne(file){\n      const fd = new FormData();\n      fd.append('file', file);\n      fd.append('folder', 'local_deals');\n      const res = await fetch(UPLOAD_IMAGE_URL, { method:'POST', body:fd });\n      const raw = await res.text();\n      let json = {};\n      try { json = raw ? JSON.parse(raw) : {}; } catch {\n        throw new Error(`Upload endpoint did not return JSON. Response: ${raw.slice(0, 220)}`);\n      }\n      if(!res.ok || !json.ok || !json.imageUrl) throw new Error(json.error || `upload_failed (${res.status})`);\n      return json.imageUrl;\n    }\n\n    async function uploadMany(files){\n      const urls = [];\n      for(const file of Array.from(files || [])){\n        toast(`Uploading ${file.name}...`);\n        urls.push(await uploadOne(file));\n      }\n      return urls;\n    }\n\n    function renderThumbs(urls){\n      const list = $('thumbList');\n      list.innerHTML = (urls || []).map(url => `<div class=\"thumb\"><img decoding=\"async\" src=\"${url}\" alt=\"\"><\/div>`).join('');\n    }\n\n    async function submitForm(){\n      try {\n        clearInvalid();\n\n        if ($('dealType').value === 'event') {\n          window.location.href = 'https:\/\/golive.vegas\/?page_id=17395';\n          return;\n        }\n\n        if(!$('acceptedTerms').checked){\n          throw new Error('Please accept the terms before checkout.');\n        }\n\n        const required = [\n          ['businessName', 'Business Name'],\n          ['contactName', 'Contact Name'],\n          ['email', 'Email'],\n          ['category', 'Category'],\n          ['title', 'Deal \/ Flyer Title'],\n          ['startDate', 'Start Date']\n        ];\n\n        for (const [id, label] of required) {\n          if (!safe($(id).value)) {\n            markInvalid(id);\n            throw new Error(`Please complete ${label}.`);\n          }\n        }\n\n        updateEndDate();\n        if (!safe($('endDate').value)) {\n          markInvalid('startDate');\n          throw new Error('End Date could not be calculated. Please pick a start date and package.');\n        }\n\n        const websiteUrl = safe($('websiteUrl').value);\n        const offerUrl = safe($('offerUrl').value);\n\n        const priceLabel = safe($('priceLabel').value);\n\n        const mainImageFile = $('mainImageFile').files[0];\n        const extraImageFiles = $('extraImageFiles').files;\n\n        if (!mainImageFile) {\n          markInvalid('mainImageFile');\n          throw new Error('Please upload a Main Flyer Image.');\n        }\n\n        const mainImageUrl = await uploadOne(mainImageFile);\n        const extraImageUrls = extraImageFiles?.length ? await uploadMany(extraImageFiles) : [];\n        renderThumbs([mainImageUrl, ...extraImageUrls]);\n\n        const salesInterests = [\n          $('wantsFeatured').checked ? 'featured_placement' : '',\n          $('wantsHomeScreen').checked ? 'home_screen_visibility' : '',\n          $('wantsPush').checked ? 'push_promotion' : '',\n          $('wantsFeedAds').checked ? 'feed_ads' : '',\n          $('wantsVideoAds').checked ? 'video_ads' : ''\n        ].filter(Boolean);\n\n        const payload = {\n          planCode: selectedPlanCode,\n          packageKey: selectedTerm,\n          termMonths: planTermToMonths(selectedTerm),\n          termDays: planTermToDays(selectedTerm),\n          businessName: safe($('businessName').value),\n          contactName: safe($('contactName').value),\n          email: safe($('email').value),\n          phone: safe($('phone').value),\n          category: safe($('category').value),\n          subCategory: safe($('subCategory').value),\n          title: safe($('title').value),\n          subtitle: safe($('subtitle').value),\n          discountText: safe($('discountText').value),\n          priceLabel,\n          websiteUrl,\n          offerUrl,\n          zone: safe($('zone').value),\n          area: safe($('area').value),\n          address: safe($('address').value),\n          startDate: safe($('startDate').value),\n          endDate: safe($('endDate').value),\n          dealType: safe($('dealType').value),\n          redemptionCode: safe($('redemptionCode').value),\n          shortDescription: safe($('shortDescription').value),\n          description: safe($('description').value),\n          terms: safe($('terms').value),\n          tags: safe($('tags').value),\n          reviewNotes: safe($('reviewNotes').value),\n          imageUrl: mainImageUrl,\n          thumbnailUrl: mainImageUrl,\n          galleryUrls: extraImageUrls,\n          mainImageUrl,\n          wantsFeatured: $('wantsFeatured').checked,\n          wantsHomeScreen: $('wantsHomeScreen').checked,\n          wantsPush: $('wantsPush').checked,\n          wantsFeedAds: $('wantsFeedAds').checked,\n          wantsVideoAds: $('wantsVideoAds').checked,\n          salesContactRequested: salesInterests.length > 0,\n          salesInterests,\n          acceptedTerms: $('acceptedTerms').checked,\n          acceptedMarketing: $('acceptedMarketing').checked\n        };\n\n        toast('Submitting for Go Live Vegas review...');\n        const applicationPayload = {\n          ...payload,\n          legalAuthorized: payload.acceptedTerms,\n          legalAccurate: payload.acceptedTerms,\n          legalContentRights: payload.acceptedTerms,\n          legalBusinessResponsibility: payload.acceptedTerms,\n          legalPlatformOnly: payload.acceptedTerms,\n          legalNoGuarantee: payload.acceptedTerms,\n          legalRecurringBilling: payload.acceptedTerms,\n          legalReviewRemoval: payload.acceptedTerms,\n          legalNoRefunds: payload.acceptedTerms,\n          legalIndemnity: payload.acceptedTerms,\n          legalTermsVersion: 'local_deal_terms_2026_05_24_review_before_payment',\n          legalAcceptedAtClient: new Date().toISOString(),\n          legalAcceptanceSource: 'website_local_deal_review_before_payment'\n        };\n\n        const res = await fetch(`${APPLICATION_URL}?json=1`, {\n          method:'POST',\n          headers:{ 'Content-Type':'application\/json' },\n          body: JSON.stringify(applicationPayload)\n        });\n\n        const raw = await res.text();\n        let json = {};\n        try { json = raw ? JSON.parse(raw) : {}; } catch {\n          throw new Error(`Submit for Review endpoint did not return JSON. Response: ${raw.slice(0, 220)}`);\n        }\n\n        if(!res.ok || !json.ok) {\n          throw new Error(json.error || `submission_failed (${res.status})`);\n        }\n\n        toast('Application submitted. Please check your email. Go Live Vegas will review the deal before sending a Stripe payment link.', 'ok');\n        alert('Application submitted! You have not been charged. Go Live Vegas will review your Local Deal and email a secure Stripe recurring payment link if approved.');\n      } catch (e) {\n        toast(`Error: ${e.message}`, 'err');\n      }\n    }\n\n    $('startDate').addEventListener('change', updateEndDate);\n    $('dealType').addEventListener('change', handleDealTypeUi);\n    $('websiteUrl').addEventListener('blur', () => autoNormalizeUrlField('websiteUrl'));\n    $('offerUrl').addEventListener('blur', () => autoNormalizeUrlField('offerUrl'));\n    $('priceLabel').addEventListener('input', enforceNumericPriceInput);\n    $('btnSubmit').onclick = submitForm;\n    handleDealTypeUi();\n    renderPlans();\n  <\/script>\n<\/body>\n<\/html>\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>Post Your Flyer | Go Live Vegas Local Deals GO LIVE VEGAS LOCAL DEALS Post your flyer or local deal in the app. Promote weekly specials, discount offers, local services, happy hours, limited-time campaigns, and local business deals inside Go Live Vegas. All submissions are reviewed before going live. Businesses can request featured placement and [&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-17942","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/pages\/17942","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=17942"}],"version-history":[{"count":5,"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/pages\/17942\/revisions"}],"predecessor-version":[{"id":18264,"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/pages\/17942\/revisions\/18264"}],"wp:attachment":[{"href":"https:\/\/golive.vegas\/wp-json\/wp\/v2\/media?parent=17942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}