fuzzy find my records ken.waow.tech
embeddings pds search
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

lock search input in share view, dashed-border readonly style

share view recipients can no longer type new queries. the search box is
pre-populated with the shared query and set readonly, so the recipient
sees the specific result the sharer meant to share rather than
accidentally getting a browseable interface over the target's whole
repo. the underlying PDS records are public either way (and the sharer
accepted that when they clicked save), but the share modal copy
promises "this query" — the UI should honor that. a recipient who wants
to search freely can sign in with their own handle.

visual: dashed border + muted text + transparent fill so it reads as
"fixed, not editable" without looking disabled. readonly (not disabled)
keeps select + copy working.

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

+26 -2
+11 -2
backend/src/assets/main.js
··· 686 686 // hide signout — there's no session to clear 687 687 signoutBtn.classList.add("hidden"); 688 688 689 + // lock the search input to the shared query. the records on the target's 690 + // PDS are public either way (and the sharer already opted in when they 691 + // clicked save), but the share modal copy promises "this query" — not 692 + // "a browsable index." we honor that by making the input read-only in 693 + // share view. a recipient who wants to search freely can sign in with 694 + // their own handle and index their own records. 695 + searchInput.value = query; 696 + searchInput.readOnly = true; 697 + searchForm.classList.remove("hidden"); 698 + 689 699 startProgress(); 690 700 691 701 // public lazy-load: walks the target's PDS via CAR + reuses every vector ··· 704 714 return; 705 715 } 706 716 707 - // poll until ready, then run the query 717 + // poll until ready, then run the (already-populated) query 708 718 await pollUntilReady(); 709 - searchInput.value = query; 710 719 runSearch(query); 711 720 } 712 721
+15
backend/src/assets/style.css
··· 159 159 .row input[type="text"]::placeholder, 160 160 #search-form input::placeholder { color: var(--fg-mute); } 161 161 162 + /* share view: search input is locked to the shared query. visually 163 + signal that the input is fixed — no focus outline, muted fill, text 164 + is still selectable/copyable but not editable (readonly, not disabled). */ 165 + #search-form input[readonly] { 166 + background: transparent; 167 + border-style: dashed; 168 + border-color: var(--border); 169 + color: var(--fg-mute); 170 + cursor: default; 171 + } 172 + #search-form input[readonly]:focus { 173 + border-color: var(--border); 174 + outline: none; 175 + } 176 + 162 177 #signed-out .row button { 163 178 background: var(--accent-dim); 164 179 color: var(--fg);