New Items Dashboard

repo: ~/Projects/new-items-dashboard · 10 commits · 0 in last 24h, 0 in last 7d ·

Search the build

10 commits indexed

  1. 4500b89 2026-08-25 creds-safe fetch guard: resolve relative fetch vs credential-free location (creds-in-URL trap)
  2. 50bec0f 2026-08-04 Strip DW marketing pixel + ad slot from internal tool (not a customer-facing site) [ads/tracking scope]
  3. 3976c0b 2026-08-04 Wire DW Meta Pixel 1431180262113856 + DW-network ad slot [ads/tracking rollout]
  4. 03f8a8c 2026-05-20 add: pre-stage Meta Pixel snippet (placeholder; flip via _dw-batch set-fb-pixel.sh)
  5. ed3ed84 2026-05-19 test: auth gate smoke test (boots server, asserts 401/200 matrix)
  6. b447df1 2026-05-19 secure: basic-auth gate on all routes (server was public on 0.0.0.0:7201)
  7. 7d0b816 2026-05-19 feat: sort + density controls on wines & handbags grids
  8. 793d2e2 2026-05-19 harden: broaden .gitignore + 404-guard for snapshot files
  9. 56106db 2026-05-13 snapshot: 1 file(s) changed, ~1 modified
  10. d4a4408 2026-05-06 initial scaffold (gitify-all 2026-05-06)

Authors

Agents used

  • none detected

Skills used

  • /new-wines3
  • /new-handbags3
  • /tracking2
  • /stats2
  • /item1
  • /index1
  • /editor-scratch1

Creative ideas + design notes

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

4500b89 · 2026-08-25 · creds-safe fetch guard: resolve relative fetch vs credential-free location (creds-in-URL trap)
Fleet inoculation — opening this basic-auth app with credentials in the URL
poisoned document.baseURI and made relative fetch('/api/…') throw. Guard resolves
non-absolute request URLs against location instead. Ref: creds-in-url-fetch-guard-fleet-pattern.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ed3ed84 · 2026-05-19 · test: auth gate smoke test (boots server, asserts 401/200 matrix)
7 assertions covering unauth-401 on /, /api/new-wines, /api/new-handbags,
/api/stats, WWW-Authenticate present, valid-creds non-401, wrong-creds 401.
Standalone (no framework dep); wired to npm test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
b447df1 · 2026-05-19 · secure: basic-auth gate on all routes (server was public on 0.0.0.0:7201)
Mounts an Express middleware before any route declaration so /api/new-wines,
/api/new-handbags, /api/stats and the HTML dashboard all require credentials.
Credentials come from env BASIC_AUTH (user:pass form); placeholder is left in
code with a SECURITY: rotate-before-deploy comment. In dev (NODE_ENV !=
production) with no BASIC_AUTH set, the gate fails open for local convenience.
Uses crypto.timingSafeEqual to dodge length-leak side channels.

.env.example documents BASIC_AUTH + NODE_ENV. .gitignore exempts .env.example
so the template can be tracked.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7d0b816 · 2026-05-19 · feat: sort + density controls on wines & handbags grids
Per Steve's standing rule, every product/item grid must have a working
sort <select> + density slider, both persisted to localStorage and
hydrated BEFORE the first fetch.

Frontend (public/index.html):
- New .grid-controls toolbar above each tab grid with sort select
  (Newest / Vendor / Series / SKU / Title) + density range input
  (180-480px card-min via CSS var --card-min).
- hydrateControls() reads localStorage and sets control values BEFORE
  loadWines/loadHandbags fire, so the first paint already reflects the
  saved user choice instead of flashing default→saved.
- Change handlers persist to namespaced keys (newItemsDash.<tab>.<ctl>)
  then either re-fetch (sort) or just re-apply CSS var (density).
- Grids now render into dedicated <div id=wines-grid> / handbags-grid
  containers so re-renders don't blow away the toolbars.
- applyDensity re-runs after every grid re-render to survive the
  innerHTML wipe.

Server (server.js):
- New applySort(items, sort, type) helper. Honors ?sort=newest|vendor|
  series|sku|title on both /api/new-wines and /api/new-handbags.
- 'vendor' falls back to brand / source when an item lacks vendor;
  'series' falls back to vintage / model. Keeps shape consistent
  across the two heterogeneous data sources.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
793d2e2 · 2026-05-19 · harden: broaden .gitignore + 404-guard for snapshot files
- .gitignore now covers *.bak.*, *.pre-*, *.orig, *.rej, *.swp, *~
  (was only *.bak). Prevents editor scratch + Claude pre-edit snapshots
  from sneaking into the repo.
- New Express middleware before express.static returns 404 for any
  request to a snapshot/editor-scratch path so even if one accidentally
  lands under public/ it never serves to a browser.

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

File tree

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

Other build journals

← New Import Viewer  ·  all 4 projects  ·  Newmor Onboard →

Export

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

rendered in 1ms