46 karma · joined December 1, 2014
I would suggest you add some sort of share button, for bragging and viral spreading. And maybe some sort of local state for tracking streaks.
* If some of the code is likely to be reused with an associated website I would go for Electron. Using ReactJS.
* If an associated mobile app is also possible, I would take a look at React-Native, which have some embryonic desktop technology counterparts. This option can be combined with a webview.
* Worth also looking at Xamarin, especially if there's existing investment and skills in .NET (e.g. existing Windows app being migrated).
That said, assuming a greenfield the best case has to be to use tabs. This way if somebody has a preference to small indents then they can configure the TAB to render as 2-spaces - it becomes a render issue.
So, use a modern tool and it's a moot point.
P.S. not sure why Silicon Valley's Richard started talking about 8 space tabs. That would be crazy. The only time I've seen that is in a proportional font in a word processor.
I've used both Angular, played with Angular 2 and React. Plus many other MVC (and MVVM) libraries. I would say that the state managed React model is far more scalable than the traditional MVC 'observable' model. Sure, you can use immutability in Angular-2, but with React you have an architecture built around simplicity with the need to integrate different artifacts.
JSX helps React to scale because it extends type safety of TS or Flow into the UI DSL. JSX allows the developer to deal with the DOM as an object graph expression, right in the language. From a strongly typed perspective, this works much better than templates or embedding code into HTML.
* Fix NPM and make it immutable. If there's a legal problem allow a package to be flagged with a warning and redirected to its new name.
* Use bundleDependencies in npm
* and maybe even back-up your entire code directory
If you think about the DOM as the projected state of an application, immutable data structures allow you to very simply define a functions that perform the transformation from application state to the GUI data structures (e.g. the DOM). If the state mutates this can cause cascading state changes that make this function much harder to reason about.
I haven't tried it yet, so I may be wrong.