Q10
Q10 Pharmacy
SPIN & WIN
Spin the wheel to reveal your exclusive voucher!
🎰 SPIN
📝 Your Details
Prize Tiers
RM 3 OFF (min RM 30)
55%
RM 5 OFF (min RM 50)
25%
RM 5 OFF (min RM 30)
15%
✨ RM 8 OFF (min RM 50)
4%
💎 RM 10 OFF (min RM 50)
1%
OFF YOUR PURCHASE
Your Voucher Code
🔔

Don't Forget Your Voucher!

We'll remind you a few days before it expires so you never miss your savings.

Reminder before your voucher expires
No spam — only 1 friendly reminder
Works even when this page is closed
Weekly Limit Reached

Each phone number can spin once per week. Your next spin is available on:

// ── NOTIFICATION PROMPT (spin.html inline) ──────────────────────────────── let spinNotifShown = false; function showSpinNotifPrompt() { if (spinNotifShown) return; // Skip if already granted (just silently schedule) if (typeof Notification !== 'undefined' && Notification.permission === 'granted') { spinNotifShown = true; scheduleSpinReminder(); return; } // Skip if explicitly denied if (typeof Notification !== 'undefined' && Notification.permission === 'denied') return; // Show prompt to everyone else (default, or no Notification API — still show for UX) spinNotifShown = true; document.getElementById('spin-notification-prompt').classList.add('show'); } function dismissSpinNotif() { document.getElementById('spin-notification-prompt').classList.remove('show'); } async function enableSpinNotifications() { dismissSpinNotif(); try { const perm = await Notification.requestPermission(); if (perm === 'granted') { scheduleSpinReminder(); showSpinBanner('✅ We\'ll remind you before your voucher expires!', '#22c55e'); } else { showSpinBanner('ℹ️ Remember to use your voucher before it expires!', '#3b82f6'); } } catch(e) {} } async function scheduleSpinReminder() { if (!currentResult || !('serviceWorker' in navigator)) return; try { await navigator.serviceWorker.register('/service-worker.js', { scope: '/' }); const sw = await navigator.serviceWorker.ready; const { tier, code, expiryStr } = currentResult; const expiryDate = new Date(expiryStr); const remindDaysBefore = tier.days <= 7 ? 2 : 5; const reminderDate = new Date(expiryDate); reminderDate.setDate(reminderDate.getDate() - remindDaysBefore); if (reminderDate <= new Date()) return; if (navigator.serviceWorker.controller) { navigator.serviceWorker.controller.postMessage({ type: 'SCHEDULE_NOTIFICATION', payload: { voucherCode: code, expiryDate: expiryDate.toISOString(), reminderDate: reminderDate.toISOString(), title: '⏰ Your Q10 Voucher Expires Soon!', message: `${remindDaysBefore} days left to use your RM ${tier.rm} OFF voucher (${code}). Don't miss it!`, validityDays: tier.days, lang: 'en' } }); } } catch(e) { console.warn('SW schedule failed', e); } } function showSpinBanner(msg, bg) { const b = document.createElement('div'); b.style.cssText = `position:fixed;top:20px;left:50%;transform:translateX(-50%);background:${bg};color:white;padding:14px 28px;border-radius:12px;z-index:10001;box-shadow:0 6px 25px rgba(0,0,0,0.4);font-weight:600;font-size:14px;max-width:90%;text-align:center;font-family:'Nunito',sans-serif`; b.textContent = msg; document.body.appendChild(b); setTimeout(() => b.remove(), 5000); }