Audit per route
Security is not one switch, it is a list applied to every entry point. Walk each route and ask: does it escape input, require a CSRF token, compare secrets in constant time, hash passwords slowly? A route that skipped a line is the hole.
Headers close the browser gaps
Response headers (CSP, X-Frame-Options, HSTS) close holes the browser would otherwise allow. They are part of the same checklist, applied at the response, not the handler. Add them once and they cover every page.