Experiments and essays on the modern web.
Hi I’m Maxime, and this is my blog. In here, you’ll find all the articles I wished I had when I was learning about web development, shaders, real-time 3D on the web, and more.
Each piece I write aims to dive deep into the topics I’m passionate about, while also making complex topics more accessible through interactive playgrounds, visualization, and detailed walkthroughs. My goal is to give you the tools and intuition to explore further on your own.
2026
On Rendering the Sky, Sunsets, and PlanetsOn Rendering the Sky, Sunsets, and PlanetsMay 12May 12Shades of HalftoneShades of HalftoneFeb 10Feb 102025
Field Guide to TSL and WebGPUField Guide to TSL and WebGPUOct 14Oct 14On Shaping LightOn Shaping LightJun 10Jun 10Speaking at Figma Config 2025Speaking at Figma Config 2025May 08May 08Post-Processing Shaders as a Creative MediumPost-Processing Shaders as a Creative MediumFeb 04Feb 042024
On Crafting Painterly ShadersOn Crafting Painterly ShadersOct 29Oct 29The Art of Dithering and Retro Shading for the WebThe Art of Dithering and Retro Shading for the WebAug 06Aug 06Moebius-style post-processing and other stylized shadersMoebius-style post-processing and other stylized shadersMar 26Mar 26Shining a light on Caustics with Shaders and React Three FiberShining a light on Caustics with Shaders and React Three FiberJan 23Jan 232023
Real-time dreamy Cloudscapes with Volumetric RaymarchingReal-time dreamy Cloudscapes with Volumetric RaymarchingOct 31Oct 31Painting with Math: A Gentle Study of RaymarchingPainting with Math: A Gentle Study of RaymarchingSep 12Sep 12Building a magical AI-powered semantic search from scratchBuilding a magical AI-powered semantic search from scratchJun 06Jun 06Beautiful and mind-bending effects with WebGL Render TargetsBeautiful and mind-bending effects with WebGL Render TargetsMar 14Mar 14Refraction, dispersion, and other shader light effectsRefraction, dispersion, and other shader light effectsJan 24Jan 242022
The magical world of Particles with React Three Fiber and ShadersThe magical world of Particles with React Three Fiber and ShadersNov 08Nov 08The Study of Shaders with React Three FiberThe Study of Shaders with React Three FiberJul 26Jul 26Building a Design System from scratchBuilding a Design System from scratchMay 10May 10Everything about Framer Motion layout animationsEverything about Framer Motion layout animationsMar 08Mar 08Building a Vaporwave scene with Three.jsBuilding a Vaporwave scene with Three.jsJan 25Jan 252021
Cubic Bézier: from math to motionCubic Bézier: from math to motionNov 02Nov 02First steps with GPT-3 for frontend developersFirst steps with GPT-3 for frontend developersSep 28Sep 28Building the perfect GitHub CI workflow for your frontend teamBuilding the perfect GitHub CI workflow for your frontend teamAug 03Aug 03Migrating to Next.jsMigrating to Next.jsJun 29Jun 29Static Tweets with MDX and Next.jsStatic Tweets with MDX and Next.jsJun 01Jun 01Advanced animation patterns with Framer MotionAdvanced animation patterns with Framer MotionApr 20Apr 20Scrollspy demystifiedScrollspy demystifiedMar 09Mar 09The Power of Composition with CSS VariablesThe Power of Composition with CSS VariablesFeb 02Feb 02My first failed SwiftUI projectMy first failed SwiftUI projectJan 19Jan 192020
Guide to creating animations that spark joy with Framer MotionGuide to creating animations that spark joy with Framer MotionDec 15Dec 15Using Shortcuts and serverless to build a personal Apple Health APIUsing Shortcuts and serverless to build a personal Apple Health APINov 02Nov 02SEO mistakes I've made and how I fixed themSEO mistakes I've made and how I fixed themOct 13Oct 13Going native: SwiftUI from the perspective of a React developerGoing native: SwiftUI from the perspective of a React developerSep 16Sep 16Build your own preview deployment serviceBuild your own preview deployment serviceAug 25Aug 25The little guide to CI/CD for frontend developersThe little guide to CI/CD for frontend developersJul 28Jul 28Immigrating to the USImmigrating to the USJun 26Jun 26The physics behind spring animationsThe physics behind spring animationsJun 23Jun 23Generate screenshots of your code with a serverless functionGenerate screenshots of your code with a serverless functionJun 09Jun 09How to use Framer Motion with Emotion styled-componentsHow to use Framer Motion with Emotion styled-componentsMay 12May 12Data Fetching with NextJS: What I learnedData Fetching with NextJS: What I learnedMay 05May 05Learning in publicLearning in publicApr 21Apr 21Fixing the dark mode flash issue on server rendered websitesFixing the dark mode flash issue on server rendered websitesApr 16Apr 16How to fix NPM link duplicate dependencies issuesHow to fix NPM link duplicate dependencies issuesMar 31Mar 31Running scheduled cross-browser end-to-end tests on Github CIRunning scheduled cross-browser end-to-end tests on Github CIMar 10Mar 102019
How I built my first custom ESLint ruleHow I built my first custom ESLint ruleNov 19Nov 19React Lazy: a take on preloading viewsReact Lazy: a take on preloading viewsSep 24Sep 24Automated UI accessibility testing with CypressAutomated UI accessibility testing with CypressJul 09Jul 09Building a GraphQL wrapper for the Docker APIBuilding a GraphQL wrapper for the Docker APIMay 28May 28Switching off the lights - Adding dark mode to your React appSwitching off the lights - Adding dark mode to your React appMar 05Mar 05Getting started with Typescript on GatsbyGetting started with Typescript on GatsbyFeb 05Feb 052018
Rebuilding Redux with Hooks and ContextRebuilding Redux with Hooks and ContextDec 04Dec 04Asynchronous rendering with ReactAsynchronous rendering with ReactNov 06Nov 06Using Flow generics to type generic React componentsUsing Flow generics to type generic React componentsOct 16Oct 16How to efficiently type your styled-components with FlowHow to efficiently type your styled-components with FlowOct 09Oct 09How I got started with Kubernetes on GKEHow I got started with Kubernetes on GKEJun 19Jun 19React sub-components Part 3: Whitelisting sub-components with flowReact sub-components Part 3: Whitelisting sub-components with flowMay 01May 01React sub-components Part 2: Using the new Context APIReact sub-components Part 2: Using the new Context APIApr 16Apr 16React sub-componentsReact sub-componentsFeb 26Feb 26Running Golang tests with JestRunning Golang tests with JestJan 10Jan 10