I agree with @GlenH7, but figured I'd add to the conversation by offering you the stack I use for my web/conversion projects (since many he mentioned match my list).
This answer is broken up into 2 parts.
Part 1 - The Stack I use:
Client Side:
- HTML5
- JavaScript
- CSS3 (via LESS)
- AngularJS
- ocLazyLoad for Angular
- ui-router for Angular
- REST/ODATA
- BreezeJS (client side - used for data pulling)
- SignalR (client side - used for data pushing)
- Bootstrap (responsive layout, quick styling)
- Component Libraries - AngularUI and KendoUI
Midtier:
- C# / ASP.NET
- MVC 5+
- WebAPI 2+ (ODATA Web API for our web services)
- EntityFramework 6+ (ORM to make database access standardized)
- MS Identity 2+ (Authentication and Authorization)
- BreezeJS (server side)
- SignalR (server side)
Backend:
Development, Support and Testing Tools
- Visual Studio 2013 (Development IDE)
- GIT (Source Control)
- LESS (see CSS3 above)
- Gulp (Build scripts and automation)
- Web Essentials for Visual Studio (Tools to make development easier - like LESS)
- Bower (Package management)
- PhantomJS (Testing)
There are many reasons why we chose what we did for our stack. For example, BreezeJS works well with Entity Framework, which works well with SQL Server. Take one away and you lose much more than just the single item. So it's up to you as @GlenH7 mentioned to determine what works best for you.
But believe me, it took a while to whittle this list down as much as we did.
What we still have not standardized on, is a reporting engine that won't break the bank.
There are several great libraries to generate DOCX, XLSX and PDF files, but I felt I wanted more than that. Company offerings I've looked at so far (in no particular order): stimulsoft, telerik, gemboxsoftware, devexpress, componentone
Part 2 - Answers/Comments to your questions:
"...it will need to look like and work like the original application as much as possible..."
First it's important to remember that desktop apps and web apps will look and feel different in most cases. But without seeing screenshots, I can only assume you mean a generic Windows look and feel.
For this, you might want to look at something like ExtJS since they offer a skin and component set that (to me) looks closer to a Windows based application. Why didn't I use ExtJS? Probably because it didn't feel "Angular'ish" enough to me. Kendo was "close enough" to a desktop look for me and my clients and they have official Angular support (which is important).
"...Delays of 1 to 3 seconds to push an HTML5 form to the client are probably not acceptable..."
Comparing load time of a pre-installed app to a web app isn't quite fair, however with caching and pre-loading you could make it rather close (as long as the connection between the user and the server is good). A benefit of the web is to load things only as you need them and have access to them, so I'd look at it as a benefit.
Generally SPA apps are loaded all at once, then only data is transferred back and forth.
Using something like ocLazyLoad, you can "dynamically load" in new html/javascript/css files as the user accesses them for the first time (without leaving your SPA). Once a "page/module" loads, it will be cached and won't have to go to the server again. But if you can't have any delay when using the web app, then you'll take a big hit up front. If you are ok with that, then you should be fine.
You could also start up the app with a default module (for example a Dashboard) and in the background start downloading the modules you think they might be requesting (or just load them all) That handles the User Pacification problem but it might feel a bit sluggish for a few seconds while everything continues to load.
I'd also look at browser local storage for data caching (in BreezeJS as Glen mentioned) - it should make the initial load time seem quicker to the user, and you could refresh the data in the background after the app starts.
Well, hope that helps. Let me know if you have any questions or need more detail. Good luck in your endeavor!