A 500 is your backend telling you it hit something it could not handle yet. The distinction that matters is not whether they happen, but whether anyone is listening.
Every endpoint returning the same envelope, success or failure — the response shape worth settling on, and the global interceptor and exception filter that enforce it in NestJS.
From an empty terminal to a working custom endpoint: installing the Nest CLI, reading the generated project, and how the controller and service split the work between them.