RSS.Social

A Beautiful Site

follow: @[email protected]

Posts

How I Use GitHub Issues

Revisiting FOUCE

Web Components Are Not the Future — They’re the Present

Component Machines

Styling Custom Elements Without Reflecting Attributes

Reflection and Custom States in Web Components

Anchoring Software to Major Versions

Building Custom Elements With a Library

Design Systems Are An Investment

How to File a Bug Report

Thoughts on Framework Churn

Better Buttons with color-mix() and Custom Properties

Dynamic Slots

My Commitment to Accessibility

Converting a URL Object to a Plain Object in JavaScript

The Term "Headless Component" is a Misnomer

Shoelace 2.0

Installing Shoelace in a React App

Why You Should Prefix Custom Events

Custom Event Names and the Bubbling Problem

The Future of Shoelace

A Web Component Story

Not Everything Can Be Feature Detected

Buttons and Cursors

My Stance on AI-generated Code

Design Systems Aren't Cheap

CSS Parts Inspired by BEM

When To Create CSS Parts

Valid Names for CSS Parts

Complacency on the Front End

A Web Components Primer

Success Requires Luck

Flash of Undefined Custom Elements (FOUCE)

Bulletproof Components

Empowering Design System Users

Exploring the EyeDropper API

The Future of Frameworks

Superpowers

Know When To Draw The Line

Don't Do Magic

On Buttons and Links

On Using Web Component Libraries

Finding the Closest Element Through Shadow Roots

Testing Support for :focus-visible

Querying through shadow roots

Prefers Reduced Motion

Finding the active element in a shadow root

Moving from Stencil to LitElement

SVG Repo

Archiving Postleaf

Getting localized month and day names in the browser

Shoelace 2.0: a forward-thinking library of web components

Cory's amazing dot paper

A free HTML, CSS, and JavaScript beautifier

Let's Encrypt renews but browsers still seeing old/expired SSL certificate

Introducing Surreal CMS 7

Getting duplicate ids in an HTML document

A clever way to style the <mark> element

Opening a new window after an async operation

Zipping multiple folders into separate zip files

Shoelace.style — A back to the basics CSS starter kit

Downloading a list of URLs automatically

Surreal CMS acquires PageLime

Rebuilding your Spotlight index in macOS

Thoughts on AMP

JSON Feed

Postleaf: reimagined

Thoughts on uploads

Importing plain CSS files with Sass

Determining your app's base directory in Node.js

Hashing Passwords with Node.js and bcrypt

Using an ORM

Solving the search problem

Moving to Node.js

SSH failing on macOS Sierra

Getting it right

SimpleImage 3.0

Don't hate on PHP

Thoughts on comments

Code can change

A better way to write config files in PHP

How to upgrade or downgrade Node.js using npm

Adding and removing virtual hosts on Ubuntu 14.04

Lessons from a failed Kickstarter

Democratizing publishing

Animated CSS hamburger icons

Flushing DNS cache on macOS

A clean fade-in effect for webpages

How to remove box shadows from input controls on iOS

Passing data from PHP to JavaScript

The HTML5 download attribute

Get comfortable with abstraction

Thoughts on being a good manager

I should have been asking my users this from the start

Why developers hate being interrupted

Social sharing buttons are ineffective

How to use currentColor in your stylesheet

I switched from tabs to spaces and haven't looked back

CSS shapes are here

CSS reset with box-sizing fix

What can you do with a single <div>?

Is your product the reason your startup is failing?

Stop trying to build the next unicorn

BrowserStack: stop using virtual machines for browser testing

I'm taking "startup" back

Hide the mouse cursor with CSS

How to leave a console greeting for your visitors

Subtle Patterns: hundreds of free backgrounds that tile

Find a name for almost any hex color

Working with HTML5 data attributes

Is it possible to be an introverted entrepreneur?

How to use the PHP ternary operator

Five things I've learned about taking risks

Using the classList API

TinyPNG: A better way to compress PNG images

What is my browser? This tool will tell you

Smaller volume increments in macOS

Link to a specific page in a PDF file

Lessons from my 20s: a presentation by Ryan Allis

How to get the dominant colors of an image with Color Thief

PlayCanvas: an easy, open source WebGL game engine

box-sizing: border-box explained

Give your JPEGs alpha channels

How to get faster and better help from support

Swapping variables with JavaScript

The next version of PHP may very well be 7

SVG has a logo

A user interface is like a joke

Parsing URLs in JavaScript

An icon converter that supports multiple sizes and transparency

Validating URLs and email addresses in PHP

Semantic version numbers

There's a reason that Bootstrap 3 has ugly buttons

Whipping file inputs into shape with Bootstrap

Tips for the aspiring web developer

Down with the share widget!

Feature detection for CSS transitions via jQuery $.support

Access pages without the php extension using .htaccess

Detecting mobile devices with JavaScript

Redirecting to and from the www subdomain with .htaccess

The SimpleImage library for PHP

How to delete a tag on GitHub

Office 2007 files downloading as ZIP files in Internet Explorer

Smoothly scroll to an element without a jQuery plugin

The difference between web designers and web developers

New shortcut keys in Windows 7

Icon Finder: an awesome search engine for icons

JSNES: a Nintendo emulator built in JavaScript

Table cells and max-widths in Internet Explorer 8

Browser makers: where’s the new tab + homepage option?

What happens if IE8 "breaks" my website?

Images display in Firefox and Safari, but not in Internet Explorer

PHP functions to get and remove the file extension from a string

Prevent white noise from appearing in images after fading

A Beautiful Site becomes "A Beautiful Site, LLC"

Import/restore MySQL files from the command line

Parsing a JSON string results in an 'Invalid Label' error

$.postJSON() for jQuery

Generate random passwords in PHP

Fetching remote web pages with curl and PHP

Determine file extensions using JavaScript

But we haven't even mastered Acid2!

Netscape support ending in February 2008

IE8 burns the Acid 2 test

Select all, select none, and invert selection with jQuery

External popup links using jQuery

Convert arrays to CSV with PHP

Getting proportionally-resized dimensions of an image

JavaScript functions for basename and dirname

Avoiding timestamp errors when calculating dates in php

DaFont: an excellent free font resource

Forcing file downloads in PHP

Web standards are just "minor details"

Creating stylesheets for handheld devices

Creating a printable website using print stylesheets

CSS drop caps

Find and replace hyperlinks and email addresses in PHP

What are favicons?

Using JavaScript to prevent comment spam

Password protection using .htaccess and .htpasswd

GIF, JPEG or PNG? Using images on the web

Business cards

An Event Apart, Boston

A Beautiful Site launched