41554 blogs · [ { "id": "01a07df4-5022-70a2-8810-cf886c9c6bf0", "title": "On not becoming a cyborg", "url": "https://nolanlawson.com/2026/08/31/on-not-becoming-a-cyborg/", "published_at": "2026-08-31T13:14:54+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf886d6eefcb", "title": "The asteroid currently hitting frontend web development", "url": "https://nolanlawson.com/2026/08/23/the-asteroid-currently-hitting-frontend-web-development/", "published_at": "2026-08-23T23:36:05+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf886da8eeaf", "title": "You can just choose how many bugs you want now", "url": "https://nolanlawson.com/2026/08/16/you-can-just-choose-how-many-bugs-you-want-now/", "published_at": "2026-08-16T16:40:49+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf886dc878ec", "title": "Using AI to write better code more slowly", "url": "https://nolanlawson.com/2026/05/25/using-ai-to-write-better-code-more-slowly/", "published_at": "2026-05-25T16:16:40+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf886e1bb95e", "title": "The diminished art of coding", "url": "https://nolanlawson.com/2026/03/22/the-diminished-art-of-coding/", "published_at": "2026-03-22T21:52:33+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf886ecc37a2", "title": "You had a story", "url": "https://nolanlawson.com/2026/02/18/you-had-a-story/", "published_at": "2026-02-18T15:13:07+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf886ed0ce66", "title": "Days of miracle and wonder", "url": "https://nolanlawson.com/2026/02/15/days-of-miracle-and-wonder/", "published_at": "2026-02-15T20:41:21+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf886f577b7b", "title": "We mourn our craft", "url": "https://nolanlawson.com/2026/02/07/we-mourn-our-craft/", "published_at": "2026-02-07T16:52:07+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf88702f1eb7", "title": "15 years of blogging", "url": "https://nolanlawson.com/2026/02/01/15-years-of-blogging/", "published_at": "2026-02-01T16:11:07+00:00" }, { "id": "01a07df4-5022-70a2-8810-cf8870d5ec18", "title": "Building a browser API in one shot", "url": "https://nolanlawson.com/2026/01/31/building-a-browser-api-in-one-shot/", "published_at": "2026-01-31T13:43:51+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb4dc4503", "title": "AI tribalism", "url": "https://nolanlawson.com/2026/01/24/ai-tribalism/", "published_at": "2026-01-24T21:27:01+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb56db36b", "title": "2025 book review", "url": "https://nolanlawson.com/2025/12/30/2025-book-review/", "published_at": "2025-12-31T00:22:23+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb5a82f5e", "title": "An experiment in vibe coding", "url": "https://nolanlawson.com/2025/12/28/an-experiment-in-vibe-coding/", "published_at": "2025-12-28T16:13:31+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb65033e5", "title": "How I use AI agents to write code", "url": "https://nolanlawson.com/2025/12/22/how-i-use-ai-agents-to-write-code/", "published_at": "2025-12-23T04:17:20+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb6f60399", "title": "The element should actually do something", "url": "https://nolanlawson.com/2025/12/14/the-time-element-should-actually-do-something/", "published_at": "2025-12-14T20:46:57+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb74dee0b", "title": "The fate of “small” open source", "url": "https://nolanlawson.com/2025/11/16/the-fate-of-small-open-source/", "published_at": "2025-11-16T19:10:35+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb7f2f878", "title": "Why do browsers throttle JavaScript timers?", "url": "https://nolanlawson.com/2025/08/31/why-do-browsers-throttle-javascript-timers/", "published_at": "2025-09-01T01:54:49+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb80e9549", "title": "Selfish reasons for building accessible UIs", "url": "https://nolanlawson.com/2025/06/16/selfish-reasons-for-building-accessible-uis/", "published_at": "2025-06-16T14:54:49+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb8b3d8d9", "title": "AI ambivalence", "url": "https://nolanlawson.com/2025/04/02/ai-ambivalence/", "published_at": "2025-04-02T17:11:01+00:00" }, { "id": "01a0bdc6-7943-7078-bf38-7c9eb9af3ccd", "title": "Goodbye Salesforce, hello Socket", "url": "https://nolanlawson.com/2025/01/18/goodbye-salesforce-hello-socket/", "published_at": "2025-01-18T16:26:02+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e58e1bfe46", "title": "2024 book review", "url": "https://nolanlawson.com/2024/12/30/2024-book-review/", "published_at": "2024-12-30T19:14:23+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e58f0d1007", "title": "Avoiding unnecessary cleanup work in disconnectedCallback", "url": "https://nolanlawson.com/2024/12/01/avoiding-unnecessary-cleanup-work-in-disconnectedcallback/", "published_at": "2024-12-01T18:45:27+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e58fdf21d0", "title": "Why I’m skeptical of rewriting JavaScript tools in “faster” languages", "url": "https://nolanlawson.com/2024/10/20/why-im-skeptical-of-rewriting-javascript-tools-in-faster-languages/", "published_at": "2024-10-20T21:18:55+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e590da7d4f", "title": "The greatness and limitations of the js-framework-benchmark", "url": "https://nolanlawson.com/2024/10/13/the-greatness-and-limitations-of-the-js-framework-benchmark/", "published_at": "2024-10-13T19:31:09+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e5919f41f9", "title": "Web components are okay", "url": "https://nolanlawson.com/2024/09/28/web-components-are-okay/", "published_at": "2024-09-28T23:28:46+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e591e903b1", "title": "Improving rendering performance with CSS content-visibility", "url": "https://nolanlawson.com/2024/09/18/improving-rendering-performance-with-css-content-visibility/", "published_at": "2024-09-18T14:46:43+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e5927ed488", "title": "The continuing tragedy of emoji on the web", "url": "https://nolanlawson.com/2024/09/17/the-continuing-tragedy-of-emoji-on-the-web/", "published_at": "2024-09-17T13:58:30+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e592ce8a7f", "title": "Reliable JavaScript benchmarking with Tachometer", "url": "https://nolanlawson.com/2024/08/05/reliable-javascript-benchmarking-with-tachometer/", "published_at": "2024-08-05T14:40:07+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e5930474da", "title": "Is it okay to make connectedCallback async?", "url": "https://nolanlawson.com/2024/07/28/is-it-okay-to-make-connectedcallback-async/", "published_at": "2024-07-28T15:21:53+00:00" }, { "id": "01a0bdd0-0386-7053-8c0e-80e5933af476", "title": "Bugs I’ve filed on browsers", "url": "https://nolanlawson.com/2024/03/03/bugs-ive-filed-on-browsers/", "published_at": "2024-03-03T23:02:22+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a021370249", "title": "Web component gotcha: constructor vs connectedCallback", "url": "https://nolanlawson.com/2024/01/13/web-component-gotcha-constructor-vs-connectedcallback/", "published_at": "2024-01-13T18:45:33+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a02217b55c", "title": "2023 book review", "url": "https://nolanlawson.com/2023/12/31/2023-book-review/", "published_at": "2023-12-31T20:28:04+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a022e4dccf", "title": "Shadow DOM and the problem of encapsulation", "url": "https://nolanlawson.com/2023/12/30/shadow-dom-and-the-problem-of-encapsulation/", "published_at": "2023-12-30T17:03:24+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a023bd60a5", "title": "Rebuilding emoji-picker-element on a custom framework", "url": "https://nolanlawson.com/2023/12/17/rebuilding-emoji-picker-element-on-a-custom-framework/", "published_at": "2023-12-17T20:52:58+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a023d1c5ef", "title": "Let’s learn how modern JavaScript frameworks work by building one", "url": "https://nolanlawson.com/2023/12/02/lets-learn-how-modern-javascript-frameworks-work-by-building-one/", "published_at": "2023-12-02T19:47:11+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a024c42a11", "title": "Catching errors thrown from connectedCallback", "url": "https://nolanlawson.com/2023/08/25/catching-errors-thrown-from-connectedcallback/", "published_at": "2023-08-25T14:30:47+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a02546e5ff", "title": "Use web components for what they’re good at", "url": "https://nolanlawson.com/2023/08/23/use-web-components-for-what-theyre-good-at/", "published_at": "2023-08-23T14:27:07+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a0263d7966", "title": "My talk on CSS runtime performance", "url": "https://nolanlawson.com/2023/01/17/my-talk-on-css-runtime-performance/", "published_at": "2023-01-17T14:55:41+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a026473f99", "title": "Retiring Pinafore", "url": "https://nolanlawson.com/2023/01/09/retiring-pinafore/", "published_at": "2023-01-09T16:11:26+00:00" }, { "id": "01a0bdd3-ebf5-737a-b7e8-b8a026b6eaa6", "title": "2022 book review", "url": "https://nolanlawson.com/2022/12/30/2022-book-review/", "published_at": "2022-12-30T17:59:11+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5a747cdee", "title": "Shadow DOM and accessibility: the trouble with ARIA", "url": "https://nolanlawson.com/2022/11/28/shadow-dom-and-accessibility-the-trouble-with-aria/", "published_at": "2022-11-28T15:32:42+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5a7d2eb21", "title": "Thoughts on Mastodon", "url": "https://nolanlawson.com/2022/11/22/thoughts-on-mastodon/", "published_at": "2022-11-22T16:06:04+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5a7e75ffa", "title": "A beginner’s guide to Chrome tracing", "url": "https://nolanlawson.com/2022/10/26/a-beginners-guide-to-chrome-tracing/", "published_at": "2022-10-26T13:52:35+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5a8a2ef18", "title": "Style performance and concurrent rendering", "url": "https://nolanlawson.com/2022/10/22/style-performance-and-concurrent-rendering/", "published_at": "2022-10-22T18:54:25+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5a947c10a", "title": "SPAs: theory versus practice", "url": "https://nolanlawson.com/2022/06/27/spas-theory-versus-practice/", "published_at": "2022-06-27T15:54:52+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5a9f42f84", "title": "Style scoping versus shadow DOM: which is fastest?", "url": "https://nolanlawson.com/2022/06/22/style-scoping-versus-shadow-dom-which-is-fastest/", "published_at": "2022-06-22T14:09:11+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5aa85d387", "title": "Dialogs and shadow DOM: can we make it accessible?", "url": "https://nolanlawson.com/2022/06/14/dialogs-and-shadow-dom-can-we-make-it-accessible/", "published_at": "2022-06-14T14:47:38+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5aab66c5a", "title": "The collapse of complex software", "url": "https://nolanlawson.com/2022/06/09/the-collapse-of-complex-software/", "published_at": "2022-06-09T15:13:17+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5aaef8521", "title": "State is hard: why SPAs will persist", "url": "https://nolanlawson.com/2022/05/29/state-is-hard-why-spas-will-persist/", "published_at": "2022-05-29T16:43:10+00:00" }, { "id": "01a0bdd7-3a6f-714c-8ab1-37b5abd4f627", "title": "More thoughts on SPAs", "url": "https://nolanlawson.com/2022/05/25/more-thoughts-on-spas/", "published_at": "2022-05-25T15:16:04+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a632ce1f1", "title": "The balance has shifted away from SPAs", "url": "https://nolanlawson.com/2022/05/21/the-balance-has-shifted-away-from-spas/", "published_at": "2022-05-21T16:31:23+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a63af449b", "title": "The struggle of using native emoji on the web", "url": "https://nolanlawson.com/2022/04/08/the-struggle-of-using-native-emoji-on-the-web/", "published_at": "2022-04-08T21:47:22+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a63fedbeb", "title": "Five years of quitting Twitter", "url": "https://nolanlawson.com/2022/02/02/five-years-of-quitting-twitter/", "published_at": "2022-02-02T16:45:33+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a64ea2521", "title": "Memory leaks: the forgotten side of web performance", "url": "https://nolanlawson.com/2022/01/05/memory-leaks-the-forgotten-side-of-web-performance/", "published_at": "2022-01-05T15:24:58+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a65177d1f", "title": "2021 book review", "url": "https://nolanlawson.com/2021/12/31/2021-book-review/", "published_at": "2021-12-31T17:22:01+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a65670c78", "title": "Introducing fuite: a tool for finding memory leaks in web apps", "url": "https://nolanlawson.com/2021/12/17/introducing-fuite-a-tool-for-finding-memory-leaks-in-web-apps/", "published_at": "2021-12-17T15:03:51+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a657a4928", "title": "One weird trick to improve your website’s performance", "url": "https://nolanlawson.com/2021/12/05/one-weird-trick-to-improve-your-websites-performance/", "published_at": "2021-12-05T21:16:02+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a660d527b", "title": "How to write about web performance", "url": "https://nolanlawson.com/2021/09/12/how-to-write-about-web-performance/", "published_at": "2021-09-12T16:06:09+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a663feb7f", "title": "My love-hate affair with technology", "url": "https://nolanlawson.com/2021/08/26/my-love-hate-affair-with-technology/", "published_at": "2021-08-26T14:43:01+00:00" }, { "id": "01a0bddb-7f46-71dc-8016-c42a668adf26", "title": "Speeding up IndexedDB reads and writes", "url": "https://nolanlawson.com/2021/08/22/speeding-up-indexeddb-reads-and-writes/", "published_at": "2021-08-22T20:12:46+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617b61e528", "title": "Does shadow DOM improve style performance?", "url": "https://nolanlawson.com/2021/08/15/does-shadow-dom-improve-style-performance/", "published_at": "2021-08-15T23:32:44+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617c150758", "title": "Improving responsiveness in text inputs", "url": "https://nolanlawson.com/2021/08/08/improving-responsiveness-in-text-inputs/", "published_at": "2021-08-08T15:18:08+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617c73ebd6", "title": "Handling properties in custom element upgrades", "url": "https://nolanlawson.com/2021/08/03/handling-properties-in-custom-element-upgrades/", "published_at": "2021-08-03T15:25:56+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617ceefc52", "title": "Why it’s okay for web components to use frameworks", "url": "https://nolanlawson.com/2021/08/01/why-its-okay-for-web-components-to-use-frameworks/", "published_at": "2021-08-01T17:55:45+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617d3f96e8", "title": "JavaScript performance beyond bundle size", "url": "https://nolanlawson.com/2021/02/23/javascript-performance-beyond-bundle-size/", "published_at": "2021-02-23T16:38:22+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617d501ceb", "title": "Managing focus in the shadow DOM", "url": "https://nolanlawson.com/2021/02/13/managing-focus-in-the-shadow-dom/", "published_at": "2021-02-13T18:49:16+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617db093c6", "title": "Options for styling web components", "url": "https://nolanlawson.com/2021/01/03/options-for-styling-web-components/", "published_at": "2021-01-03T18:41:23+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617dcad2fa", "title": "2020 book review", "url": "https://nolanlawson.com/2021/01/01/2020-book-review/", "published_at": "2021-01-01T23:07:48+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617dddf83a", "title": "Programmers are bad at managing state", "url": "https://nolanlawson.com/2020/12/29/programmers-are-bad-at-managing-state/", "published_at": "2020-12-29T16:44:53+00:00" }, { "id": "01a0bdde-4ba5-7156-adfe-e2617df66607", "title": "Building an accessible emoji picker", "url": "https://nolanlawson.com/2020/07/01/building-an-accessible-emoji-picker/", "published_at": "2020-07-01T18:46:53+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314ce92d9c8c", "title": "Introducing emoji-picker-element: a memory-efficient emoji picker for the web", "url": "https://nolanlawson.com/2020/06/28/introducing-emoji-picker-element-a-memory-efficient-emoji-picker-for-the-web/", "published_at": "2020-06-28T15:58:42+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314cea071c38", "title": "Linux on the desktop as a web developer", "url": "https://nolanlawson.com/2020/05/10/linux-on-the-desktop-as-a-web-developer/", "published_at": "2020-05-10T17:24:50+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314cea0dba34", "title": "Customizing fonts in Firefox on Linux", "url": "https://nolanlawson.com/2020/05/02/customizing-fonts-in-firefox-on-linux/", "published_at": "2020-05-02T16:22:31+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314cea1c98fe", "title": "Fixing memory leaks in web applications", "url": "https://nolanlawson.com/2020/02/19/fixing-memory-leaks-in-web-applications/", "published_at": "2020-02-19T14:06:17+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314cea7f9933", "title": "2019 end-year book review", "url": "https://nolanlawson.com/2019/12/31/2019-end-year-book-review/", "published_at": "2019-12-31T18:52:53+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314ceb58b2f0", "title": "What I’ve learned about accessibility in SPAs", "url": "https://nolanlawson.com/2019/11/05/what-ive-learned-about-accessibility-in-spas/", "published_at": "2019-11-05T14:33:02+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314cec55f9c9", "title": "The joy and challenge of developing for KaiOS", "url": "https://nolanlawson.com/2019/09/22/the-joy-and-challenge-of-developing-for-kaios/", "published_at": "2019-09-22T18:31:17+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314ced04321c", "title": "Browsers, input events, and frame throttling", "url": "https://nolanlawson.com/2019/08/14/browsers-input-events-and-frame-throttling/", "published_at": "2019-08-14T14:27:53+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314ced39069e", "title": "High-performance input handling on the web", "url": "https://nolanlawson.com/2019/08/11/high-performance-input-handling-on-the-web/", "published_at": "2019-08-11T17:30:44+00:00" }, { "id": "01a0bde0-e6d6-73fe-8fff-314ced7aa3f0", "title": "Advice for new bicycle commuters", "url": "https://nolanlawson.com/2019/06/17/advice-for-new-bicycle-commuters/", "published_at": "2019-06-17T13:56:44+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e333465906d", "title": "Mid-2019 book review", "url": "https://nolanlawson.com/2019/06/15/mid-2019-book-review/", "published_at": "2019-06-15T15:33:22+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e3334f6d831", "title": "How to de-Google your Android phone", "url": "https://nolanlawson.com/2019/06/13/how-to-de-google-your-android-phone/", "published_at": "2019-06-13T14:23:39+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e33354db3b4", "title": "One year of Pinafore", "url": "https://nolanlawson.com/2019/06/02/one-year-of-pinafore/", "published_at": "2019-06-02T17:32:45+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e333609fb5a", "title": "Tech veganism", "url": "https://nolanlawson.com/2019/05/31/tech-veganism/", "published_at": "2019-05-31T15:03:12+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e33362f0f2e", "title": "Get off of Twitter", "url": "https://nolanlawson.com/2019/05/29/get-off-of-twitter/", "published_at": "2019-05-29T14:20:53+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e33368f6e64", "title": "In defense of the Right Thing", "url": "https://nolanlawson.com/2019/05/28/in-defense-of-the-right-thing/", "published_at": "2019-05-28T14:57:18+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e3336b38798", "title": "2018 book review", "url": "https://nolanlawson.com/2019/02/14/2018-book-review/", "published_at": "2019-02-14T16:17:15+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e33373e5d13", "title": "Building a modern carousel with CSS scroll snap, smooth scrolling, and pinch-zoom", "url": "https://nolanlawson.com/2019/02/10/building-a-modern-carousel-with-css-scroll-snap-smooth-scrolling-and-pinch-zoom/", "published_at": "2019-02-10T19:08:58+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e3337ffb57d", "title": "Things I’ve been wrong about, things I’ve been right about", "url": "https://nolanlawson.com/2019/01/01/things-ive-been-wrong-about-things-ive-been-right-about/", "published_at": "2019-01-01T23:45:27+00:00" }, { "id": "01a0bde3-568d-73a8-b9a6-0e33384cd024", "title": "Scrolling the main document is better for performance, accessibility, and usability", "url": "https://nolanlawson.com/2018/11/18/scrolling-the-main-document-is-better-for-performance-accessibility-and-usability/", "published_at": "2018-11-18T18:11:46+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c00c7531b3", "title": "Accurately measuring layout on the web", "url": "https://nolanlawson.com/2018/09/25/accurately-measuring-layout-on-the-web/", "published_at": "2018-09-25T14:43:06+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c00d1b6c83", "title": "YubiKeys are neat", "url": "https://nolanlawson.com/2018/09/15/yubikeys-are-neat/", "published_at": "2018-09-15T17:56:05+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c00de53cc0", "title": "Moving on from Microsoft", "url": "https://nolanlawson.com/2018/09/09/moving-on-from-microsoft/", "published_at": "2018-09-09T17:36:27+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c00ea0cbf9", "title": "A tour of JavaScript timers on the web", "url": "https://nolanlawson.com/2018/09/01/a-tour-of-javascript-timers-on-the-web/", "published_at": "2018-09-01T22:10:42+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c00f93e56e", "title": "How to deal with “discourse”", "url": "https://nolanlawson.com/2018/09/01/how-to-deal-with-discourse/", "published_at": "2018-09-01T17:55:16+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c0108c1a89", "title": "Mastodon and the challenges of abuse in a federated system", "url": "https://nolanlawson.com/2018/08/31/mastodon-and-the-challenges-of-abuse-in-a-federated-system/", "published_at": "2018-09-01T02:14:00+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c010c046ca", "title": "Should computers serve humans, or should humans serve computers?", "url": "https://nolanlawson.com/2018/05/16/should-computers-serve-humans-or-should-humans-serve-computers/", "published_at": "2018-05-16T18:24:58+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c0115111d9", "title": "Introducing Pinafore for Mastodon", "url": "https://nolanlawson.com/2018/04/09/introducing-pinafore-for-mastodon/", "published_at": "2018-04-09T15:33:41+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c011efb110", "title": "Smaller Lodash bundles with Webpack and Babel", "url": "https://nolanlawson.com/2018/03/20/smaller-lodash-bundles-with-webpack-and-babel/", "published_at": "2018-03-20T14:56:59+00:00" }, { "id": "01a0bde5-c6e2-7031-9301-d8c012599a6c", "title": "Decentralized identity and decentralized social networks", "url": "https://nolanlawson.com/2018/01/02/decentralized-identity-and-decentralized-social-networks/", "published_at": "2018-01-02T16:39:14+00:00" } ] posts Claim your blog
Back to Nolan Lawson
Blog · corpus.blog/blogs/nolanlawson.com/posts

Nolan Lawson

nolanlawson.com

2026

2025

2024

2023

2022

2021

2020

2019

2018