Wit.io is my personal site and portfolio. I use it to experiment with new technology. At various points in its history, the app has been a:
- Simple static site backed by a Git repository
- Sinatra app
- Full Rails app with OpenID authentication
- Clojure API layer with a Marionette rendering system
- Node API layer with a React rendering system and Redux state management
- Fully modular CMS, backed by Wagtail
I used this site in 2014 and early 2015 as a way of dipping my toes into React, flux, and isomorphic apps. Though I’ve converted it to a CMS now, I’ve taken the techniques that I honed here and applied them to other applications.
As a React app, technical features included:
- Isomorphic. The app can be rendered on the server (for SEO purposes) or on the client (for progressive rendering, animation, and to avoid page reloads during navigation).
- Webpack pipeline. Webpack is powerful, and hopefully it’s here to stay. Webpack is fast, flexible, and can handle most (if not all) client-side assets.
- Babel. Babel gives me the power of ES6 and seamless ReactJS parsing.
- React. The future of the view layer.
- Redux. My favorite implementation of Flux as a data layer (and a great complement to React).
- Modular CSS. One of the toughest parts of dealing with Web components is figuring out how to componentize CSS (which naturally leaks or cascades downwards unless you stop it). Over the last decade of honing this website, I finally mastered componentization of both Web modules and CSS.
I’ve been coding for more than 14 years, and the React stack is the first I’ve felt actually supported my tendency to experiment and prototype. (So I now use it for most new experiments and apps, just not this site.) With React and Redux, it’s quick to develop interactivity and is great for teams. There is a learning curve, but it’s much less steep than for Angular or Ember (in my experience).
Some of my next projects may leverage Clojurescript on top of React, or Elm, to make that process even faster.