[object Object]

← back to Slack Idea Board

auto-save: 2026-07-23T12:20:57 (1 files) — public/index.html

906b38a8d27797fc5b417a310a03787403c2632d · 2026-07-23 12:21:09 -0700 · Steve Abrams

Files touched

Diff

commit 906b38a8d27797fc5b417a310a03787403c2632d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Jul 23 12:21:09 2026 -0700

    auto-save: 2026-07-23T12:20:57 (1 files) — public/index.html
---
 public/index.html | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/public/index.html b/public/index.html
index 57dfb2a..529ace9 100644
--- a/public/index.html
+++ b/public/index.html
@@ -41,6 +41,10 @@
   .detail{margin-top:6px;color:var(--dim)}
   .pending{color:var(--dim);font-style:italic}
   .empty{padding:40px;text-align:center;color:var(--dim)}
+  .search{background:var(--chip);border:1px solid var(--line);border-radius:999px;color:var(--text);
+    padding:5px 13px;font:13px inherit;min-width:210px;outline:none}
+  .search:focus{border-color:var(--gold)}
+  .search::placeholder{color:var(--dim)}
   .filters{display:inline-flex;gap:6px}
   .filters button{background:var(--chip);color:var(--dim);border:1px solid var(--line);border-radius:999px;
     padding:3px 11px;font-size:12px;cursor:pointer}
@@ -71,6 +75,7 @@
 <header>
   <h1><b>Idea Board</b> — Slack feed triage</h1>
   <span class="meta" id="stat">loading…</span>
+  <input type="search" id="q" class="search" placeholder="Search ideas, links, reasons, targets…" autocomplete="off" spellcheck="false">
   <span class="filters" id="filters">
     <button data-f="actionable" class="on">Actionable</button>
     <button data-f="yes">Yes only</button>
@@ -143,8 +148,16 @@ document.addEventListener('click', e=>{
 // Header button — launch the web-dev accelerator directly (no idea seed).
 async function launchAccelerator(btn){ return launchAction('', 'Build new project', 'Web-Dev Accelerator', btn); }
 function fmt(iso){try{return new Date(iso).toLocaleString(undefined,{month:'short',day:'numeric',hour:'numeric',minute:'2-digit'})}catch{return iso}}
-let LAST = { ideas:[], model:'' }, FILTER = 'actionable';
+let LAST = { ideas:[], model:'' }, FILTER = 'actionable', SEARCH = '';
+// Free-text search over every caption field the model produced for an idea.
+function matchesSearch(i){
+  if(!SEARCH) return true;
+  const hay = [i.title,i.about,i.text,i.note,i.url,i.channel,i.fit,i.fit_reason,
+    i.aa_fit,i.aa_target,i.aa_reason,i.next_step,i.next_detail].filter(Boolean).join(' ').toLowerCase();
+  return hay.includes(SEARCH);
+}
 function passes(i){
+  if(!matchesSearch(i)) return false; // search gates first, independent of filter/pending
   if(FILTER==='all') return true;
   if(i.pending) return true; // whole record not judged yet
   if(FILTER==='aayes' || FILTER==='aafit'){
@@ -160,6 +173,7 @@ document.getElementById('filters').addEventListener('click', e=>{
   [...document.querySelectorAll('#filters button')].forEach(b=>b.classList.toggle('on', b.dataset.f===FILTER));
   render();
 });
+document.getElementById('q').addEventListener('input', e=>{ SEARCH=(e.target.value||'').trim().toLowerCase(); render(); });
 async function load(){
   try{
     const r = await fetch('/api/ideas'); LAST = await r.json(); render();

← 0a99aaa idea-board: filter chips can slice by the Agent Abrams verdi  ·  back to Slack Idea Board  ·  5x sweep 1: render non-actionable Skip as a span, not a disa b8cc845 →