Hey, I'm Matt Bessey, a full stack software engineer based in Bristol, UK.
Recent Posts
-
Github Releases are no match for CHANGELOG.md
I have noticed a trend recently of library authors abandoning their CHANGELOG.md files, in favour of Github Releases.
For a library author, the choice is understandable. A Github Release message contains much the same information as a changelog, so why duplicate effort and risk having no source of truth by maintaining both? But there’s a pretty big problem with this: Github Releases today sucks UX wise for your library’s users.
TLDR? Get the best of both worlds by generating your changelog from your Releases with rhysd/changelog-from-release!
-
Why, after 6 years, I’m over GraphQL
GraphQL is an incredible piece of technology that has captured a lot of mindshare since I first started slinging it in production in 2018. You won’t have to look far back on this (rather inactive) blog to see I have previously championed this technology. After building many a React SPA on top of a hodge podge of untyped JSON REST APIs, I found GraphQL a breath of fresh air. I was truly a GraphQL hype train member.
However, as the years have gone on and I have had the opportunity to deploy to environments where non functional requirements like security, performance, and maintainability were more of a concern, my perspective has changed. In this article I would like to take you through why today, I would not recommend GraphQL to most people, and what I think are better alternatives.
-
Server Side Rendering for React + Apollo GraphQL Client
In a previous post I talked about how I set up server side rendering of React components in Rails with Hypernova. I went on to build a complex Ruby based GraphQL data pre-fetcher because I could not work out how to do asynchronous pre-fetching of data in Hypernova alone. Well, it turns out though unclearly documented, its actually quite easy to do async pre-render work in Hypernova. That means we don’t need to do the crazy things I was doing in my previous post, and can instead pull off my dream: server side rendered React, served by the back-end language / framework of your choosing.
I’m going to assume you’ve already set up Hypernova with Rails (or the back-end of your choosing). In this post, I will cover:
- Understanding how Hypernova’s renderer works
- Extending it to support pre-fetching GraphQL data with Apollo Client
- Extracting this GraphQL data for rehydration on the client’s Apollo Client
- Server side rendering your component with this pre-fetched data included