You started your business to build freedom — but somewhere along the way the business started running you. SHIFT gives faith-driven entrepreneurs a daily score across 5 areas of life so you can finally see where the breakdown is happening.
Your Information
"I'm ready to be honest about what winning in business but losing in life is really costing me."
🔒
Today's check-in is locked.
Your responses have been saved. Come back tomorrow to continue your SHIFT.
0 of 5 pillars checked in
Rate this pillar to continue
0%
ALIGNED
✦
Cycle Complete — Well Done.
You've finished Week 4. Carry what grew. Release what didn't. Your next cycle begins fresh.
Today's Reflections
Your score is telling you something your hustle can't fix.
Most faith-driven business owners who are burned out aren't lacking strategy — they're lacking alignment. Shawn Hunt works with kingdom entrepreneurs to rebuild from the inside out — spiritually, financially, and personally.
This clears all your data and returns to the welcome screen.
Coach Access
Enter your PIN to manage this client's program.
Set Active Week
Actions
const COACH_PIN="SHIFT2025";
const FORMSPREE_DAY1="https://formspree.io/f/xvzwbpzg";
const FORMSPREE_DAY2TO7="https://formspree.io/f/xvzwbpzg";
const FORMSPREE_CONTACT="https://formspree.io/f/xvzwbpzg";
const COACH_EMAIL="shawn@4dfs.net";
const PILLARS=[
{key:"S",label:"Spiritual",color:"#7C5CBF",light:"rgba(124,92,191,0.13)",border:"rgba(124,92,191,0.4)",icon:"✦",prompt:"Do you still remember why you started — and does your daily life reflect it?",weeklyReflections:["Did you lead your business today from your faith and values — or just from pressure and urgency?","Are your decisions today truly aligned with your values — or just convenient?","Did you lead and live with integrity today, even when no one was watching?","What has your faith produced in you over these past three weeks — and what is God still working on?"]},
{key:"H",label:"Health",color:"#2E9E6A",light:"rgba(46,158,106,0.13)",border:"rgba(46,158,106,0.4)",icon:"◈",prompt:"When did you last rest without feeling guilty about it?",weeklyReflections:["Did you do anything today to protect your energy — or did the business take everything you had?","How is your mental and emotional energy — are you protecting it or giving it away?","Are you fueling yourself well — sleep, food, water — or running on empty?","What health habit did you build over these three weeks, and what does the next level of your health require?"]},
{key:"I",label:"Intentional",color:"#1A7FC4",light:"rgba(26,127,196,0.13)",border:"rgba(26,127,196,0.4)",icon:"◎",prompt:"Are you running your business — or is it running you?",weeklyReflections:["Did you work ON your business today — or just IN it, putting out fires?","Did you spend time on what matters most, or just what felt urgent?","What would you do differently tomorrow if you had full control of your day?","Where have you grown the most in intentional living — and what one distraction must go for good?"]},
{key:"F",label:"Financial",color:"#C48A14",light:"rgba(196,138,20,0.13)",border:"rgba(196,138,20,0.4)",icon:"◆",prompt:"Is your business making money but your life still feeling broke?",weeklyReflections:["Did your financial decisions today reflect a kingdom steward — or someone just trying to survive the month?","Did any spending today reflect fear, impulse, or ego rather than faith and strategy?","What one financial habit are you committed to strengthening this week?","What financial truth did these three weeks reveal about you — and what legacy decision are you ready to make?"]},
{key:"T",label:"Transformational",color:"#D4601A",light:"rgba(212,96,26,0.13)",border:"rgba(212,96,26,0.4)",icon:"❋",prompt:"Are you building a legacy — or just staying busy enough to avoid the real questions?",weeklyReflections:["What did you learn today that moves you closer to who you're called to be?","Did you add real value to someone else's life or business today?","Are you becoming the person your legacy requires — or still playing it safe?","Who have you become over these three weeks — and what must you shed to step fully into your next level?"]}
];
const WEEK_THEMES=[{name:"Foundation",sub:"What does your business and life really look like right now — honestly?"},{name:"Alignment",sub:"Are your daily actions matching your faith, values, and vision?"},{name:"Integrity",sub:"Where is the gap between who you say you are and how you actually operate?"},{name:"Growth",sub:"What is God growing in you — and what do you need to finally let go of?"}];
const SCORE_LABELS=["","Running on Empty","Getting By","Holding Steady","Thriving","Fully Aligned 🔥"];
const SCORE_COLORS=["","#f87171","#fb923c","#fbbf24","#4ade80","#c084fc"];
const LS={get:(k,d=null)=>{try{const v=localStorage.getItem(k);return v!==null?JSON.parse(v):d;}catch{return d;}},set:(k,v)=>localStorage.setItem(k,JSON.stringify(v)),del:(k)=>localStorage.removeItem(k)};
function todayKey(){const d=new Date();return "sd_"+d.getFullYear()+"_"+(d.getMonth()+1)+"_"+d.getDate();}
function localDateStr(){const d=new Date();return d.getFullYear()+"-"+String(d.getMonth()+1).padStart(2,"0")+"-"+String(d.getDate()).padStart(2,"0");}
function getTimezoneLabel(){try{return new Date().toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();}catch{return "";}}
function loadClient(){const p=new URLSearchParams(window.location.search);if(p.get("name"))LS.set("shift_name",p.get("name"));if(p.get("email"))LS.set("shift_email",p.get("email"));if(p.get("pkg"))LS.set("shift_pkg",parseInt(p.get("pkg")));return{name:LS.get("shift_name",""),email:LS.get("shift_email",""),phone:LS.get("shift_phone",""),pkg:LS.get("shift_pkg",0)};}
function getWeek(){const coach=LS.get("shift_coach_week",0);if(coach>=1&&coach<=4)return coach;const start=LS.get("shift_start",null);if(!start)return 1;const[,y,m,d]=start.split("_").map(Number);const startDate=new Date(y,m-1,d);const today=new Date();today.setHours(0,0,0,0);return(Math.floor(Math.floor((today-startDate)/86400000)/7)%4)+1;}
function getWeekDay(){const start=LS.get("shift_start",null);if(!start)return 1;const[,y,m,d]=start.split("_").map(Number);const startDate=new Date(y,m-1,d);const today=new Date();today.setHours(0,0,0,0);return(Math.floor((today-startDate)/86400000)%7)+1;}
['shift_name','shift_email','shift_phone','shift_pkg','shift_start','shift_coach_week'].forEach(k=>localStorage.removeItem(k));
let CLIENT=loadClient(),currentWeek=1,modalWeek=1;
function loadToday(){const saved=LS.get(todayKey(),{scores:{},notes:{},done:false,savedDate:null});if(saved.savedDate&&saved.savedDate!==localDateStr())return{scores:{},notes:{},done:false,savedDate:localDateStr()};return saved;}
let dayData=loadToday(),scores=dayData.scores,notes=dayData.notes,isDone=dayData.done;
let activePillar=0,selectedPkg=0;
function saveDay(){LS.set(todayKey(),{scores,notes,done:isDone,savedDate:localDateStr()});}
function selectPkg(n){selectedPkg=n;document.querySelectorAll(".pkg-btn").forEach(b=>{b.className="pkg-btn"+(parseInt(b.dataset.pkg)===n?" sel":"");});checkIntakeReady();}
function checkIntakeReady(){const name=document.getElementById("intake-name").value.trim(),email=document.getElementById("intake-email").value.trim(),ok=name&&email&&selectedPkg&&document.getElementById("intake-commit").checked;document.getElementById("intake-begin").className="intake-begin"+(ok?" ready":"");}
["intake-name","intake-email"].forEach(id=>document.getElementById(id).addEventListener("input",checkIntakeReady));
function beginShift(){
const name=document.getElementById("intake-name").value.trim();
const email=document.getElementById("intake-email").value.trim().toLowerCase();
const phoneEl=document.getElementById("intake-phone"),phone=phoneEl?phoneEl.value.trim():"";
const err=document.getElementById("intake-err");
err.style.color="var(--danger)";
if(!name||!email||!document.getElementById("intake-commit").checked){err.textContent="Please fill in your name and email, and check the box to start.";return;}
if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){err.textContent="Please enter a valid email address.";return;}
const usedKey="shift_free_used_"+email;
if(localStorage.getItem(usedKey)){
err.style.color="var(--gold)";
err.innerHTML='You have already taken the free check-in with this email. Talk to Shawn — It’s Free →';
return;
}
localStorage.setItem(usedKey,"1");
err.textContent="";
LS.set("shift_name",name);LS.set("shift_email",email);LS.set("shift_phone",phone);LS.set("shift_pkg",30);LS.set("shift_start",todayKey());
CLIENT={name,email,phone,pkg:30};currentWeek=1;launchApp();
}
function boot(){document.getElementById("date-label").textContent=new Date().toLocaleDateString("en-US",{weekday:"long",month:"long",day:"numeric"});if(!CLIENT.name||!CLIENT.email||!CLIENT.pkg){document.getElementById("intake").style.display="block";return;}launchApp();}
function launchApp(){document.getElementById("intake").style.display="none";document.getElementById("midnight-notice").style.display="flex";document.getElementById("week-nav").style.display="none";document.getElementById("week-banner").style.display="block";document.getElementById("bottom-nav").style.display="flex";applyWeekUI();refreshNotice();setInterval(refreshNotice,60000);if(isDone){showSummary(false);}else{document.getElementById("checkin").style.display="block";render();}}
function refreshNotice(){const now=new Date(),mid=new Date(now);mid.setHours(24,0,0,0);const ms=mid-now,h=Math.floor(ms/3600000),m=Math.floor((ms%3600000)/60000);const dot=document.getElementById("m-dot"),txt=document.getElementById("m-text"),tim=document.getElementById("m-time");const tz=getTimezoneLabel(),tzStr=tz?" ("+tz+")":"";if(isDone){dot.className="m-dot locked";txt.innerHTML="Completed — edit anytime before midnight"+tzStr;tim.textContent="";}else if(h<2){dot.className="m-dot warning";txt.innerHTML="Your daily check-in resets at midnight"+tzStr;tim.textContent="· "+h+"h "+m+"m left";}else{dot.className="m-dot active";txt.innerHTML="Your daily check-in resets at midnight"+tzStr;tim.textContent="· "+h+"h "+m+"m left";}}
function applyWeekUI(){const t=WEEK_THEMES[currentWeek-1],isW4=currentWeek===4;document.getElementById("wtb-name").textContent=t.name;document.getElementById("wtb-sub").textContent=t.sub;document.getElementById("week-banner").className="week-theme-banner"+(isW4?" w4active":"");[1,2,3,4].forEach(n=>{const el=document.getElementById("wp"+n),active=n===currentWeek;el.className="week-pill"+(n===4?" w4":"")+(active?" active":"");el.innerHTML="W"+n+(!active?'🔒':"");});if(isW4)document.getElementById("app").classList.add("week4-mode");else document.getElementById("app").classList.remove("week4-mode");}
function render(){const container=document.getElementById("pillars");container.innerHTML="";const isW4=currentWeek===4;PILLARS.forEach((p,i)=>{const isActive=activePillar===i,score=scores[p.key]||0,refl=p.weeklyReflections[currentWeek-1];const card=document.createElement("div");card.className="pillar-card"+(isActive?" active":"");card.style.background=isActive?p.light:"rgba(0,0,0,0.04)";card.style.border="1px solid "+(isActive?p.border:"rgba(0,0,0,0.08)");if(isActive)card.style.boxShadow="0 4px 32px "+p.color+"22";if(!isActive)card.onclick=()=>{activePillar=i;render();};if(score>0&&!isActive){const b=document.createElement("div");b.className="score-bar";b.style.cssText="width:"+(score*20)+"%;background:"+p.color;card.appendChild(b);}const hdr=document.createElement("div");hdr.className="pillar-header";const left=document.createElement("div");left.className="pillar-left";const ib=document.createElement("div");ib.className="pillar-icon-box";ib.style.cssText="background:"+(isActive?p.color+"22":"rgba(0,0,0,0.04)")+";border:1px solid "+(isActive?p.border:"rgba(0,0,0,0.08)")+";color:"+p.color;ib.textContent=p.icon;const tx=document.createElement("div");tx.innerHTML='