What your design should be responding to is the context of the user. Not just the device they're using.
It's about more than just screen size and capabilities.
It's about enabling the person using the software to get the value they want out of using the software regardless of which device they are using.
Of course, understanding the context of the user (so you can best give them what they want) requires consideration of more than just the size of the screen.
And although it should go without saying you can't put all the logic to do this on just the client side or just the server side. (Assuming you have both - some apps may only be client.) Some of the logic to do this will need to be on the server and some on the client. The client will tell the server general information to the server which will impact what the server returns. The client will then refine this to the specifics of the device. Allowing for consideration of its current configuration and its current environment.