Hello.

I am Paul Kinlan.

I lead the Chrome and the Open Web Developer Relations team at Google.

User Agents Hitting My Site

Reading time: 1 minute

I've always wanted to know which user agents are currently hitting my site... Am I getting crawled? Are ML bots sifting through my site? I added some middleware to my site to log the user agent of every request while using Vercel's KV to store the user agents and their counts. User Agents in the last hour User Agent Count Read More

I lead the Chrome Developer Relations team at Google.

We want people to have the best experience possible on the web without having to install a native app or produce content in a walled garden.

Our team tries to make it easier for developers to build on the web by supporting every Chrome release, creating great content to support developers on web.dev, contributing to MDN, helping to improve browser compatibility, and some of the best developer tools like Lighthouse, Workbox, Squoosh to name just a few.

I love to learn about what you are building, and how I can help with Chrome or Web development in general, so if you want to chat with me directly, please feel free to book a consultation.

I'm trialing a newsletter, you can subscribe below (thank you!)

Will we care about frameworks in the future?

Reading time: 3 minutes

I've been building lots of apps by using LLMs and Agents. I'm currently up to about 17 tools, utilities and demos over the duration of a couple of weeks. I build them for me and because tools like Replit have enabled me during my small spots of free time to build fully working sites and apps that solve the immediate problem that I have. I've felt incredibly productive. I've a hypothesis that something like these Agents will be how we build software in the future, so as I build these apps I try to never adjust the output, I want to see how far that I can get with the machine creating all the code and so see how far away we are from this future. Read More

20 years blogging

Reading time: 2 minutes

I missed it, but I just realised that as of August 28th 2024 I've been blogging for over 20 year. I would have finished university and left my startups a couple of years before, gone went in to Enterprise, left behind Linux and Perl for a brief fling with c# and .net and started to make my first steps in to being a lot more public both in terms of documenting what I do and helping other folks. Read More

Generated Web Apps

Reading time: 4 minutes

Following on from my post about the "disposable web" and building things just for me, I thought it might be useful to collate an evergreen list of all the things that I'm building (and their code) so that you can see some of the things they do and inspect the code that is produced (I am expecting that there are issues and if you spot any, it would be good to highlight them) Read More

The disposable web

Reading time: 5 minutes

I have vivid memories as a child of my dad buying an Amiga 500 and letting me have exclusive access to the C64. I'd plugin in cassettes and 5 1/4 inch disks and play California games. One day I was in the local newsagent and I saw a comic about computers. On the front of the comic it had two little horned devil things called Rom and Ram. I have visceral memories of the smell of that comic, the paper, the cigarette smoke (the newsagent owners puffed like chimneys and would spend most of their money on their own supply of cigarettes) and in between me seemingly inhaling the magazine, I also devoured the contents. Read More

I spent an evening on a fictitious web

Reading time: 2 minutes

I saw https://websim.ai a couple of weeks ago but didn't quite get it, and then during some research on the creator and web developer ecosystems I came back to it and my mind was blown. I spent the evening exploring a web that is full of applications and sites and only limited by URLs that I could think of (heh - this web never has a 404 or an unregistered domain). Read More

Idly musing about Manifest

Reading time: 1 minute

I sometimes go for a spelunk in to HTTP Archive looking at values here and there. I thought I would look at default manifest.json values. SELECT COUNT(*) FROM `httparchive.response_bodies.2024_08_01_desktop` WHERE url LIKE '%manifest.json' AND response_body LIKE '%"short_name": "React App"%' There are 551037 urls that end 'manifest.json' and 22303 of those manifest files have the default manifest file generated by Create React App. It's probably worth exploring how many manifests are the default manifest created by build tooling. Read More

Some clean-up

Reading time: 1 minute

There's not that many people who read this blog - but for those of you who do, I'm making some minor changes. Removed the journal - I stopped personal journalling in the middle of the year (I still do it for work) - I don't think there was a huge amount of value in the bulleted lists for everyone else, so I've removed it from the blog. Added projects to the RSS feed. Read More

Chat GPT Code Interpreter and Browser Compat Data

Reading time: 5 minutes

One of the problems that I have with LLMs is knowing when they will be useful and how to apply them to any given problem. A lot of it just feels alien to me because with a background in computer programing I've been trained over 30 years that we frequently will get a deterministic set of results. I like to experiment and break new mental ground, so when I saw that Chat GPT had a code interpreter, I was was interested and yet had no clue what I would do with it. Read More

