I maintain JohnRidesA.bike with a combination of two technologies:
For a basic site like this, Gatsby sometimes feels like using a sledgehammer to nail boards together. But despite being an overkill in some areas, it includes some great features, which is why I stick to it. It's flexible, hackable, and produces fast websites.
Gatsby and GraphQL don't always play nicely with Reason, unfortunately. Gatsby uses some compiler magic to generate pages and GraphQL queries, so code written in Reason usually causes problems for it.
- Gatsby generates its pages from JS files in its
/pages/directory, but its rules for page filenames differs from Reason. I created a
/re/pages/directory and wrote my pages in Reason. In
/pages/, I created files for each page that just import the JS output from the Reason files.
- Gatsby's strict about how you write your GraphQL queries, and Reason doesn't
play nicely with it. For each my queries, I wrote them in JS files and export
Gatsby.useStaticQueryfunctions. On the Reason side, I just needed to bind to those functions.
There may be other ways to make Gatsby and Reason work together, but following these patterns seems to work nicely. On the Reason side, I had to write some functions to turn the queries into data useful for my Reason components, but that wasn't difficult.
Browse the source code here on GitHub. If you have any interest in exactly how I implemented a feature, the answer is probably there.