{"slug":"consulting-intake","total":7,"limit":100,"offset":0,"since":null,"commits":[{"hash":"6a3fbc6","date":"2026-07-25 10:55:27 -0700","author":"Steve","subject":"chore: lint (intake write try/catch), v0.1.2 (session close)","body":""},{"hash":"cdc7067","date":"2026-07-25 10:39:47 -0700","author":"Steve Abrams","subject":"harden public /api/intake: per-IP + global rate limiting (no new deps)","body":"Zero-dependency in-memory sliding-window limiter: 5 submissions/IP/10min plus a\n500/day global backstop so distributed spam can't fill intakes.json. trust proxy\nso it keys on the real client IP through nginx (X-Forwarded-For), not loopback.\nVerified: 5x200 then 429 same-IP; distinct IPs get independent buckets."},{"hash":"c3c30a5","date":"2026-07-19 07:38:05 -0700","author":"Steve Abrams","subject":"intake sign-in: hero Ken-Burns pan-zoom + reduced-motion guard (parity with RENTV portal motion layer)","body":""},{"hash":"b6ee91b","date":"2026-07-17 11:16:09 -0700","author":"Steve","subject":"chore: v-bump (session close)","body":""},{"hash":"0b5ab1d","date":"2026-07-17 09:50:39 -0700","author":"Steve","subject":"Intake app: rich UX — rotating skyline hero, editorial dark-gold system, restyled questionnaire","body":""},{"hash":"cc8c413","date":"2026-07-17 07:56:46 -0700","author":"Steve","subject":"Consulting Intake template home — public questionnaire front door","body":""},{"hash":"eb9a624","date":"2026-07-17 07:56:06 -0700","author":"Steve","subject":"scaffold consulting portal for Consulting Intake","body":""}]}