Permit Radar
Search the build
-
f6cdd9b2026-08-31 fail-open guardrail: warn at boot when admin auth is unconfigured (TK-10984 opt-A) -
04e7eeb2026-08-30 add creds-in-URL fetch guard to gated pages (TK-10984) -
c3b0ab22026-08-25 creds-safe fetch guard: resolve relative fetch vs credential-free location (creds-in-URL trap) -
d596a1b2026-08-01 permit-radar: adopt href-to-deeper-data primitives (TK-10093) -
fdc840b2026-07-16 shopify: refresh catalog — keep sample-only as 'by request' -
12a1e8e2026-07-16 cross-sell strip: use price_display + product_url, prefer buyable products -
ed3fea72026-07-16 shopify: refresh catalog — real roll prices, no $4.25 sample-only leak -
994b4442026-07-16 auto-save: 2026-07-16T08:12:03 (1 files) — data/shopify-catalog.json -
633acd72026-07-16 security: bind server to 127.0.0.1 so the tunnel/proxy basic-auth gate can't be bypassed on the LAN -
b1dbc232026-07-16 auto-save: 2026-07-16T07:41:55 (1 files) — data/subscribers.json -
e1e9ff12026-07-16 feat: add DW cross-sell strip to index + permit detail pages (links only, no checkout) -
591ba0d2026-07-16 feat: copy shopify-catalog.json + add /api/shopify-crosssell read-only endpoint -
de185e82026-07-15 permit-radar: full permit directory + lead funnel + admin — working prototype -
f1fb1932026-07-15 initial scaffold (permit-radar) via web-dev accelerator
Authors
- Steve14
Agents used
Skills used
- /shopify-crosssell2
- /shopify-catalog1
- /proxy1
- /subscribers1
Creative ideas + design notes
c3b0ab2 · 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>
12a1e8e · 2026-07-16 · cross-sell strip: use price_display + product_url, prefer buyable products
- /api/shopify-crosssell now returns price_display (pre-formatted string), sample_only, and product_url for each pick instead of raw numeric price - Pool is filtered to buyable products first (167 available >> 6 needed), so "Roll price on request" cards are suppressed in normal operation - Frontend uses esc(p.price_display) — no manual \$+toFixed() formatting, eliminates any \$null/\$NaN risk Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>