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

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

Tuple to Object - TypeScript Challenge Explained

Monday, March 13, 2023
My solution to the Tuple to Object TypeScript Challenge as part of my journey to Understanding the TypeScript Challenges. Given an array, transform it into an object type and the key/value must be in the provided array. Solution Loop over the values in ...

Readonly - TypeScript Challenge Explained

Sunday, March 12, 2023
My solution to the Readonly TypeScript Challenge as part of my journey to Understanding the TypeScript Challenges. Given a type T, the utility should set the readonly keyword for all properties. Solution Explanation { } return an object/record type re...

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