Cleared the 12 baseline tsc --noEmit errors that had accumulated over the last few weeks. CI now fails any PR that introduces a new type error, so we don't drift again.
Changelog
What we shipped on pitch.vc — recently.
May 6, 2026
Four API routes that accept IDs from anonymous callers now hard-validate the UUID shape before touching Postgres. Bad input gets a clean 400 instead of bubbling up as a Postgres syntax error. Tightens up the public surface against fuzzing.
The provenance label on company fields was showing a chip for sources it didn't have a friendly name for — Curtis spotted "pitchv1import" rendering raw. Unknown sources now hide the chip rather than leak the internal slug. Recognized sources (founder, AI extraction, user correction, etc.) render as before.
The /admin/claims approve / decline emails were rendering with the original "Email verification" body even after the claim status had changed. Owners would open an email that didn't match what they'd already done. Body text now follows the claim's current status — pending, approved, or declined.
If a company already has an owner, non-owners now get a "Request editor access" button on the profile. The owner gets an email with a one-click approve / decline link, and admins can see pending requests in the queue. Previously you'd just bounce off the locked profile with no path forward.