IndexedDB as a Vector Database

Reading time: 3 minutes

As I started to play with Open AI and some Generative ML ideas, I said "There are database companies that just focus on Vector search :mind-blown:". My mind is still blown that this is an industry, but as I play with Polymath and Pinecone it is clear that they are useful services, and the tinkerer that I am wanted to tinker about with the idea of running this type of database directly in the browser. Read More

Bookmarklet: Eyedropper

Reading time: 1 minute

I was reading Stefan Judis's awesome "Web Weekly" and in this weeks post he mentioned the EyeDropper API in Chromium Desktop browsers only - I totally missed this and because I frequently have to grab color information for slide design I need something quick to hand. Bookmarklets are quick to hand, so I built one for you. const e = new EyeDropper(); e.open().then(d => { alert(d.sRGBHex); }).catch(console.error) EyeDropper <— Just drag this to your bookmark bar. Read More

Querying browser compat data with a LLM

Reading time: 3 minutes

I've been noodling about a lot with LLMs recently and naturally I wanted to see if they could help me with my role. There's a lot of places I've found them to be useful, but an area where I've struggled is their data sources not being up to date with the current state of the web. I build a lot of sites and speak to a lot of Web Developers and a huge problem we have is knowing what APIs are supported so that I can use and rely on it in my sites without having to worry about compatibility as much. Read More

Building Ask Paul

Reading time: 5 minutes

I've been doing a lot of experimentation with Generative Machine Learning and one of the demo's that I've build is called "Ask Paul". You can ask me nearly any front-end web development question and the software will give you a direct answer if it can and links to further reading across the sites that I create content for (this blog, web.dev and developer.chrome.com) You can try it with a couple more queries: Read More

Talk: "Aiming for the future" at Bangor University

Reading time: 3 minutes

I was honoured to be able to present at the "School of Computer Science and Electronic Engineering" last week with a talk called "Aiming for the Future" [pdf]. I had a lot of fun creating this talk where I could go from the earliest computing with the Difference Engine all the way to today and try and talk about the evolutions of computing and possibility at every transition (I tied the transitions to delivery of content/data). Read More

BCD - Experimental APIs

Reading time: 2 minutes

This is just a small update. I've spent a bit of time adding some features to "time-to-stable". As I try to think about what is stable across the web platform it is useful to think about what APIs are marked as experimental. I added a new page to the site which lets you discover the APIs across a selected list of browsers that are still marked as experimental in BCD (Browser Compat Data). Read More

The local-only web

Reading time: 3 minutes

I was very happy to do a keynote session for the Tokyo and New York Google Developer Groups. I love doing talks that are centred around "The web in 202x" and these where no different. The New York keynote was a little different to the event in Tokyo because I had an extra 15 minutes to talk, and I like talking. One area that I got to spend more time on was using talking about areas that I am personally excited in 2023 and beyond. Read More

Support during layoffs

Reading time: 1 minute

If you are impacted by any of the layoffs at Google or across the industry, please reach out and I will try and help in any way that I can. I am happy to make connections and intros, LinkedIn recommendations, resume review, interview prep, a listening ear. For over a year now I've been running calls and I want to try and help you all as much as I can. My calendar is open, please use me in anyway that you think I might be able to help. Read More

Using ML to Create a Simple Lighthouse Audit to Detect a Button

Reading time: 4 minutes

This post wraps up the series of posts I created about applying ML to some developer tasks that are hard to do programatically. Specifically, I wanted to create a tool that would let me detect if an anchor on a page <a> was styled to look like a button or not (woot, it worked!) You can check out the previous posts here: Scraping images of links and buttons to train an ML model Read More

Creating a Lighthouse Gatherer to generate high-res screenshots for your Audit

Reading time: 2 minutes

I created a custom Lighthouse Gatherer that captures high-resolution screenshots of web pages, using the Puppeteer API. Despite the complexity of the task, the process was surprisingly easy and efficient. Read More

Creating a web app with Deno, Fresh and TensorflowJS

Reading time: 3 minutes

After I trained a simple machine learning model that can detect if an image looks like a link or a button. I created a web app to help me test it using Deno, Fresh and TensorflowJS. My demo allows for dragging and dropping many images on a page and automatically classifying them. Read More