Technologies
Languages
Remy Sharp
Remy Sharp is a prominent front-end developer, author, and speaker who is well-known for his expertise in JavaScript, HTML, CSS, and related technologies. He has contributed to numerous open-source projects and has authored several popular web development books. As a speaker, Remy has delivered talks at conferences around the world, sharing his knowledge and insights with fellow developers.
External Links
Check the latest blog posts of Remy Sharp below
My AI policy
October 12, 2026
There's no shortage of commentary on LLM usage and I've penned several posts that have never left draft status because in part I can't articulate exactly what I want, and partly because there's so much noise around the subject. That's been true for the last few years but as an senior (and old) developer I think it might be useful to at least put in writing what happens to be true for me this moment in October 2026. Fair notice: this post will only briefly cover any policy I personally hold and quickly move into my opinions about LLMs and our community. On this blog Yeah, no. My words are mine. They might be regurgitated in your LLM chat session, but every typo, grammar failure and angry word is mine here. Additionally, the code that drives this site is almost all mine. I do use a few node libraries here and there (probably pug is the biggest one), but the "author code" is all me too. To be clear, this isn't because I'm some kind of shining light in the dark, it's because I need to protect some space for me to continue to practice development. I personally understand why an LLM would be used for code, but I can't fathom why someone might use it for their words. But that's for me, not for you to worry about. I can see legitimate LLM use for ideation, legibility checking and translation - but that's not for me and not for this blog. Elsewhere I'm not entirely anti-AI. My position has changed over time, probably linked to progress in progress in generative/better auto complete in code. But I'm not pro-AI either. I've not one sung it's praises to anyone. I might tell you about a thing I've used an LLM to make, and I do appreciate even writing about the experience might be read as pro-AI, but you won't find me telling you that you should use it. I'm using an LLM to complement my client work. My work is a mix of understanding a full system, directing the agent (which might be slightly different if I didn't work in a silo) and critically reviewing code changes. I've always considered my job (for over 2 decades) to be a communication task. To communicate business needs to functional code. That's to say, the actual implementation details don't concern me too much. In the same way a junior developer would code the solution in a different, and likely much more verbose way to me, but if it solves the business needs, and works, then it's not my job to rewrite their code. Likewise, if the task is to transform some data, it really doesn't matter what language the solution is, so long as it works (obviously you can get into the question of maintenance, but each case is unique). My point: it's not a hill I care to die on. On that note, I genuinely think we, the web community, need to back off shaming other developers for their choices. Regardless of whether it's using an LLM or using React, or Tailwind, or jQuery. It's an ugliness that doesn't sit well whilst trying to create an open and progressive community. I'm certainly guilty of this and I'm trying to get better. There's so many people that aren't the hard core tech bros pushing an agenda, and whom just want to make things. I recently heard of a new developer who wanted to share their web site with their peers in a "show off your work" channel. The channel was intended to be supportive, but because they had used React and hosted on Vercel, they held it back for fear of shaming. They weren't there banging a drum about how others should use these options, but just that they were chuffed to have made a thing, and yet we'd made them feel that they couldn't. The reason I've never managed to publish those earlier mentioned drafts is for fear of ostracising myself from my peers. I'm sure I'll be fine (I'm a big boy after all), but it's just a weirdness that we've made for ourselves. </gets-off-soap-box> My ethical position on AI companies By "AI" companies I'm referring to OpenAI, Anthropic, Twitter (or Grok, or whatever the hell it's supposed to be), Microsoft, Google and probably Amazon. The companies that a driving data centre development across the globe. In short, it's fucked. The greed is grotesque and the ruin they're laying to waste is heartbreaking. In reading Empire of AI I came to understand the real impact on the communities the data centres really have. I struggle to reconcile the term "theft" with the mass training on public content, but it's semantics that I'm struggling on. The reality is that we, the people whose words make up the web, were taken on an unprecedented scale, and zero credit was given - let alone consent (though our content was always designed to be ingested in different ways - RSS aggregators being one such example). Then this content was used to create unimaginable sums of money for the super rich and none of this was returned to the authors, again, not even a thank you. I really do detest these companies (at different levels, at different times of the month), but I wonder if it's because I've got more of an understanding, because by comparison, I don't actively detest airline companies or oil companies for that matter. Those are "background bad". This does live within me as a constant tension with my current LLM usage. So that's it. More of a brain dump mixed with some of my feelings on our community. I've no doubt this will change, and possibly within the next 12 months given how quickly the state of the world is changing.
My AI policy
October 12, 2026
There's no shortage of commentary on LLM usage and I've penned several posts that have never left draft status because in part I can't articulate exactly what I want, and partly because there's so much noise around the subject. That's been true for the last few years but as an senior (and old) developer I think it might be useful to at least put in writing what happens to be true for me this moment in October 2026. Fair notice: this post will only briefly cover any policy I personally hold and quickly move into my opinions about LLMs and our community. On this blog Yeah, no. My words are mine. They might be regurgitated in your LLM chat session, but every typo, grammar failure and angry word is mine here. Additionally, the code that drives this site is almost all mine. I do use a few node libraries here and there (probably pug is the biggest one), but the "author code" is all me too. To be clear, this isn't because I'm some kind of shining light in the dark, it's because I need to protect some space for me to continue to practice development. I personally understand why an LLM would be used for code, but I can't fathom why someone might use it for their words. But that's for me, not for you to worry about. I can see legitimate LLM use for ideation, legibility checking and translation - but that's not for me and not for this blog. Elsewhere I'm not entirely anti-AI. My position has changed over time, probably linked to progress in progress in generative/better auto complete in code. But I'm not pro-AI either. I've not one sung it's praises to anyone. I might tell you about a thing I've used an LLM to make, and I do appreciate even writing about the experience might be read as pro-AI, but you won't find me telling you that you should use it. I'm using an LLM to complement my client work. My work is a mix of understanding a full system, directing the agent (which might be slightly different if I didn't work in a silo) and critically reviewing code changes. I've always considered my job (for over 2 decades) to be a communication task. To communicate business needs to functional code. That's to say, the actual implementation details don't concern me too much. In the same way a junior developer would code the solution in a different, and likely much more verbose way to me, but if it solves the business needs, and works, then it's not my job to rewrite their code. Likewise, if the task is to transform some data, it really doesn't matter what language the solution is, so long as it works (obviously you can get into the question of maintenance, but each case is unique). My point: it's not a hill I care to die on. On that note, I genuinely think we, the web community, need to back off shaming other developers for their choices. Regardless of whether it's using an LLM or using React, or Tailwind, or jQuery. It's an ugliness that doesn't sit well whilst trying to create an open and progressive community. I'm certainly guilty of this and I'm trying to get better. There's so many people that aren't the hard core tech bros pushing an agenda, and whom just want to make things. I recently heard of a new developer who wanted to share their web site with their peers in a "show off your work" channel. The channel was intended to be supportive, but because they had used React and hosted on Vercel, they held it back for fear of shaming. They weren't there banging a drum about how others should use these options, but just that they were chuffed to have made a thing, and yet we'd made them feel that they couldn't. The reason I've never managed to publish those earlier mentioned drafts is for fear of ostracising myself from my peers. I'm sure I'll be fine (I'm a big boy after all), but it's just a weirdness that we've made for ourselves. </gets-off-soap-box> My ethical position on AI companies By "AI" companies I'm referring to OpenAI, Anthropic, Twitter (or Grok, or whatever the hell it's supposed to be), Microsoft, Google and probably Amazon. The companies that a driving data centre development across the globe. In short, it's fucked. The greed is grotesque and the ruin they're laying to waste is heartbreaking. In reading Empire of AI I came to understand the real impact on the communities the data centres really have. I struggle to reconcile the term "theft" with the mass training on public content, but it's semantics that I'm struggling on. The reality is that we, the people whose words make up the web, were taken on an unprecedented scale, and zero credit was given - let alone consent (though our content was always designed to be ingested in different ways - RSS aggregators being one such example). Then this content was used to create unimaginable sums of money for the super rich and none of this was returned to the authors, again, not even a thank you. I really do detest these companies (at different levels, at different times of the month), but I wonder if it's because I've got more of an understanding, because by comparison, I don't actively detest airline companies or oil companies for that matter. Those are "background bad". This does live within me as a constant tension with my current LLM usage. So that's it. More of a brain dump mixed with some of my feelings on our community. I've no doubt this will change, and possibly within the next 12 months given how quickly the state of the world is changing.
Redesign: fonts, alignment and nav
September 26, 2026
As I continue occasionally tinker on the redesign I've started (and often think "what's the point, current design is fine"), I wanted to share some of the problems I've run in to. Problems mostly for me because I'm not a designer, and I don't have the wiring to know what works.
Redesign '26
September 14, 2026
Around June this year I decided that I wanted to spruce up my blog. I had landed on Elliot Jay Stocks and Jon Hicks' web site and it really made me want to get my blog to something I'd consider visually appealing. I do know that I've set the bar way, way too high by looking at their sites. Specifically because if you're reading this on my website (and not RSS), you'll know design is not my strong suite. Grey is. Boxes and grey. Given that my last redesign was 18 years ago, I'm hoping I've learnt a few design tricks along the way.
text-decoration-thickness discrepancies
September 10, 2026
I'm in the process of (attempting) to redesign this blog, and in doing so, I'm using a few of the new bits (to me) of CSS to make things fancy. In this instance, I'm using text-decoration-thickness on my titles, and wanted to document the quirks I noticed.
Before you buy an LTE Pixel Watch (for your teen)
September 07, 2026
The boy is 14 and regularly does long outdoor runs. He tracks his run with Strava by carrying his phone with him. But carrying a phone (because they're bulky) is a pain. He also plans to swim in the sea during summer and we've all said we don't want him having a mobile just left on the beach until he comes back in. Mum (his, not mine) also runs and she's been caught in the past a few miles away without a phone, injured and asking a stranger to use their phone to call me for help (she was okay after some recovery). So the agreement was that we'd try to find a smart watch that also has call and text facility (ie. LTE). Lots of hunting around we ended up with a second hand Pixel Watch 2 and planned to add an eSIM to his existing phone plan. You know what they say about the best laid plans of mice and men? Well, it goes sideways is what.
16 for Tia
August 27, 2026
Tia would have turned 16 this year. Another marker that wouldn't come to be. After Tia was lost and born to stillbirth on 31 August 2010, we quickly had a slew of firsts. The first Christmas without her. First mother's day. First birthday. First day at nursery, first day of school. Not turning 10. 16 is another big age. Then so is 18 and all the others. As a family, we always try to mark her day with something we do together. Something special. For her 10th year, Julie ran ten 10K runs. We were all incredibly proud. This year, I suggested we walk. The thought was inspired by chatting to Jake, and originally I suggested we could walk 16 miles. We'd decided this much earlier in the year, and we started to do some smaller trails - something like 1-2 hour walks. I was pretty apparent, particularly with how my MS affects my feet, that 16km should be the target. We carefully worked to find and customise a route (we used AllTrails but also tried Outdoor Active) so that we could find 16km (about 10 miles) with a midway stop for food. We settled on a walk in the surrounding Arundel area where a good part of the walk was along the river Arun. We extended our walk a bit by adding a tiny side quest on the day Really this post is for me to mark and remember the day. Here are some of the highlights I remembered: We associate butterflies (and Gerber flowers) with Tia, and each time a butterfly joined us in our walk, to me, it was like a memory of Tia was with us. We waved at the trains that went past and it made us all cheer when someone would wave back. There were a LOT of cow pats! About 2/3rds of the way, with our boy (nearly 15) following at the back, he calls out "I'VE GOT 5G!" (we had actually cached all the maps offline to make sure we didn't get lost, so heaven knows what he wanted 5G for). Coco (our 3 year old dog, part chihuahua part yorkipoo - ie. small) joined us, also around 2/3rds of the way, she was carried in a backpack (on the front) - we figured she'd done her dues. We ended up walking for 4½ hours (the entire start to end was 6 hours). We clocked 25K steps and raised over £500 for SANDS. I had a little cry when we finished and hugged my (sweaty) family close. It was such a wonderful and special day 💞
I'm not done using AI
August 13, 2026
I recently read this post I'm done using AI (which is primarily around coding but also for general chat). Along with this post, I've read many other posts over the last two months (I have a new RSS reader) that swing on either side: why they're quitting, why they love it. Thankfully I've managed to miss the "I want to shove AI down your throat" posts. What's interesting (to me) about Brett's post is that their introduction experience of LLMs was very close to my own, but the outcome for me is quite different, and I think I know why.
Progressive Enhancement inside of JavaScript
August 05, 2026
Lately I've had the opportunity to travel by train and coach, during which time I also tend to work. It's really only during these periods that I'm reminded of how web sites fail so terribly over a slow connection. On the odd occasion I can be guilty of this too. I had a tiny tool that takes markdown and renders it for quick reading (no apps, or split view in VS Code, etc). When I loaded it up on the train, the page asked me to drop the file in to be rendered, which I dutifully did, only for the page to load the source markdown. It's nothing new, but Progressive Enhancement doesn't only apply to HTML being enhanced with JavaScript. It also applies within JavaScript. Sometimes this was the cut the mustard test, but sometimes it's about thinking laterally about JavaScript. In particular, can I capture the user's intent if they try to interact with my page before it's fully ready?
when-do web component
July 24, 2026
I saw recently saw a blog post (which annoyingly I can't find any more, but I'll link it if I do), showing off a web component that if I recall correctly, would show (or hide) it's contents depending on a browser feature (I'd guess using the @supports query). That reminded me that I wrote a web component that I use quite a bit (particularly with FFConf), which should really be called do-when, but it's not, it's (stupidly) called when-do (the dash, I guess, being a comma in my head). The component says: when a time occurs or passes, do a what: show, hide or scroll-to. You can get the code from github - which also includes an interactive demo that lets you try the settings.
Wildcards In CSS
July 11, 2026
Just a brainfart here, but it's odd that even though we have wildcard selectors throughout CSS, and even partial selectors (I'll explain in a bit) we don't have partial wildcard selectors on top level elements. I'm not talking about the "star" rule, but what I imagine would be a wildcard on elements selector.
Decompressing 33 signal bytes
June 29, 2026
In my RSS reader, I stumbled upon this code-golfed (i.e. minimised to death) snippet that's fairly clever, but from the code, utterly opaque. I couldn't immediately see how it worked, and since Copilot autocompletes most of my code for me - whether I want to or not, I figured it was a good bit of practice to decompress and understand. First things first: snooze the little copilot bastard for an hour!
FFConf 2026 is live: Things I Learnt
June 22, 2026
As with each year for the FFConf web site, I have a distinct idea of the visual style I want. It has zero to do with the content we're presenting each year, but I do love how FFConf's site can be creative. It was like that from the very first web site - the logo was designed in early 2009 in 12 variations (which you can see from years 2009, 2010 and 2011 before they were really redesigned). Before I (inevitably) forget, it made sense for me to write up some of the things I learnt along the way now that the 2026 web site is live.
20 Years of Blogging
June 17, 2026
Today is the anniversary of the first blog post on this website from two decades ago. It was about client side JavaScript to automatically (albeit blindly) select the "active" navigation. Ironically, I'd probably do this on the server side these days. Admittedly, it's imported from my prior blog and the first time I posted on on this domain was in September, but the post in June counts! But then, my domain was registered a full year before on 13 June 2005 (which neither myself, nor the Internet Archive can remember what was on it!).
How I foot-gunned our newsletter this week
June 05, 2026
For the second year running, as part of our "stay sane" strategy for FFConf, Julie and I write and send a weekly newsletter. It's structured the same way so it means we have a much better line of sight as to what we have to say. The open rate is usually around 40% (though I know some email systems synthetically do this), but our click rates are also usually pretty good. This week however, open rate was 3% and click rate was just 8 clicks. Something was definitely…afoot.
The 30 year game
May 17, 2026
Today I'm releasing my Game Boy game called Marbles² (or Marbles Squared). It's a port of a game that I originally wrote back in 2002, but is a game that started in my life in (or around) 1996. The development this iteration of the game, the one in 2026, took me about a week and I haven't written a single line of code. Here's how things have changed.
A popover backdrop anti-pattern
May 08, 2026
After attending recent conferences and learning that I can swap out buckets of JavaScript for the HTML native popover property, I've been using it liberally throughout my own projects. For little pop out menus it's perfect. Then I also started using it for modal boxes (yes, you might be thinking ahead of me: dialog, still, let's find out what happened). The popover property was really easy for this, and the ::backdrop selector was perfect for adding a little backdrop blur to tell my user "this is the thing you're dealing with". I especially love that all the UX around dismissing is handled for me. I can hit the escape key, or click outside the popover and it's dismissed. Except, I kept noticing that when I dismissed my popover it would sometimes vanish then immediately pop back to life…
devtools: how to query through the shadow DOM
May 01, 2026
This is a literal TIL but was so handy I had to put it my blog so that I wouldn't forget it later. Thanks to Big Brain Keith Cirkel for sharing this. As (hopefully) you know, there's the $ and $$ functions in devtools. For querySelector and querySelectorAll respectively. Well there's also $$$ to query through the shadow DOM. This means the query will cut through and into the nested DOM inside of the shadow DOM making it much easier to navigate and search for elements when debugging or styling. Begs the question: what's going to be lurking inside of $$$$ in 5 years time!
Apps I use, that you might not know
April 27, 2026
This is a cheap post to share some of the apps (macos, sorry Windows users) that I use on a fairly regular basis and think some of you might not have heard of before (whilst still being useful).
Fixing my slow Mac network speeds
March 26, 2026
For a while now both my desktop Mac (running Sonoma) and my laptop (running Tahoe - do not recommend) have had sub-optimal network speeds. My Android phone, on our network, on the same SSID, speed tests at 1.1Gbps. My laptop gets around 160Mbps and my desktop pulls in around 80Mbps. That's quite a difference, and even though I don't need the gigabit speeds - sometimes I can tell when the desktop is being slow (web site be getting big). What was weird is that the network speeds get much faster if I add something like NordVPN to my connection…which doesn't make sense…
Web of State of the Browser Day Out
March 18, 2026
Okay, that's a stupidly obscure title. It's meant to represent the combined events: State of the Browser and Web Day Out - two events I attended in the last month. The short version is: if you get the chance to attend these events or even anything similar, I'd highly recommend that you grab that ticket and let the event wash over you. For those that didn't attend (or maybe you did and wanted to read my perspective) then here's my thoughts on the separate events and then the round up of my own experience.
git recent: what branch did I work on?
February 12, 2026
Mega short blog post, mostly for me to remember, but also might be useful to you. In a project I'll often work on and move around different branches throughout the day, and as the years wear on it's rather dulled my memory - that's to say, I quickly forget what branch I was working on!
JS Bin down in 2026
February 02, 2026
January 27th I got an email notification saying that JS Bin had become unavailable. Then next day real life human beings were asking what's going on. By 11pm on the 30th the last of the issues were resolved. Earlier today Jake asked me: what went wrong? Fucking, everything.
Bytes I can delete after all this time
January 13, 2026
For the last few years my work-work has mostly focused on back end software (particularly around APIs). This meant that any front end work I was doing was for myself. Being an long-in-the-tooth old dog, I tend to learn and trick, and roll it out again and again typically without taking the time to find whether I still need the trick. Case and point, I learnt about the JavaScript performance trick of ~~1.4 === 1 to floor a value (and the same float | 0) but really these days it's not "faster" than doing it the legible way (i.e. Math.floor(1.4)). Given I've had a bit of time away from the backend, here's an unorganised list of things I've found I can use, and thusly remove extra code that I no longer need.