🌮 Taco Tracker
0
Streak: 0
(function(){
let data = JSON.parse(localStorage.getItem(‘tacoData’)) || [];
function render() {
document.getElementById(‘total’).textContent = data.length;
renderStreak();
const log = document.getElementById(‘log’);
log.innerHTML = ”;
data.slice().reverse().forEach(d => {
const li = document.createElement(‘li’);
li.textContent = new Date(d).toLocaleString();
log.appendChild(li);
});
}
function renderStreak(){
const days = […new Set(data.map(d=>new Date(d).toDateString()))];
let streak = 0;
let day = new Date();
while(days.includes(day.toDateString())){
streak++;
day.setDate(day.getDate()-1);
}
document.getElementById(‘streak’).textContent = ‘Streak: ‘+streak+’ day’+(streak===1?”:’s’);
}
function ateATaco(){
const now = new Date();
data.push(now.toISOString());
localStorage.setItem(‘tacoData’, JSON.stringify(data));
render();
checkMilestone();
}
function undo(){
data.pop();
localStorage.setItem(‘tacoData’, JSON.stringify(data));
render();
}
function checkMilestone(){
const milestones = [50,100,250,365];
if(milestones.includes(data.length)){
alert(‘🎉 Taco milestone reached: ‘+data.length+’!’);
}
}
function exportData(){
const summary = ‘🌮 Taco Tracker\n\nTotal tacos: ‘+data.length+’\n’+document.getElementById(‘streak’).textContent+’\n\nLog:\n’+data.map(d=>new Date(d).toLocaleString()).join(‘\n’);
if(navigator.share){
navigator.share({text:summary});
} else {
navigator.clipboard.writeText(summary);
alert(‘Summary copied to clipboard.’);
}
}
document.getElementById(‘add-taco’).addEventListener(‘click’, ateATaco);
document.getElementById(‘undo-taco’).addEventListener(‘click’, undo);
document.getElementById(‘export-taco’).addEventListener(‘click’, exportData);
render();
})();