*excited clapping!* (つ☯ᗜ☯)つ
"jointed paperdoll" so if you wanted to, you could throw your work into Blender or Live2D and use them to give a bit of animation. Cool to hear you try to keep your work organized and editable.
In my earlier phases, when I tried to go for a more realistic style, and knew less about schematic rhetoric, I always had the issue that I couldn't tell if a pose or character was going to look good on not until I put all the work to paint and shade them. I say york work looks fantastic.
As for the hair, I have 3 tips that you could try that shouldn't be too much effort. As it is now, I think it looks good, reminds me of how the Teen Titans show did it, or how Shadman does it: incoming wall of text
~ 1 trick I call 'over shadow,' I haven't seen any discussion on ideas that touch this, so I don't know if there is an official term or why it works but the trick is, you shade (just the shadow) something like normal (ie, cell shade like you did with the legs) to what you think looks good and realistic, you save that, then you keep adding more shadow, just mesh it up, go overboard, but try to be consistent with how you do this to the whole thing (in this case just the hair). After you are done, zoom out and see how you feel about it, you may be shocked.
I theorize that the reason this sometimes makes a work pop more, and look better (often works better with darker backgrounds, high contrast color pallet, or characters that are going to be zoomed out) because it takes advantage of two properties that come from schematic abstraction. When you first shade, you are first working to try to communicate how the light interacts with the object, you try to communicate the shape using the shadow, and basically while it can be accurate even when you zoom out, you are focusing too much on the detail. What I think happens when you go ham with the shadow is that, it obscures all that detail and instead communicates the key point, that is, what is the simple shape and where is the light. From what I can tell, our brains just drop unneeded details, so you can inspect the hair and say, yess that is accurate, but when you are looking at the image overall (like in a game or when seeing it for the first time) unless you focus on the details, the brain drops it. The only time it does not is if smooth grayscale (photos or 3D renders, made gray, you can notice the details of the hair and lighting without having to actually try to focus or look for it). So I think the first benefit of this is that it uses abstract rhetoric to translate your image from "here are the details" to "this is a thing, there is light on the side of it" which is all the brain needs to know and it will fill in the rest. The second thing I think that helps make it pop is just that it adds more contrast (further improving clear rhetoric) and contrast just seems to work with stylized and cell-shaded work as far as I can tell. Basically, add more shadow (mimc what is going on with the side of the head/legs), and then make a copy and go crazy with more shadow, and see which you like better.
~ 2 'make interesting' is another trick. Basically adding a bit of detail to either make something more interesting, or harder/easier to read. If the detail is small, you need lots of it, this makes it hard to read and sometimes that is desirable. An example being hair with a 3D character, if all the strands are one color it looks really dumb and fake, you can see the hair, and you can spot how all the hair is just following the same path, but by making the hair color change randomly, it obscures the pattern (the shape of the hair) by making not as easy to see all the hairs as the same or unified. This often is what you want when painting, to give the details and to obscure what is really going on (I find impressionist art is the best kind of example, where you can look into a detailed image and see that it is not really that detailed). Or you can do the opposite, you can add a bit of detail, but make it big and obvious, ot communicate an idea. The best way I can describe this is, rather than have the hair all one color, you add bans of hair that are a different color. These shouldn't be small, they can be simple and thin, a single stroke that follows the curvature of the hair. It not only communicates the hair's shape (without the need for shading) but breaks up the monolithic base color to make it a bit more interesting. However, this may not reflect what hair actually looks like. but something to try.
~ 3 'glossy contrast only' is a trick that I see used a lot, and infact you are sort of doing it now. The idea is that, with the hair, you don't really shadow it (other than maybe the inside hair and the split at the top, which you are already doing both), but you make the base color a bit dim and you focus on shading it by using highlights mostly. When using highlights to shade the hair, you can exaggerate the contrast by making the highlights brighter, but to prevent them from being the dominate feature rather than a detail, you have to shade a bit differently, where you focus on the thin glint coming off a few strinds of hair, or making what looks like a streak with many (a jagged line perpendicular to the flow of hair). I would say right now, you are more, blotching the highlights on as if the hair is a 3D object with a surface, whereas hair's interaction is much more complicated so it is easier just to focus on glints. It is kinda hard to say with words, so I'll guess I'll try to draw it.
Tried to keep the shadows simple by making it one big shadow (and to get it to better mimic the shading of the legs, where it isto one side. Also may the shadow a bit warmer for the hair). tried to focus more on the highlight by making them brighter (and saying on the warm side), as well as simplified (2 big streaks). I used gimp, so if you want to play with the shadow and highlight colors, let me know.
As for code, It is my second most favorite thing, I could talk your ear off about it, but I have already written too much for a reply