Carl Topham

Fullstack engineer

I’m a senior developer with 15+ years experience in front and backend development. Working with languages from TypeScript & Node to Python and PHP. I have a deep understanding of modern web technologies and a passion for creating dynamic user interfaces, with robust backends and services.


Recent articles

A guide to GROQ

Saturday, August 5, 2023
GROQ (Graph Relational Object Queries) is a query language that was created by Sanity to query CMS data. It’s a flexible query language and the use of projections makes it a powerful tool to construct complex and efficient data queries. GROQ vs. GraphQL ...

GROQ vs GraphQL

Friday, August 4, 2023
While GROQ is nominally similar to GraphQL, there are subtle differences. Here's a quick run down of the similarities and differences, so that you can understand the reasons for GROQs existence, and some of it’s use-cases, before using it yourself Both us...

Simplify GROQ query with optional fields

Sunday, May 21, 2023
In working with Sanity and GROQ, there might be instances where you need to filter data using an optional field, and want a default value to kick in when null values are returned. For instance, consider an __i18n field added after a significant amount of c...

Filtering data within a GROQ query

Saturday, May 20, 2023
When dealing with multiple sets of similar data, it's not uncommon to encounter overlapping filters. Let's say you need to pull up all your articles, then categorize them into two subsets: English and French. You might think you need three separate queries...

GROQ webhooks in Sanity

Saturday, May 6, 2023
The webhooks within Sanity CMS offer an amazingly powerful way to send data to 3rd parties when changes to content occur. However, the webhooks often require extra data retrieval to ensure the consuming service has all the necessary information for appropr...

Recent projects

Migrate carl-topham.com from Gatsby to Next.js

Rebuild my portfolio site (carl-topham.com) in Next.js, migrating from Gatsby


Running kit bag

Interactive kit bag checklist app to ensure that I always have the right running kit for training, races and all weather!


SmartSave & LiveLend WebApps

React.js Redux WebApps using REST APIs with Auth.


Chord generator script

Generates note combinations for different keys & chords


Advanced Strava Stats

Sync your Strava data and analyse it in extra ways than the official app. React, Redux, Saga, Axios & D3