Websites used to be clunky.

There was a time when people were ok with waiting (and waiting and waiting) for a web page to load over a slow modem. Then they would click on what they wanted and wait some more. Waiting was just part of using the internet. That was the past, technology has improved. Your customers are no longer content to wait.

Javascript development used to be awful.

Every browser was different. Debugging tools were non-existent. Javascript didn't have a good set of libraries and frameworks to keep code organized. After a development went through a few iterations, no one was even sure what all the javascript did anymore. If something was broken, it was impossible to figure out why. And if you did fix it, odds are you broke something else in another browser.

New frameworks have fixed this.

It started when jQuery abstracted away the browser specific particularities. Since then, more modern frameworks have taken it to a new level. AngularJS, Ember.js, and Backbone.js organize code and offer features that have changed browser development from a parlor trick into a serious UX tool.

Does this break the web's rules?

Some people argue with this approach. This isn't the way the web was "designed to work." Well, of course not. The web was designed in 1989 to share research.Progress has always come by looking at what something can do, not what something was designed to do.

You can use javascript to provide a richer experience for your users. You can use modern frameworks to make that code easier and faster to write and maintain. Why would you turn away from that? Surely not because someone didn't think of it 25 years ago when they wanted to share some documents.

What is the alternative?

You could choose a more standard web framework, where html is generated on the server instead of the client. Unless you're willing to stay in the 90s, (which I don't recommend if you want users), you are going to start adding javascript enhancements. First: here, then: there, pretty soon: everywhere. Before long, you are also generating much of your html in the client.

As you look to make a better user experience, the amount of javascript on your website is only going to expand. Even if you don't plan on making a client-side driven site, one day you'll wake up and realize that 80% of the code in your Rails (or Spring, or whatever) site is actually javascript. Use a framework and write modular code now to prepare. Simple little enhancements have a way of evolving over time.

If you're going to end up with a javascript website anyway, you might want to just cut to the chase. Why write a server-side template if you are just going to reimplement it on the client?