Start here. This is the direct spoken answer to practice first.
Why this question matters
Modern full-stack apps often have both a frontend server and a backend API. The design needs a clear boundary so the BFF layer helps the UI without becoming a second unowned backend.
I add a Next.js server boundary when it protects browser credentials, supports authenticated server rendering, or adapts several backend calls into one UI-specific operation. Server Components can read data for rendering, Server Actions fit UI-coupled mutations, and Route Handlers expose an HTTP endpoint for browser or other callers. Those are transport choices; the ASP.NET Core API still owns shared business rules, durable authorization, validation, and data integrity.