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

Garmin Epix daily workout suggestions

Monday, January 29, 2024

If you manage to disable the suggested workouts feature on your Garmin Watch, then there is a quick way to re-enable it. Go to your "Race calendar" > Select your event > Click start/stop button and an option for "Daily suggestions" will appear. You can c...


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...


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