[object Object]

← back to Abrams

persist projects-grid sort to localStorage + hydrate before first load

8931bdf852fd795ae4b4eae0bcd761ac2d3aa104 · 2026-05-19 17:21:24 -0700 · SteveStudio2

Density already persisted; sort did not. Added abrams.sort key, validate
option exists before applying, and moved hydration above the change
listener so the saved value is in place before loadProjects() fires.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 8931bdf852fd795ae4b4eae0bcd761ac2d3aa104
Author: SteveStudio2 <steve@designerwallcoverings.com>
Date:   Tue May 19 17:21:24 2026 -0700

    persist projects-grid sort to localStorage + hydrate before first load
    
    Density already persisted; sort did not. Added abrams.sort key, validate
    option exists before applying, and moved hydration above the change
    listener so the saved value is in place before loadProjects() fires.
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
 public/index.html | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/public/index.html b/public/index.html
index beb1d4f0..39d1907c 100644
--- a/public/index.html
+++ b/public/index.html
@@ -250,11 +250,18 @@ async function submitLead(e){
 function openProject(slug){ window.location.href = '/#project-' + slug; /* future: project detail modal */ }
 function openIdea(slug){ window.location.href = '/ideas#' + slug; }
 
-document.getElementById('sort').addEventListener('change', loadProjects);
-document.getElementById('density').addEventListener('input', e => { document.documentElement.style.setProperty('--cols', e.target.value); localStorage.setItem('abrams.density', e.target.value); });
+// hydrate sort + density from localStorage BEFORE first grid load (Steve standing rule)
+const savedSort = localStorage.getItem('abrams.sort');
+if (savedSort) {
+  const sortEl = document.getElementById('sort');
+  if ([...sortEl.options].some(o => o.value === savedSort)) sortEl.value = savedSort;
+}
 const savedDensity = localStorage.getItem('abrams.density');
 if (savedDensity) { document.getElementById('density').value = savedDensity; document.documentElement.style.setProperty('--cols', savedDensity); }
 
+document.getElementById('sort').addEventListener('change', e => { localStorage.setItem('abrams.sort', e.target.value); loadProjects(); });
+document.getElementById('density').addEventListener('input', e => { document.documentElement.style.setProperty('--cols', e.target.value); localStorage.setItem('abrams.density', e.target.value); });
+
 async function loadLeaderboard() {
   const r = await fetch('/api/gamify/leaderboard').then(x=>x.json()).catch(()=>({leaderboard:[]}));
   const board = r.leaderboard || [];

← 84cf3cdd snapshot — gitify backup 2026-05-19  ·  back to Abrams  ·  persist ideas-page sort/filter/density + apply density on hy 7a3c2c97 →