GRRR text logo
  • Articles
  • About us
  • Open Source
  • Jobs

GRRR's tech blog

Hey! We're GRRR, a Creative Digital Agency based in Amsterdam. Welcome to our tech blog, where we share our thoughts and experiments.

Filter by category:

  • All
  • Accessibility
  • Back-end
  • DevOps
  • Front-end
  • React
  • Tooling
  • UX
  • February 23, 2023

    Domain redirects for CloudFront

    How to redirect domains with CloudFront Functions.

    5 min read
  • February 7, 2023

    Using the Next.js out folder in Netlify causes an error from today on

    Here's how to fix it.

    3 min read
  • January 31, 2023

    Reduce static page size with smart Next.js components

    Improve performance by trimming your Next.js payload.

    8 min read
  • December 20, 2022

    Slack messages from GitHub workflow

    How to send a message to Slack without dependencies.

    7 min read
  • November 30, 2022

    Melkweg.nl - Serving over 30,000 web pages blazingly fast.

    An insight into how we made the new website for the Melkweg fast and snappy.

    8 min read
  • November 6, 2022

    Change cache driver for Laravel Task Scheduler onOneServer

    With onOneServer you can prevent jobs from executing on multiple workers. But how to use another cache driver?

    3 min read
  • October 20, 2022

    How to manage staging and production environments in Netlify

    Organise your environments like a pro.

    7 min read
  • September 26, 2022

    event.preventDefault does not always prevent what you might expect

    The weird world of event.preventDefault and React checkboxes

    6 min read
  • August 24, 2022

    The smallest PHP version switcher

    A really quick PHP version switcher built with Homebrew

    4 min read
  • August 9, 2022

    Deploying your PHP application to an Amazon Auto Scaling Group with Deployer

    This article tells you how to deploy your PHP application to an Amazon ASG, using Deployer.

    8 min read
  • July 25, 2022

    How GRRR uses GitHub Actions

    GRRR moved to GitHub Actions, and we happily shed light on how we arrange workflows.

    8 min read
  • June 24, 2022

    Dutch PHP Conference

    Conference report: our notes and takeaways from the Dutch PHP Conference.

    6 min read
  • June 10, 2022

    CSS DAY — day 2

    Conference report: our notes and takeaways from our visit to CSS day.

    20 min read
  • June 9, 2022

    CSS DAY — day 1

    Conference report: our notes and takeaways from our visit to CSS day.

    13 min read
  • May 2, 2022

    Statically analyze your Laravel 9 application with PHPStan

    This article shows how to enrich your Laravel application with type hints so you can reap the benefits of static analysis.

    12 min read
  • April 25, 2022

    How to set CORS headers on your S3 bucket

    CORS rules can be finicky. This post is a quick reminder of how to open up your bucket using CORS.

    5 min read
  • March 31, 2022

    Why use refs in React

    You can use the querySelector in React but it's better to use refs. Why is this?

    7 min read
  • February 27, 2022

    How to rename your "master" branch to "main"

    In the spirit of inclusive language, we happily follow the trend of moving towards the name "main" instead of "master" for our default Git branches.

    6 min read
  • January 19, 2022

    Using media queries to improve accessibility

    Sometimes you're faced with designs that are not optimal in terms of accessibility. Media queries to the rescue!

    5 min read
  • December 7, 2021

    GitHub Actions and no AWS credentials

    GitHub Actions recently made OpenID support available. This article explains how to use it.

    6 min read
  • November 29, 2021

    Making TypeScript's Partial type work for nested objects

    The Partial type is a great idea, but doesn't work for nested objects. This article will show you how to fix that.

    8 min read
  • November 1, 2021

    4 reasons to not use a carousel

    Why do we think carousels are bad? Let's go over some serious considerations to be aware of when adding a carousel to your website.

    8 min read
  • October 6, 2021

    Performing A/B tests on static websites using Cloudfront and Lambda@Edge

    How do you perform A/B experiments when your site is static?

    9 min read
  • September 20, 2021

    How to use OpenVPN in GitHub Action workflows?

    We love GitHub Actions and a client requires a VPN connection to deploy. Let's dive in!

    7 min read
  • July 30, 2021

    How to ensure only a single model has a certain value in Laravel?

    What if only a single record in your database is allowed to have a certain value for a given property?

    6 min read
  • February 2, 2021

    Validating a multi-column unique key in Laravel Nova

    How do you incorporate the rules for a unique key consisting of multiple columns in Laravel Nova?

    6 min read
  • December 11, 2020

    Embedding content through an iframe

    What are the risks when you embed content through an iframe.

    6 min read
  • June 5, 2020

    How to create a WhatsApp button?

    An overview of WhatsApp button implementations.

    4 min read
  • May 20, 2020

    We're hiring!

    GRRR is looking for a front-end developer.

    3 min read
  • March 17, 2020

    Programmatically switch dark mode in MacOS

    An epic weapon in the epic battle between light and dark!

    6 min read
  • February 13, 2020

    Add locales to your Alpine Linux Docker image

    Alpine doesn't support locales out of the box, with musl-locales it's possible to add locales.

    5 min read
  • January 23, 2020

    How to add Dark Mode styling to your website

    Add Dark Mode styling with a new CSS feature.

    5 min read
  • January 8, 2020

    Simply Static Deploy: static site generator and deploy plugin for WordPress

    Generate a static version of your WordPress site and deploy it to an AWS S3 bucket.

    8 min read
  • December 3, 2019

    Case Study: Serverless architecture for The Ocean Cleanup

    Migrating from a dynamic monolithic CMS approach to a statically hosted WordPress site with microservices.

    10 min read
  • October 10, 2019

    Guidelines for Dutch governmental websites

    Make your governmental website comply with the Dutch guidelines.

    10 min read
  • September 25, 2019

    Our WordPress Pro setup

    A WordPress boilerplate, including dependency management, multi-environment deployment strategies and front-end tooling.

    9 min read
  • June 17, 2019

    Redirect www to non-www using CloudFront and Lambda@Edge

    Redirect your static site to a canonical hostname using Lambda@Edge.

    8 min read
  • May 25, 2019

    How to use JavaScript getters and setters

    A quick primer on JavaScript getters and setters.

    6 min read
  • May 8, 2019

    Speedup Travis CI for PHP apps

    Speed is vital when using CI. These are some tips to make Travis CI not the bottleneck.

    4 min read
  • April 17, 2019

    Trap keyboard focus in an accessible element

    A small function to trap keyboard tab focus with JavaScript when building accessible modals or dialogs.

    5 min read
  • March 29, 2019

    Create a DOM node from an HTML string

    A comparison of different methods, including security risks, HTML restrictions and a performance benchmark.

    6 min read
  • March 13, 2019

    Introducing Hansel, runner of handlers and enhancers

    Hansel packages the way we bind behavior to a page.

    6 min read
  • February 22, 2019

    A Sass snippet for handling same-color block margins

    A simple solution for handling margins for content blocks with the same background color.

    5 min read
  • February 18, 2019

    Why you shouldn't open links in new tabs

    Why using target="_blank" can cause accessibility issues.

    5 min read
  • November 11, 2018

    Npx is cool... but why not use a relative $PATH?

    Use a flexible $PATH to resolve executables in any language.

    5 min read
  • July 29, 2018

    Challenges with doing recursion in PHP

    Struggles and successes.

    9 min read
  • June 5, 2018

    The current state of <details>

    What is and isn't working in which browser, and how you can fix it.

    5 min read
  • May 31, 2018

    Auto-deploy with Travis CI

    An auto-deploy strategy using Travis CI and Git tags.

    6 min read
  • May 4, 2018

    Installing Homebrew PHP extensions with PECL

    A guide to help you install PHP extensions using Homebrew PHP versions from homebrew/core.

    7 min read
  • April 30, 2018

    Coding for accessibility: an introduction

    7 Easy ways to make your website more accessible.

    7 min read
  • July 14, 2017

    Git feature branches

    The way we work with git feature branches.

    10 min read

Interested in our work? Visit our regular website or check us out on GitHub and Twitter.