Free Tailwind CSS components:

Newsletter archive

These are some of my previous newsletters. Sign up if you want to get them delivered straight to your inbox.

Several stacks of bound notebooks.
#85April 21, 2021

Your notes could be products

You definitely have at least a few products in you. The collection of tips and tricks you keep for yourself could be valuable to others as well.

A car turning around in the snow.
#84April 14, 2021

When the law makes you pivot

Shortly before finishing it, I had to change direction on my last side project. Had I proceeded with the original idea, I would have entered a legal gray area.

A bunch of numbers on a board.
#83April 7, 2021

Just enough analytics

When we need to gather statistics or other logs from our projects, we don’t always need to use full, privacy-invading analytics solutions.

A yellow cable car crossing between two mountains.
#82March 31, 2021

Keep your links and SEO when moving domains

When changing from one domain name to another, we can use redirects to keep all existing links in place and avoid a dip in search engine rankings.

A button on a lamp post that says “Push to reset the world”.
#81March 24, 2021

How to flush Open Graph previews on social networks

Sites like Twitter and LinkedIn cache the preview image that appear when sharing links. We can clear that cache to have them pick up new versions faster.

A model of a space shuttle.
#80March 17, 2021

When you know too much to be helpful

Once you speak the language experts in your field use every day, it becomes harder to remember what it was like to not know what you know now.

An arrow on a target. The target is blurred, so you can’t really see how well it hit.
#79March 10, 2021

What a “target audience” could look like

Building for everybody is as bad as building for nobody. By defining an audience, we can focus on activities that support those we want to help.

A bunch of balloons with either happy or sad faces drawn on them.
#78March 3, 2021

The end of annoying JavaScript imports

Instead of navigating many layers of directories when importing files, we can use aliases that cover that error-prone part for us.

A graffiti of Jerry Seinfeld.
#77February 24, 2021

The Seinfeld approach to content creation

Without a specified target audience in mind, the content we create ends up being for nobody instead of being for everyone.

A screaming cat.
#76February 17, 2021

Fonts that make you go “agh!iIl1”

This nonsense test string reveals some of the main differences when comparing typefaces, like their weight and related characteristics.

A destroyed computer monitor.
#75February 10, 2021

Get better at design by breaking some designs

If good artists copy and great artists steal, why shouldn’t new artists destroy? Break some designs to learn the details that make them work.

A speed sign setting the limit to 25mph.
#74February 3, 2021

The constraints behind consistent icons

As I am drawing many more icons for my upcoming set, I follow a few constraints to ensure they all look like they belong together.

A hammer on a wooden table.
#73January 27, 2021

Don’t invent this here

Now that I am working on a product that I will sell, the decision between what I can reasonably build myself takes on a new shape.

A person holding up a sign that says “Hello!”
#72January 20, 2021

Introducing Lovelicons

I am working on a set of 200+ icons that will be free for personal use. The paid version will include benefits that I have not defined yet.

A daily planner.
#71January 13, 2021

How to build that work schedule

Building a work schedule helps us minimize distractions and focus on what is important. Follow these instructions to build one for yourself.

An alarm clock sitting on a chair.
#70January 6, 2021

Giving every minute a job

Splitting a day that would otherwise be “eight hours of work, some of them productive” into dedicated blocks helps maximize the value of these hours.

Assorted colorful miniature houses.
#69December 30, 2020

I finally understand “many small functions”

Writing many small functions instead of a few large ones is common wisdom. It took a book from the 90s for me to understand why that’s better.

A Lego knight about to be stepped on.
#68December 23, 2020

Running a static site saved me from getting hacked

When I looked at my site’s analytics for the first time in forever, I found that someone ran a script against it to find known vulnerabilities.

A glass of orange juice.
#67December 16, 2020

Protect your SEO when crossposting

By setting canonical links on posts shared on services like, Hashnode, and Medium, you can start building a SEO reputation for your own domain.

A close view of the moon.
#66December 9, 2020

The easiest way to build a Dark Mode

Media queries are essential for doing Responsive Design. They can test for many features beyond browser width. We can use one of them to build a dark mode.

