Max Schmitt

Blog

Here is where I document things that I learn and workarounds that I find in my daily work as a web developer.

2024

  • React Breakpoint Props: How Simple Components Become Complicated due to Server-Side Rendering

    April 12 2024

  • VS Code: 3 Ways to Navigate Long Test Files

    March 29 2024

  • Dokku: How to host Puppeteer + Node.js apps

    March 22 2024

  • Next.js: How to Mock Server-Side Requests Using Playwright

    March 15 2024

  • Next.js: How to add a Contact Form (App Router)

    March 7 2024

  • Next.js: How to add a Contact Form (Pages Router)

    March 1 2024

  • Next.js, Sanity & TypeScript: A Setup That Works

    February 23 2024

  • Sanity: How to Edit Documents as JSON

    February 16 2024

2023

  • How Plausible Analytics Keeps a Tiny (< 1KB) Tracking Script

    October 26 2023

  • How to fix Sanity Error: Uncaught error - Could not resolve jsonType of undefined. No parent type found

    October 25 2023

  • Next.js: The Easiest Way to Create an API Proxy (2023)

    September 27 2023

  • Contentful: How to Find Unused Types

    August 17 2023

  • Next.js: How to Get and Set Cookies (2023)

    July 11 2023

  • A Free Remote Pair Programming Solution

    May 24 2023

  • Next.js: How to Show the 404 Page (App Router)

    May 16 2023

  • Next.js: Integrating Contentful and TypeScript (App Router)

    May 14 2023

  • useControlledProps: Make any React Component Controlled/Uncontrolled

    March 23 2023

  • Behind the Scenes of my new Personal Site

    March 22 2023

  • Next.js: Page Transitions with Framer Motion

    March 2 2023

  • Building a Responsive Website Tester with Iframes and React

    February 28 2023

  • Next.js: Using HTTP-Only Cookies for Secure Authentication (2023)

    February 28 2023

  • Next.js: How to Set Meta Tags

    February 27 2023

2022

  • 8 Tools to Run a Freelance Web Development Business

    December 19 2022

  • Extending Playwright's Built-In Test Method for Super-Clean Test Setups

    December 18 2022

  • React: How to Create an Autogrowing Textarea

    December 18 2022

  • Making the Cakedesk App Icon

    July 27 2022

  • Introducing Cakedesk: A Desktop Application to Manage your Freelance Clients, Invoices and Proposals

    July 17 2022

  • Error reporting with Rollbar and Next.js

    March 29 2022

  • React: Making a Juicy SVG-Powered Like Animation

    February 18 2022

  • React: Preventing Layout Shifts When Body Becomes Scrollable

    February 15 2022

  • React Leaflet: Opening Popups Programmatically

    February 13 2022

2021

  • Padding Strings in JavaScript: padLeft & padRight

    September 5 2021

  • React: Implementing Material Design's Floating Labels

    September 4 2021

  • React: Using Refs in Loops

    August 17 2021

  • Node.js: Validating Shopify Webhooks with Express

    July 16 2021

  • Git: Using Patch Files to Share Code Changes Without Branches or Commits

    July 16 2021

  • Creating React Components that can be Controlled and Uncontrolled

    July 15 2021

  • macOS: How to get your Local IP Address

    March 28 2021

  • How to open a localhost website on iPhone / iOS

    March 28 2021

  • How I Create Client Invoices from the Command Line using Node.js and Airtable

    March 18 2021

2020

  • Mongoose: Instantiate Document from Schema

    November 30 2020

  • Cypress: How to interact with a database during your tests

    October 27 2020

  • Cypress: Writing and organizing test setups with cypress-routines

    October 25 2020

  • How to close all tmux panes at once

    October 20 2020

  • How to speed up your development workflow with tmux scripts

    October 20 2020

  • Next.js: How to Redirect from getInitialProps

    October 1 2020

  • 5 Qualities to look for when hiring a freelance web developer

    September 30 2020

  • Next.js: How to show the default 404 page

    September 18 2020

  • How to deploy Sanity from GitHub Actions

    August 20 2020

  • UI Detail: Highlighting the last active item in a list

    August 20 2020

  • Bold active-states without layout jumps

    August 15 2020

  • XML RSS feeds with Node.js

    June 10 2020

  • Deeply nested subcommands in Node CLIs with Commander.js

    June 7 2020

  • How to generate a sitemap.xml with Node.js the simple way

    June 1 2020

  • How to use an SSH key inside GitHub actions

    May 17 2020

2019

  • How to fix "Error: spawn node ENOENT" when using child_process in Node.js

    July 17 2019

  • Writing a static site generator with MDX & Webpack

    July 15 2019

  • CSS: Watch out for 100vh height in mobile browsers

    July 5 2019

  • Testing mobile, tablet and desktop devices with Cypress

    July 1 2019

  • Local subdomains on macOS with Dnsmasq and Caddy

    April 8 2019

  • How to deploy a Next.js app to Dokku

    January 20 2019

2018

  • Tutorial: How to Deploy Apps and Websites with Dokku

    August 21 2018

  • Tutorial: How to Write Integration Tests for REST APIs with node.js

    August 15 2018

2015

  • When sourcing `.bashrc` in a Vagrant provisioning script doesn't work

    July 27 2015

  • How to create an object from an array in JavaScript

    July 16 2015

  • How to persist folders and files with dokku and docker-options

    July 10 2015

  • Getting missing duplicate columns in Knex.js

    July 3 2015

  • How to write your gulpfile using ES6

    July 1 2015

  • Compiling your ES6 command line apps to work with node.js

    April 26 2015

  • Making your io.js command line apps compatible with node.js

    April 25 2015

  • How to add an Istanbul code coverage badge to your GitHub repository

    April 24 2015

2014

  • Using Angular and AngularUI with Browserify

    May 29 2014

  • 5 must-have Atom packages / plugins

    May 8 2014

  • Tutorial: Gulp and Browserify without the gulp-browserify plugin

    May 7 2014

  • Tutorial: CSRF for Express 4.x

    April 30 2014

  • How to make an object inherit from a class in JavaScript

    April 10 2014

  • node.js FTP error: ECONNREFUSED

    April 4 2014

  • gulp.js Tutorial: SASS, Browserify, jade and workflow optimization

    March 27 2014

  • From Wordpress to Octopress to DocPad

    March 13 2014

  • gulp-watch and watching new files

    February 27 2014

  • Testing Web Workers with Jasmine and gulp

    February 5 2014

  • Prevent gulp.js from crashing on error

    January 22 2014

2013

  • setInterval / setTimeout slows down on TAB change

    November 28 2013

  • How to Inherit Events from Backbone Views

    October 28 2013

  • pozzle: A minimalistic Puzzle Game that changes the Way you think

    October 5 2013

  • jQuery Component for Crafty

    August 27 2013

  • How to determine the width and height of SVG-text before rendering with Raphaël

    July 3 2013