You could rate-limit at a higher limit based on username as well.
I guess a potential problem with that however is the login-blocking of high profile accounts with known usernames.
Maybe only those accounts could be solved by a captcha to bypass the login-block. And if there is a solution like that, login-blocks will basically become useless & therefor also disappear.
It's honestly not as limiting as you might think.
Readability has definitely improved a ton since switching.
Of course we don't count every bracket or blank lines. Only the rows with any logic or assignment.
And yes, I agree, there are occasions where the complexity goes up.
If there is a good argument for that, then we of course go with it.
But so far, almost everything anyone in our team has made, has been improved by rewriting it to something that works well in 4 lines, be it using polymorphism, object oriented, or functional.
I can vouch for Clean Coder. We watched them in our company.
It's a small dev team so we took the time together.
Afterwards we implemented a 4-line rule amongst other things.
We don't always hold ourselves to it, sometimes 5-6 line functions make sense, but we strive toward 4. Sometimes it's as easy as breaking code out into a new function, but sometimes you just simply have to create a class for it. That way a lot of complicated code suddenly becomes very easy without much effort.
The style I like to use is the css/scss webpack loader.
Basically, you import a .scss file into your .jsx.
The scss is compiled and at the same time imported into .jsx as a hashmap where the key is your scss class-name & the value is the compiled class-name. I think this sounds like what you're looking for since it keeps jsx & css in their respective files but still being coupled into their own component which is easier to reason about.
It doesn't help that their status page is also hosted on IBM Cloud.