Main idea
In App Router, pages and layouts are Server Components by default. That means you can fetch data directly in the component before it renders.
Use a route handler only when the browser or another service needs an API. For a normal page read, fetch on the server.
Why server fetch
A hackathon judge does not care where your data comes from. They care that the deployed page opens fast, shows real content, and does not leak secrets.
Server-side fetching helps because your database query, API key, and filtering logic stay on the server. They are not shipped in the client JavaScript bundle.