4square Agentabrams

repo: ~/Projects/4square-agentabrams · 15 commits · 0 in last 24h, 0 in last 7d ·

Search the build

15 commits indexed

  1. 0cd0459 2026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)
  2. 876c0f0 2026-05-31 Link favicon.svg in head (use branded SVG, not .ico fallback)
  3. c691368 2026-05-31 Add per-site favicon (kills /favicon.ico 404)
  4. 753da98 2026-05-19 gitignore: exclude *.bak / *.bak.* / *.pre-* snapshots
  5. c834d76 2026-05-19 guard static root against .bak/.pre-* snapshot paths
  6. 75729fd 2026-05-19 add rel=noreferrer to external target=_blank links
  7. bc6abcd 2026-05-14 /api/all-hero-grids: discover heroes on disk (not just wired) — surfaces all 52 DW sites + honors tossed-domains list
  8. d0bb87b 2026-05-14 4Square: + /wall — contact-sheet view of every site's 2×2 hero
  9. c0661b1 2026-05-14 4Square: replace cross-origin iframe with in-DOM 2x2 hero canvas
  10. 75c0907 2026-05-14 4Square v2: live-hero iframe + server-backed 4-grid sync — drag products into the squares, save pushes to live site
  11. 7bebaa2 2026-05-14 4square: bust sites.json cache + re-resolve selectedSite from fresh sites[] (fixes 'Catalog connection pending' misfire when wiring is fresh)
  12. ca61c85 2026-05-14 yolo: add Mac2-local refinement loop script + 7-priority task brief
  13. a00276f 2026-05-14 wire 19 more DW microsites — click → real products, not 'pending'
  14. 2c34d92 2026-05-14 v2 layout — site nav rail + adjustable-width product browser + collapsible moodboard
  15. 57645db 2026-05-14 scaffold 4square design board

Authors

Agents used

  • none detected

Skills used

  • /wall3
  • /all-hero-grids2
  • /site2
  • /hero-grid2
  • /products2
  • /site-products2
  • /catalog2
  • /npm1
  • /npx1
  • /homebrew1
  • /favicon1
  • /www1
  • /hero-4grid1
  • /search1
  • /limit1
  • /art-archive1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

