onappinstalled - for when an app is installed.
Use onappinstalled to detect when a progressive web app is installed. 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!)
Bookmarklet: Chrome DevTools trace page
A simple bookmarklet that will performance trace the current page and open in an hosted devtools instance Read More
Hosting Puppeteer in a Docker container
A simple docker container that can host an instance of puppeteer and a custom app. Read More
domcurl: curl + JavaScript
A curl-like utitly that runs JavaScript Read More
Using CSP Nonces effectively with service worker
CSP nonce values can help you securely run inline content on you site. But it can be hard to get it working with Service Workers... until now. Read More
We need DOM APIs in Workers
If we are to build HTML in Workers then we need some 'DOM' in them. Read More
A simple clientside templating langauge
Templating libraries needn't be so hard Read More
Challenges for web developers
Summary of the challenges that I beleive we developers face every day. Read More
Breaking down silos by sharing more on the web
This post discusses the problem of content silos on the web, particularly how native apps dominate sharing functionalities, limiting the web's reach. It highlights the irony of navigator.share, which, while enabling web sharing, still directs users towards native apps. The post emphasizes the need for the web to participate more actively in user interactions. It celebrates the 'Improved add to home-screen' feature for PWAs on Android, generating APKs and making them function more like native apps. Finally, it introduces the promising 'Share Target API', allowing PWAs to receive shared content, including links, thus breaking down silos and fostering a more inclusive web ecosystem. Read More
An Investigation into Real-time Fraud Detection in the Telecommunications Industry (2003-ish)
What is this? This is my Software Engineering final year project for University from about 2003. I used to be work in the Fraud Detection industry (mortgage and credit card fraud) and this project was to solve a problem that I had found in the telecoms industry: fraudulent phone calls. It was impossible (for me) to get phone records from telecoms companies, so I had to build a tool that would model fraudulent calls and normal call patterns, I then had to build a tool that would detect calls that were fradulent from all of the call records. Read More
The Web is my API
I've always been fascinated by the potential of the web as an API, an idea I first encountered through Michael Mahemoff's work with microformats and CORS. While technologies like Web Intents explored similar concepts, they proved more complex. The core idea remains powerful: enabling direct client-side interaction between websites to bypass the complexities of server-side integrations. Although CORS is widely supported, its complexity hinders adoption. With the rise of client-side generated sites, the need for decentralized integration is stronger than ever. Tools like Comlink, by abstracting the complexities of postMessage and MessageChannel, make it easier to expose and consume client-side APIs. I demonstrated this with a simple example integrating a pubsubhubbub endpoint with a push notification service. This approach offers several advantages, including simplified data transfer, offline capabilities, and secure, controlled exposure of functionality. Looking ahead, I envision a future where every website exposes a consistent, discoverable API, enabling a more interconnected and modular web experience. Read More
Reinventing Web Intents
I've been exploring solutions to connect web apps and overcome the limitations of isolated experiences. Web Intents was a good start, but ultimately fell short. The Share API helps, but we need a more general solution for IPC and service discovery. My latest experiment builds on the Tasklets API and Comlink, allowing seamless communication between windows and web workers. It simplifies the complex postMessage API and makes it easy to expose and consume APIs across different contexts. I've created a service discovery mechanism where a 'middleman' site keeps track of available services. Clients can request services based on criteria, and the middleman facilitates the connection. Once connected, the client and service communicate directly, bypassing the middleman. This approach simplifies the developer experience and makes it much easier to build interconnected web experiences. Check out the demos and let me know your thoughts! Read More
Web sites as unintended silos: The problem with getting data in and out of the web client
It's nearly impossible to get consistent get data in and out of a web app on the client Read More
Web and Chrome Developer Relations manifesto
How should Web and Chrome Developer Relations work? Read More
Progressive Progressive Web Apps
Building Progressive Web Apps progressively is possible. This is how I did it. Read More
Minifying a Custom Element that contains inline CSS and HTML
I couldn't find an easier way, so I built it myself Read More
Defining web component interfaces
Custom Elements need clear and parsable API documentation. Read More
Issue with css variables and button background styling
This little doozey hit me, so I'm documenting incase anyone else has the same issue Read More
Creating a share button web component
My adventures in creating resuable web components around sharing. Read More
Detecting text in an image on the web in real-time
I'm excited to share the latest addition to the Shape Detection API: the Text Detection API! This API allows you to detect text within images in real-time, right in the browser. It's still experimental and currently works on Chrome Canary for Android, but it opens up amazing possibilities. Imagine real-time translation, assistive technologies for parsing image content, or even grabbing URLs from slides at conferences. I've built a demo where the API detects text, draws a box around it, and reads it aloud when clicked. Check out the code and demo to experiment yourself. I can't wait to see what you build with this! Read More