Writing a Vite plugin to add lazyloaded critical CSS fallbacks for users with JavaScript disabled or unavailable
I'm using a Netlify build plugin to automatically split out and inline critical CSS for my personal...
Hi 👋, welcome to my personal site. It’s part blog, part portfolio, part place to try new things.
I'm a lead frontend engineer at the Co-op. I have a wide range of skills, knowledge, and experience, particularly focussed on accessibility and frontend web performance. Outside of work I'm interested in science, the environment, bouldering, bikes (everyday/utility), and open source software.
Tweets from Twitter, blog posts from DEV/Medium, talks from YouTube and beyond, photos from Instagram, music from Spotify, and nice places from Foursquare (lol, I know, but I've built the API integration now so Foursquare lives on on this website!).
Blog posts I've posted on DEV Community or Medium (one day I'll build my own blog, I promise…)
Some things I've been reading recently:
There’s a feeling in the air. A zeitgeist. SPAs are no longer the cool kids they once were 10 years
Retreating to classic navigation may be cowardice, but it’s INFORMED cowardice
Changing the organisation — to build the technology right
How to make a React app load ~30% faster – by tuning some configs and delaying some scripts
Why use loading indicators if the code for them makes the load slower?
There are 7 more of these. I thought I'd save you some scrolling, but if you want you can…
We want to evaluate how well candidates can code, and we also want to ensure candidates can show the
Remix picked up where React Router v3 left off, and now almost everything great about Remix is comin
Reflecting on our progress of moving the BBC’s website to serverless and outlining whats next for th
As front-end developers, we often learn CSS by focusing on individual properties. Instead, we should
Remix fills the missing piece that all React web applications need: The Network Chasm
Remix is the first Javascript framework I’ve used that truly understands what it means to be a fulls
How I added a new format to my website, automated publication to a newsletter, and added categories.
Talks I've given at conferences or other events. I'll link to slides or videos where they are available.
According to the Spotify API, I've been listening to a bit of future funk (glue70), chamber psych (Katy J Pearson), drum and bass (Makoto), dutch indie rock (Pip Blom), experimental folk (Modern Nature) and washington indie (Death Cab for Cutie) over the last few weeks (their genre names, not mine!)
You can click the cards above to play a little preview of the artist, courtesy of the Spotify API. I also use the Spotify API to get the tempo/BPM of the preview song, and I use this to influence the speed that a card bops at while its playing.
Press the pause icon or the esc key on your keyboard to stop the previews.
Tweets by me, @philw_.
The balance has shifted away from SPAs - https://nolanlawson.com/2022/05/21/the-balance-has-shifted-away-from-spas/ … I really hope this holds. It's been quite a few years now for me that SPAs have felt like a very expensive trip in the wrong direction for most of the things they are being used for
Does anyone know what in #CSS could cause fragment links like https://wolstenhol.me/#photos to not work when first clicked? I know it's a CSS issue as https://wolstenhol.me/no-css#photos works OK. I thought maybe `content-visibility: auto` but it happens without that. Perhaps `scroll-padding`?
Finally got videos from Instagram's CDN playing on my website by proxying the request via a Cloudflare Worker and spoofing an Origin and Referer header value of ` https://www.instagram.com ` on the request and then adding a Access-Control-Allow-Origin `*` value on the response 🤓💪 pic.twitter.com/J18iyHKTON
A randomised asortment of places I've liked on Foursquare at one point - it could be somewhere from a holiday, or it could be a random bar in Manchester that closed three years ago…
Get in touch
You can send me a direct message on Twitter or drop me an email via this contact form (all fields are required).