A screenshot taken from one of my YouTube tutorials.
#65December 2, 2020

I published my first video tutorials!

After writing on my blog and newsletter, I’m adding a new medium to my rotation. I’m taking some of my content and recording videos for it.

An empty logbook
#64November 25, 2020

Get more value from your git log

We can customize the look of our git log to get more value out of fewer lines. In this issue, I walk you through how we can build a prettier log step by step.

A row of colored crayons.
#63November 18, 2020

How to pick your next project

A flat todo list helps us get projects done, but it doesn’t help us decide what project to work on next.

Several empty tables and chairs.
#62November 11, 2020

This newsletter goes to 13 people

I have not done any marketing for this newsletter at all, and it shows. It’s about time I change something about that.

A person holding up a cookie shaped like the poop emoji.
#61November 4, 2020

How the poop emoji broke my website

A few emoji included in a font are responsible for Firefox not showing syntax highlighting in my code snippets.

A circus sign saying “original”.
#60October 28, 2020

The main branch

There was never a technical reason for us to call the source of truth “master” in Git. We can rename it to “main” or any other term in a few minutes.

The backsides of many identical looking cards.
#59October 21, 2020

Memorizing a shuffled deck of cards

Distractions and the internet have conditioned us to do shallow work. To engage in Deep Work, we need to learn how to concentrate again.

A person’s legs on a table.
#58October 14, 2020

A very relaxing refactoring

Refactoring old code shows you how much you have grown since you wrote it. Sometimes, that’s just the boost you need to unlock creativity.

An array of cameras all pointing in the same direction.
#57October 7, 2020

GDPR applies to you as well

Running Google Analytics is the most obvious reason for showing a consent form to visitors. There are many less obvious ones you also need consent for.

A colorfully illuminated MacBook.
#56September 30, 2020

Join me for Hacktoberfest

Every October, DigitalOcean celebrates the open source community by running Hacktoberfest. Let’s code a few things together this month.

A construction site warning sign telling people not to get closer.
#55September 23, 2020

The global .gitignore

Instead of ignoring the same files specific to your machine in every project, exclude them globally once for all your projects.

An analog alarm clock in front of a two-colored background.
#54September 16, 2020

End of an era

Moment.js is now a legacy project. While you can keep using it, these other projects might be better fits for you.

A bottle of glitter that has toppled over and spilled glitter everywhere.
#53September 9, 2020

We’re skipping our shiny features

“Being busy” is not a good measure of progress. By focusing on what creates real value, we can make good use of our limited time.

A printed color palette with an eye piece.
#52September 2, 2020

My design turned out worse than I thought

What looks good in a design tool doesn’t necessarily look good in a browser. Working in both at the same time helps you catch those mistakes early.

A Lego Stormtrooper in front of an empty canvas.
#51August 26, 2020

Tired of learning by building todo-apps?

Tutorials often default to todo-apps. These twists on that idea help you dig into how the framework you’re learning really works.

An iPhone and Apple AirPods.
#50August 19, 2020

Can you recommend other podcasts like these?

The format of “two hosts talking about what is going on in their businesses” is fascinating. Know any others like the ones in this list?

Signs pointing to different hiking routes using a symbol to represent a hiker.
#49August 12, 2020

Free alternatives to FontAwesome

A coherent and high quality icon set can level up a design. FontAwesome is good, but there are alternatives.

A page of a book showing stylized numbers.
#48August 5, 2020

Books for getting better at design

Design is not only about visuals. Start here to take your first steps into becoming a better designer.

A computer screen saying “DO MORE”.
#47July 29, 2020

Three tools to up your productivity

Consolidate many tools into few tools and automate what you can. These three help me stay productive.

A traffic sign signaling a windy road ahead.
#46July 22, 2020

I am changing my newsletter

I have not found the best format for this newsletter yet. I’ll try a few different ones to see what works best for my readers.

Lines of candies.
#45July 15, 2020

JavaScript sorts arrays weird

By default, an array of numbers will not be sorted numerically. To avoid unexpected results, we can tell it how to sort an array.

