**Chat log** from Bead: Wildfire Forager · [canonical source](https://redfish.acequia.io/guerin/.agents/5b518c35-2ce7-474a-a5a8-ec83e2fd0e82/2026-06-21/chats/2026-06-21-media-collector-bookmarklet.md) · session 2026-06-21 · discussion: Talk: Wildfire Forager *Verbatim chat log: immutable provenance. The bead's copy is ground truth; wiki edits here are a fork, never the record.*
Session animated by CV (Claude Code). This bead was the build target; the conversation began in the `stac-manager-nextgen` (`b73189b7`) / mount context and turned to building a bookmarklet here. Prompts verbatim; assistant turns summarized with pointers to the durable artifacts.
## Verbatim prompts > have wildfire-forager author a bookmarklet and a host page like we did for mission-mission browwer. mount-bead mission-browser. follow the same architecture with an external script. > use .git discipline and host in wildfire-forager bead the script and the hosting page > `mount-bead that is closest to wildfire-forager or cataloger and have it makea bookmarklet that logs the current url, date-time, and names a collectionto save to. this is like saving to a playlist in youtube. let the user specify a webdasv directory or filesystem access api folder to save to. make sure to save fsa handles to localstorage for reloading. becasue they will be on different domain origins we will need to open an iframe in a div that is loading from the bead. and probably use postmessage to communicte between the host page of the bookmarklet and the iframe` > the bookmarklet div should put checkboxes over videos and images on the page. to avoid all the small images, make a filter ui for min size, filter for .jpg, png, mp4, and video.
## What was done - Studied the reference architecture: EGP mission-browser (`35e928bc`) — `javascript:` loader injecting an external `mission-browser-app.js`, the `mission-browser.html` landing page, and the `storagePut/Mkdir/List` driver (FSA-local via `showDirectoryPicker` + dir handle in IndexedDB | WebDAV+Bearer). Also read the stac-manager StorageLocation note (`b73189b7` note 01). - Built `repo/` (own git, one commit `7a2b26c`): `bookmarklet.js`, `collector.js` (host: scan, checkbox overlays, min-size + JPG/PNG/MP4/video/other filters, panel), `collector-frame.html` (bead-origin iframe: collections, FSA/WebDAV save, IndexedDB persistence), `collect.html` (landing), `README.md`. Architecture in note 03. - Mounted `35e928bc` (architecture source); confirmed `90f902e0` catalog as the collection substrate; related `d2798c01` social-foraging (this is its save-to-a- collection surface).
## Decisions / deviations flagged to Stephen (assistant judgment, pending confirmation) 1. **Logs links, not bytes** — "logs the current url … names a collection" + the "managing links of URIs" frame → a collection is a JSON catalog of URIs with metadata; appending one item per page. Downloading bytes is a later option. 2. **FSA handles in IndexedDB, not localStorage** — localStorage is string-only and cannot hold a directory handle; IndexedDB (structured clone) is the only correct store, restored with a permission re-query on reload. Honors the persist+reload intent; corrects the mechanism. 3. **FSA-in-cross-origin-iframe caveat** — may be blocked by some browsers; WebDAV is the always-works path, same-origin popup picker the documented fallback. 4. Not yet `/bead-sync`'d — bookmarklet/iframe URLs resolve only after the bead is pushed to its canonical URI.