Consulting Intake
Search the build
-
2f22dfc2026-08-31 update lhf.js SOURCE OF TRUTH comment to include intake portal path -
e354af72026-08-31 add LHF widget to intake admin command center (fleet pattern parity) -
5027e892026-08-30 deploy-safety: exclude data/ from rsync so deploys never clobber prod-written intakes/admin edits (TK-22) -
19e3da02026-08-30 Fix creds-in-URL fetch guard on both gated pages (portal/admin) — byte-exact fleet drop-in, standalone files patched directly (TK-22) -
412a1862026-08-25 creds-safe fetch guard: resolve relative fetch vs credential-free location (creds-in-URL trap) -
6a3fbc62026-07-25 chore: lint (intake write try/catch), v0.1.2 (session close) -
cdc70672026-07-25 harden public /api/intake: per-IP + global rate limiting (no new deps) -
c3c30a52026-07-19 intake sign-in: hero Ken-Burns pan-zoom + reduced-motion guard (parity with RENTV portal motion layer) -
b6ee91b2026-07-17 chore: v-bump (session close) -
0b5ab1d2026-07-17 Intake app: rich UX — rotating skyline hero, editorial dark-gold system, restyled questionnaire -
cc8c4132026-07-17 Consulting Intake template home — public questionnaire front door -
eb9a6242026-07-17 scaffold consulting portal for Consulting Intake
Authors
- Steve12
Agents used
Skills used
- /catch1
- /intake1
- /day1
Creative ideas + design notes
412a186 · 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>
cdc7067 · 2026-07-25 · harden public /api/intake: per-IP + global rate limiting (no new deps)
Zero-dependency in-memory sliding-window limiter: 5 submissions/IP/10min plus a 500/day global backstop so distributed spam can't fill intakes.json. trust proxy so it keys on the real client IP through nginx (X-Forwarded-For), not loopback. Verified: 5x200 then 429 same-IP; distinct IPs get independent buckets.
File tree
- .deploy.conf
- .gitignore
- build.mjs
- data/ads.json
- data/best-times.json
- data/client.json
- data/competitors.json
- data/content-calendar.json
- data/directories.json
- data/intakes.json
- data/media.json
- data/socials.json
- data/suggestions.json
- package-lock.json
- package.json
- public/admin/index.html
- public/admin/lhf.js
- public/intake.html
- public/portal.html
- public/signin.html
- public/versions/bold.html
- public/versions/classic.html
- public/versions/editorial.html
- public/versions/modern.html
- public/versions/warm.html
- server.js