The most interesting piece of our stack is that we use an isomorphic boilerplate for all of our project, but we'll go ahead and talk a little bit about all of the pieces of the puzzle. If you only care about what stands us apart from most development companies then you can skip most of this and head to both the "Node" and "Isomorphic" section of the article.
Redux is the tool we use for state management. Once you get past the initial roadblock of understanding how to use it it becomes incredibly useful for simplifying state management. Instead of passing props from all around your application your entire state is managed in one place called the store. This makes things far easier to work with. On top of that, I've made a choice to further simplify Redux by creating a single "setVal" action as opposed to multiple different actions for every component. I simply pass "setVal" a key and a value and it will set the value of any property in the entire application. This works for 99% of use cases. This has made things far easier to work with and saved quite a bit of time. The only potential pitfall I've seen so far is that if I have too many variables, then a single reducer may get crowded with variable making it difficult to debug. However, this hasn't been an issue. Combining this with React has made for a great development experience.
MongoDB has been the go-to database for a while now. We plan to try out a different database in the near future, but for now, MongoDB has worked quite well for our projects.
Webpack is really useful for building complex front end applications. We break the front end into multiple components and import those components inside parent components. Webpack is what makes this possible on the front end, saving use lots of time.
We use lots of other packages as well like Passport, Mongoose, or Socket.io, but getting into all of our setup would take quite a long time to explain. Expecially since many of the other packages that we use depend on the type of application that we are building.
This framework is what distinguishes our company from the rest. Most companies use a framework that renders either from the server side or client side but not both. A framework that renders from the client side means that someone that uses that website has to make a network request for every page that they view. This is slower than projects that render from the client side, but the benefit is that search engines can easily find every single page. A project that renders only on the client side means that it will be faster, but Google and other engines cannot easily index every page leading to poor SEO. The benefit of an isomorphic framework is that we can both render new pages instantly and Google is able to index every single one of our pages, leading to a more profitable website.
A comment and sharing system will be added in the near future