I'd like people to start more readily differenciating between web apps and documents (dynamic or not). I think we're at the point where it's obvious that there is a difference between the two and it's just as obvious requiring JS for web apps is completely acceptable.
I think you are getting at an important distinction, but you're confused about what it actually is. The important question is, "What is the goal of this site? What is the best way to still meet that goal without JS?"
For documents, the answer is probably "provide the information", and that can trivially be accomplished without JS.
For some excruciatingly dynamic web apps, the answer might be "use someone else's product" or even "it can't be done".
So look at the middle-ground in terms of functionality, then. If a feature cannot be provided without JS, then don't provide it to those who don't have JS and move on. If the feature is not critical to other parts of the app, don't make those other parts depend on it.
This always seems to be a controversial discussion yet all it is about is a few well-understood rules:
- Manage your dependencies
- Don't break things on purpose because you don't like the user's setup
- Don't feel obligated to fully support platforms you have no desire of supporting
The problem is keeping your code DRY when you have a mixture of two languages and execution environments. Inevitably you will have to choose which frameworks you want to use , picking two heavyweight frameworks for client and server will inevitably mean that they fight for control of your application if you want to use both to the fullest because each provides their own router and templating etc. So you need to decide which is going to drive your application.
>heavyweight frameworks for client and server will inevitably mean that they fight for control of your application
This is completely true, and I've found things to go best if I do one of two things:
1) Do a server side (template driven) app, using a server framework like Flask, ExpressJS, or else just Golang, with very light Javascript on the client, maybe using JQuery and Bootstrap for Javascript or else just pure Javascript. Minimal progressive enhancement.
2) Do a client-side app using a client framework like AngularJS or Backbone, or ReactJS, and build out a RESTful backend on the server side (or use Firebase or Parse.com). I even do authentication logic on the client now, since it's possible to do so securely. Not possible to use without Javascript.
In between these two extremes is a no man's land, particularly if you use big client and server frameworks (as you say pointed out). In my experience, such an approach can make it extremely difficult to build a coherent app structure.
Well, treat each feature the same way, really. Offering a less comfortable but still functional experience is precisely what "progressive enhancement" is about. I agree that for many projects, at some point, there is functionality that can't be reasonably made accessible without JS, given the constraints of the project. I do think that many people seem to be too quick to go there. I don't think we have any major disagreement.