The second thing I notice (after checking to verify normal direction) is that you have custom normals:
I know that this is the case because of the button in properties/object data/geometry data, that offers "clear custom normals". I have no idea what those custom normals are-- they could be anything. Let's clear them.
Now, we have what is basically a flat-shaded mesh. It's flat shaded because it's autosmoothed (also in properties/object data) to mark all edges representing a face angle of 30 degrees or greater as sharp. Is this what you want? Then you're done. Not what you want? We'll disable autosmooth:
Now, we have smooth shaded normals across the boundary faces. Of course, these smooth shaded normals are interpolating rather wildly, over +- 90 degrees across a single face. Perhaps we should add a few loop cuts, so that those normals only interpolate across 45 degrees, over a fraction of the faces:
We can create an additional loop to hold the interpolation of normals on the other side of the angle, and adjust the spacing of those loops we just made. There's no right answer here (it's not reality, it's a high-level abstraction of reality); we just do it to eye, until it does what we want:
There are ngons. But in this case, that's fine. For the surfaces we're concerned with, the ngons are planar with their neighbors. And because there are no packed textures, there's not yet any reason to care about the triangulation of distorted UV, not any reason to care about vertex color, which doesn't exist. So ngons are fine here. (And, since ngons are often easier to work with than quads, when they work, ngons are the appropriate thing to use here.)