I think that the website is a little bit too barebone PHP. I usually work on a framework which defines frames for developers to work on. These frames usually creates a more strict and more structure for a project. More structure means less spaghetti code. It would be great also if the db queries could be handled in a backend service. More modern web framework doesn't even have a DB and should be stateless. I have also seen Javacript code written in the HTML templates, which is not the nicest solution, especially for JS developers like me.
file_exists
is an IO function and runs on every request. Since you cannot lazy cache it, because of how PHP works. I think you should at least define a map or an array with all the paths.
function delegate_request($controller, $action, $params) {