Cool stuff!<p>In a somewhat similar vein, I've been working on a static site generator (like Jekyll) that uses React/Redux instead of a templating system: <a href="https://github.com/thomasboyt/peridot" rel="nofollow">https://github.com/thomasboyt/peridot</a><p>It actually is very similar to any other isomorphic React app, except instead of hosting an API, it simply renders each page out to a file, as well as a JSON version of each post that acts as the "API" used to retrieve further pages from the frontend app. There's an example site here: <a href="http://loudplaces.disco.zone/" rel="nofollow">http://loudplaces.disco.zone/</a>
Couple of requests<p>1. Add comments<p>There's a lot going on here and very few comments<p>2. In the README point out the entry point of the code<p>There are a lot of places one could start reading, give users a hint as to the best place to start.<p>Your app template.html points toward a /js/app.js file which doesn't exist in the source, which is fine, but if I'd like to read before I run a pointer would be helpful!
Out of curiosity, why didn't you use Immutable.js for your Store? You thought about it and chose a different path, or you just didn't consider it at all?
Nice. I love Redux + React so much, so I appreciate any effort into making people more aware of it.<p>I was really excited that you found a way to return proper 404's! <a href="https://github.com/GetExpert/redux-blog-example/blob/master/app/server.js#L50-L52" rel="nofollow">https://github.com/GetExpert/redux-blog-example/blob/master/...</a><p>There are a few things I would have done differently though. Check out:<p>- this sample project I made. it's not ideal though and I have learnt a since I made this, but it has a few good ideas <a href="https://github.com/joshhunt/reactapus" rel="nofollow">https://github.com/joshhunt/reactapus</a><p>- the official 'real world' example <a href="https://github.com/rackt/redux/tree/master/examples/real-world" rel="nofollow">https://github.com/rackt/redux/tree/master/examples/real-wor...</a><p>Suggestions:<p>- Consider putting client, server, and universal code into seperate folders like in my example - it makes it easier to understand what code is executing where.<p>- Move routing into a 'universalRouter.js' which is the one place that performs routing and returns the root component. Both the server and client use this. <a href="https://github.com/joshhunt/reactapus/blob/master/src/app/universalRouter.js" rel="nofollow">https://github.com/joshhunt/reactapus/blob/master/src/app/un...</a><p>- Actions should be very simple, return basic serialisable objects, and be super easy to test. Don't make API calls directly in actions. Redux has fantastic middleware to make this easier for you. I do it in a basic way in my sample project, but the redux real-world example does it much better. Check out <a href="https://github.com/rackt/redux/blob/master/examples/real-world/actions/index.js#L38" rel="nofollow">https://github.com/rackt/redux/blob/master/examples/real-wor...</a><p>- Consider using ESLint. Airbnb has a premade config that does a pretty good job of providing best practices. <a href="https://github.com/airbnb/javascript/tree/master/linters" rel="nofollow">https://github.com/airbnb/javascript/tree/master/linters</a> Beware, it's going to flag a whole bunch of stuff in you project, but you'll get much better code out of it.
Really liked the auth workflow that was set up here: <a href="https://github.com/GetExpert/redux-blog-example/blob/master/app/routes/index.js" rel="nofollow">https://github.com/GetExpert/redux-blog-example/blob/master/...</a>. I had a hard time finding good examples recently and a LOT of trouble finding good examples w/ react-router's 1.0 branch, so this is very much appreciated :-)