@domdafonte I think you may find a lot of answers on this forums for this topic, try "laracasts. application structure" in search and see what comes up.
In general, each application has its own criteria and requirement. What the application needs to achieve should inspire the structure in a way or the other. For simple apps ( like blogs, 10 pages website, and such ) those will require no more than a simple MVC and some validation and a database which the framework provides out of the box with ease.
Like Jeffery always says, keep things simple where possible. For instance, having a lot going on in the controller may lead to distraction and unreadable code so some segregation of responsibilities will help avoid that. I make use of request classes to validate the data that gets passed to the controller to avoid writing validation code in the controller. I make use of repositories with modules that do big things where the modules keep only the normal stuff such as queryScopes, relations, etc.. and controllers will receive a request and then return a response.
when it comes to application structure, what works best for your application is the best practice.