A person using an Apple Pencil with an iPad.
#44July 8, 2020

The iPad got the best pointer

Apple is adding mouse support to iPadOS. The thinking that went into the UX of the iPad’s new pointer is a fascinating evening watch.

Markers being dropped on a chair.
#43July 1, 2020

Fat marker sketches are the better mockups

Before we spend too much time on the details, we need to figure out the overall structure of a design.

A fire.
#42June 24, 2020

These tips are fire.

The bite-sized tips I started sharing on Twitter show how code can be improved gradually. You can read them all on this site now.

Happy pumpkins.
#41June 17, 2020

Enthusiasm does not mean priority

One of the harder parts of product development is knowing what to focus on. Your latest cool idea might not need immediate attention.

A single dollar bill.
#40June 10, 2020

Offsetting a low salary

A good job is not defined by salary alone. There are other things you can look for in a potential position.

An empty subway train.
#39June 3, 2020

Back to normal?

Quarantine has showed us what work could look like going forward. Let’s reconsider how we work instead of urgently wanting to go “back to normal”.

A stop sign.
#38May 27, 2020

“Before we start building this…”

Double-check you’re working on the right things by asking if the solution helps you solve important problems.

A pretty graffiti behind several bags of trash.
#37May 20, 2020

Delete your backlog

A backlog full of tasks you don’t ever intend to do only weighs you down. Saying no to tasks allows us to focus on what is important.

Glasses positioned neatly next to Apple headphones, an Apple keyboard, and an Apple mouse.
#36May 13, 2020

Poor man’s debugging, but cooler

Annoyed with how browsers log variables to the console? We can access and do more useful things with them.

Sunglasses with different styles and colors.
#35May 6, 2020

Picking what to learn

Options are good but distracting. By starting with an end in mind, we can find out what the best next thing to learn is.

Write without fear. Edit without mercy.
#34April 29, 2020

Writing code for others to read

Clever code isn’t always the most readable. Especially when working in teams, readability has to come first.

Several cocoons and one butterfly.
#33April 22, 2020

Evolution, not revolution

The latest version of my website is an improvement over the previous one, not a completely different thing.

A printed picture served on a plate.
#32April 15, 2020

Serving WebP images

Web servers can send different files to browsers based on headers in a request. Knowing this, we can send WebP-files only to browsers that support them.

A person sitting in front of a laptop with their hands folded.
#31April 8, 2020

Idle times

You’re probably working longer hours than normal during quarantine. Even when working from home, it is okay and important to take breaks.

Dollar bills positioned to look like a brain.
#30April 1, 2020

How to understand any codebase

Treat existing codebases as a blackbox. Take small pieces and write tests for them to understand a project’s inner workings step by step.

The ruin of a house on an open field in front of a mountain.
#29March 25, 2020

How to write legacy code

No code starts out as unmaintainable legacy we don’t dare to change. All codebases end up there because of a lot of small decisions like these examples.

A person on a hammock, with their dog looking at them.
#28March 18, 2020

Staying sane in the homeoffice

Separate “work” and “home” when working from home to not go crazy during quarantine. Take breaks and talk to other people, as you would in an office.

A large illuminated questionmark.
#27March 11, 2020

Questions to ask in job interviews

Job interviews are tests for both sides. Use them to figure out if the company you are applying to is a place you really want to work at.

The sculpture of a hand holding up a heavy tree branch.
#26March 4, 2020

Progressive enhancement with @supports (with video tutorial)

With @supports, we can start using features that will come to CSS soon in supporting browsers today.

A bird looking directly at the camera menacingly.
#25February 26, 2020

Negativity in retrospectives

Retrospectives that end after letting everybody complain are a waste of time. Turn that frown upside down for a better result.

A Superman figure positioned in a relaxing pose.
#24February 19, 2020

Role models

If you have been working somewhere for a while, others are likely looking to you for guidance and leadership.

A mechanical keyboard using the US keyboard layout.
#23February 12, 2020

A better keyboard layout for programming

The US keyboard layout puts many of the symbols we need a lot when coding on their own dedicated keys.