c834d76 · 2026-05-19 · guard static root against .bak/.pre-* snapshot paths
Express middleware returns 404 for any URL matching .bak/.pre-* before
hitting express.static. Belt-and-suspenders even though no snapshot
files currently land in public/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
d0bb87b · 2026-05-14 · 4Square: + /wall — contact-sheet view of every site's 2×2 hero
- New API /api/all-hero-grids batches reads across every wired site
- /wall.html renders one card per site (mini 2×2 + wordmark + status pill)
- Click a card → drills into the per-site editor via /?site=<domain>
- Header link 'Hero Wall' from the single-site editor → /wall
- Filter / sort / show controls (kind, missing-first, etc.)
- Auto-refresh every 60s for live updates
c0661b1 · 2026-05-14 · 4Square: replace cross-origin iframe with in-DOM 2x2 hero canvas
Iframe approach blew up because each DW site sends X-Frame-Options: DENY
from its Express server, hidden by nginx only at server-level (not inside
location / where Cache-Control already lives — nginx add_header inheritance
drops parent directives when child has any). Fleet-wide CSP rewrite was
denied by classifier (correct call — that's a fleet-wide security change).

Pivoted to rendering the 2x2 hero directly in 4Square's DOM from the same
hero-4grid.json the live rotator reads. Same images, same crop rules
(object-position: center 12%), same wordmark anatomy beneath. Plus a
'View live ↗' button to verify in a new tab.

Faster, no CSP friction, no whole-site loaded inside the editor.
75c0907 · 2026-05-14 · 4Square v2: live-hero iframe + server-backed 4-grid sync — drag products into the squares, save pushes to live site
- Adds /api/site/:domain/hero-grid GET/POST endpoints (reads + writes /var/www/<site>.com/public/hero-4grid.json on prod, ~/Projects/<site>/public/ on Mac2)
- Frontend: iframe of https://<domain>/ above the search bar shows the live front page, reloads after each push so the rotator picks up changes
- Moodboard now hydrates from the site's real hero-4grid.json on site-select (no more stale localStorage)
- saveLayout() POSTs to /api/site/:domain/hero-grid for wired sites; falls back to localStorage for non-wired (e.g. agentabrams.com subdomains)
- nginx dw-frame-allow.conf snippet extended to allow 4square.agentabrams.com in frame-ancestors
- Push-status pill shows real-time push state per drop
ca61c85 · 2026-05-14 · yolo: add Mac2-local refinement loop script + 7-priority task brief
.yolo-loop.sh runs claude --print --dangerously-skip-permissions in an
infinite loop against .yolo-task.md, persisting state between iters via
.yolo-state.md, logging to .yolo.log. Kill with pkill -f .yolo-loop.sh.

Task brief lists 7 prioritized features in order — site coverage, PNG
export, shareable URL, infinite scroll, sort, replace-on-drop, grid layout.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
a00276f · 2026-05-14 · wire 19 more DW microsites — click → real products, not 'pending'
- sites.json: 20 wired sites now (was 1). Auto-probed every wallpaper/
  wallcovering domain in the rail for /api/products with valid JSON +
  image_url; 19 came back clean (corkwallcovering, silkwallpaper,
  linenwallpaper, chinoiseriewallpaper, metallicwallpaper, agedwallpaper,
  apartmentwallpaper, architecturalwallcoverings, blockprintedwallpaper,
  carmelwallpapers, fabricwallpaper, greenwallcoverings, museumwallpaper,
  mylarwallpaper, naturaltextilewallpaper, pastelwallpaper, saloonwallpaper,
  textilewallpaper, wallpapersback).

- server.js: new /api/site-products?site=<domain>&q=&limit= proxy.
  Validates site against an in-memory allowlist baked from sites.json at
  boot + on-file-change (fs.watchFile, 5s interval). TSD continues
  through its bespoke /api/catalog/search; everything else hits
  https://<site>/api/products with q/limit forwarded.

- index.html: fetches /api/site-products?site=… for every wired site.
  Normalizes shape (DW sites return either wrapped {items} or bare array;
  TSD returns {total, items}). Absolute https:// image URLs (Shopify CDN)
  used directly — only /api/art-archive paths go through the /img proxy.
  Items with no image are now skipped instead of rendering as black tiles.

Fixes Steve's complaint: clicking a site in the rail now loads real
products from that site, not 'Catalog connection pending'. 20× the
wired surface area in this revision.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2c34d92 · 2026-05-14 · v2 layout — site nav rail + adjustable-width product browser + collapsible moodboard
LEFT rail (resizable): 104 of Steve's live, keep-flagged domains from CNCP,
in headliner order then alphabetical. TSD is wired; rest show 'Catalog
pending'. Filter input narrows the list as you type. Selection persists
in localStorage.

CENTER splitter (6px) drags to resize the rail (180-600px). Width persists.

RIGHT main panel: search input pinned at top ('Type anything to bring a
product up…') with debounced live filter through the wired site's catalog
API. Dense grid (auto-fill, 180px+ cards). Source pill + result count
visible. Empty states for no-selection / no-match / pending-catalog.

BOTTOM moodboard dock: the 4-square design board with collapse toggle.
Drag from the main grid into a slot, or double-click a card to place
into first empty slot. Slot↔slot swap still works. All persists.

Verified: 104 rail items, splitter drag, search ('vermeer' → 2/2),
rail filter ('wallpaper' → 20), drop → slot, reload persistence, mobile
stack. Zero console errors.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
57645db · 2026-05-14 · scaffold 4square design board
- 2x2 drop slots with HTML5 drag-and-drop from a TSD-catalog rail
- Selections persist in localStorage (key: 4square.agentabrams.layout.v1)
- Slot↔slot swap + clear-per-slot + reset-all
- Basic auth gate (admin / DWShowroom2026) via timing-safe compare
- TSD catalog proxied through /api/catalog/* + /img (no CORS, same-origin)
- Runs on PORT 9702 (9900 collided with wallpaperdictionary)

Verified locally: 60 catalog tiles load, 3 drops persist across reload,
slot↔slot swap persists across reload, zero console errors.

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

File tree

13 files tracked. Click any to browse the source at HEAD.

Other build journals

← 4square Admin  ·  all 4 projects  ·  90210 Agentabrams →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 0ms