diff --git a/vault-tracker.html b/vault-tracker.html
index 93e1a30..cc55dd4 100644
--- a/vault-tracker.html
+++ b/vault-tracker.html
@@ -3,6 +3,7 @@
-
+
Not connected — checkbox data saves on this device only until you connect your sheet.
@@ -194,8 +195,10 @@
Runway to 15'0"
const STORAGE_KEY = "vault-tracker-week";
const NOTES_KEY = "vault-tracker-notes";
const URL_KEY = "vault-sheet-webapp-url";
+const LOGGED_KEY = "vault-tracker-logged";
let state = {};
let notes = {};
+let loggedTasks = {};
let sheetUrl = "";
function totalTasks(){ return PROGRAM.reduce((sum,d)=>sum+d.tasks.length,0); }
@@ -278,10 +281,15 @@
Runway to 15'0"
document.getElementById("goalReadout").innerHTML = pct + "%
week done";
}
+function buildLogKey(entry){
+ return `${entry.date}:${entry.day}:${entry.exercise}`;
+}
+
async function persistLocal(){
try{
localStorage.setItem(STORAGE_KEY, JSON.stringify(state));
localStorage.setItem(NOTES_KEY, JSON.stringify(notes));
+ localStorage.setItem(LOGGED_KEY, JSON.stringify(loggedTasks));
}catch(err){ console.error("Local save failed:", err); }
}
@@ -299,6 +307,10 @@
Runway to 15'0"
sheetUrl = u || "";
if(sheetUrl){ document.getElementById("sheetUrl").value = sheetUrl; setStatus(true, "Connected — checkboxes log to your Sheet's Log tab."); loadPRs(); }
}catch(err){ sheetUrl = ""; }
+ try{
+ const l = localStorage.getItem(LOGGED_KEY);
+ loggedTasks = l ? JSON.parse(l) : {};
+ }catch(err){ loggedTasks = {}; }
}
function setStatus(ok, msg){
@@ -310,6 +322,11 @@
Runway to 15'0"
async function logToSheet(entry, dayKey){
const tag = document.getElementById("sync-"+dayKey);
if(!sheetUrl){ if(tag) tag.textContent = ""; return; }
+ if(!entry.completed){ if(tag) tag.textContent = ""; return; }
+
+ const logKey = buildLogKey(entry);
+ if(loggedTasks[logKey]){ if(tag) tag.textContent = "Already synced for today"; return; }
+
if(tag) tag.textContent = "Syncing...";
try{
await fetch(sheetUrl, {
@@ -318,6 +335,8 @@
Runway to 15'0"
headers: { "Content-Type": "text/plain;charset=utf-8" },
body: JSON.stringify(entry)
});
+ loggedTasks[logKey] = true;
+ await persistLocal();
if(tag) tag.textContent = "Sent to sheet ✓ " + new Date().toLocaleTimeString() + " — check Log tab to confirm";
}catch(err){
if(tag) tag.textContent = "Sync failed — saved locally only.";
@@ -355,6 +374,7 @@
Runway to 15'0"
document.getElementById("resetBtn").addEventListener("click", async ()=>{
state = {};
+ loggedTasks = {};
await persistLocal();
render();
updateGoal();