RSSAmplifier

Blog

Chip Cullen

Mission driven web developer

chipcullen.comRSS feed ↗128 posts

Latest posts

DRY comes last: why duplicative work helps

I've found this pattern of working to really help in my career - but it runs counter to a lot of instincts. Let me explain why I duplicate code first, then worry about abstractions.

The need for importance, and AI

A realization I had about the malaise of the tech world in the age of AI

An updated Colorosetta

A list of updates to one of my color utility tools.

The Return of the Font Combinator!

The Font Combintaor is back, better, and more standards driven than ever!

Changing the number of an item in an ordered list

A neat HTML trick I just learned

My pizza dough recipe as of May 2025

This is the dough recipe that I use to make pizza on Fridays for my family.

Gonna try to be a bit more personal

It's my blog, dammit.

How I built dynamic social media images in Eleventy using Cloudinary

My not very sophisticated but very understandable approach to making social media share images for a blog in Eleventy.

My current approach to AI

As a developer I see AI as just another tool to rely on. I look at it as one source of input - a helpful one, but that's it.

Lessons Learned Surviving a Major Product Launch

I recently led the biggest launch so far in my career. It was far from smooth - how did we get through?

How to Build a Drop Down Menu with Modern CSS

You can build a drop down menu with advanced functionality with CSS alone, thanks to recent advancements to the language. No onMouseOut listeners in sight!

How to stop page scrolling when you have an open dialog element

A CSS one-liner to help with your implementation.

Distraction Driven Development

You're now a distraction filter.

How I learned to code: the art of letting go

Inpsired by other articles, here is my journey to where I am today as an engineer, and beyond.

In praise of the switch statement

A tutorial on how to use an underused tool in Javascript - the switch statement.

Project stuck? Think about how you’re breaking it down & question everything

If you find yourself in the middle of a project that doesn’t seem to be moving forward - take a step back and question everything.

So how did the onboarding experiment go?

We tried the onboarding checklist that I had made previously - did it work?

Ideas for an Onboarding Checklist

Why I made an onboarding checklist for a new hire, and ideas of things to include on a list like this.

I really like Post Mortems

Why post mortems after an incident are fun and exciting.

Raise Red Flags Early

If you think something is going south on a project, make noise about it early. You'll be glad you did.

How to mock fetch requests in React Testing Librarty tests

Creating a mock server with msw to make React Testing Librarty tests for your components.

Running a Structured Meeting

There are a few crucial things that you can do to run really good meetings. I go over what has helped me run a lot of effective meetings over the years.

Adding the View Transitions API to my personal site

How I added smooth page transitions to my site using the View Transitions API.

A Lightweight Way to Read GraphQL Data

I share a lightweight function that will let you read a GraphQL endpoint without the need for heavy libraries. This is great for simpler use cases.

How to make a color changing favicon

Learn how to create a dynamic favicon with color-changing capabilities using JavaScript. This article goes line by line explaining how to do it. Additionally, discover how to update Safari's color scheme in real-time using the theme-color meta tag.

Using a Pros/Cons list to help navigate technical discussions

Discover the humble Pro's/Con's list, a tool that captures every pro and con in technical problem-solving discussions to avoid repeating the same objections and lead to healthier discussions.

How to use variable fonts from Google Fonts

Google Fonts makes a lot of great variable fonts available, but it's not terribly clear how to make use of those fonts. Here are some tips on how to take full advantage of their super powers.

A new website: now on Eleventy!

Announcing the new version of my personal website - this time around I built it in Eleventy.

How to Truncate Type at More Than One Line with Just CSS

Have a design where you want text to get cut off at 2 or 3 lines? You can do it with CSS alone.

Colorosetta: the VS Code Extension!

Announcing the VS Code Extension for my one-to-many color translation tool, ColoRosetta

Using CSS Custom Properties and Logical Properties Together

How to combine custom properties and logical properties for layout super powers.

Browser Dev Tools: Element Inspector Popover

Did you know? All three major browser engines offer an inspector popover for elements. Yeah, I didn't know.

How to have Dark & Light Mode Images that also works with User Choice

When we added a 'dark mode' to PBS.org's appearance, we wanted to allow users to have a choice to turn it on. That introduces some complexities that you need to account for.

Don’t use Viewport Units for Font Size on their own

Be sure to pair viewport units with a relative unit when using them on font sizes, or you'll introduce an accessibility issue.

A little known Media Query: Aspect Ratio

Did you know? You can make a media query based on a viewports aspect ratio, not just it's width.

Meta thinking: Managing Decisions

Why it's important to think about what kinds of decisions you are faced with.

Say What the Impact is when Reporting Issues

When reporting an issue, make it clear what the impact is.

Firefighting 101: How to Manage Breakages

A playbook for tech managers in dealing with significant outages.

How to Deal With Large Pieces of Technical Debt

The smaller the individual pieces of work, the greater the chance that a large piece of technical debt will be addressed.

Make Your Request Clear

On improving your communication by making request clear and obvious, and not assuming the other person will figure it out.

Analytics events, HTML classes, and protecting against refactoring

A way to protect analytics events against refactors and unintentinal breakage - analyics classes in your HTML.

How We Removed jQuery from a large app

How we went about removing jQuery from a large application that had depended on it for many years.

New tool: ColoRosetta

What width and height attributes should you use with responsive images?

Best practice is to add `width` and `height` attributes to image elements in HTML to improve browser layout performance.

Django 3.1 gotcha: Referrer Policy has a new default, and it might break iframes and links

In Django 3.1 the project updated the default 'referrer-policy' to be 'same-origin', which might lead to unexpected results in your project.

A Javascript Component Pattern

A walk through the typical JavaScript pattern that we use at my work.

CSS min(), max() and clamp() Functions

A quick look at the relatively new, but well supported, min(), max() and clamp() functions and how you might use them.

Pointer Events and Inline Elements in Chrome

Something interesting I learned about using pointer-events and Chrome on inline elements.

Resolving a github repo and a new Create React App

A play in one act

How to POST *Data* with the Fetch API

How to go about using the Fetch API to POST data to an API.