BCG Matrix · Bubble Plot · PNG Export · 100% Free
BCG Matrix Generator
Add your products or business units, set market share and growth rate, and watch them plot as bubbles on the BCG Matrix. Stars, Cash Cows, Question Marks and Dogs, identified instantly. Pro Mode adds colour themes, a full HD export preview and strategy tips.
100% Private — saved only in your browser, never sent to a server
● Pro Version is Free for now
✓ 6 Colour Themes · Full HD Export · Quadrant Legend ·
Print / PDF · Strategy Tips unlocked
Print / PDF · Strategy Tips unlocked
Day
Night
Company or portfolio you are analysing
🍎 Tech Giant
🧴 FMCG Portfolio
📺 Media Company
🛒 Retail Group
💊 Pharma Portfolio
🚗 Auto Manufacturer
Products / Business Units (0)
Click "Add Product" or load a template above to get started.
BCG Matrix — Live Preview
Updates as you type
⭐ Star — High share, high growth
🐄 Cash Cow — High share, low growth
❓ Question Mark — Low share, high growth
🐕 Dog — Low share, low growth
Auto-saved
👁️ Full Export Preview — Click to Download PRO
📖 Quick Reference
⭐Star high market share, high growth.
❓Question Mark low share, high growth.
🐄Cash Cow high share, low growth.
🐕Dog low share, low growth.
🎨 Colour Theme PRO
Default💡 BCG Matrix Strategy Tips PRO
Scroll for more options
${t}
`).join('');
}// ─── SAVE ─────────────────────────────────────────────────────
function schedSave(){
const dot=document.getElementById('saveDot'),lbl=document.getElementById('saveLbl');
if(dot)dot.style.background='#f59e0b';if(lbl)lbl.textContent='Saving…';
clearTimeout(saveTimer);
saveTimer=setTimeout(()=>{try{localStorage.setItem(SK,JSON.stringify({subject,products,pal:curPal}));if(dot)dot.style.background='#10b981';if(lbl)lbl.textContent='Saved';}catch(e){}},1200);
}function clearAll(){
if(!products.length&&!subject)return;
if(confirm('Clear all BCG Matrix data?')){products=[];subject='';colorIdx=0;document.getElementById('subjectInput').value='';renderAll();toast('Cleared!');}
}// ─── APP MODE ─────────────────────────────────────────────────
function setAppMode(m){
isPro=m==='pro';
document.getElementById('btnSimple').classList.toggle('active',!isPro);
document.getElementById('btnPro').classList.toggle('active',isPro);
widget().classList.toggle('pro-mode',isPro);
const pb=document.getElementById('proBar');if(pb)pb.style.display=isPro?'flex':'none';
const pr=document.getElementById('paletteRow');if(pr)pr.style.display=isPro?'flex':'none';
if(isPro){buildPaletteBar();drawFullCanvas();}
try{localStorage.setItem('sst_bcg_mode',m);}catch(e){}
}function esc(s){return(s||'').replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"');}
function toast(msg){const t=document.getElementById('toast');t.textContent=msg;t.classList.add('show');setTimeout(()=>t.classList.remove('show'),2400);}window.addEventListener('resize',()=>drawPreview());// ─── INIT ─────────────────────────────────────────────────────
function init(){
try{
const saved=localStorage.getItem(SK);
if(saved){const d=JSON.parse(saved);subject=d.subject||'';products=d.products||[];colorIdx=products.length;document.getElementById('subjectInput').value=subject;if(d.pal)curPal=d.pal;}
const m=localStorage.getItem('sst_bcg_mode');if(m==='pro')setAppMode('pro');
}catch(e){}
renderAll();
}
init();