VRIO Analysis · Competitive Verdicts · PNG Export · 100% Free
VRIO Framework Generator
Analyse your organisation's resources and capabilities against all four VRIO criteria, Valuable, Rare, Inimitable and Organised. Get instant competitive advantage verdicts and export a professional table as PNG. Pro Mode adds colour themes, summary stats, notes per resource and strategy tips.
100% Private — saved only in your browser, never sent to a server
● Pro Version is Free for now
✓ 6 Colour Themes · Monochrome · Summary Stats ·
Notes per Resource · Live Preview · Print · Tips unlocked
Notes per Resource · Live Preview · Print · Tips unlocked
Day
Night
Company or organisation being analysed
💻 Tech Company
🛒 Retail Brand
💊 Pharma Firm
🚀 Startup
✈️ Airline
🏦 Bank
0
Sustained CA
0
Temporary CA
0
Parity
0
Disadvantage
0
Underutilised
Auto-saved
👁️ Live Export Preview — Click to Download PRO
📖 Quick Reference
VValuable does it help exploit an opportunity or neutralise a threat?
RRare do few competitors also possess it?
IInimitable is it costly or hard for others to copy?
OOrganised is the firm structured to fully exploit it?
🎨 Colour Theme PRO
Default💡 VRIO Analysis 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,resources,pal:curPal}));if(dot)dot.style.background='#10b981';if(lbl)lbl.textContent='Saved';}catch(e){}},1200);
}function clearAll(){
if(!resources.some(r=>r.name)&&!subject)return;
if(confirm('Clear all VRIO data?')){resources=[];subject='';document.getElementById('subjectInput').value='';addResource();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();updateCanvas();}
try{localStorage.setItem('sst_vrio_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);}// ─── INIT ─────────────────────────────────────────────────────
function init(){
try{
const saved=localStorage.getItem(SK);
if(saved){const d=JSON.parse(saved);subject=d.subject||'';resources=d.resources||[];document.getElementById('subjectInput').value=subject;if(d.pal)curPal=d.pal;}
const m=localStorage.getItem('sst_vrio_mode');if(m==='pro')setAppMode('pro');
}catch(e){}
if(!resources.length)addResource();else renderAll();
}
init();