
Removing p Tags from Contentful List Items
One of the quirks of rendering Rich Text from Contentful is that list items come wrapped in paragraph <p> tags. Fortunately, this is a simple one to resolve.
Articles
The guides are the practical part of this archive: working explanations for a specific web development problem, written to show the decision as well as the answer. The subject varies, but the aim is consistent: enough context to use the technique sensibly rather than copy it blindly.

p Tags from Contentful List ItemsOne of the quirks of rendering Rich Text from Contentful is that list items come wrapped in paragraph <p> tags. Fortunately, this is a simple one to resolve.

Contentful rich text and Gatsby work well together until code snippets enter the picture. This guide shows how to render inline and block code cleanly.

An exploration of array‑like objects in JavaScript. Explanations of their unique characteristics and how to navigate them easily in front‑end development.

Replace Gatsby's inlined production CSS with an external stylesheet by rewriting headComponents, with performance trade‑offs and historical context.

Based in Brighton, I bring more than 23 years of web development experience, clear communication, performance‑focused delivery and ongoing support.

Promise.allSettled in JavaScriptChoose Promise.allSettled() when every outcome matters. Handle fulfilled values and rejected reasons, preserve input order, and keep fail‑fast work distinct.
Although an extremely useful aspect of Gatsby, source maps cause a performance hit as well as leaving your source exposed. Here is how to turn them off!

next/imagenext/image explained with responsive sizing, lazy loading, layout shift reduction, and why image optimisation matters in real Next.js applications.

Dynamic imports and code splitting in Next.js explained with next/dynamic, lazy‑loaded components, SSR trade‑offs, and when splitting really helps.

getStaticPaths in Next.jsgetStaticPaths in Next.js explained with dynamic routes, pre‑rendered paths, fallback behaviour, and how static generation works for slug‑based pages.

getStaticProps vs. getServerSideProps in Next.jsgetStaticProps vs. getServerSideProps in Next.js explained with build‑time and request‑time data fetching, trade‑offs, and practical page examples.

Building custom hooks in React explained with reusable stateful logic, naming rules, composition examples, and why hooks share logic rather than state.

Static site generators explained in plain English, including how they compare with SSR, ISR and modern framework rendering choices.

Compare static generation and server‑side rendering in Next.js through freshness, request‑time data, performance, SEO, operational cost, and page intent.

urllist.txt from sitemap.xmlUsing PHP it is quick and easy to automatically generate your urllist.txt sitemap from your sitemap.xml file (for example, using gatsby‑plugin‑sitemap).

The differences between throttling and debouncing in JavaScript, including practical TypeScript code examples. Optimise event handling and improve performance.

Measure element dimensions in JavaScript with clientWidth, offsetWidth, getBoundingClientRect(), innerWidth, outerWidth, and responsive layout cautions.
