From 0359d41ed8f865fc9e8c675278a073c40fb70473 Mon Sep 17 00:00:00 2001 From: Pavithran R A <92867708+Pavithran-R-A@users.noreply.github.com> Date: Thu, 17 Sep 2026 19:29:38 +0530 Subject: [PATCH 01/14] feat: replace storefront catalogue with September 2026 offers --- src/data.js | 449 ++++++++++++++++------------------------------------ 1 file changed, 133 insertions(+), 316 deletions(-) diff --git a/src/data.js b/src/data.js index b7d0299..5a04169 100644 --- a/src/data.js +++ b/src/data.js @@ -1,327 +1,144 @@ -import bundleImg from './assets/bundle_main.png'; -import bundleGaming from './assets/bundle_gaming.png'; -import bundleAnime from './assets/bundle_anime.png'; -import bundleBusiness from './assets/bundle_business.png'; -import bundleSpirit from './assets/bundle_spirit.png'; -import bundleAesthetic from './assets/bundle_aesthetic.png'; -import infosysImg from './assets/infosys_logo.png'; -import jpmorganImg from './assets/jpmorgan_logo.png'; - -const sIcon = (slug, color='fff') => ``; -const iconImg = (domain) => ``; -const i8 = (name) => ``; -const cdnImg = (url) => ``; +const favicon = (domain) => ``; export const brandIcons = { - netflix: i8('netflix'), - spotify: i8('spotify'), - prime: i8('amazon-prime-video'), - hotstar: iconImg('hotstar.com'), - combo: i8('product'), - youtube: iconImg('youtube.com'), - chatgpt: i8('chatgpt'), - perplexity: sIcon('perplexity', '22B8CD'), - claude: sIcon('anthropic','D4A27F'), - midjourney: iconImg('midjourney.com'), - gemini: iconImg('gemini.google.com'), - deepl: iconImg('deepl.com'), - microsoft: i8('microsoft'), - autodesk: i8('autodesk'), - capcut: iconImg('capcut.com'), - supergrok: sIcon('x', 'fff'), - windsurf: iconImg('codeium.com'), - freepik: sIcon('freepik', '1273EB'), - envato: sIcon('envato', '81B441'), - quillbot: iconImg('quillbot.com'), - openart: iconImg('openart.ai'), - higgsfield: iconImg('higgsfield.ai'), - lovable: iconImg('lovable.dev'), - nordvpn: i8('nordvpn'), - canva: i8('canva'), - notion: i8('notion'), - figma: i8('figma'), - bolt: iconImg('bolt.new'), - lenskart: iconImg('lenskart.com'), - coursera: iconImg('coursera.org'), - jarvis: iconImg('jasper.ai'), - blackbox: iconImg('blackbox.ai'), - gamma: iconImg('gamma.app'), - filmora: iconImg('filmora.wondershare.com'), - beautifulai: iconImg('beautiful.ai'), - infosys: ``, - jpmorgan: ``, - pocketfm: iconImg('pocketfm.com'), - instagram: i8('instagram'), - reels: ``, - shopify: i8('shopify'), - heygen: iconImg('heygen.com'), - expressvpn: iconImg('expressvpn.com'), - grammarly: iconImg('grammarly.com'), - elevenlabs: iconImg('elevenlabs.io'), - replit: iconImg('replit.com'), - windows11: i8('windows-11'), - // Digital Bundle images from c36india CDN - // Digital Bundle images - Specific Category Replacements - 'bundle-dancing': cdnImg(bundleSpirit), - 'bundle-hulk': cdnImg(bundleGaming), - 'bundle-monkey': cdnImg(bundleSpirit), - 'bundle-shopify': cdnImg(bundleBusiness), - 'bundle-ben10': cdnImg(bundleAnime), - 'bundle-oggy': cdnImg(bundleAnime), - 'bundle-mrbean': cdnImg(bundleSpirit), - 'bundle-doraemon': cdnImg(bundleAnime), - 'bundle-freefire': cdnImg(bundleGaming), - 'bundle-motivation': cdnImg(bundleSpirit), - 'bundle-anime': cdnImg(bundleAnime), - 'bundle-sinchan': cdnImg(bundleAnime), - 'bundle-darkpsych': cdnImg(bundleBusiness), - 'bundle-ebooks': cdnImg(bundleBusiness), - 'bundle-aesthetic': cdnImg(bundleAesthetic), - 'bundle-krishna': cdnImg(bundleSpirit), - 'bundle-creators': cdnImg(bundleBusiness), - 'bundle-podcast': cdnImg(bundleSpirit), - 'bundle-space': cdnImg(bundleAesthetic), - 'bundle-f1': cdnImg(bundleAesthetic), - 'bundle-gym': cdnImg(bundleGaming), - 'bundle-emotional': cdnImg(bundleSpirit), - 'cb-bundle-0': ``, - 'cb-bundle-1': ``, - 'cb-bundle-2': ``, - 'cb-bundle-3': ``, - 'cb-bundle-4': ``, - 'cb-bundle-5': ``, - 'cb-bundle-6': ``, - 'cb-bundle-7': ``, - 'cb-bundle-8': ``, - 'cb-bundle-9': ``, - 'cb-bundle-10': ``, - 'cb-bundle-11': ``, - 'cb-bundle-12': ``, - 'cb-bundle-13': ``, - bundle: cdnImg(bundleImg) + chatgpt: favicon('chatgpt.com'), + perplexity: favicon('perplexity.ai'), + gemini: favicon('gemini.google.com'), + envato: favicon('envato.com'), + windsurf: favicon('windsurf.com'), + microsoft: favicon('microsoft.com'), + canva: favicon('canva.com'), + grok: favicon('x.ai'), + coursera: favicon('coursera.org'), + capcut: favicon('capcut.com'), + autodesk: favicon('autodesk.com'), + windows: favicon('microsoft.com'), + linkedin: favicon('linkedin.com'), + replit: favicon('replit.com'), + manus: favicon('manus.im'), + notion: favicon('notion.so'), + netflix: favicon('netflix.com'), + cursor: favicon('cursor.com'), + adobe: favicon('adobe.com'), + figma: favicon('figma.com'), + ilovepdf: favicon('ilovepdf.com'), + quillbot: favicon('quillbot.com'), + deepl: favicon('deepl.com'), + elevenlabs: favicon('elevenlabs.io'), + framer: favicon('framer.com'), + lovable: favicon('lovable.dev'), + supabase: favicon('supabase.com'), + n8n: favicon('n8n.io'), + warp: favicon('warp.dev'), + railway: favicon('railway.com'), + linear: favicon('linear.app'), + gumloop: favicon('gumloop.com'), + chatprd: favicon('chatprd.ai'), + reclaim: favicon('reclaim.ai'), + wisprflow: favicon('wisprflow.ai'), + posthog: favicon('posthog.com'), + factory: favicon('factory.ai'), + granola: favicon('granola.ai'), + gamma: favicon('gamma.app'), + dreamina: favicon('dreamina.capcut.com'), + magicpatterns: favicon('magicpatterns.com'), + miro: favicon('miro.com'), + mobbin: favicon('mobbin.com'), + intercom: favicon('intercom.com'), + freepik: favicon('freepik.com'), }; -export const products = [ - // --- AI Tools --- - {id:'chatgpt-plus',name:'ChatGPT Plus',cat:'AI Tools',mrp:'₹2,000',discount:'73%',icon:'chatgpt',tag:'Trending',color:'#10A37F', - desc:'ChatGPT Plus with access to the latest GPT-4.5 and GPT-5 models, lightning-fast response times, and priority access.', features:['GPT-4.5 / 5 access','Faster responses','Image & voice'], - variants: [{name:'1 Month (Shared)', price:'₹200', priceNum:200}, {name:'1 Month (Private)', price:'₹600', priceNum:600}]}, - {id:'perplexity-pro',name:'Perplexity Pro',cat:'AI Tools',mrp:'₹17,000',discount:'82%',icon:'perplexity',tag:'Popular',color:'#22B8CD', - desc:'Perplexity Pro gives you access to the latest elite models like GPT-4.5 and Claude 3.5 Opus, plus unlimited Pro searches.', features:['Unlimited Pro searches','GPT-4.5 & Claude Opus','API credits'], - variants: [{name:'1 Year', price:'₹2,999', priceNum:2999}]}, - {id:'claude-pro',name:'Claude AI Pro',cat:'AI Tools',mrp:'₹1,999',discount:'90%',icon:'claude',tag:'New',color:'#D4A27F', - desc:'Claude AI Pro by Anthropic — advanced reasoning with the ultimate Claude 3.5 Opus model.', features:['Claude 3.5 Opus','200K context','Artifacts & Projects'], - variants: [{name:'1 Month', price:'₹1,599', priceNum:1599}]}, - {id:'gemini-pro',name:'Gemini AI Pro Advanced',cat:'AI Tools',mrp:'₹19,999',discount:'90%',icon:'gemini',tag:null,color:'#4285F4', - desc:'Get Google Gemini AI Pro Advanced with access to the latest 2.0 Pro and Advanced generation models.', features:['Gemini 2.0 Pro','2TB Storage','Advanced coding'], - variants: [{name:'18 Months', price:'₹1,999', priceNum:1999}]}, - {id:'midjourney',name:'Midjourney Premium',cat:'AI Tools',mrp:'₹4,999',discount:'90%',icon:'midjourney',tag:'Popular',color:'#000000', - desc:'Midjourney v6.5 Premium for stunning, ultra-realistic AI image generation.', features:['Unlimited generations','Fast mode','High-res export'], - variants: [{name:'1 Month', price:'₹499', priceNum:499}, {name:'1 Year', price:'₹2,999', priceNum:2999}]}, - {id:'deepl-pro',name:'DeepL Pro',cat:'AI Tools',mrp:'₹1,219',discount:'59%',icon:'deepl',tag:null,color:'#0F2B46', - desc:'DeepL Pro for ultimate AI-powered translation. Maximum data security.', features:['Unlimited translation','Editable docs','Max security'], - variants: [{name:'1 Month', price:'₹500', priceNum:500}]}, - {id:'quillbot-premium',name:'Quillbot Premium',cat:'AI Tools',mrp:'₹999',discount:'70%',icon:'quillbot',tag:null,color:'#499557', - desc:'QuillBot Premium for advanced paraphrasing, grammar checking, and plagiarism detection.', features:['Unlimited words','Advanced grammar','Plagiarism checker'], - variants: [{name:'1 Month', price:'₹299', priceNum:299}]}, - {id:'openart',name:'OpenArt AI',cat:'AI Tools',mrp:'₹5,299',discount:'54%',icon:'openart',tag:null,color:'#FF5100', - desc:'OpenArt AI premium access for generating high-quality AI images.', features:['Unlimited generation','High-res export','Premium models'], - variants: [{name:'Essential (1 Month)', price:'₹749', priceNum:749}, {name:'Infinite (1 Month)', price:'₹3,124', priceNum:3124}, {name:'Advanced (1 Month)', price:'₹4,374', priceNum:4374}]}, - {id:'higgsfield',name:'Higgsfield Ultimate',cat:'AI Tools',mrp:'₹4,999',discount:'68%',icon:'higgsfield',tag:null,color:'#ffffff', - desc:'Ultimate video generation with Higgsfield AI models.', features:['Video generation','High resolution','Priority processing'], - variants: [{name:'Ultimate', price:'₹1,919', priceNum:1919}]}, - {id:'jarvis',name:'Jarvis AI (Starter)',cat:'AI Tools',mrp:'₹999',discount:'76%',icon:'jarvis',tag:null,color:'#333333', - desc:'Jarvis AI Starter Plan for content generation. Private, Ad-Free, Premium Access.', features:['Private Account','Premium Access','Secure Login'], - variants: [{name:'1 Month', price:'₹239', priceNum:239}]}, - {id:'blackbox',name:'Blackbox AI',cat:'AI Tools',mrp:'₹4,999',discount:'70%',icon:'blackbox',tag:null,color:'#000000', - desc:'Blackbox AI for ultimate code generation and autocompletion.', features:['Code generation','Repo context','Fast autocomplete'], - variants: [{name:'1 Year', price:'₹1,899', priceNum:1899}]}, - {id:'gamma',name:'Gamma App Pro',cat:'AI Tools',mrp:'₹999',discount:'80%',icon:'gamma',tag:'Hot Deal',color:'#292929', - desc:'Gamma Pro for AI-powered presentation generation and document creation.', features:['AI presentations','No watermarks','Premium templates'], - variants: [{name:'1 Month', price:'₹399', priceNum:399}]}, - {id:'heygen',name:'Heygen AI',cat:'AI Tools',mrp:'₹9,999',discount:'76%',icon:'heygen',tag:'Trending',color:'#7B61FF', - desc:'Heygen AI Video Creation with Realistic Avatars, Text-to-Video in Multiple Languages.', features:['Realistic Avatars','Lip-sync','Natural Voice Overs'], - variants: [{name:'1 Month', price:'₹2,399', priceNum:2399}]}, - {id:'elevenlabs',name:'Elevenlabs',cat:'AI Tools',mrp:'₹14,999',discount:'80%',icon:'elevenlabs',tag:null,color:'#000000', - desc:'Elevenlabs most powerful AI voice generator. One-time payment, activate on your own email.', features:['AI Voice Generator','Own Email Activation','Ideal for Reels'], - variants: [{name:'3 Months', price:'₹2,999', priceNum:2999}, {name:'1 Year', price:'₹8,999', priceNum:8999}]}, - {id:'grammarly',name:'Grammarly Premium',cat:'AI Tools',mrp:'₹1,999',discount:'76%',icon:'grammarly',tag:null,color:'#15C39A', - desc:'Grammarly Personal Account. Premium Features, AI Writing Assistant, Plagiarism Checker.', features:['Private Account','Plagiarism Checker','Grammarly Go'], - variants: [{name:'1 Month', price:'₹479', priceNum:479}]}, - - // --- Developer Tools --- - {id:'supergrok',name:'SuperGrok',cat:'Developer Tools',mrp:'₹999',discount:'80%',icon:'supergrok',tag:'Trending',color:'#000000', - desc:'Get access to Grok AI. Fast, witty, and powerful AI assistant.', features:['Real-time web access','Unfiltered responses','Coding assistance'], - variants: [{name:'30 Days', price:'₹399', priceNum:399}]}, - {id:'windsurf',name:'Windsurf',cat:'Developer Tools',mrp:'₹1,885',discount:'76%',icon:'windsurf',tag:null,color:'#09B6A2', - desc:'Windsurf Editor by Codeium. The ultimate AI-powered IDE.', features:['AI code generation','Instant refactoring','Multi-file chat'], - variants: [{name:'14 Days', price:'₹450', priceNum:450}]}, - {id:'lovable',name:'Lovable AI Pro',cat:'Developer Tools',mrp:'₹9,999',discount:'80%',icon:'lovable',tag:null,color:'#E04A4A', - desc:'Lovable AI Pro for generative UI and frontend development.', features:['Generative UI','Export code','React & Tailwind support'], - variants: [{name:'1 Month', price:'₹2,499', priceNum:2499}]}, - {id:'bolt',name:'Bolt.new Premium',cat:'Developer Tools',mrp:'₹4,999',discount:'80%',icon:'bolt',tag:null,color:'#ffffff', - desc:'Bolt.new Premium for instant full-stack environment generation.', features:['Full-stack gen','Cloud deployment','Private repos'], - variants: [{name:'1 Month', price:'₹1,299', priceNum:1299}]}, - {id:'replit',name:'Replit Core',cat:'Developer Tools',mrp:'₹9,999',discount:'58%',icon:'replit',tag:null,color:'#F26207', - desc:'Replit Core with Ghostwriter AI (autocomplete/bug fixing), Unlimited private Repls.', features:['Ghostwriter AI','Unlimited Private Repls','Custom Domain'], - variants: [{name:'1 Year', price:'₹4,199', priceNum:4199}]}, +const rupee = (value) => `₹${Number(value).toLocaleString('en-IN')}`; - // --- Design Resources --- - {id:'canva-pro',name:'Canva Pro',cat:'Design Resources',mrp:'₹999',discount:'90%',icon:'canva',tag:'Popular',color:'#00C4CC', - desc:'Canva Pro / Edu access for premium templates and assets.', features:['Premium templates','Background remover','Pro elements'], - variants: [{name:'1 Month', price:'₹119', priceNum:119}, {name:'1 Year', price:'₹199', priceNum:199}]}, - {id:'figma-pro',name:'Figma Professional',cat:'Design Resources',mrp:'₹9,999',discount:'80%',icon:'figma',tag:null,color:'#F24E1E', - desc:'Figma Professional plan for team collaboration and advanced prototyping.', features:['Unlimited projects','Advanced prototyping','Team libraries'], - variants: [{name:'1 Month', price:'₹2,299', priceNum:2299}]}, - {id:'beautifulai',name:'Beautiful.ai Pro',cat:'Design Resources',mrp:'₹4,999',discount:'80%',icon:'beautifulai',tag:null,color:'#1F4CE0', - desc:'Beautiful.ai Pro for automated presentation design.', features:['Smart templates','AI presentation builder','Analytics'], - variants: [{name:'1 Year', price:'₹999', priceNum:999}]}, - {id:'freepik-premium',name:'Freepik Premium',cat:'Design Resources',mrp:'₹16,080',discount:'50%',icon:'freepik',tag:'Popular',color:'#1273EB', - desc:'Access millions of premium vectors, photos, PSD files.', features:['Unlimited downloads','AI image gen','No attribution'], - variants: [{name:'1 Month', price:'₹750', priceNum:750}, {name:'3 Months', price:'₹2,000', priceNum:2000}, {name:'6 Months', price:'₹4,000', priceNum:4000}, {name:'12 Months', price:'₹8,000', priceNum:8000}]}, - {id:'envato-elements',name:'Envato Elements',cat:'Design Resources',mrp:'₹4,999',discount:'80%',icon:'envato',tag:'Trending',color:'#81B441', - desc:'Unlimited downloads of premium graphics, templates on Envato Elements.', features:['Millions of assets','Video templates','Commercial license'], - variants: [{name:'1 Year', price:'₹999', priceNum:999}]}, +const makeProduct = ({ id, name, cat, icon, color, priceNum, mrp, mrpNum, tag = null, desc, features }) => { + const discount = Number.isFinite(mrpNum) && mrpNum > priceNum + ? `${Math.round((1 - priceNum / mrpNum) * 100)}%` + : ''; - // --- Softwares & Tools --- - {id:'ms-office-365',name:'Microsoft 365',cat:'Softwares & Tools',mrp:'₹6,899',discount:'86%',icon:'microsoft',tag:'Best Value',color:'#F25022', - desc:'Microsoft 365 with Word, Excel, PowerPoint, Outlook, OneDrive.', features:['Word, Excel, PowerPoint','1TB OneDrive','5 devices'], - variants: [{name:'1 Year', price:'₹999', priceNum:999}]}, - {id:'autodesk',name:'Autodesk',cat:'Softwares & Tools',mrp:'₹2,819',discount:'65%',icon:'autodesk',tag:null,color:'#0696D7', - desc:'Access to Autodesk suite including AutoCAD, Maya, 3ds Max.', features:['AutoCAD & Revit','Maya & 3ds Max','1 year validity'], - variants: [{name:'1 Year', price:'₹1,599', priceNum:1599}]}, - {id:'capcut-pro',name:'CapCut Pro',cat:'Softwares & Tools',mrp:'₹1,999',discount:'70%',icon:'capcut',tag:null,color:'#000000', - desc:'CapCut Pro unlocks all premium templates, effects, filters.', features:['No watermark','Pro templates','Cloud storage'], - variants: [{name:'6 Months', price:'₹349', priceNum:349}, {name:'12 Months', price:'₹599', priceNum:599}]}, - {id:'notion-plus',name:'Notion Plus',cat:'Softwares & Tools',mrp:'₹9,999',discount:'80%',icon:'notion',tag:null,color:'#000000', - desc:'Notion Plus plan for unlimited blocks and team collaboration.', features:['Unlimited blocks','File uploads','30-day page history'], - variants: [{name:'1 Month', price:'₹1,999', priceNum:1999}]}, - {id:'nordvpn',name:'NordVPN',cat:'Softwares & Tools',mrp:'₹2,999',discount:'80%',icon:'nordvpn',tag:null,color:'#4687FF', - desc:'NordVPN for secure, private browsing with global servers.', features:['5500+ servers','No-logs policy','High speed'], - variants: [{name:'3 Months', price:'₹599', priceNum:599}, {name:'6 Months', price:'₹1,499', priceNum:1499}, {name:'12 Months', price:'₹1,999', priceNum:1999}]}, - {id:'expressvpn',name:'ExpressVPN',cat:'Softwares & Tools',mrp:'₹1,999',discount:'76%',icon:'expressvpn',tag:null,color:'#0F866C', - desc:'ExpressVPN. Connect up to 8 Devices, 105+ Countries Servers, Premium Encryption.', features:['105+ Countries','8 Devices','Lightning-Fast Speed'], - variants: [{name:'1 Month', price:'₹479', priceNum:479}]}, - {id:'windows11',name:'Windows 11 Pro',cat:'Softwares & Tools',mrp:'₹9,999',discount:'92%',icon:'windows11',tag:'Popular',color:'#0078D4', - desc:'Windows 11 Pro Official License Key. Private, Secure Login, and Full Warranty.', features:['Official License Key','Lifetime (Retail)','Full Warranty'], - variants: [{name:'Lifetime', price:'₹719', priceNum:719}]}, - {id:'filmora',name:'Filmora Premium',cat:'Softwares & Tools',mrp:'₹4,999',discount:'50%',icon:'filmora',tag:null,color:'#00D2D3', - desc:'Wondershare Filmora premium video editing software. 100% Official & Legit Subscription.', features:['No watermark','Full Access','Complete Warranty'], - variants: [{name:'Filmora 13/14 (1 Year)', price:'₹2,279', priceNum:2279}]}, - {id:'lenskart',name:'Lenskart Gold',cat:'Softwares & Tools',mrp:'₹999',discount:'80%',icon:'lenskart',tag:null,color:'#32b8a4', - desc:'Lenskart Gold membership for Buy 1 Get 1 Free offers.', features:['BOGO offers','Free eye checkup','Premium support'], - variants: [{name:'Gold Max', price:'₹249', priceNum:249}]}, - {id:'coursera',name:'Coursera Plus',cat:'Softwares & Tools',mrp:'₹3,999',discount:'75%',icon:'coursera',tag:null,color:'#0056D2', - desc:'Coursera Plus access to 7000+ courses and certifications.', features:['Unlimited courses','Certificates included','Top universities'], - variants: [{name:'1 Year', price:'₹1,299', priceNum:1299}]}, - {id:'infosys',name:'Infosys Certifications',cat:'Certifications',mrp:'₹4,999',discount:'86%',icon:'infosys',tag:null,color:'#007CC3', - desc:'Permanent Access to legitimate Infosys Certifications in PDF format with QR. Available in:', features:['Permanent validity','QR verifiable','Delivery in 1 day'], - variants: [{name:'Permanent Access', price:'₹699', priceNum:699}]}, - {id:'jpmorgan',name:'JPMorgan Certifications',cat:'Certifications',mrp:'₹4,999',discount:'86%',icon:'jpmorgan',tag:null,color:'#4A2D00', - desc:'Permanent Access to legitimate JPMorgan Certifications in PDF format with QR. Available in:', features:['Permanent validity','QR verifiable','Delivery in 1 day'], - variants: [{name:'Permanent Access', price:'₹699', priceNum:699}]}, - {id:'pocketfm',name:'Pocket FM VIP',cat:'Softwares & Tools',mrp:'₹999',discount:'90%',icon:'pocketfm',tag:null,color:'#E50914', - desc:'Pocket FM VIP subscription for unlimited audiobooks.', features:['Ad-free listening','All audiobooks unlocked','Offline downloads'], - variants: [{name:'1 Month', price:'₹119', priceNum:119}]}, + return { + id, + name, + cat, + icon, + color, + price: rupee(priceNum), + priceNum, + ...(mrp ? { mrp, discount, mrpNum } : {}), + tag, + desc: desc || `${name} available through SoftBazzar with clear pricing and Telegram-assisted order confirmation.`, + features: features || [ + 'Plan exactly as listed', + 'Order confirmation on Telegram', + 'Delivery within 10 mins - 16 hours after payment confirmation', + ], + }; +}; - // --- Social Media Growth (+20%) --- - {id:'ig-follower',name:'Instagram Follower',cat:'Social Media Growth',mrp:'₹9,999',discount:'97%',icon:'instagram',tag:'Hot Deal',color:'#E1306C', - desc:'Boost your Instagram presence with organic-looking followers.', features:['Fast delivery','Non-drop guarantee','High quality profiles'], - variants: [ - {name:'1000 Follower', price:'₹299', priceNum:299}, {name:'5000 Follower', price:'₹1,299', priceNum:1299}, - {name:'10000 Follower', price:'₹1,999', priceNum:1999}, {name:'20000 Follower', price:'₹3,899', priceNum:3899}, - {name:'100000 Follower (100k)', price:'₹15,999', priceNum:15999} - ]}, - {id:'1m-reels',name:'1 Million Reels Views',cat:'Social Media Growth',mrp:'₹9,999',discount:'90%',icon:'reels',tag:'Popular',color:'#E1306C', - desc:'Go viral with 1 Million views on your Instagram Reel.', features:['Viral push','High retention','Safe & secure'], - variants: [{name:'Standard', price:'₹999', priceNum:999}]}, - {id:'reels-views',name:'Reels Views',cat:'Social Media Growth',mrp:'₹9,999',discount:'99%',icon:'reels',tag:null,color:'#E1306C', - desc:'Get targeted views for your Instagram reels.', features:['Instant start','Real engagement','Affordable'], - variants: [ - {name:'1k Views', price:'₹15', priceNum:15}, {name:'5k Views', price:'₹49', priceNum:49}, {name:'10k Views', price:'₹89', priceNum:89}, - {name:'20k Views', price:'₹175', priceNum:175}, {name:'50k Views', price:'₹299', priceNum:299}, {name:'100k Views', price:'₹499', priceNum:499}, - {name:'500k Views', price:'₹1,799', priceNum:1799}, {name:'1 million Views', price:'₹2,599', priceNum:2599} - ]}, - {id:'ig-likes-real',name:'Instagram Likes ( Real)',cat:'Social Media Growth',mrp:'₹999',discount:'92%',icon:'instagram',tag:null,color:'#E1306C', - desc:'Real likes from active accounts to boost post engagement.', features:['Active accounts','Algorithm boost','Fast delivery'], - variants: [ - {name:'100 Likes', price:'₹75', priceNum:75}, {name:'300 Likes', price:'₹149', priceNum:149}, {name:'500 Likes', price:'₹199', priceNum:199}, - {name:'1000 Likes', price:'₹299', priceNum:299}, {name:'5000 Likes', price:'₹1,199', priceNum:1199}, {name:'10000 Likes', price:'₹1,499', priceNum:1499} - ]}, - {id:'ig-likes-bot',name:'Instagram Likes (Bot Likes)',cat:'Social Media Growth',mrp:'₹499',discount:'95%',icon:'instagram',tag:null,color:'#E1306C', - desc:'Cheap bot likes to increase your post numbers quickly.', features:['Instant delivery','High volume','Lowest price'], - variants: [ - {name:'100 Likes', price:'₹25', priceNum:25}, {name:'300 Likes', price:'₹49', priceNum:49}, {name:'500 Likes', price:'₹85', priceNum:85}, - {name:'1000 Likes (1k)', price:'₹129', priceNum:129}, {name:'5000 Likes (5k)', price:'₹299', priceNum:299}, {name:'10000 Likes (10k)', price:'₹499', priceNum:499}, - {name:'50000 Likes (50k)', price:'₹1,999', priceNum:1999}, {name:'100000 Likes (100k)', price:'₹2,999', priceNum:2999} - ]}, +export const products = [ + makeProduct({ id:'gemini-pro', name:'Gemini Pro (18 Months)', cat:'AI Tools', icon:'gemini', color:'#4285F4', priceNum:649, mrp:'₹17,550', mrpNum:17550, tag:'Hot Deal' }), + makeProduct({ id:'canva-pro', name:'Canva Pro (3 Years)', cat:'Design & Creative', icon:'canva', color:'#7D2AE8', priceNum:229, mrp:'₹41,621', mrpNum:41621, tag:'Popular' }), + makeProduct({ id:'chatgpt-plus', name:'ChatGPT Plus (1 Month)', cat:'AI Tools', icon:'chatgpt', color:'#10A37F', priceNum:699, mrp:'₹1,999', mrpNum:1999, tag:'Trending' }), + makeProduct({ id:'super-grok-1y', name:'Super Grok (1 Year)', cat:'AI Tools', icon:'grok', color:'#111111', priceNum:1749, mrp:'₹34,423', mrpNum:34423 }), + makeProduct({ id:'microsoft-365-lifetime', name:'Microsoft 365 (Lifetime)', cat:'Productivity', icon:'microsoft', color:'#5E5E5E', priceNum:999, mrp:'₹6,899/Year', mrpNum:6899, tag:'Popular' }), + makeProduct({ id:'coursera-1y', name:'Coursera (1 Year)', cat:'Education', icon:'coursera', color:'#0056D2', priceNum:1299, mrp:'₹34,000', mrpNum:34000 }), + makeProduct({ id:'capcut-pro-1m-25d', name:'CapCut Pro (1 Month • Ready Account • 25 Days Warranty)', cat:'Design & Creative', icon:'capcut', color:'#111111', priceNum:449, mrp:'₹999', mrpNum:999, features:['Ready account','25 days warranty','Delivery within 10 mins - 16 hours after payment confirmation'] }), + makeProduct({ id:'capcut-pro-1w', name:'CapCut Pro (1 Week)', cat:'Design & Creative', icon:'capcut', color:'#111111', priceNum:99, mrp:'₹249', mrpNum:249 }), + makeProduct({ id:'autodesk-all-apps-1y', name:'Autodesk All Apps (1 Year)', cat:'Software & Licenses', icon:'autodesk', color:'#0696D7', priceNum:999, mrp:'₹2.2 Lakhs', mrpNum:220000, tag:'Hot Deal' }), + makeProduct({ id:'windows-pro-retail', name:'Windows 10/11 Pro Retail Key', cat:'Software & Licenses', icon:'windows', color:'#00A4EF', priceNum:999, mrp:'₹12,000', mrpNum:12000 }), + makeProduct({ id:'linkedin-premium-1y', name:'LinkedIn Premium (Any Plan • 1 Year)', cat:'Productivity', icon:'linkedin', color:'#0A66C2', priceNum:1499, mrp:'₹19,999', mrpNum:19999 }), + makeProduct({ id:'replit-core-1y', name:'Replit Core (1 Year)', cat:'Developer Tools', icon:'replit', color:'#F26207', priceNum:3999, mrp:'₹17,000', mrpNum:17000 }), + makeProduct({ id:'manus-ai-pro-1y', name:'Manus AI Pro (1 Year • 4K Credits/Month)', cat:'AI Tools', icon:'manus', color:'#111111', priceNum:3999, mrp:'₹22,948', mrpNum:22948 }), + makeProduct({ id:'notion-edu-1y', name:'Notion Edu (1 Year)', cat:'Productivity', icon:'notion', color:'#FFFFFF', priceNum:499, mrp:'₹11,491', mrpNum:11491 }), + makeProduct({ id:'netflix-4k-slot-1m', name:'Netflix 4K (1 Slot • 1 Month)', cat:'OTT & Media', icon:'netflix', color:'#E50914', priceNum:229, mrp:'₹649', mrpNum:649 }), + makeProduct({ id:'chatgpt-k12-cdk-2y', name:'ChatGPT K12-CDK (2 Years)', cat:'AI Tools', icon:'chatgpt', color:'#10A37F', priceNum:1399, mrp:'₹2,199', mrpNum:2199 }), + makeProduct({ id:'super-grok-7-10d', name:'Super Grok (7–10 Days)', cat:'AI Tools', icon:'grok', color:'#111111', priceNum:199, mrp:'₹956', mrpNum:956 }), + makeProduct({ id:'capcut-pro-1m-7d', name:'CapCut Pro (1 Month • Ready Account • 7 Days Warranty)', cat:'Design & Creative', icon:'capcut', color:'#111111', priceNum:229, mrp:'₹999', mrpNum:999, features:['Ready account','7 days warranty','Delivery within 10 mins - 16 hours after payment confirmation'] }), + makeProduct({ id:'autodesk-education-3y-panel', name:'Autodesk Education (3 Years • 3000 Users Panel)', cat:'Education', icon:'autodesk', color:'#0696D7', priceNum:5999, mrp:'₹3,00,000', mrpNum:300000 }), + makeProduct({ id:'autodesk-education-renewal-1y', name:'Autodesk Education Renewal (1 Year • 3000 Users Panel)', cat:'Education', icon:'autodesk', color:'#0696D7', priceNum:1999, mrp:'₹34,000', mrpNum:34000 }), + makeProduct({ id:'manus-ai-pro-1w', name:'Manus AI Pro (1 Week)', cat:'AI Tools', icon:'manus', color:'#111111', priceNum:299, mrp:'₹439', mrpNum:439 }), + makeProduct({ id:'cursor-ai-pro-1y', name:'Cursor AI Pro (1 Year)', cat:'Developer Tools', icon:'cursor', color:'#111111', priceNum:9999, mrp:'₹20,500', mrpNum:20500 }), + makeProduct({ id:'adobe-creative-cloud-14d', name:'Adobe Creative Cloud (14 Days)', cat:'Design & Creative', icon:'adobe', color:'#FF0000', priceNum:199, mrp:'₹2,450', mrpNum:2450 }), + makeProduct({ id:'adobe-creative-cloud-pro-3m', name:'Adobe Creative Cloud Pro (Ready Account • 3 Months)', cat:'Design & Creative', icon:'adobe', color:'#FF0000', priceNum:649, mrp:'₹20,051', mrpNum:20051, features:['Ready account','3 months plan','Delivery within 10 mins - 16 hours after payment confirmation'] }), + makeProduct({ id:'figma-edu-pro', name:'Figma Edu (Pro • 1–2 Years)', cat:'Design & Creative', icon:'figma', color:'#A259FF', priceNum:1299, mrp:'₹36,772', mrpNum:36772 }), + makeProduct({ id:'ilovepdf-pro-1y', name:'ILovePDF Pro (Ready Account • 1 Year)', cat:'Productivity', icon:'ilovepdf', color:'#E5322D', priceNum:399, mrp:'₹2,400', mrpNum:2400 }), + makeProduct({ id:'quillbot-premium-1m', name:'QuillBot Premium (1 Month)', cat:'AI Tools', icon:'quillbot', color:'#499557', priceNum:399, mrp:'₹999', mrpNum:999 }), + makeProduct({ id:'deepl-pro-1m', name:'DeepL Pro (1 Month)', cat:'AI Tools', icon:'deepl', color:'#0F2B46', priceNum:499, mrp:'₹2,744', mrpNum:2744 }), + makeProduct({ id:'deepl-pro-api-1m', name:'DeepL Pro API (1 Month)', cat:'Developer Tools', icon:'deepl', color:'#0F2B46', priceNum:349, mrp:'₹899', mrpNum:899 }), + makeProduct({ id:'elevenlabs-creator-1y', name:'ElevenLabs Creator (1 Year)', cat:'AI Tools', icon:'elevenlabs', color:'#111111', priceNum:4499, mrp:'₹21,000', mrpNum:21000 }), + makeProduct({ id:'framer-pro-1y', name:'Framer Pro (1 Year)', cat:'Design & Creative', icon:'framer', color:'#0055FF', priceNum:1999, mrp:'₹34,423', mrpNum:34423 }), + makeProduct({ id:'lovable-unlimited-single', name:'Lovable.dev Unlimited Credits (Single User)', cat:'Developer Tools', icon:'lovable', color:'#FF5C7A', priceNum:799, mrp:'₹2,390', mrpNum:2390 }), + makeProduct({ id:'lovable-unlimited-admin', name:'Lovable.dev Unlimited Credits (Admin Panel)', cat:'Developer Tools', icon:'lovable', color:'#FF5C7A', priceNum:1999 }), + makeProduct({ id:'lovable-unlimited-1d', name:'Lovable Unlimited (1 Day)', cat:'Developer Tools', icon:'lovable', color:'#FF5C7A', priceNum:149 }), + makeProduct({ id:'supabase-pro-1y', name:'Supabase Pro (1 Year)', cat:'Developer Tools', icon:'supabase', color:'#3ECF8E', priceNum:4499, mrp:'₹21,000', mrpNum:21000 }), + makeProduct({ id:'n8n-starter-1y', name:'n8n Starter (1 Year)', cat:'Developer Tools', icon:'n8n', color:'#EA4B71', priceNum:2499, mrp:'₹21,000', mrpNum:21000 }), + makeProduct({ id:'warp-build-1y', name:'Warp.dev Build (1 Year)', cat:'Developer Tools', icon:'warp', color:'#6B57FF', priceNum:1999, mrp:'₹17,000', mrpNum:17000 }), + makeProduct({ id:'railway-hobby-1y', name:'Railway Hobby (1 Year)', cat:'Developer Tools', icon:'railway', color:'#111111', priceNum:1999, mrp:'₹8,999', mrpNum:8999 }), + makeProduct({ id:'linear-business-1y', name:'Linear.app Business (1 Year)', cat:'Productivity', icon:'linear', color:'#5E6AD2', priceNum:749, mrp:'₹14,000', mrpNum:14000 }), + makeProduct({ id:'gumloop-pro-1y', name:'Gumloop Pro (20K Credits/Month • 1 Year)', cat:'Developer Tools', icon:'gumloop', color:'#FF7A00', priceNum:1499, mrp:'₹34,494', mrpNum:34494 }), + makeProduct({ id:'chatprd-pro-1y', name:'chatPRD Pro (1 Year)', cat:'Developer Tools', icon:'chatprd', color:'#6D5DFB', priceNum:1499, mrp:'₹5,999', mrpNum:5999 }), + makeProduct({ id:'reclaim-startup-1y', name:'Reclaim.ai Startup Pack (1 Year)', cat:'Productivity', icon:'reclaim', color:'#6B4EFF', priceNum:1499, mrp:'₹11,491', mrpNum:11491 }), + makeProduct({ id:'wisprflow-ai-1y', name:'WisprFlow AI (1 Year)', cat:'AI Tools', icon:'wisprflow', color:'#5A67D8', priceNum:1999, mrp:'₹13,000', mrpNum:13000 }), + makeProduct({ id:'posthog-scale-1y', name:'PostHog Scale (1 Year)', cat:'Developer Tools', icon:'posthog', color:'#F9BD2B', priceNum:1699, mrp:'US$24,000' }), + makeProduct({ id:'factory-ai-pro-1y', name:'Factory AI Pro (1 Year)', cat:'AI Tools', icon:'factory', color:'#111111', priceNum:1999, mrp:'₹22,999', mrpNum:22999 }), + makeProduct({ id:'granola-ai-business-1y', name:'Granola AI Business (1 Year)', cat:'AI Tools', icon:'granola', color:'#F3E9D2', priceNum:799, mrp:'₹16,064', mrpNum:16064 }), + makeProduct({ id:'gamma-app-pro-1y', name:'Gamma App Pro (1 Year)', cat:'AI Tools', icon:'gamma', color:'#292929', priceNum:3999, mrp:'₹17,000', mrpNum:17000 }), + makeProduct({ id:'dreamina-seedance-basic', name:'Dreamina Basic Seedance 2.0', cat:'Design & Creative', icon:'dreamina', color:'#111111', priceNum:249 }), + makeProduct({ id:'adobe-substance-3d-1m', name:'Adobe Substance 3D Collection (1 Month • Redeem Key)', cat:'Design & Creative', icon:'adobe', color:'#FF0000', priceNum:229, mrp:'₹4,500', mrpNum:4500 }), + makeProduct({ id:'adobe-acrobat-standard-1m', name:'Adobe Acrobat Standard DC (1 Month • Redeem Key)', cat:'Productivity', icon:'adobe', color:'#FF0000', priceNum:229, mrp:'₹1,200', mrpNum:1200 }), + makeProduct({ id:'magic-patterns-hobby-1y', name:'Magic Patterns Hobby (1 Year)', cat:'Design & Creative', icon:'magicpatterns', color:'#7C3AED', priceNum:849, mrp:'₹8,500', mrpNum:8500 }), + makeProduct({ id:'miro-premium-1-3y', name:'Miro Premium (1–3 Years)', cat:'Productivity', icon:'miro', color:'#FFD02F', priceNum:499, mrp:'₹7,999', mrpNum:7999 }), + makeProduct({ id:'mobbin-team-1y', name:'Mobbin Team (10 Users • 1 Year)', cat:'Design & Creative', icon:'mobbin', color:'#111111', priceNum:1499, mrp:'₹17,999', mrpNum:17999 }), + makeProduct({ id:'intercom-advanced-1y', name:'Intercom Advanced (1 Year)', cat:'Productivity', icon:'intercom', color:'#286EFA', priceNum:1499, mrp:'₹98,000', mrpNum:98000 }), - // --- Digital Bundles (+40%) --- - {id:'cb-bundle-0',name:'Animated Dancing Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-0',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-1',name:'AI Hulk Reel',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-1',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹119', priceNum:119}]}, - {id:'cb-bundle-2',name:'Monkey Vlogging Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-2',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹119', priceNum:119}]}, - {id:'cb-bundle-3',name:'All In One Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-3',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹1199', priceNum:1199}]}, - {id:'cb-bundle-4',name:'Shopify 500+ Themes',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-4',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹119', priceNum:119}]}, - {id:'cb-bundle-5',name:'Ben 10 Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-5',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-6',name:'Oggy and Cockroaches',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-6',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-7',name:'Mr. Bean Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-7',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-8',name:'Doraemon Bundle Pack',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-8',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-9',name:'Motivational Money Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-9',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-10',name:'Bageshwar Baba Pack',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-10',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-11',name:'Anime Quotes Pack',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-11',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-12',name:'Luxury Watches Reel Pack',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-12',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'cb-bundle-13',name:'Space Reels Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'cb-bundle-13',tag:null,color:'#6366f1', - desc:'Premium digital bundle for social media growth. Ready to use and highly engaging.', features:['HD Quality','Ready to Use','Instant Access'], - variants: [{name:'Full Bundle', price:'₹59', priceNum:59}]}, - {id:'bundle-creators',name:"Creator's Vault 2025",cat:'Digital Bundles',mrp:'₹4,999',discount:'97%',icon:'bundle-creators',tag:'Hot Deal',color:'#6366f1', - desc:'The ultimate creator toolkit — everything you need in one bundle.', features:['All-in-one vault','Premium assets','2025 edition'], - variants: [{name:'Full Bundle', price:'₹139', priceNum:139}]}, - {id:'bundle-podcast',name:'Podcast Reel Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'bundle-podcast',tag:null,color:'#6366f1', - desc:'Podcast-style reels with trending formats for social media.', features:['Podcast format','Viral clips','High retention'], - variants: [{name:'Full Bundle', price:'₹69', priceNum:69}]}, - {id:'bundle-space',name:'Space Reels Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'bundle-space',tag:null,color:'#6366f1', - desc:'Stunning space and universe themed reel content.', features:['Space visuals','Cinematic quality','Viral potential'], - variants: [{name:'Full Bundle', price:'₹69', priceNum:69}]}, - {id:'bundle-f1',name:'F1 Cars Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'bundle-f1',tag:null,color:'#6366f1', - desc:'Formula 1 cars and racing clips for car enthusiast reels.', features:['F1 footage','High quality','Trending niche'], - variants: [{name:'Full Bundle', price:'₹69', priceNum:69}]}, - {id:'bundle-gym',name:'Gym Motivational Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'bundle-gym',tag:null,color:'#6366f1', - desc:'Gym motivation, workout clips and fitness content.', features:['Workout clips','Motivational quotes','Fitness niche'], - variants: [{name:'Full Bundle', price:'₹69', priceNum:69}]}, - {id:'bundle-emotional',name:'Emotional Reels Bundle',cat:'Digital Bundles',mrp:'₹999',discount:'95%',icon:'bundle-emotional',tag:null,color:'#6366f1', - desc:'Emotional and heartfelt video clips for viral storytelling.', features:['Emotional content','Story format','High engagement'], - variants: [{name:'Full Bundle', price:'₹69', priceNum:69}]}, + makeProduct({ id:'freepik-magnific-1m', name:'Freepik (Magnific) — 1 Month', cat:'Design & Creative', icon:'freepik', color:'#1273EB', priceNum:749, mrp:'₹1,740', mrpNum:1740 }), + makeProduct({ id:'freepik-magnific-3m', name:'Freepik (Magnific) — 3 Months', cat:'Design & Creative', icon:'freepik', color:'#1273EB', priceNum:1999, mrp:'₹5,220', mrpNum:5220 }), + makeProduct({ id:'freepik-magnific-6m', name:'Freepik (Magnific) — 6 Months', cat:'Design & Creative', icon:'freepik', color:'#1273EB', priceNum:3999, mrp:'₹10,440', mrpNum:10440 }), + makeProduct({ id:'freepik-magnific-12m', name:'Freepik (Magnific) — 12 Months', cat:'Design & Creative', icon:'freepik', color:'#1273EB', priceNum:7999, mrp:'₹15,140', mrpNum:15140 }), - // --- OTT Apps --- - {id:'youtube-premium',name:'YouTube Premium',cat:'OTT Apps',mrp:'₹599',discount:'83%',icon:'youtube',tag:null,color:'#FF0000', - desc:'YouTube Premium for ad-free videos and background play.', features:['Ad-free videos','Background play','YouTube Music'], - variants: [{name:'Shared Plan', price:'₹99', priceNum:99}, {name:'Private Account', price:'₹199', priceNum:199}]}, + makeProduct({ id:'envato-elements', name:'Envato Elements — 1 Month', cat:'Design & Creative', icon:'envato', color:'#81B441', priceNum:799, mrp:'₹3,390', mrpNum:3390, tag:'Popular' }), + makeProduct({ id:'envato-elements-3m', name:'Envato Elements — 3 Months', cat:'Design & Creative', icon:'envato', color:'#81B441', priceNum:2299, mrp:'₹10,170', mrpNum:10170 }), + makeProduct({ id:'envato-elements-6m', name:'Envato Elements — 6 Months', cat:'Design & Creative', icon:'envato', color:'#81B441', priceNum:4499, mrp:'₹20,340', mrpNum:20340 }), + makeProduct({ id:'envato-elements-12m', name:'Envato Elements — 12 Months', cat:'Design & Creative', icon:'envato', color:'#81B441', priceNum:8999, mrp:'₹40,680', mrpNum:40680 }), ]; -export const categories = ['All','AI Tools','Certifications','Softwares & Tools','Developer Tools','Design Resources','Social Media Growth','Digital Bundles','OTT Apps']; +export const categories = ['All', ...new Set(products.map((product) => product.cat))]; From 707ac4a929b8c32c74da3e9767c39503c3616843 Mon Sep 17 00:00:00 2001 From: Pavithran R A <92867708+Pavithran-R-A@users.noreply.github.com> Date: Thu, 17 Sep 2026 19:30:28 +0530 Subject: [PATCH 02/14] fix: harden storefront copy and Telegram checkout flow --- src/storefront-overrides.js | 243 ++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 src/storefront-overrides.js diff --git a/src/storefront-overrides.js b/src/storefront-overrides.js new file mode 100644 index 0000000..37d39da --- /dev/null +++ b/src/storefront-overrides.js @@ -0,0 +1,243 @@ +import { products } from './data.js'; +import { calculateCartTotal, readStoredCart, resolveCartItems } from './cart-model.js'; + +const TELEGRAM_BASE = 'https://t.me/softbazzar'; +const DELIVERY_WINDOW = '10 mins - 16 hours'; + +const productByPath = () => { + const match = window.location.pathname.match(/^\/product\/([^/]+)$/); + if (!match) return null; + return products.find((product) => product.id === decodeURIComponent(match[1])) || null; +}; + +function openTelegram(message) { + window.open(`${TELEGRAM_BASE}?text=${encodeURIComponent(message)}`, '_blank', 'noopener,noreferrer'); +} + +function cartMessage() { + const cart = readStoredCart(); + const items = resolveCartItems(cart); + if (!items.length) return null; + + const lines = items.map((item) => { + const variant = item.variantName ? ` (${item.variantName})` : ''; + return `• ${item.productName}${variant} ×${item.qty || 1} — ₹${item.lineTotal.toLocaleString('en-IN')}`; + }); + + return [ + '🛒 SoftBazzar Order', + '━━━━━━━━━━━━━━━━━━━━', + ...lines, + '━━━━━━━━━━━━━━━━━━━━', + `Total: ₹${calculateCartTotal(cart).toLocaleString('en-IN')}`, + '', + 'Please send the payment details for this order.', + 'After I pay, I will reply here with my payment screenshot.', + `Delivery: within ${DELIVERY_WINDOW} after payment confirmation.`, + ].join('\n'); +} + +function singleProductMessage(product) { + return [ + '🛒 SoftBazzar Order', + '━━━━━━━━━━━━━━━━━━━━', + `• ${product.name} — ${product.price}`, + '━━━━━━━━━━━━━━━━━━━━', + `Total: ${product.price}`, + '', + 'Please send the payment details for this order.', + 'After I pay, I will reply here with my payment screenshot.', + `Delivery: within ${DELIVERY_WINDOW} after payment confirmation.`, + ].join('\n'); +} + +function setText(selector, value) { + const element = document.querySelector(selector); + if (element && element.textContent !== value) element.textContent = value; +} + +function applyStorefrontCopy() { + const heroSubtitle = document.querySelector('.hero-subtitle'); + if (heroSubtitle) { + const desired = 'Premium tools, subscriptions & digital software at much lower prices.'; + if (heroSubtitle.textContent.trim() !== desired) heroSubtitle.textContent = desired; + } + + const search = document.getElementById('searchInput'); + if (search) { + search.placeholder = 'Search ChatGPT, Gemini, CapCut, Envato, Replit...'; + search.setAttribute('aria-label', 'Search SoftBazzar products'); + } + + const steps = document.querySelectorAll('#how-it-works .step-card'); + if (steps.length >= 3) { + const content = [ + ['Choose your product', 'Pick the premium tool, subscription, or software plan you want.'], + ['Continue on Telegram', 'Send your order details to @softbazzar and receive the payment instructions there.'], + ['Send payment screenshot', `After paying, send the payment screenshot in Telegram. Delivery is within ${DELIVERY_WINDOW} after payment confirmation.`], + ]; + steps.forEach((step, index) => { + if (!content[index]) return; + const title = step.querySelector('.step-title'); + const desc = step.querySelector('.step-desc'); + if (title) title.textContent = content[index][0]; + if (desc) desc.textContent = content[index][1]; + }); + } + + const statItems = document.querySelectorAll('#stats .stat-item'); + const stats = [ + [`${products.length}`, 'Current Offers'], + ['10m–16h', 'Delivery Window'], + ['Telegram', 'Order Support'], + ['MRP + Sale', 'Clear Pricing'], + ]; + statItems.forEach((item, index) => { + if (!stats[index]) return; + const number = item.querySelector('.stat-number'); + const label = item.querySelector('.stat-label'); + if (number) number.textContent = stats[index][0]; + if (label) label.textContent = stats[index][1]; + }); + + setText('.cta-subtitle', 'Choose a product, review the price, and continue your order on Telegram.'); + + const footerDescription = document.querySelector('.footer-brand > p'); + if (footerDescription) { + footerDescription.textContent = `Premium tools and digital subscriptions at lower prices. Orders continue on Telegram, with delivery within ${DELIVERY_WINDOW} after payment confirmation.`; + } + + const cartNote = document.querySelector('.cart-telegram-note'); + if (cartNote) cartNote.textContent = 'Order and payment confirmation continue on Telegram.'; + + const popularLinks = document.querySelectorAll('.footer-col:nth-of-type(3) a[data-route]'); + const popular = [ + ['/product/chatgpt-plus', 'ChatGPT Plus'], + ['/product/gemini-pro', 'Gemini Pro'], + ['/product/canva-pro', 'Canva Pro'], + ['/product/envato-elements', 'Envato Elements'], + ['/product/replit-core-1y', 'Replit Core'], + ]; + popularLinks.forEach((link, index) => { + if (!popular[index]) return; + link.setAttribute('href', popular[index][0]); + link.textContent = popular[index][1]; + }); + + const checkoutSteps = document.querySelectorAll('.co-steps .co-step'); + if (checkoutSteps.length >= 3) { + const checkoutCopy = [ + ['Review Order', 'Verify your product details and total.'], + ['Open Telegram', 'Send the pre-filled order details to @softbazzar and receive payment instructions.'], + ['Send Payment Screenshot', `After paying, send your payment screenshot in the same Telegram chat. Delivery is within ${DELIVERY_WINDOW} after payment confirmation.`], + ]; + checkoutSteps.forEach((step, index) => { + const strong = step.querySelector('strong'); + const paragraph = step.querySelector('p'); + if (strong) strong.textContent = checkoutCopy[index][0]; + if (paragraph) paragraph.textContent = checkoutCopy[index][1]; + }); + } + + const sendButton = document.querySelector('#coSendOrder span'); + if (sendButton) sendButton.textContent = 'Send Order to Telegram'; + + document.querySelectorAll('.product-discount, .detail-save').forEach((badge) => { + const value = badge.textContent.trim(); + if (!value || value === 'OFF' || value === 'undefined OFF') badge.style.display = 'none'; + }); + + const drawer = document.getElementById('cartDrawer'); + if (drawer) { + drawer.setAttribute('role', 'dialog'); + drawer.setAttribute('aria-modal', 'true'); + drawer.setAttribute('aria-label', 'Shopping cart'); + } + document.getElementById('cartClose')?.setAttribute('aria-label', 'Close cart'); + const cartToggle = document.getElementById('cartToggle'); + if (cartToggle) { + cartToggle.setAttribute('aria-haspopup', 'dialog'); + cartToggle.setAttribute('aria-controls', 'cartDrawer'); + } + + document.querySelectorAll('.product-card').forEach((card) => { + card.setAttribute('role', 'link'); + card.setAttribute('tabindex', '0'); + }); + + document.querySelectorAll('a[target="_blank"]').forEach((link) => { + link.setAttribute('rel', 'noopener noreferrer'); + }); + + const toast = document.getElementById('toast'); + if (toast) { + toast.setAttribute('role', 'status'); + toast.setAttribute('aria-live', 'polite'); + } +} + +function rewriteSalesTicker() { + const ticker = document.querySelector('.sales-ticker'); + if (!ticker) return; + const action = ticker.querySelector('.ticker-action'); + if (!action || !/just purchased/i.test(action.textContent)) return; + + const productName = action.querySelector('span')?.textContent?.trim() || 'SoftBazzar deal'; + const labels = ['Featured now', 'Catalogue highlight', 'Deal spotlight', 'Worth a look']; + const label = labels[Math.floor(Math.random() * labels.length)]; + + ticker.innerHTML = ` +
★
+
+
${label}
+
${productName} · current offer
+
+ `; +} + +document.addEventListener('click', (event) => { + const checkoutButton = event.target.closest('#coSendOrder'); + if (checkoutButton) { + event.preventDefault(); + event.stopImmediatePropagation(); + const message = cartMessage(); + if (message) openTelegram(message); + return; + } + + const buyNow = event.target.closest('a.detail-buy-btn[href*="t.me/softbazzar"]'); + if (buyNow) { + const product = productByPath(); + if (!product) return; + event.preventDefault(); + event.stopImmediatePropagation(); + openTelegram(singleProductMessage(product)); + } +}, true); + +document.addEventListener('keydown', (event) => { + const card = event.target.closest?.('.product-card'); + if (!card || event.target.closest('button, a, input')) return; + if (event.key === 'Enter' || event.key === ' ') { + event.preventDefault(); + card.click(); + } +}); + +const app = document.getElementById('app'); +if (app) { + let scheduled = false; + new MutationObserver(() => { + if (scheduled) return; + scheduled = true; + requestAnimationFrame(() => { + scheduled = false; + applyStorefrontCopy(); + }); + }).observe(app, { childList: true }); +} + +new MutationObserver(() => rewriteSalesTicker()).observe(document.body, { childList: true, subtree: true }); + +applyStorefrontCopy(); +rewriteSalesTicker(); From 64d8dddd1aabff02839e429172e4c0260e766011 Mon Sep 17 00:00:00 2001 From: Pavithran R A <92867708+Pavithran-R-A@users.noreply.github.com> Date: Thu, 17 Sep 2026 19:30:40 +0530 Subject: [PATCH 03/14] chore: load storefront refresh layer --- index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/index.html b/index.html index 28d6d76..9b35016 100644 --- a/index.html +++ b/index.html @@ -24,5 +24,6 @@

SoftBazzar digital catalogue

Browse digital tools and subscriptions, compare current options and prices, and send an order through the configured support channel.

+ From 3d410b14d9f6203f1feb22a128a437c6cc071eb8 Mon Sep 17 00:00:00 2001 From: Pavithran R A <92867708+Pavithran-R-A@users.noreply.github.com> Date: Thu, 17 Sep 2026 19:31:07 +0530 Subject: [PATCH 04/14] test: lock September catalogue and untouched hero behavior --- tests/catalogue-refresh.test.mjs | 70 ++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 tests/catalogue-refresh.test.mjs diff --git a/tests/catalogue-refresh.test.mjs b/tests/catalogue-refresh.test.mjs new file mode 100644 index 0000000..d79f09c --- /dev/null +++ b/tests/catalogue-refresh.test.mjs @@ -0,0 +1,70 @@ +import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import test from 'node:test'; +import { products } from '../src/data.js'; + +const indexHtml = readFileSync(new URL('../index.html', import.meta.url), 'utf8'); +const mainJs = readFileSync(new URL('../src/main.js', import.meta.url), 'utf8'); +const overrides = readFileSync(new URL('../src/storefront-overrides.js', import.meta.url), 'utf8'); + +const byId = (id) => products.find((product) => product.id === id); + +test('September 2026 catalogue contains the supplied storefront offers with unique IDs', () => { + assert.ok(products.length >= 60, `expected at least 60 offers, got ${products.length}`); + assert.equal(new Set(products.map((product) => product.id)).size, products.length); + + assert.equal(byId('gemini-pro')?.priceNum, 649); + assert.equal(byId('gemini-pro')?.mrp, '₹17,550'); + assert.equal(byId('canva-pro')?.priceNum, 229); + assert.equal(byId('chatgpt-plus')?.priceNum, 699); + assert.equal(byId('super-grok-1y')?.priceNum, 1749); + assert.equal(byId('microsoft-365-lifetime')?.mrp, '₹6,899/Year'); + assert.equal(byId('autodesk-all-apps-1y')?.mrp, '₹2.2 Lakhs'); + assert.equal(byId('posthog-scale-1y')?.mrp, 'US$24,000'); + assert.equal(byId('envato-elements-12m')?.priceNum, 8999); + assert.equal(byId('freepik-magnific-12m')?.priceNum, 7999); +}); + +test('all sellable prices are positive and INR MRPs exceed selling prices where numeric MRP is supplied', () => { + for (const product of products) { + assert.ok(Number.isFinite(product.priceNum) && product.priceNum > 0, `${product.id} has invalid selling price`); + if (Number.isFinite(product.mrpNum)) { + assert.ok(product.mrpNum > product.priceNum, `${product.id} MRP must exceed selling price`); + assert.ok(product.mrp, `${product.id} numeric MRP must have display text`); + } + } +}); + +test('items supplied without an MRP show only selling price', () => { + for (const id of ['lovable-unlimited-admin', 'lovable-unlimited-1d', 'dreamina-seedance-basic']) { + const product = byId(id); + assert.ok(product, `${id} missing`); + assert.equal(product.mrp, undefined); + } +}); + +test('checkout copy uses Telegram screenshot flow and keeps the requested delivery window', () => { + assert.match(overrides, /After I pay, I will reply here with my payment screenshot\./); + assert.match(overrides, /10 mins - 16 hours/); + assert.match(overrides, /stopImmediatePropagation\(\)/); + assert.doesNotMatch(overrides, /localStorage\.removeItem|writeStoredCart\(\[\]\)/); +}); + +test('activity ticker is retained but rewritten as a non-transactional catalogue highlight', () => { + assert.match(overrides, /Featured now/); + assert.match(overrides, /Catalogue highlight/); + assert.match(overrides, /current offer/); +}); + +test('hero video implementation and visual CSS are not modified by the refresh layer', () => { + assert.match(mainJs, /hf_20260328_065045_c44942da-53c6-4804-b734-f9e07fc22e08\.mp4/); + assert.match(mainJs, /id="bgVideo"/); + assert.doesNotMatch(overrides, /bgVideo|\.bg-video|VIDEO_URL|hero-wrapper|blur-overlay/); + assert.match(overrides, /\.hero-subtitle/); +}); + +test('storefront override loads after the original application module', () => { + const mainIndex = indexHtml.indexOf('/src/main.js'); + const overrideIndex = indexHtml.indexOf('/src/storefront-overrides.js'); + assert.ok(mainIndex >= 0 && overrideIndex > mainIndex); +}); From 2da105bcbbd8fb396737e2bb0527aac7eb907776 Mon Sep 17 00:00:00 2001 From: Pavithran R A <92867708+Pavithran-R-A@users.noreply.github.com> Date: Thu, 17 Sep 2026 20:07:47 +0530 Subject: [PATCH 05/14] feat: normalize September catalogue into products and variants --- src/data.js | 160 +++++++++++++++++++++++++++------------------------- 1 file changed, 82 insertions(+), 78 deletions(-) diff --git a/src/data.js b/src/data.js index 5a04169..6483ac8 100644 --- a/src/data.js +++ b/src/data.js @@ -50,95 +50,99 @@ export const brandIcons = { const rupee = (value) => `₹${Number(value).toLocaleString('en-IN')}`; -const makeProduct = ({ id, name, cat, icon, color, priceNum, mrp, mrpNum, tag = null, desc, features }) => { - const discount = Number.isFinite(mrpNum) && mrpNum > priceNum +const discountFor = (priceNum, mrpNum) => ( + Number.isFinite(mrpNum) && mrpNum > priceNum ? `${Math.round((1 - priceNum / mrpNum) * 100)}%` - : ''; + : '' +); +const normalizeVariant = (variant) => { + const priceNum = Number(variant.priceNum); + const mrpNum = Number.isFinite(variant.mrpNum) ? Number(variant.mrpNum) : undefined; + const mrp = variant.mrp; return { - id, - name, - cat, - icon, - color, - price: rupee(priceNum), + ...variant, priceNum, - ...(mrp ? { mrp, discount, mrpNum } : {}), - tag, - desc: desc || `${name} available through SoftBazzar with clear pricing and Telegram-assisted order confirmation.`, - features: features || [ + price: variant.price || rupee(priceNum), + ...(mrp ? { mrp, mrpNum, discount: discountFor(priceNum, mrpNum) } : {}), + }; +}; + +const makeProduct = (config) => { + const variants = Array.isArray(config.variants) ? config.variants.map(normalizeVariant) : null; + const first = variants?.[0]; + const priceNum = Number(config.priceNum ?? first?.priceNum); + const mrp = config.mrp ?? first?.mrp; + const mrpNum = Number.isFinite(config.mrpNum) ? Number(config.mrpNum) : first?.mrpNum; + const price = config.price || first?.price || rupee(priceNum); + const discount = mrp ? (config.discount ?? first?.discount ?? discountFor(priceNum, mrpNum)) : ''; + + return { + ...config, + priceNum, + price, + ...(mrp ? { mrp, mrpNum, discount } : {}), + ...(variants ? { variants } : {}), + desc: config.desc || `${config.name} listed with clear sale pricing and Telegram order confirmation.`, + features: config.features || [ 'Plan exactly as listed', - 'Order confirmation on Telegram', + 'Order details and payment confirmation on Telegram', 'Delivery within 10 mins - 16 hours after payment confirmation', ], }; }; export const products = [ - makeProduct({ id:'gemini-pro', name:'Gemini Pro (18 Months)', cat:'AI Tools', icon:'gemini', color:'#4285F4', priceNum:649, mrp:'₹17,550', mrpNum:17550, tag:'Hot Deal' }), - makeProduct({ id:'canva-pro', name:'Canva Pro (3 Years)', cat:'Design & Creative', icon:'canva', color:'#7D2AE8', priceNum:229, mrp:'₹41,621', mrpNum:41621, tag:'Popular' }), - makeProduct({ id:'chatgpt-plus', name:'ChatGPT Plus (1 Month)', cat:'AI Tools', icon:'chatgpt', color:'#10A37F', priceNum:699, mrp:'₹1,999', mrpNum:1999, tag:'Trending' }), - makeProduct({ id:'super-grok-1y', name:'Super Grok (1 Year)', cat:'AI Tools', icon:'grok', color:'#111111', priceNum:1749, mrp:'₹34,423', mrpNum:34423 }), - makeProduct({ id:'microsoft-365-lifetime', name:'Microsoft 365 (Lifetime)', cat:'Productivity', icon:'microsoft', color:'#5E5E5E', priceNum:999, mrp:'₹6,899/Year', mrpNum:6899, tag:'Popular' }), - makeProduct({ id:'coursera-1y', name:'Coursera (1 Year)', cat:'Education', icon:'coursera', color:'#0056D2', priceNum:1299, mrp:'₹34,000', mrpNum:34000 }), - makeProduct({ id:'capcut-pro-1m-25d', name:'CapCut Pro (1 Month • Ready Account • 25 Days Warranty)', cat:'Design & Creative', icon:'capcut', color:'#111111', priceNum:449, mrp:'₹999', mrpNum:999, features:['Ready account','25 days warranty','Delivery within 10 mins - 16 hours after payment confirmation'] }), - makeProduct({ id:'capcut-pro-1w', name:'CapCut Pro (1 Week)', cat:'Design & Creative', icon:'capcut', color:'#111111', priceNum:99, mrp:'₹249', mrpNum:249 }), - makeProduct({ id:'autodesk-all-apps-1y', name:'Autodesk All Apps (1 Year)', cat:'Software & Licenses', icon:'autodesk', color:'#0696D7', priceNum:999, mrp:'₹2.2 Lakhs', mrpNum:220000, tag:'Hot Deal' }), - makeProduct({ id:'windows-pro-retail', name:'Windows 10/11 Pro Retail Key', cat:'Software & Licenses', icon:'windows', color:'#00A4EF', priceNum:999, mrp:'₹12,000', mrpNum:12000 }), - makeProduct({ id:'linkedin-premium-1y', name:'LinkedIn Premium (Any Plan • 1 Year)', cat:'Productivity', icon:'linkedin', color:'#0A66C2', priceNum:1499, mrp:'₹19,999', mrpNum:19999 }), - makeProduct({ id:'replit-core-1y', name:'Replit Core (1 Year)', cat:'Developer Tools', icon:'replit', color:'#F26207', priceNum:3999, mrp:'₹17,000', mrpNum:17000 }), - makeProduct({ id:'manus-ai-pro-1y', name:'Manus AI Pro (1 Year • 4K Credits/Month)', cat:'AI Tools', icon:'manus', color:'#111111', priceNum:3999, mrp:'₹22,948', mrpNum:22948 }), - makeProduct({ id:'notion-edu-1y', name:'Notion Edu (1 Year)', cat:'Productivity', icon:'notion', color:'#FFFFFF', priceNum:499, mrp:'₹11,491', mrpNum:11491 }), - makeProduct({ id:'netflix-4k-slot-1m', name:'Netflix 4K (1 Slot • 1 Month)', cat:'OTT & Media', icon:'netflix', color:'#E50914', priceNum:229, mrp:'₹649', mrpNum:649 }), - makeProduct({ id:'chatgpt-k12-cdk-2y', name:'ChatGPT K12-CDK (2 Years)', cat:'AI Tools', icon:'chatgpt', color:'#10A37F', priceNum:1399, mrp:'₹2,199', mrpNum:2199 }), - makeProduct({ id:'super-grok-7-10d', name:'Super Grok (7–10 Days)', cat:'AI Tools', icon:'grok', color:'#111111', priceNum:199, mrp:'₹956', mrpNum:956 }), - makeProduct({ id:'capcut-pro-1m-7d', name:'CapCut Pro (1 Month • Ready Account • 7 Days Warranty)', cat:'Design & Creative', icon:'capcut', color:'#111111', priceNum:229, mrp:'₹999', mrpNum:999, features:['Ready account','7 days warranty','Delivery within 10 mins - 16 hours after payment confirmation'] }), - makeProduct({ id:'autodesk-education-3y-panel', name:'Autodesk Education (3 Years • 3000 Users Panel)', cat:'Education', icon:'autodesk', color:'#0696D7', priceNum:5999, mrp:'₹3,00,000', mrpNum:300000 }), - makeProduct({ id:'autodesk-education-renewal-1y', name:'Autodesk Education Renewal (1 Year • 3000 Users Panel)', cat:'Education', icon:'autodesk', color:'#0696D7', priceNum:1999, mrp:'₹34,000', mrpNum:34000 }), - makeProduct({ id:'manus-ai-pro-1w', name:'Manus AI Pro (1 Week)', cat:'AI Tools', icon:'manus', color:'#111111', priceNum:299, mrp:'₹439', mrpNum:439 }), - makeProduct({ id:'cursor-ai-pro-1y', name:'Cursor AI Pro (1 Year)', cat:'Developer Tools', icon:'cursor', color:'#111111', priceNum:9999, mrp:'₹20,500', mrpNum:20500 }), - makeProduct({ id:'adobe-creative-cloud-14d', name:'Adobe Creative Cloud (14 Days)', cat:'Design & Creative', icon:'adobe', color:'#FF0000', priceNum:199, mrp:'₹2,450', mrpNum:2450 }), - makeProduct({ id:'adobe-creative-cloud-pro-3m', name:'Adobe Creative Cloud Pro (Ready Account • 3 Months)', cat:'Design & Creative', icon:'adobe', color:'#FF0000', priceNum:649, mrp:'₹20,051', mrpNum:20051, features:['Ready account','3 months plan','Delivery within 10 mins - 16 hours after payment confirmation'] }), - makeProduct({ id:'figma-edu-pro', name:'Figma Edu (Pro • 1–2 Years)', cat:'Design & Creative', icon:'figma', color:'#A259FF', priceNum:1299, mrp:'₹36,772', mrpNum:36772 }), - makeProduct({ id:'ilovepdf-pro-1y', name:'ILovePDF Pro (Ready Account • 1 Year)', cat:'Productivity', icon:'ilovepdf', color:'#E5322D', priceNum:399, mrp:'₹2,400', mrpNum:2400 }), - makeProduct({ id:'quillbot-premium-1m', name:'QuillBot Premium (1 Month)', cat:'AI Tools', icon:'quillbot', color:'#499557', priceNum:399, mrp:'₹999', mrpNum:999 }), - makeProduct({ id:'deepl-pro-1m', name:'DeepL Pro (1 Month)', cat:'AI Tools', icon:'deepl', color:'#0F2B46', priceNum:499, mrp:'₹2,744', mrpNum:2744 }), - makeProduct({ id:'deepl-pro-api-1m', name:'DeepL Pro API (1 Month)', cat:'Developer Tools', icon:'deepl', color:'#0F2B46', priceNum:349, mrp:'₹899', mrpNum:899 }), - makeProduct({ id:'elevenlabs-creator-1y', name:'ElevenLabs Creator (1 Year)', cat:'AI Tools', icon:'elevenlabs', color:'#111111', priceNum:4499, mrp:'₹21,000', mrpNum:21000 }), - makeProduct({ id:'framer-pro-1y', name:'Framer Pro (1 Year)', cat:'Design & Creative', icon:'framer', color:'#0055FF', priceNum:1999, mrp:'₹34,423', mrpNum:34423 }), - makeProduct({ id:'lovable-unlimited-single', name:'Lovable.dev Unlimited Credits (Single User)', cat:'Developer Tools', icon:'lovable', color:'#FF5C7A', priceNum:799, mrp:'₹2,390', mrpNum:2390 }), - makeProduct({ id:'lovable-unlimited-admin', name:'Lovable.dev Unlimited Credits (Admin Panel)', cat:'Developer Tools', icon:'lovable', color:'#FF5C7A', priceNum:1999 }), - makeProduct({ id:'lovable-unlimited-1d', name:'Lovable Unlimited (1 Day)', cat:'Developer Tools', icon:'lovable', color:'#FF5C7A', priceNum:149 }), - makeProduct({ id:'supabase-pro-1y', name:'Supabase Pro (1 Year)', cat:'Developer Tools', icon:'supabase', color:'#3ECF8E', priceNum:4499, mrp:'₹21,000', mrpNum:21000 }), - makeProduct({ id:'n8n-starter-1y', name:'n8n Starter (1 Year)', cat:'Developer Tools', icon:'n8n', color:'#EA4B71', priceNum:2499, mrp:'₹21,000', mrpNum:21000 }), - makeProduct({ id:'warp-build-1y', name:'Warp.dev Build (1 Year)', cat:'Developer Tools', icon:'warp', color:'#6B57FF', priceNum:1999, mrp:'₹17,000', mrpNum:17000 }), - makeProduct({ id:'railway-hobby-1y', name:'Railway Hobby (1 Year)', cat:'Developer Tools', icon:'railway', color:'#111111', priceNum:1999, mrp:'₹8,999', mrpNum:8999 }), - makeProduct({ id:'linear-business-1y', name:'Linear.app Business (1 Year)', cat:'Productivity', icon:'linear', color:'#5E6AD2', priceNum:749, mrp:'₹14,000', mrpNum:14000 }), - makeProduct({ id:'gumloop-pro-1y', name:'Gumloop Pro (20K Credits/Month • 1 Year)', cat:'Developer Tools', icon:'gumloop', color:'#FF7A00', priceNum:1499, mrp:'₹34,494', mrpNum:34494 }), - makeProduct({ id:'chatprd-pro-1y', name:'chatPRD Pro (1 Year)', cat:'Developer Tools', icon:'chatprd', color:'#6D5DFB', priceNum:1499, mrp:'₹5,999', mrpNum:5999 }), - makeProduct({ id:'reclaim-startup-1y', name:'Reclaim.ai Startup Pack (1 Year)', cat:'Productivity', icon:'reclaim', color:'#6B4EFF', priceNum:1499, mrp:'₹11,491', mrpNum:11491 }), - makeProduct({ id:'wisprflow-ai-1y', name:'WisprFlow AI (1 Year)', cat:'AI Tools', icon:'wisprflow', color:'#5A67D8', priceNum:1999, mrp:'₹13,000', mrpNum:13000 }), - makeProduct({ id:'posthog-scale-1y', name:'PostHog Scale (1 Year)', cat:'Developer Tools', icon:'posthog', color:'#F9BD2B', priceNum:1699, mrp:'US$24,000' }), - makeProduct({ id:'factory-ai-pro-1y', name:'Factory AI Pro (1 Year)', cat:'AI Tools', icon:'factory', color:'#111111', priceNum:1999, mrp:'₹22,999', mrpNum:22999 }), - makeProduct({ id:'granola-ai-business-1y', name:'Granola AI Business (1 Year)', cat:'AI Tools', icon:'granola', color:'#F3E9D2', priceNum:799, mrp:'₹16,064', mrpNum:16064 }), - makeProduct({ id:'gamma-app-pro-1y', name:'Gamma App Pro (1 Year)', cat:'AI Tools', icon:'gamma', color:'#292929', priceNum:3999, mrp:'₹17,000', mrpNum:17000 }), - makeProduct({ id:'dreamina-seedance-basic', name:'Dreamina Basic Seedance 2.0', cat:'Design & Creative', icon:'dreamina', color:'#111111', priceNum:249 }), - makeProduct({ id:'adobe-substance-3d-1m', name:'Adobe Substance 3D Collection (1 Month • Redeem Key)', cat:'Design & Creative', icon:'adobe', color:'#FF0000', priceNum:229, mrp:'₹4,500', mrpNum:4500 }), - makeProduct({ id:'adobe-acrobat-standard-1m', name:'Adobe Acrobat Standard DC (1 Month • Redeem Key)', cat:'Productivity', icon:'adobe', color:'#FF0000', priceNum:229, mrp:'₹1,200', mrpNum:1200 }), - makeProduct({ id:'magic-patterns-hobby-1y', name:'Magic Patterns Hobby (1 Year)', cat:'Design & Creative', icon:'magicpatterns', color:'#7C3AED', priceNum:849, mrp:'₹8,500', mrpNum:8500 }), - makeProduct({ id:'miro-premium-1-3y', name:'Miro Premium (1–3 Years)', cat:'Productivity', icon:'miro', color:'#FFD02F', priceNum:499, mrp:'₹7,999', mrpNum:7999 }), - makeProduct({ id:'mobbin-team-1y', name:'Mobbin Team (10 Users • 1 Year)', cat:'Design & Creative', icon:'mobbin', color:'#111111', priceNum:1499, mrp:'₹17,999', mrpNum:17999 }), - makeProduct({ id:'intercom-advanced-1y', name:'Intercom Advanced (1 Year)', cat:'Productivity', icon:'intercom', color:'#286EFA', priceNum:1499, mrp:'₹98,000', mrpNum:98000 }), - - makeProduct({ id:'freepik-magnific-1m', name:'Freepik (Magnific) — 1 Month', cat:'Design & Creative', icon:'freepik', color:'#1273EB', priceNum:749, mrp:'₹1,740', mrpNum:1740 }), - makeProduct({ id:'freepik-magnific-3m', name:'Freepik (Magnific) — 3 Months', cat:'Design & Creative', icon:'freepik', color:'#1273EB', priceNum:1999, mrp:'₹5,220', mrpNum:5220 }), - makeProduct({ id:'freepik-magnific-6m', name:'Freepik (Magnific) — 6 Months', cat:'Design & Creative', icon:'freepik', color:'#1273EB', priceNum:3999, mrp:'₹10,440', mrpNum:10440 }), - makeProduct({ id:'freepik-magnific-12m', name:'Freepik (Magnific) — 12 Months', cat:'Design & Creative', icon:'freepik', color:'#1273EB', priceNum:7999, mrp:'₹15,140', mrpNum:15140 }), - - makeProduct({ id:'envato-elements', name:'Envato Elements — 1 Month', cat:'Design & Creative', icon:'envato', color:'#81B441', priceNum:799, mrp:'₹3,390', mrpNum:3390, tag:'Popular' }), - makeProduct({ id:'envato-elements-3m', name:'Envato Elements — 3 Months', cat:'Design & Creative', icon:'envato', color:'#81B441', priceNum:2299, mrp:'₹10,170', mrpNum:10170 }), - makeProduct({ id:'envato-elements-6m', name:'Envato Elements — 6 Months', cat:'Design & Creative', icon:'envato', color:'#81B441', priceNum:4499, mrp:'₹20,340', mrpNum:20340 }), - makeProduct({ id:'envato-elements-12m', name:'Envato Elements — 12 Months', cat:'Design & Creative', icon:'envato', color:'#81B441', priceNum:8999, mrp:'₹40,680', mrpNum:40680 }), + makeProduct({id:"gemini-pro",name:"Gemini Pro (18 Months)",cat:"AI Tools",icon:"gemini",color:"#4285F4",priceNum:649,mrp:"₹17,550",mrpNum:17550,tag:"Hot Deal"}), + makeProduct({id:"canva-pro",name:"Canva Pro (3 Years)",cat:"Design & Creative",icon:"canva",color:"#7D2AE8",priceNum:229,mrp:"₹41,621",mrpNum:41621,tag:"Popular"}), + makeProduct({id:"chatgpt-plus",name:"ChatGPT Plus (1 Month)",cat:"AI Tools",icon:"chatgpt",color:"#10A37F",priceNum:699,mrp:"₹1,999",mrpNum:1999,tag:"Trending"}), + makeProduct({id:"super-grok",name:"Super Grok",cat:"AI Tools",icon:"grok",color:"#111111",variants:[{name:"1 Year",priceNum:1749,mrp:"₹34,423",mrpNum:34423},{name:"7–10 Days",priceNum:199,mrp:"₹956",mrpNum:956}]}), + makeProduct({id:"microsoft-365-lifetime",name:"Microsoft 365 (Lifetime)",cat:"Productivity",icon:"microsoft",color:"#5E5E5E",priceNum:999,mrp:"₹6,899/Year",mrpNum:6899,tag:"Popular"}), + makeProduct({id:"coursera-1y",name:"Coursera (1 Year)",cat:"Education",icon:"coursera",color:"#0056D2",priceNum:1299,mrp:"₹34,000",mrpNum:34000}), + makeProduct({id:"capcut-pro",name:"CapCut Pro",cat:"Design & Creative",icon:"capcut",color:"#111111",tag:"Popular",variants:[{name:"1 Month • Ready Account • 25 Days Warranty",priceNum:449,mrp:"₹999",mrpNum:999},{name:"1 Week",priceNum:99,mrp:"₹249",mrpNum:249},{name:"1 Month • Ready Account • 7 Days Warranty",priceNum:229,mrp:"₹999",mrpNum:999}]}), + makeProduct({id:"autodesk-all-apps-1y",name:"Autodesk All Apps (1 Year)",cat:"Software & Licenses",icon:"autodesk",color:"#0696D7",priceNum:999,mrp:"₹2.2 Lakhs",mrpNum:220000,tag:"Hot Deal"}), + makeProduct({id:"windows-pro-retail",name:"Windows 10/11 Pro Retail Key",cat:"Software & Licenses",icon:"windows",color:"#00A4EF",priceNum:999,mrp:"₹12,000",mrpNum:12000}), + makeProduct({id:"linkedin-premium-1y",name:"LinkedIn Premium (Any Plan • 1 Year)",cat:"Productivity",icon:"linkedin",color:"#0A66C2",priceNum:1499,mrp:"₹19,999",mrpNum:19999}), + makeProduct({id:"replit-core-1y",name:"Replit Core (1 Year)",cat:"Developer Tools",icon:"replit",color:"#F26207",priceNum:3999,mrp:"₹17,000",mrpNum:17000}), + makeProduct({id:"manus-ai-pro",name:"Manus AI Pro",cat:"AI Tools",icon:"manus",color:"#111111",variants:[{name:"1 Year • 4K Credits/Month",priceNum:3999,mrp:"₹22,948",mrpNum:22948},{name:"1 Week",priceNum:299,mrp:"₹439",mrpNum:439}]}), + makeProduct({id:"notion-edu-1y",name:"Notion Edu (1 Year)",cat:"Productivity",icon:"notion",color:"#FFFFFF",priceNum:499,mrp:"₹11,491",mrpNum:11491}), + makeProduct({id:"netflix-4k-slot-1m",name:"Netflix 4K (1 Slot • 1 Month)",cat:"OTT & Media",icon:"netflix",color:"#E50914",priceNum:229,mrp:"₹649",mrpNum:649}), + makeProduct({id:"chatgpt-k12-cdk-2y",name:"ChatGPT K12-CDK (2 Years)",cat:"AI Tools",icon:"chatgpt",color:"#10A37F",priceNum:1399,mrp:"₹2,199",mrpNum:2199}), + makeProduct({id:"autodesk-education-3y-panel",name:"Autodesk Education (3 Years • 3000 Users Panel)",cat:"Education",icon:"autodesk",color:"#0696D7",priceNum:5999,mrp:"₹3,00,000",mrpNum:300000}), + makeProduct({id:"autodesk-education-renewal-1y",name:"Autodesk Education Renewal (1 Year • 3000 Users Panel)",cat:"Education",icon:"autodesk",color:"#0696D7",priceNum:1999,mrp:"₹34,000",mrpNum:34000}), + makeProduct({id:"cursor-ai-pro-1y",name:"Cursor AI Pro (1 Year)",cat:"Developer Tools",icon:"cursor",color:"#111111",priceNum:9999,mrp:"₹20,500",mrpNum:20500}), + makeProduct({id:"adobe-creative-cloud-14d",name:"Adobe Creative Cloud (14 Days)",cat:"Design & Creative",icon:"adobe",color:"#FF0000",priceNum:199,mrp:"₹2,450",mrpNum:2450}), + makeProduct({id:"adobe-creative-cloud-pro-3m",name:"Adobe Creative Cloud Pro (Ready Account • 3 Months)",cat:"Design & Creative",icon:"adobe",color:"#FF0000",priceNum:649,mrp:"₹20,051",mrpNum:20051}), + makeProduct({id:"figma-edu-pro",name:"Figma Edu (Pro • 1–2 Years)",cat:"Design & Creative",icon:"figma",color:"#A259FF",priceNum:1299,mrp:"₹36,772",mrpNum:36772}), + makeProduct({id:"ilovepdf-pro-1y",name:"ILovePDF Pro (Ready Account • 1 Year)",cat:"Productivity",icon:"ilovepdf",color:"#E5322D",priceNum:399,mrp:"₹2,400",mrpNum:2400}), + makeProduct({id:"quillbot-premium-1m",name:"QuillBot Premium (1 Month)",cat:"AI Tools",icon:"quillbot",color:"#499557",priceNum:399,mrp:"₹999",mrpNum:999}), + makeProduct({id:"deepl-pro-1m",name:"DeepL Pro (1 Month)",cat:"AI Tools",icon:"deepl",color:"#0F2B46",priceNum:499,mrp:"₹2,744",mrpNum:2744}), + makeProduct({id:"deepl-pro-api-1m",name:"DeepL Pro API (1 Month)",cat:"Developer Tools",icon:"deepl",color:"#0F2B46",priceNum:349,mrp:"₹899",mrpNum:899}), + makeProduct({id:"elevenlabs-creator-1y",name:"ElevenLabs Creator (1 Year)",cat:"AI Tools",icon:"elevenlabs",color:"#111111",priceNum:4499,mrp:"₹21,000",mrpNum:21000}), + makeProduct({id:"framer-pro-1y",name:"Framer Pro (1 Year)",cat:"Design & Creative",icon:"framer",color:"#0055FF",priceNum:1999,mrp:"₹34,423",mrpNum:34423}), + makeProduct({id:"lovable-unlimited",name:"Lovable.dev Unlimited",cat:"Developer Tools",icon:"lovable",color:"#FF5C7A",variants:[{name:"Unlimited Credits • Single User",priceNum:799,mrp:"₹2,390",mrpNum:2390},{name:"Unlimited Credits • Admin Panel",priceNum:1999},{name:"Unlimited • 1 Day",priceNum:149}]}), + makeProduct({id:"supabase-pro-1y",name:"Supabase Pro (1 Year)",cat:"Developer Tools",icon:"supabase",color:"#3ECF8E",priceNum:4499,mrp:"₹21,000",mrpNum:21000}), + makeProduct({id:"n8n-starter-1y",name:"n8n Starter (1 Year)",cat:"Developer Tools",icon:"n8n",color:"#EA4B71",priceNum:2499,mrp:"₹21,000",mrpNum:21000}), + makeProduct({id:"warp-build-1y",name:"Warp.dev Build (1 Year)",cat:"Developer Tools",icon:"warp",color:"#6B57FF",priceNum:1999,mrp:"₹17,000",mrpNum:17000}), + makeProduct({id:"railway-hobby-1y",name:"Railway Hobby (1 Year)",cat:"Developer Tools",icon:"railway",color:"#111111",priceNum:1999,mrp:"₹8,999",mrpNum:8999}), + makeProduct({id:"linear-business-1y",name:"Linear.app Business (1 Year)",cat:"Productivity",icon:"linear",color:"#5E6AD2",priceNum:749,mrp:"₹14,000",mrpNum:14000}), + makeProduct({id:"gumloop-pro-1y",name:"Gumloop Pro (20K Credits/Month • 1 Year)",cat:"Developer Tools",icon:"gumloop",color:"#FF7A00",priceNum:1499,mrp:"₹34,494",mrpNum:34494}), + makeProduct({id:"chatprd-pro-1y",name:"chatPRD Pro (1 Year)",cat:"Developer Tools",icon:"chatprd",color:"#6D5DFB",priceNum:1499,mrp:"₹5,999",mrpNum:5999}), + makeProduct({id:"reclaim-startup-1y",name:"Reclaim.ai Startup Pack (1 Year)",cat:"Productivity",icon:"reclaim",color:"#6B4EFF",priceNum:1499,mrp:"₹11,491",mrpNum:11491}), + makeProduct({id:"wisprflow-ai-1y",name:"WisprFlow AI (1 Year)",cat:"AI Tools",icon:"wisprflow",color:"#5A67D8",priceNum:1999,mrp:"₹13,000",mrpNum:13000}), + makeProduct({id:"posthog-scale-1y",name:"PostHog Scale (1 Year)",cat:"Developer Tools",icon:"posthog",color:"#F9BD2B",priceNum:1699,mrp:"US$24,000"}), + makeProduct({id:"factory-ai-pro-1y",name:"Factory AI Pro (1 Year)",cat:"AI Tools",icon:"factory",color:"#111111",priceNum:1999,mrp:"₹22,999",mrpNum:22999}), + makeProduct({id:"granola-ai-business-1y",name:"Granola AI Business (1 Year)",cat:"AI Tools",icon:"granola",color:"#F3E9D2",priceNum:799,mrp:"₹16,064",mrpNum:16064}), + makeProduct({id:"gamma-app-pro-1y",name:"Gamma App Pro (1 Year)",cat:"AI Tools",icon:"gamma",color:"#292929",priceNum:3999,mrp:"₹17,000",mrpNum:17000}), + makeProduct({id:"dreamina-seedance-basic",name:"Dreamina Basic Seedance 2.0",cat:"Design & Creative",icon:"dreamina",color:"#111111",priceNum:249}), + makeProduct({id:"adobe-substance-3d-1m",name:"Adobe Substance 3D Collection (1 Month • Redeem Key)",cat:"Design & Creative",icon:"adobe",color:"#FF0000",priceNum:229,mrp:"₹4,500",mrpNum:4500}), + makeProduct({id:"adobe-acrobat-standard-1m",name:"Adobe Acrobat Standard DC (1 Month • Redeem Key)",cat:"Productivity",icon:"adobe",color:"#FF0000",priceNum:229,mrp:"₹1,200",mrpNum:1200}), + makeProduct({id:"magic-patterns-hobby-1y",name:"Magic Patterns Hobby (1 Year)",cat:"Design & Creative",icon:"magicpatterns",color:"#7C3AED",priceNum:849,mrp:"₹8,500",mrpNum:8500}), + makeProduct({id:"miro-premium-1-3y",name:"Miro Premium (1–3 Years)",cat:"Productivity",icon:"miro",color:"#FFD02F",priceNum:499,mrp:"₹7,999",mrpNum:7999}), + makeProduct({id:"mobbin-team-1y",name:"Mobbin Team (10 Users • 1 Year)",cat:"Design & Creative",icon:"mobbin",color:"#111111",priceNum:1499,mrp:"₹17,999",mrpNum:17999}), + makeProduct({id:"intercom-advanced-1y",name:"Intercom Advanced (1 Year)",cat:"Productivity",icon:"intercom",color:"#286EFA",priceNum:1499,mrp:"₹98,000",mrpNum:98000}), + makeProduct({id:"freepik-magnific",name:"Freepik (Magnific)",cat:"Design & Creative",icon:"freepik",color:"#1273EB",variants:[{name:"1 Month",priceNum:749,mrp:"₹1,740",mrpNum:1740},{name:"3 Months",priceNum:1999,mrp:"₹5,220",mrpNum:5220},{name:"6 Months",priceNum:3999,mrp:"₹10,440",mrpNum:10440},{name:"12 Months",priceNum:7999,mrp:"₹15,140",mrpNum:15140}]}), + makeProduct({id:"envato-elements",name:"Envato Elements",cat:"Design & Creative",icon:"envato",color:"#81B441",tag:"Popular",variants:[{name:"1 Month",priceNum:799,mrp:"₹3,390",mrpNum:3390},{name:"3 Months",priceNum:2299,mrp:"₹10,170",mrpNum:10170},{name:"6 Months",priceNum:4499,mrp:"₹20,340",mrpNum:20340},{name:"12 Months",priceNum:8999,mrp:"₹40,680",mrpNum:40680}]}), ]; export const categories = ['All', ...new Set(products.map((product) => product.cat))]; From d1496a097be92261d246e279f7987e6d5e9d6f34 Mon Sep 17 00:00:00 2001 From: Pavithran R A <92867708+Pavithran-R-A@users.noreply.github.com> Date: Thu, 17 Sep 2026 20:08:23 +0530 Subject: [PATCH 06/14] fix: harden catalogue pricing and Telegram order flow without touching hero media --- src/storefront-overrides.js | 169 +++++++++++++++++++++++++++++++----- 1 file changed, 146 insertions(+), 23 deletions(-) diff --git a/src/storefront-overrides.js b/src/storefront-overrides.js index 37d39da..e3332cc 100644 --- a/src/storefront-overrides.js +++ b/src/storefront-overrides.js @@ -10,43 +10,66 @@ const productByPath = () => { return products.find((product) => product.id === decodeURIComponent(match[1])) || null; }; +const activeOfferForProduct = (product) => { + if (!product) return null; + const variants = Array.isArray(product.variants) ? product.variants.filter((variant) => !variant.disabled) : []; + if (!variants.length) return product; + + const activeName = document.querySelector('.variant-chip.active')?.dataset?.vname; + return variants.find((variant) => variant.name === activeName) || variants[0]; +}; + function openTelegram(message) { window.open(`${TELEGRAM_BASE}?text=${encodeURIComponent(message)}`, '_blank', 'noopener,noreferrer'); } -function cartMessage() { +function orderLinesFromCart() { const cart = readStoredCart(); const items = resolveCartItems(cart); if (!items.length) return null; - const lines = items.map((item) => { - const variant = item.variantName ? ` (${item.variantName})` : ''; - return `• ${item.productName}${variant} ×${item.qty || 1} — ₹${item.lineTotal.toLocaleString('en-IN')}`; - }); + return { + cart, + lines: items.map((item) => { + const variant = item.variantName ? ` (${item.variantName})` : ''; + return `• ${item.productName}${variant} ×${item.qty || 1} — ₹${item.lineTotal.toLocaleString('en-IN')}`; + }), + }; +} + +function cartMessage() { + const order = orderLinesFromCart(); + if (!order) return null; return [ '🛒 SoftBazzar Order', '━━━━━━━━━━━━━━━━━━━━', - ...lines, + ...order.lines, '━━━━━━━━━━━━━━━━━━━━', - `Total: ₹${calculateCartTotal(cart).toLocaleString('en-IN')}`, + `Total: ₹${calculateCartTotal(order.cart).toLocaleString('en-IN')}`, '', 'Please send the payment details for this order.', - 'After I pay, I will reply here with my payment screenshot.', + 'After I pay, I will send my payment screenshot in this Telegram chat.', `Delivery: within ${DELIVERY_WINDOW} after payment confirmation.`, ].join('\n'); } function singleProductMessage(product) { + const offer = activeOfferForProduct(product); + if (!offer) return null; + + const variant = offer !== product && offer.name ? ` (${offer.name})` : ''; + const price = offer.price || product.price; + return [ '🛒 SoftBazzar Order', '━━━━━━━━━━━━━━━━━━━━', - `• ${product.name} — ${product.price}`, + `• ${product.name}${variant} — ${price}`, '━━━━━━━━━━━━━━━━━━━━', - `Total: ${product.price}`, + `Total: ${price}`, '', 'Please send the payment details for this order.', - 'After I pay, I will reply here with my payment screenshot.', + 'After I pay, I will send my payment screenshot in this Telegram chat.', `Delivery: within ${DELIVERY_WINDOW} after payment confirmation.`, ].join('\n'); } @@ -56,6 +79,45 @@ function setText(selector, value) { if (element && element.textContent !== value) element.textContent = value; } +function getFooterColumn(title) { + return [...document.querySelectorAll('.footer-col')].find( + (column) => column.querySelector('h4')?.textContent.trim() === title, + ); +} + +function applyVariantPricing() { + const product = productByPath(); + if (!product) return; + + const offer = activeOfferForProduct(product); + if (!offer) return; + + const current = document.getElementById('detailCurrentPrice'); + if (current && offer.price) current.textContent = offer.price; + + const original = document.querySelector('.detail-original'); + if (original) { + if (offer.mrp) { + original.textContent = offer.mrp; + original.style.display = ''; + } else { + original.textContent = ''; + original.style.display = 'none'; + } + } + + const save = document.querySelector('.detail-save'); + if (save) { + if (offer.discount) { + save.textContent = `${offer.discount} OFF`; + save.style.display = ''; + } else { + save.textContent = ''; + save.style.display = 'none'; + } + } +} + function applyStorefrontCopy() { const heroSubtitle = document.querySelector('.hero-subtitle'); if (heroSubtitle) { @@ -86,11 +148,15 @@ function applyStorefrontCopy() { } const statItems = document.querySelectorAll('#stats .stat-item'); + const offerCount = products.reduce( + (sum, product) => sum + (Array.isArray(product.variants) && product.variants.length ? product.variants.length : 1), + 0, + ); const stats = [ - [`${products.length}`, 'Current Offers'], + [`${products.length}`, 'Products'], + [`${offerCount}`, 'Current Offers'], ['10m–16h', 'Delivery Window'], ['Telegram', 'Order Support'], - ['MRP + Sale', 'Clear Pricing'], ]; statItems.forEach((item, index) => { if (!stats[index]) return; @@ -100,17 +166,24 @@ function applyStorefrontCopy() { if (label) label.textContent = stats[index][1]; }); - setText('.cta-subtitle', 'Choose a product, review the price, and continue your order on Telegram.'); + setText('.cta-subtitle', 'Choose a product, review the sale price, and continue your order on Telegram.'); const footerDescription = document.querySelector('.footer-brand > p'); if (footerDescription) { footerDescription.textContent = `Premium tools and digital subscriptions at lower prices. Orders continue on Telegram, with delivery within ${DELIVERY_WINDOW} after payment confirmation.`; } - const cartNote = document.querySelector('.cart-telegram-note'); - if (cartNote) cartNote.textContent = 'Order and payment confirmation continue on Telegram.'; + const categoryColumn = getFooterColumn('Categories'); + const categoryLinks = categoryColumn?.querySelectorAll('a[data-filter]') || []; + const categories = ['AI Tools', 'Developer Tools', 'Design & Creative', 'Productivity']; + categoryLinks.forEach((link, index) => { + if (!categories[index]) return; + link.dataset.filter = categories[index]; + link.textContent = categories[index]; + }); - const popularLinks = document.querySelectorAll('.footer-col:nth-of-type(3) a[data-route]'); + const popularColumn = getFooterColumn('Popular'); + const popularLinks = popularColumn?.querySelectorAll('a[data-route]') || []; const popular = [ ['/product/chatgpt-plus', 'ChatGPT Plus'], ['/product/gemini-pro', 'Gemini Pro'], @@ -124,14 +197,29 @@ function applyStorefrontCopy() { link.textContent = popular[index][1]; }); + const supportColumn = getFooterColumn('Support'); + const supportLinks = supportColumn?.querySelectorAll('a') || []; + supportLinks.forEach((link) => { + if (/24\/7 Support/i.test(link.textContent)) link.textContent = '📞 Telegram Support'; + }); + + const footerPayment = document.querySelector('.footer-payment'); + if (footerPayment) footerPayment.innerHTML = 'Payment details are provided on Telegram'; + + document.querySelectorAll('.footer-socials a[href="#"]').forEach((link) => link.remove()); + + const cartNote = document.querySelector('.cart-telegram-note'); + if (cartNote) cartNote.textContent = 'Order and payment confirmation continue on Telegram.'; + const checkoutSteps = document.querySelectorAll('.co-steps .co-step'); if (checkoutSteps.length >= 3) { const checkoutCopy = [ - ['Review Order', 'Verify your product details and total.'], - ['Open Telegram', 'Send the pre-filled order details to @softbazzar and receive payment instructions.'], + ['Review Order', 'Verify your selected product, plan, quantity, and total.'], + ['Open Telegram', 'Send the pre-filled order details to @softbazzar and receive the payment instructions.'], ['Send Payment Screenshot', `After paying, send your payment screenshot in the same Telegram chat. Delivery is within ${DELIVERY_WINDOW} after payment confirmation.`], ]; checkoutSteps.forEach((step, index) => { + if (!checkoutCopy[index]) return; const strong = step.querySelector('strong'); const paragraph = step.querySelector('p'); if (strong) strong.textContent = checkoutCopy[index][0]; @@ -139,6 +227,14 @@ function applyStorefrontCopy() { }); } + const notice = document.querySelector('.co-right .co-card:not(.co-steps)'); + if (notice) { + const heading = notice.querySelector('h3'); + const paragraph = notice.querySelector('p'); + if (heading) heading.textContent = '⚠️ ORDER NOTE'; + if (paragraph) paragraph.innerHTML = 'Product delivery type varies by listing (for example: account, key, subscription, or access). Review the exact product and plan before payment.'; + } + const sendButton = document.querySelector('#coSendOrder span'); if (sendButton) sendButton.textContent = 'Send Order to Telegram'; @@ -147,6 +243,16 @@ function applyStorefrontCopy() { if (!value || value === 'OFF' || value === 'undefined OFF') badge.style.display = 'none'; }); + const resolved = resolveCartItems(readStoredCart()); + document.querySelectorAll('.cart-items .cart-item').forEach((row, index) => { + const item = resolved[index]; + if (!item) return; + const name = row.querySelector('.cart-item-name'); + const sub = row.querySelector('.cart-item-cat'); + if (name) name.textContent = item.productName; + if (sub) sub.textContent = item.variantName ? `${item.variantName} · ${item.cat}` : item.cat; + }); + const drawer = document.getElementById('cartDrawer'); if (drawer) { drawer.setAttribute('role', 'dialog'); @@ -154,6 +260,7 @@ function applyStorefrontCopy() { drawer.setAttribute('aria-label', 'Shopping cart'); } document.getElementById('cartClose')?.setAttribute('aria-label', 'Close cart'); + const cartToggle = document.getElementById('cartToggle'); if (cartToggle) { cartToggle.setAttribute('aria-haspopup', 'dialog'); @@ -174,6 +281,8 @@ function applyStorefrontCopy() { toast.setAttribute('role', 'status'); toast.setAttribute('aria-live', 'polite'); } + + applyVariantPricing(); } function rewriteSalesTicker() { @@ -183,7 +292,7 @@ function rewriteSalesTicker() { if (!action || !/just purchased/i.test(action.textContent)) return; const productName = action.querySelector('span')?.textContent?.trim() || 'SoftBazzar deal'; - const labels = ['Featured now', 'Catalogue highlight', 'Deal spotlight', 'Worth a look']; + const labels = ['Featured now', 'Catalogue highlight', 'Deal spotlight', 'Popular pick', 'Worth a look']; const label = labels[Math.floor(Math.random() * labels.length)]; ticker.innerHTML = ` @@ -211,10 +320,17 @@ document.addEventListener('click', (event) => { if (!product) return; event.preventDefault(); event.stopImmediatePropagation(); - openTelegram(singleProductMessage(product)); + const message = singleProductMessage(product); + if (message) openTelegram(message); } }, true); +document.addEventListener('click', (event) => { + if (event.target.closest('.variant-chip')) { + requestAnimationFrame(applyVariantPricing); + } +}); + document.addEventListener('keydown', (event) => { const card = event.target.closest?.('.product-card'); if (!card || event.target.closest('button, a, input')) return; @@ -234,10 +350,17 @@ if (app) { scheduled = false; applyStorefrontCopy(); }); - }).observe(app, { childList: true }); + }).observe(app, { childList: true, subtree: true }); } -new MutationObserver(() => rewriteSalesTicker()).observe(document.body, { childList: true, subtree: true }); +new MutationObserver(() => { + rewriteSalesTicker(); + const toast = document.getElementById('toast'); + if (toast) { + toast.setAttribute('role', 'status'); + toast.setAttribute('aria-live', 'polite'); + } +}).observe(document.body, { childList: true, subtree: true }); applyStorefrontCopy(); rewriteSalesTicker(); From 98ee3246cf75f0205b43e739fa6e5b764b2d3960 Mon Sep 17 00:00:00 2001 From: Pavithran R A <92867708+Pavithran-R-A@users.noreply.github.com> Date: Thu, 17 Sep 2026 20:08:43 +0530 Subject: [PATCH 07/14] test: lock catalogue prices variants checkout and untouched hero media --- tests/catalogue-refresh.test.mjs | 89 ++++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 22 deletions(-) diff --git a/tests/catalogue-refresh.test.mjs b/tests/catalogue-refresh.test.mjs index d79f09c..d178682 100644 --- a/tests/catalogue-refresh.test.mjs +++ b/tests/catalogue-refresh.test.mjs @@ -8,62 +8,107 @@ const mainJs = readFileSync(new URL('../src/main.js', import.meta.url), 'utf8'); const overrides = readFileSync(new URL('../src/storefront-overrides.js', import.meta.url), 'utf8'); const byId = (id) => products.find((product) => product.id === id); +const offersFor = (product) => ( + Array.isArray(product?.variants) && product.variants.length ? product.variants : [product] +); +const offerCount = products.reduce((sum, product) => sum + offersFor(product).length, 0); -test('September 2026 catalogue contains the supplied storefront offers with unique IDs', () => { - assert.ok(products.length >= 60, `expected at least 60 offers, got ${products.length}`); +test('September 2026 catalogue matches the supplied storefront set', () => { + assert.equal(products.length, 50); + assert.equal(offerCount, 62); assert.equal(new Set(products.map((product) => product.id)).size, products.length); + assert.equal(byId('gemini-pro')?.name, 'Gemini Pro (18 Months)'); assert.equal(byId('gemini-pro')?.priceNum, 649); assert.equal(byId('gemini-pro')?.mrp, '₹17,550'); assert.equal(byId('canva-pro')?.priceNum, 229); assert.equal(byId('chatgpt-plus')?.priceNum, 699); - assert.equal(byId('super-grok-1y')?.priceNum, 1749); assert.equal(byId('microsoft-365-lifetime')?.mrp, '₹6,899/Year'); assert.equal(byId('autodesk-all-apps-1y')?.mrp, '₹2.2 Lakhs'); assert.equal(byId('posthog-scale-1y')?.mrp, 'US$24,000'); - assert.equal(byId('envato-elements-12m')?.priceNum, 8999); - assert.equal(byId('freepik-magnific-12m')?.priceNum, 7999); }); -test('all sellable prices are positive and INR MRPs exceed selling prices where numeric MRP is supplied', () => { +test('multi-plan products keep every supplied price and MRP as variants', () => { + const grok = byId('super-grok'); + assert.deepEqual( + grok.variants.map(({ name, priceNum, mrp }) => [name, priceNum, mrp]), + [['1 Year', 1749, '₹34,423'], ['7–10 Days', 199, '₹956']], + ); + + const capcut = byId('capcut-pro'); + assert.deepEqual( + capcut.variants.map(({ name, priceNum, mrp }) => [name, priceNum, mrp]), + [ + ['1 Month • Ready Account • 25 Days Warranty', 449, '₹999'], + ['1 Week', 99, '₹249'], + ['1 Month • Ready Account • 7 Days Warranty', 229, '₹999'], + ], + ); + + const freepik = byId('freepik-magnific'); + assert.deepEqual(freepik.variants.map((v) => v.priceNum), [749, 1999, 3999, 7999]); + assert.deepEqual(freepik.variants.map((v) => v.mrp), ['₹1,740', '₹5,220', '₹10,440', '₹15,140']); + + const envato = byId('envato-elements'); + assert.deepEqual(envato.variants.map((v) => v.priceNum), [799, 2299, 4499, 8999]); + assert.deepEqual(envato.variants.map((v) => v.mrp), ['₹3,390', '₹10,170', '₹20,340', '₹40,680']); + + const lovable = byId('lovable-unlimited'); + assert.deepEqual(lovable.variants.map((v) => v.priceNum), [799, 1999, 149]); + assert.equal(lovable.variants[1].mrp, undefined); + assert.equal(lovable.variants[2].mrp, undefined); +}); + +test('all selling prices are positive and numeric MRPs exceed their selling price', () => { for (const product of products) { - assert.ok(Number.isFinite(product.priceNum) && product.priceNum > 0, `${product.id} has invalid selling price`); - if (Number.isFinite(product.mrpNum)) { - assert.ok(product.mrpNum > product.priceNum, `${product.id} MRP must exceed selling price`); - assert.ok(product.mrp, `${product.id} numeric MRP must have display text`); + for (const offer of offersFor(product)) { + assert.ok(Number.isFinite(offer.priceNum) && offer.priceNum > 0, `${product.id} has invalid selling price`); + if (Number.isFinite(offer.mrpNum)) { + assert.ok(offer.mrpNum > offer.priceNum, `${product.id}/${offer.name || 'default'} MRP must exceed selling price`); + assert.ok(offer.mrp, `${product.id} numeric MRP must have display text`); + } } } }); -test('items supplied without an MRP show only selling price', () => { - for (const id of ['lovable-unlimited-admin', 'lovable-unlimited-1d', 'dreamina-seedance-basic']) { - const product = byId(id); - assert.ok(product, `${id} missing`); - assert.equal(product.mrp, undefined); - } +test('items supplied without MRP keep sale price only', () => { + assert.equal(byId('dreamina-seedance-basic')?.mrp, undefined); + const lovable = byId('lovable-unlimited'); + assert.equal(lovable.variants.find((v) => v.name.includes('Admin Panel'))?.mrp, undefined); + assert.equal(lovable.variants.find((v) => v.name.includes('1 Day'))?.mrp, undefined); }); -test('checkout copy uses Telegram screenshot flow and keeps the requested delivery window', () => { - assert.match(overrides, /After I pay, I will reply here with my payment screenshot\./); +test('checkout uses Telegram screenshot flow without clearing the cart', () => { + assert.match(overrides, /send my payment screenshot in this Telegram chat/); assert.match(overrides, /10 mins - 16 hours/); assert.match(overrides, /stopImmediatePropagation\(\)/); assert.doesNotMatch(overrides, /localStorage\.removeItem|writeStoredCart\(\[\]\)/); }); -test('activity ticker is retained but rewritten as a non-transactional catalogue highlight', () => { +test('variant detail pricing updates MRP and discount alongside selling price', () => { + assert.match(overrides, /function applyVariantPricing\(\)/); + assert.match(overrides, /\.detail-original/); + assert.match(overrides, /\.detail-save/); + assert.match(overrides, /requestAnimationFrame\(applyVariantPricing\)/); +}); + +test('activity ticker remains dynamic without claiming fabricated completed purchases', () => { assert.match(overrides, /Featured now/); assert.match(overrides, /Catalogue highlight/); + assert.match(overrides, /Deal spotlight/); + assert.match(overrides, /Popular pick/); assert.match(overrides, /current offer/); + assert.doesNotMatch(overrides, /just purchased/); }); -test('hero video implementation and visual CSS are not modified by the refresh layer', () => { +test('original hero video implementation is preserved and override changes copy only', () => { assert.match(mainJs, /hf_20260328_065045_c44942da-53c6-4804-b734-f9e07fc22e08\.mp4/); - assert.match(mainJs, /id="bgVideo"/); + assert.match(mainJs, /