A broken chain of paperclips.
#22February 5, 2020

Dealing with broken streaks

Streaks limit us to short-term thinking, yet we can only see long-term effects in retrospect. It’s okay to break a streak along that way.

A picture of the iOS keyboard.
#21January 29, 2020

Texting faster

iOS 13 now has a built-in swipe keyboard called “QuickPath” that is much faster than typing individual letters.

An open book with a bookmark in it.
#20January 22, 2020

Bookmarking the greats

By looking at what others have done before us, we can find combinations of their ideas that work for us.

The words “start here” sprayed on the ground.
#19January 15, 2020

Start building an audience today

ConvertKit recently introduced a new free tier that makes it easier than ever to get started building an audience.

A flock of birds.
#18January 8, 2020

Find your community

No matter what you are passionate about, there is a vibrant community out there where you can exchange ideas with likeminded people.

A person holding a spray bottle.
#17January 1, 2020

Declutter those bytes

Getting rid of projects and plans that we will not get back to frees up mental space for things that excite us.

A line drawing of a graph and utensils required to draw it.
#16December 25, 2019


A good goal is one that makes it easy to follow through. The SMART criteria help us in setting better goals.

A lightbulb.
#15December 18, 2019


2019 is almost over, and I am looking forward to a few weeks of vacation. There are always more things to learn or to work on. All of that can wait.

An elephant.
#14December 11, 2019

How do you eat an elephant?

Big goals take a long time to achieve. By taking many small steps in the right direction, we can get closer and closer to them without losing motivation.

A flower blooming between two wooden boards.
#13December 4, 2019

Unexpected usecases

I had my expectations of how software is used challenged last week when talking to the CTO of a med-tech startup.

A bird sitting on a branch.
#12November 27, 2019

CSS that has a tail wind

In utility-first CSS, we do not limit ourselves to single classes. Instead, we use many small classes that each add small pieces of styling.

Two origami cranes.
#11November 20, 2019

Shaping up

While Scrum works well for many teams, it’s not for everybody. Basecamp’s Shape Up is an alternative that might work better for you.

Several disco balls.
#10November 13, 2019

Stress-test your layouts in disco mode

Talking about mobile-, tablet- and desktop-layouts worked well when the lines between those classes were well-defined.

Pineapples wearing sunglasses, surrounded by streamers and balloons.
#9November 6, 2019

Use dad jokes to get better at design

We can design better pages and screens if we use real data when creating our mockups. I released a Sketch-plugin that replaces texts with dad jokes.

An assortment of metalcast letters used in a printing press.
#8October 30, 2019

The Inter typeface family

Variable fonts are about to fix some of the performance issues caused by adding many custom fonts to our sites.

A person holding a tiny alarm clock.
#7October 23, 2019

What do you not have time for?

I have not met anyone that never said “I don’t have time for that”. So many of us are “too busy” to do the things we really care about.

A person standing on a mountaintop overlooking hills.
#6October 16, 2019

Is this a hill you want to die on?

There are disagreements in all teams about what we build and how we build it. Given several options, we need to understand each of their effects.

A person typing on a typewriter.
#5October 9, 2019

Write like Hemingway

Writing is best when it is easily understood by readers. Everything I write goes through an extensive editing phase to improve its readability.

An old-timey ship.
#4October 2, 2019

Shipped is better than perfect [content preview]

Don’t let perfectionism keep you from shipping things. Release (too) early, then clean it up after you got some real feedback on it.

An MC Escher-looking building.
#3September 25, 2019

What CAN you do?

My wife and I were supposed to relax on Mallorca right now. Our trip was cancelled less than 24 hours before our flight was supposed to take off.

Footprints in the sand.
#2September 18, 2019

Do Not Track, maybe

To opt out of tracking scripts on websites, you can set the “Do Not Track”-setting in your browser. Unfortunately, websites are not required to honor it.

Three donuts, with a bite taken out of one of them.
#1September 11, 2019

Drawing sweet icons for you

I am often creating custom icons for my projects. Because many share a similar style, I will assemble them into a free icon pack.