[
  {
    "path": ".editorconfig",
    "content": "; top-most EditorConfig file\nroot = true\n\n[*]\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\ncharset = utf-8\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".nvmrc",
    "content": "lts/jod\n"
  },
  {
    "path": "readme.md",
    "content": "![Frontend case studies logo](assets/logo.png)\n\nArticles like “Building a simple todo list with [framework or technology name]” won’t teach you how that framework or technology solves real-world problems and works at a large scale. This document is a curated list of technical talks and articles about real-world enterprise frontend development.\n\n> [!IMPORTANT]\n> As of January 2025, we've launched [a website](https://frontendcs.com) where you can browse case studies with a better UX! Please use the website for the latest updates. Entries in this README will no longer be updated and will eventually be removed completely.\n\n## Table of contents\n\n- [English](#english)\n  - [AdRoll](#adroll)\n  - [Aha!](#aha)\n  - [Airbnb](#airbnb)\n  - [ALDO](#aldo)\n  - [Algolia](#algolia)\n  - [Allegro](#allegro)\n  - [Amazon](#amazon)\n  - [Artsy](#artsy)\n  - [Atlassian](#atlassian)\n  - [Australian Broadcasting Corporation](#australian-broadcasting-corporation)\n  - [Badoo](#badoo)\n  - [BBC](#bbc)\n  - [Betty Crocker](#betty-crocker)\n  - [Bitmovin](#bitmovin)\n  - [blogfoster](#blogfoster)\n  - [Bloomberg](#bloomberg)\n  - [BuzzFeed](#buzzfeed)\n  - [Campaign Monitor](#campaign-monitor)\n  - [Carbon Five](#carbon-five)\n  - [Carousell](#carousell)\n  - [cars.com](#carscom)\n  - [Checkbot](#checkbot)\n  - [Clearleft](#clearleft)\n  - [Cloudflare](#cloudflare)\n  - [Cloud Four](#cloud-four)\n  - [CodeSandbox](#codesandbox)\n  - [Condé Nast](#condé-nast)\n  - [Conductor](#conductor)\n  - [Datadog](#datadog)\n  - [DAZN](#dazn)\n  - [De Voorhoede](#de-voorhoede)\n  - [DEV](#dev)\n  - [Discord](#discord)\n  - [&lt;div&gt;RIOTS](#divriots)\n  - [DoorDash](#doordash)\n  - [Dropbox](#dropbox)\n  - [eBay](#ebay)\n  - [EdgeDB](#edgedb)\n  - [Electronic Arts](#electronic-arts)\n  - [Ele.me](#eleme)\n  - [Etsy](#etsy)\n  - [Evil Martians](#evil-martians)\n  - [Expedia Group](#expedia-group)\n  - [ezCater](#ezcater)\n  - [Facebook](#facebook)\n  - [FARFETCH](#farfetch)\n  - [fastq.bio](#fastqbio)\n  - [Figma](#figma)\n  - [Financial Times](#financial-times)\n  - [Flickr](#flickr)\n  - [Flipboard](#flipboard)\n  - [Flipkart](#flipkart)\n  - [Flocktory](#flocktory)\n  - [Futurice](#futurice)\n  - [Garbarino](#garbarino)\n  - [GitHub](#github)\n  - [GitLab](#gitlab)\n  - [Goibibo](#goibibo)\n  - [Google](#google)\n  - [GOV.UK](#govuk)\n  - [grammarly](#grammarly)\n  - [Gusto](#gusto)\n  - [HealthCare.gov](#healthcaregov)\n  - [Heap](#heap)\n  - [in der Apotheke](#in-der-apotheke)\n  - [Infinite Red](#infinite-red)\n  - [Insider Inc.](#insider-inc)\n  - [Instagram](#instagram)\n  - [Internet Archive](#internet-archive)\n  - [Intuit](#intuit)\n  - [InVision](#invision)\n  - [Khan Academy](#khan-academy)\n  - [Kickstarter](#kickstarter)\n  - [Klarna](#klarna)\n  - [Line](#line)\n  - [LinkedIn](#linkedin)\n  - [Lucidchart](#lucidchart)\n  - [Lyft](#lyft)\n  - [Mail.ru](#mailru)\n  - [Mailchimp](#mailchimp)\n  - [MDN](#mdn)\n  - [Medium](#medium)\n  - [MemSQL](#memsql)\n  - [Mercado Libre](#mercado-libre)\n  - [Microsoft Bing](#microsoft-bing)\n  - [Microsoft To-Do](#microsoft-to-do)\n  - [Mixmax](#mixmax)\n  - [Mixpanel](#mixpanel)\n  - [Monzo](#monzo)\n  - [Mozilla](#mozilla)\n  - [Mud](#mud)\n  - [Myntra](#myntra)\n  - [Netflix](#netflix)\n  - [New Relic](#new-relic)\n  - [Notion](#notion)\n  - [npm](#npm)\n  - [OK GROW!](#ok-grow)\n  - [OYO](#oyo)\n  - [Oyster](#oyster)\n  - [Palantir](#palantir)\n  - [PayPal](#paypal)\n  - [Pinafore](#pinafore)\n  - [Pinterest](#pinterest)\n  - [Pivotal Tracker](#pivotal-tracker)\n  - [Plaid](#plaid)\n  - [Plotly](#plotly)\n  - [Product Hunt](#product-hunt)\n  - [Proton](#proton)\n  - [Quizlet](#quizlet)\n  - [Quora](#quora)\n  - [REA Group](#rea-group)\n  - [Reaktor](#reaktor)\n  - [Reddit](#reddit)\n  - [Redmart](#redmart)\n  - [repl.it](#replit)\n  - [Revolut](#revolut)\n  - [Roompact](#roompact)\n  - [Safety Culture](#safety-culture)\n  - [Scratch](#scratch)\n  - [Sentry](#sentry)\n  - [Shopify](#shopify)\n  - [Skillshare](#skillshare)\n  - [Slack](#slack)\n  - [Snipcart](#snipcart)\n  - [SoundCloud](#soundcloud)\n  - [Spectrum](#spectrum)\n  - [Spotify](#spotify)\n  - [Stack Overflow](#stack-overflow)\n  - [stripe](#stripe)\n  - [SumUp](#sumup)\n  - [Superhuman](#superhuman)\n  - [TakeShape](#takeshape)\n  - [The Guardian](#the-guardian)\n  - [The Knot Worldwide](#the-knot-worldwide)\n  - [The New York Times](#the-new-york-times)\n  - [The Telegraph](#the-telegraph)\n  - [The Times & The Sunday Times](#the-times--the-sunday-times)\n  - [The U.S. Digital Service](#the-us-digital-service)\n  - [The Wall Street Journal](#the-wall-street-journal)\n  - [This Also](#this-also)\n  - [ThomasNet](#thomasnet)\n  - [Thread](#thread)\n  - [Tinder](#tinder)\n  - [Tines](#tines)\n  - [TinyMCE](#tinymce)\n  - [Tokopedia](#tokopedia)\n  - [Treebo](#treebo)\n  - [Trivago](#trivago)\n  - [Tumblr](#tumblr)\n  - [Twitch](#twitch)\n  - [Twitter](#twitter)\n  - [Uber](#uber)\n  - [Udacity](#udacity)\n  - [Unity](#unity)\n  - [Unsplash](#unsplash)\n  - [Vercel](#vercel)\n  - [Verve](#verve)\n  - [Walmart Labs](#walmart-labs)\n  - [Wikimedia](#wikimedia)\n  - [Wingify](#wingify)\n  - [Wix](#wix)\n  - [Yelp](#yelp)\n  - [YNAB](#ynab)\n  - [YouTube](#youtube)\n  - [Zajno](#zajno)\n  - [Zynga](#zynga)\n  - [18F](#18f)\n  - [1Password](#1password)\n  - [Miscellaneous](#miscellaneous)\n- [Russian](#russian)\n  - [Amplifr](#amplifr)\n  - [Aviasales](#aviasales)\n  - [Avito](#avito)\n  - [auto.ru](#autoru)\n  - [Badoo](#badoo-1)\n  - [Delivery Club](#delivery-club)\n  - [DIRECTUM](#directum)\n  - [Flocktory](#flocktory-1)\n  - [GitLab](#gitlab-1)\n  - [HeadHunter](#headhunter)\n  - [ISPsystem](#ispsystem)\n  - [Joom](#joom)\n  - [Mail.Ru](#mailru-1)\n  - [Microsoft To-Do](#microsoft-to-do-1)\n  - [Miro](#miro)\n  - [Netcracker](#netcracker)\n  - [OneTwoTrip](#onetwotrip)\n  - [Rambler Group](#rambler-group)\n  - [Setka](#setka)\n  - [Skyeng](#skyeng)\n  - [Sports.ru](#sportsru)\n  - [Tinkoff](#tinkoff)\n  - [Wrike](#wrike)\n  - [Альфа-Банк](#Альфа-Банк)\n  - [Бюро Горбунова](#Бюро-Горбунова)\n  - [ВКонтакте](#ВКонтакте)\n  - [Додо Пицца](#Додо-Пицца)\n  - [Леруа Мерлен](#леруа-мерлен)\n  - [Медуза](#Медуза)\n  - [Одноклассники](#Одноклассники)\n  - [Сбербанк](#Сбербанк)\n  - [Ситимобил](#Ситимобил)\n  - [Спортмастер](#Спортмастер)\n  - [Учи.ру](#учиру)\n  - [Хабр](#хабр)\n  - [ЦИАН](#циан)\n  - [ЮMoney (Яндекс.Деньги)](#юmoney-яндексденьги)\n  - [Яндекс](#Яндекс)\n  - [2ГИС](#2ГИС)\n  - [Прочее](#прочее)\n- [License](#license)\n\n## English\n\n### [AdRoll](https://www.adroll.com)\n\n- [Lazy loading Backbone collections with Promises](http://tech.adroll.com/blog/web/2013/11/12/lazyloading-backbone-collection-with-promises.html) (November 12, 2013)\n- [Rollup: Shared UI components at AdRoll](http://tech.adroll.com/blog/frontend/2015/11/05/rollup-shared-ui-components.html) (November 05, 2015)\n- [Rollup: How we use React.js and npm to share UI code at AdRoll](http://tech.adroll.com/blog/frontend/2015/11/12/rollup-react-and-npm-at-adroll.html) (November 12, 2015)\n- [Rollup: What we have learned from sharing UI code at AdRoll](http://tech.adroll.com/blog/frontend/2015/11/19/rollup-major-learnings.html) (November 19, 2015)\n- [gulp-react-docs: From propTypes to Markdown in 3 seconds](http://tech.adroll.com/blog/frontend/2015/12/21/gulp-react-docs.html) (December 21, 2015)\n- [How to Create a Style Guide: Start with a UI Framework](http://tech.adroll.com/blog/product/2016/07/29/how-to-create-a-style-guide.html) (July 29, 2016)\n- [How to Run a Front-End Infrastructure Team](http://tech.adroll.com/blog/frontend/2017/08/29/how-to-run-a-front-end-infrastructure-team.html) (August 29, 2017)\n\n### [Aha!](https://www.aha.io)\n\n- [How I Convinced Our CTO to Switch From CoffeeScript to ES6](https://blog.aha.io/coffescript-to-es6) (September 7, 2017)\n\n### [Airbnb](https://www.airbnb.com)\n\n- [Turbocharged JavaScript Refactoring with Codemods](https://medium.com/airbnb-engineering/turbocharged-javascript-refactoring-with-codemods-b0cae8b326b9) (April 27, 2016)\n- [Rearchitecting Airbnb’s Frontend](https://medium.com/airbnb-engineering/rearchitecting-airbnbs-frontend-5e213efc24d2) (May 15, 2017)\n- [Migrating from Mocha to Jest](https://medium.com/airbnb-engineering/unlocking-test-performance-migrating-from-mocha-to-jest-2796c508ec50) (June 15, 2017)\n- [React Performance Fixes on Airbnb Listing Pages](https://medium.com/airbnb-engineering/recent-web-performance-fixes-on-airbnb-listing-pages-6cd8d93df6f4) (December 5, 2017)\n- [Server Rendering, Code Splitting, and Lazy Loading with React Router v4](https://medium.com/airbnb-engineering/server-rendering-code-splitting-and-lazy-loading-with-react-router-v4-bfe596a6af70) (January 10, 2018)\n- [React Native at Airbnb](https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c) (June 19, 2018): [The Technology](https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838), [Building a Cross-Platform Mobile Team](https://medium.com/airbnb-engineering/building-a-cross-platform-mobile-team-3e1837b40a88), [Sunsetting React Native](https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a), [What’s Next for Mobile at Airbnb](https://medium.com/airbnb-engineering/whats-next-for-mobile-at-airbnb-5e71618576ab)\n- [Operationalizing Node.js for Server Side Rendering](https://medium.com/airbnb-engineering/operationalizing-node-js-for-server-side-rendering-c5ba718acfc9) (July 18, 2018)\n- [How Airbnb is Moving 10x Faster at Scale with GraphQL and Apollo](https://medium.com/airbnb-engineering/how-airbnb-is-moving-10x-faster-at-scale-with-graphql-and-apollo-aa4ec92d69e2) (December 5, 2018)\n- [Building (And Re-Building) the Airbnb Design System](https://youtu.be/fHQ1WSx41CA) (October 30, 2019)\n- [ts-migrate: A Tool for Migrating to TypeScript at Scale](https://medium.com/airbnb-engineering/ts-migrate-a-tool-for-migrating-to-typescript-at-scale-cd23bfeb5cc) (August 18, 2020)\n- [Building a Faster Web Experience with the postTask Scheduler](https://medium.com/airbnb-engineering/building-a-faster-web-experience-with-the-posttask-scheduler-276b83454e91) (May 20, 2021)\n- [A Deep Dive into Airbnb’s Server-Driven UI System](https://medium.com/airbnb-engineering/a-deep-dive-into-airbnbs-server-driven-ui-system-842244c5f5) (June 29, 2021)\n- [Measuring Web Performance at Airbnb](https://medium.com/airbnb-engineering/measuring-web-performance-at-airbnb-122da8d3ea3f) (December 7, 2021)\n- [Faster JavaScript Builds with Metro](https://medium.com/airbnb-engineering/faster-javascript-builds-with-metro-cfc46d617a1f) (May 24, 2022)\n- [Airbnb’s Trip to Linaria](https://medium.com/airbnb-engineering/airbnbs-trip-to-linaria-dc169230bd12) (June 16, 2022)\n- [Improving Performance with HTTP Streaming](https://medium.com/airbnb-engineering/improving-performance-with-http-streaming-ba9e72c66408) (May 17, 2023)\n- [Rethinking Text Resizing on Web](https://medium.com/airbnb-engineering/rethinking-text-resizing-on-web-1047b12d2881) (May 16, 2024)\n- [How Airbnb Smoothly Upgrades React](https://medium.com/airbnb-engineering/how-airbnb-smoothly-upgrades-react-b1d772a565fd) (July 23, 2024)\n- [Adopting Bazel for Web at Scale](https://medium.com/airbnb-engineering/adopting-bazel-for-web-at-scale-a784b2dbe325) (Nov 12, 2024)\n\n### [ALDO](https://www.aldogroup.com)\n\n- [The Impact of Web Performance](https://simplified.dev/performance/impact-of-web-performance) (February 6, 2020)\n\n### [Algolia](https://www.algolia.com)\n\n- [Improving Web Performance to Mirror Engine Speed](https://blog.algolia.com/improving-web-performance-to-mirror-engine-speed) (July 26, 2017)\n- [Using NetInfo API to Improve Algolia’s JavaScript Client](https://blog.algolia.com/netinfo-api-algolia-javascript-client/) (July 30, 2019)\n\n### [Allegro](https://allegro.pl)\n\n- [Managing Frontend in the Microservices Architecture](https://blog.allegro.tech/2016/03/Managing-Frontend-in-the-microservices-architecture.html) (March 12, 2016)\n- [Why Allegro Ads chose TypeScript](https://blog.allegro.tech/2019/04/why-allegro-ads-chose-typescript.html) (April 9, 2019)\n- [Page visibility and performance metrics](https://blog.allegro.tech/2019/09/page-visibility-and-performance-metrics.html) (September 2, 2019)\n- [Performance of JavaScript optional chaining](https://blog.allegro.tech/2019/11/performance-of-javascript-optional-chaining.html) (November 8, 2019)\n- [Using ESLint to improve your app’s performance](https://blog.allegro.tech/2020/08/using-eslint.html) (August 11, 2020)\n- [Measuring Web Performance](https://blog.allegro.tech/2021/06/measuring-web-performance.html) (June 8, 2021)\n- [Making API calls a seamless user experience](https://blog.allegro.tech/2021/07/making-api-calls-seamless-ux.html) (July 21, 2021)\n- [CSS Architecture and Performance in Micro Frontends](https://blog.allegro.tech/2021/07/css-architecture-and-performance-of-micro-frontends.html) (July 29, 2021)\n- [How to turn on TypeScript strict mode in specific files](https://blog.allegro.tech/2021/09/How-to-turn-on-TypeScript-strict-mode-in-specific-files.html) (September 6, 2021)\n- [Evolution of web performance culture](https://blog.allegro.tech/2021/09/evolution-of-web-performance-culture.html) (September 23, 2021)\n- [How we refactored the search form UI component](https://blog.allegro.tech/2021/10/refactoring-opbox-search.html) (October 26, 2021)\n\n### [Amazon](https://www.amazon.com)\n\n- [How we halved the publish size of modular AWS SDK for JavaScript clients](https://aws.amazon.com/blogs/developer/how-we-halved-the-publish-size-of-modular-aws-sdk-for-javascript-clients/) (October 14, 2021)\n- [How Prime Video updates its app for more than 8,000 device types: the switch to WebAssembly increases stability, speed](https://www.amazon.science/blog/how-prime-video-updates-its-app-for-more-than-8-000-device-types) (January 27, 2022)\n\n### [Artsy](https://www.artsy.net/)\n\n- [Rendering on the Server and Client in Node.js](http://artsy.github.io/blog/2013/11/30/rendering-on-the-server-and-client-in-node-dot-js/) (November 30, 2013)\n- [The Tech Behind Live Auction Integration](http://artsy.github.io/blog/2016/08/09/the-tech-behind-live-auction-integration/) (August 9, 2016)\n- [React Native at Artsy](http://artsy.github.io/blog/2016/08/15/React-Native-at-Artsy/) (August 15, 2016)\n- [Making Artsy Editorial Accessible](http://artsy.github.io/blog/2017/08/29/Making-Artsy-Editorial-Accessible/) (August 29, 2017)\n- [Helping the Web Towards OSS by Default](http://artsy.github.io/blog/2016/09/06/Milestone-on-OSS-by-Default/) (September 6, 2016)\n- [JSON Web Tokens: Artsy's Journey](http://artsy.github.io/blog/2016/10/26/jwt-artsy-journey/) (October 26, 2016)\n- [Exploration: Front-end JavaScript at Artsy in 2017](http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/) (February 5, 2017)\n- [Modernizing Force](http://artsy.github.io/blog/2017/09/05/Modernizing-Force/) (September 5, 2017)\n- [React Native, 2 years later](http://artsy.github.io/blog/2018/03/17/two-years-of-react-native/) (March 17, 2018)\n- [Keeping Artsy's dependencies up to date](http://artsy.github.io/blog/2018/11/26/keeping-dependencies-updated/) (November 26, 2018)\n- [Switch from Capybara Webkit to Chrome](http://artsy.github.io/blog/2018/11/27/switch-from-capybara-webkit-to-chrome/) (November 27, 2018)\n- [GraphQL Stitching 101](http://artsy.github.io/blog/2018/12/11/GraphQL-Stitching/) (December 11, 2018)\n- [GraphQL: Union vs. Interface](http://artsy.github.io/blog/2019/01/14/graphql-union-vs-interface/) (January 14, 2019)\n- [From TSLint to ESLint, or How I Learned to Lint GraphQL Code](http://artsy.github.io/blog/2019/01/29/from-tslint-to-eslint/) (January 29, 2019)\n\n### [Atlassian](https://www.atlassian.com/)\n\n- [Trellisheets: How we spin up CSS for Trello sites with ease](https://www.atlassian.com/engineering/trellisheets-how-we-spin-up-css-for-trello-sites-with-ease) (March 1, 2016)\n- [A look at Trello: adopting GraphQL and Apollo in a legacy application](https://www.atlassian.com/engineering/a-look-at-trello-adopting-graphql-and-apollo-in-a-legacy-application) (August 28, 2019)\n- [Using an event-driven architecture to improve Jira Software responsiveness](https://www.atlassian.com/engineering/using-an-event-driven-architecture-to-improve-jira-software-responsiveness) (November 05, 2019)\n- [Scaling React server-side rendering in Jira Cloud](https://www.atlassian.com/engineering/scaling-react-server-side-rendering-in-jira-cloud) (February 04, 2020)\n- [Improving performance through better architecture](https://www.atlassian.com/engineering/react-resource-router-deep-dive) (June 23, 2020)\n- [Performance in Jira front-end: the story of a single line of code](https://www.atlassian.com/engineering/performance-in-jira-front-end) (November 16, 2020)\n- [Performance in Jira front-end: using modern bundles to improve load time](https://www.atlassian.com/engineering/performance-in-jira-front-end-modern-bundles) (December 5, 2020)\n- [Performance in Jira front-end: solving bundle duplicates with Webpack and yarn](https://www.atlassian.com/engineering/performance-in-jira-front-end-solving-bundle-duplicates-with-webpack-and-yarn) (December 22, 2020)\n\n### [Australian Broadcasting Corporation](http://abc.net.au/)\n\n- [Composing Components](https://developers.digital.abc.net.au/2018/09/28/composing-components/) (September 28, 2018)\n- [From data to DOM: Building a text rendering pipeline for React](https://developers.digital.abc.net.au/2019/10/23/from-data-to-dom-building-a-text-rendering-pipeline-for-react/) (October 23, 2019)\n- [Migrating the platform that powers ABC sites to TypeScript](https://developers.digital.abc.net.au/2021/09/30/migrating-the-platform-that-powers-abc-sites-to-typescript/) (September 30, 2021)\n\n### [Badoo](https://badoo.com)\n\n- [How to teach a web app to speak 100 languages: the specifics of localisation](https://badootech.badoo.com/how-to-teach-a-web-app-to-speak-100-languages-the-specifics-of-localisation-514f13ed235c) (March 8, 2017)\n- [The painless way to collect statistics from a web-site](https://badootech.badoo.com/the-painless-way-to-collect-statistics-from-a-web-site-cadc6aa67688) (May 18, 2017)\n- [Translating interfaces into almost fifty languages: Sketch](https://badootech.badoo.com/translating-interfaces-into-almost-fifty-languages-sketch-dc196cf23ee5) (October 17, 2017)\n- Hot localisations update: [part 1](https://badootech.badoo.com/hot-localisations-update-part-1-86fc013d6327), [part 2](https://badootech.badoo.com/part2-hot-localisations-update-12272511df0c) (November 2017)\n- From zero to Cosmos: [part 1](https://badootech.badoo.com/from-zero-to-cosmos-part-1-2d080fe35bf2), [part 2](https://badootech.badoo.com/from-zero-to-cosmos-part-2-97929e13f839), [part 3](https://badootech.badoo.com/from-zero-to-cosmos-part-3-95e2c98c45a6) (February 2018)\n- [Translating Dust templates to JSX](https://badootech.badoo.com/translating-dust-templates-to-jsx-bed273ef41de) (May 16, 2018)\n- [How to manage your Design Tokens with Style Dictionary](https://medium.com/@didoo/how-to-manage-your-design-tokens-with-style-dictionary-98c795b938aa) (September 27, 2018)\n- Optical alignment for frontend developers: [why is it not the same as it is for designers](https://badootech.badoo.com/optical-alignment-for-frontend-developers-part-i-why-it-is-not-the-same-as-for-designers-a082ffca1d3b) and [how can the process be automated](https://badootech.badoo.com/optical-alignment-for-frontend-developers-part-ii-how-can-the-process-be-automated-e41d8de2b18f) (November 22, 2018)\n- Generating multi-brand multi-platform icons with Sketch and a Node.js script: [from the idea to the assets Sketch files](https://badootech.badoo.com/generating-multi-brand-multi-platform-icons-with-sketch-and-a-node-js-script-part1-82f438c7e16c) and [the build script and the generation of the assets](https://badootech.badoo.com/generating-multi-brand-multi-platform-icons-with-sketch-and-a-node-js-script-part2-8d02e8bb915a) (December 2018)\n- [Covering A/B tests with UI tests: how to avoid getting tangled up in your own code](https://badootech.badoo.com/covering-ab-tests-with-ui-testing-1df5401ff0e1) (February 22 2019)\n- [Design Tokens beyond colors, typography, and spacing](https://badootech.badoo.com/design-tokens-beyond-colors-typography-and-spacing-ad7c98f4f228) (November 12, 2019)\n\n### [BBC](http://www.bbc.com)\n\n- [Redefining the BBC News core experience](https://wildlyinaccurate.com/redefining-the-bcc-news-core-experience/) (July 22, 2016)\n- [HTTP/2 is easy, just turn it on…](https://medium.com/bbc-design-engineering/http-2-is-easy-just-turn-it-on-34baad2d1fb1) (November 7, 2017)\n- [How BBC Interactive Content Works Across AMP, Apps, And The Web](https://www.smashingmagazine.com/2018/03/bbc-interactive-content-amp-apps-web/) (March 15, 2018)\n\n### [Betty Crocker](https://www.bettycrocker.com)\n\n- [Wake Lock API case study: 300% increase in purchase intent indicators on BettyCrocker.com](https://web.dev/betty-crocker/) (May 19, 2020)\n\n### [Bitmovin](https://bitmovin.com)\n\n- [How Bitmovin Used React/Redux to Develop Its New Dashboard](https://bitmovin.com/bitmovin-used-reactredux-to-develop-new-dashboard/) (September 7, 2017)\n- [To Play, or Not to Play – New AutoPlay Policies for Safari 11 and Chrome 64](https://bitmovin.com/play-not-play-new-autoplay-policies-safari-11-chrome-64/) (September 28, 2017)\n- [To Play, or Not to Play #2 – Firefox blocks audible autoplay by default!](https://bitmovin.com/firefox-blocks-audible-autoplay/) (February 20, 2019)\n\n### [blogfoster](http://www.blogfoster.com/)\n\n- [Jumpstart to React+Redux Development](http://engineering.blogfoster.com/jumpstart-to-react-redux-development/)\n- [Centralized ESLint Configuration](http://engineering.blogfoster.com/centralized-eslint-configuration/)\n- [Redux For Better in-App Analytics](http://engineering.blogfoster.com/redux-for-better-in-app-analytics/)\n- [Managing Complexity in Redux: Higher-Order Reducers and Async State](http://engineering.blogfoster.com/managing-complexity-in-redux-higher-order-reducers-and-async-state/)\n- [How We Simplified our Tooling Setup for Node.js Projects](http://engineering.blogfoster.com/how-we-simplified-our-tooling-setup-for-node-js-projects/)\n- [How to Use the Power of Jest’s Snapshot Testing Without Using Jest](http://engineering.blogfoster.com/how-to-use-the-power-of-jests-snapshot-testing-without-using-jest/)\n\n### [Bloomberg](https://www.bloomberg.com/)\n\n- [How Bloomberg Used React Native to Develop its new Consumer App](https://www.techatbloomberg.com/blog/bloomberg-used-react-native-develop-new-consumer-app/) (December 15, 2016)\n- [wsk: A Straightforward and Maintainable Build System from the Bloomberg Graphics Team](https://www.techatbloomberg.com/blog/wsk-straightforward-maintainable-build-system-bloomberg-graphics-team/) (December 12, 2017)\n- [10 Insights from Adopting TypeScript at Scale](https://www.techatbloomberg.com/blog/10-insights-adopting-typescript-at-scale/) (November 9, 2020)\n\n### [BuzzFeed](https://www.buzzfeed.com)\n\n- [Micro Frontends at BuzzFeed](https://tech.buzzfeed.com/micro-frontends-at-buzzfeed-b8754b31d178) (September 17, 2019)\n- [Accessible BuzzFeed](https://tech.buzzfeed.com/accessible-buzzfeed-2e1f3f94f352) (August 27, 2020)\n- [CLS at BuzzFeed — Part 1: Raising The Floor](https://tech.buzzfeed.com/improving-cumulative-layout-shift-at-buzzfeed-part-1-8b7ead2381dd) (November 6, 2021)\n- [CLS at BuzzFeed — Part 2: Getting Help From Real Users](https://tech.buzzfeed.com/improving-cumulative-layout-shift-at-buzzfeed-part-2-2a846adeb097) (November 6, 2021)\n- [CLS at BuzzFeed — Part 3: Dealing with the unpredictable](https://tech.buzzfeed.com/improving-cumulative-layout-shift-at-buzzfeed-part-3-3a36240861e4) (November 6, 2021)\n\n### [Campaign Monitor](https://www.campaignmonitor.com/)\n\n- [Fixing bugs with Outlook specific CSS](https://cm.engineering/fixing-bugs-with-outlook-specific-css-f4b8ae5be4f4) (November 9, 2016)\n- [Better video previews for email](https://cm.engineering/better-video-previews-for-email-12432ce71846) (December 20, 2016)\n- [How to test accessibility of emails](https://cm.engineering/how-to-test-accessibility-of-emails-b68fed03f5f4) (June 5, 2018)\n\n### [Carousell](https://carousell.com)\n\n- [How we made Carousell’s mobile web experience 3x faster](https://medium.com/carousell-insider/how-we-made-carousells-mobile-web-experience-3x-faster-bbb3be93e006) (October 31, 2018)\n- Building a Dynamic UI System at Carousell (Feb/Mar 2019): [part 1](https://medium.com/carousell-insider/building-a-dynamic-ui-system-at-carousell-part-1-849c30ceacb9), [part 2](https://medium.com/carousell-insider/building-a-dynamic-ui-system-at-carousell-part-2-d46bba8facaa) and [part 3](https://medium.com/carousell-insider/building-a-dynamic-ui-system-at-carousell-part-3-18a317ac37a1)\n- [An Experiment with JSON Schema](https://medium.com/carousell-insider/an-experiment-with-json-schema-133344ebbf82) (April 18, 2019)\n\n### [cars.com](https://www.cars.com)\n\n- [How Cars.com Developer Mac Heller-Ogden Convinced His Bosses to Adopt Node.js](https://modernweb.com/cars-nodejs) (July 17, 2017)\n\n### [Checkbot](https://www.checkbot.io/)\n\n- [Scalable & lightweight web screenshots with SVG](https://www.checkbot.io/article/web-page-screenshots-with-svg/) (November 30, 2018)\n\n### [Clearleft](https://clearleft.com)\n\n- [How to use variable fonts in the real world](https://clearleft.com/posts/how-to-use-variable-fonts-in-the-real-world) (January 26, 2018)\n- [A framework for web performance](https://clearleft.com/posts/a-framework-for-web-performance) (September 20, 2018)\n\n### [Cloudflare](https://www.cloudflare.com/)\n\n- [How we built Origin CA: Web Crypto](https://blog.cloudflare.com/how-we-built-origin-ca-web-crypto/) (May 10, 2016)\n- [Open Sourcing CloudFlare’s UI Framework](https://blog.cloudflare.com/cf-ui/) (June 8, 2016)\n- [Going Global - a Localization Case Study at Cloudflare](https://blog.cloudflare.com/going-global-a-localization-case-study-at-cloudflare/) (August 23, 2017)\n- [How we made our page-load optimisations even faster](https://blog.cloudflare.com/making-page-load-even-faster/) (February 2, 2018)\n- [Real URLs for AMP Cached Content Using Cloudflare Workers](https://blog.cloudflare.com/real-urls-for-amp-cached-content-using-cloudflare-workers/) (November 13, 2018)\n- [Fast Google Fonts with Cloudflare Workers](https://blog.cloudflare.com/fast-google-fonts-with-cloudflare-workers/) (November 22, 2018)\n- [Migrating to React land: Gatsby](https://blog.cloudflare.com/migrating-to-react-land-gatsby/) (March 26, 2020)\n- [Moving from reCAPTCHA to hCaptcha](https://blog.cloudflare.com/moving-from-recaptcha-to-hcaptcha/) (April 8, 2020)\n- [Dark Mode for the Cloudflare Dashboard](https://blog.cloudflare.com/dark-mode/) (September 29, 2021)\n\n### [Cloud Four](https://cloudfour.com/)\n\n- [All Mixed Up: Isomorphic Sorting Gone Wrong](https://cloudfour.com/thinks/all-mixed-up-isomorphic-sorting-gone-wrong/) (October 17, 2019)\n\n### [CodeSandbox](https://codesandbox.io/)\n\n- [Lessons learned refactoring Codesandbox.io from Redux to Cerebral](https://medium.com/p/40e9a5646281) (February 7, 2018)\n\n### [Condé Nast](http://www.condenast.com)\n\n- [The Why and How of Google AMP at Condé Nast](https://technology.condenast.com/story/the-why-and-how-of-google-amp-at-conde-nast) (August 29, 2017)\n\n### [Conductor](https://www.conductor.com/)\n\n- [Painless Migration From Backbone to React/Redux](https://www.youtube.com/watch?v=d8oBIzIgVMA) (February 16, 2018)\n\n### [Datadog](https://www.datadoghq.com)\n\n- [Redux-Doghouse – Creating Reusable React-Redux Components Through Scoping](https://www.datadoghq.com/blog/engineering/redux-doghouse-reusable-react-redux-components-through-scoping/) (November 14, 2016)\n- [How Datadog uses Datadog to gain visibility into the Datadog user experience](https://www.datadoghq.com/blog/engineering/how-datadog-uses-datadog-to-gain-visibility-into-the-datadog-user-experience/) (February 22, 2022)\n- [DRUIDS, the Design System that Powers Datadog](https://www.datadoghq.com/blog/engineering/druids-the-design-system-that-powers-datadog/) (September 29, 2022)\n- [Making Fetch Happen - Building a General-purpose Query & Render Scheduler](https://www.datadoghq.com/blog/engineering/making-fetch-happen-building-a-general-purpose-query-and-render-scheduler/) (April 17, 2023)\n- [How We Migrated Our Acceptance Tests to Use Synthetic Monitoring](https://www.datadoghq.com/blog/engineering/migrating-acceptance-tests-to-synthetic-monitoring/) (June 30, 2023)\n\n### [DAZN](https://dazn.com/)\n\n- [Testing MobX State Tree](https://medium.com/dazn-tech/testing-mobx-state-tree-c588f4bfc430) (December 7, 2018)\n- [Handling complexity in lambda functions](https://medium.com/dazn-tech/handling-complexity-in-lambda-functions-e7acfbeb920a) (February 8, 2019)\n- [Micro-frontends, the future of Frontend architectures](https://medium.com/dazn-tech/micro-frontends-the-future-of-frontend-architectures-5867ceded39a) (April 2, 2019)\n- [Adopting a Micro-frontends architecture](https://medium.com/dazn-tech/adopting-a-micro-frontends-architecture-e283e6a3c4f3) (April 8, 2019)\n- [Orchestrating micro-frontends](https://medium.com/dazn-tech/orchestrating-micro-frontends-a5d2674cbf33) (April 12, 2019)\n- [Jest: Our journey into performant unit tests](https://medium.com/dazn-tech/jest-our-journey-into-performant-unit-tests-a6efcb4bd9b) (April 15, 2019)\n- [Identifying micro-frontends in our applications](https://medium.com/dazn-tech/identifying-micro-frontends-in-our-applications-4b4995f39257) (May 21, 2019)\n\n### [De Voorhoede](https://www.voorhoede.nl)\n\n- [Why our website is faster than yours](https://www.voorhoede.nl/en/blog/why-our-website-is-faster-than-yours) (July 16, 2016)\n\n### [DEV](https://dev.to)\n\n- [App shell UX with service workers and streams](https://github.com/GoogleChrome/web.dev/blob/a64d870f59c25431bbedf0ef06aa635072c43a2e/src/site/content/en/reliable/app-shell-ux-with-service-workers/index.md) (June 23, 2020)\n\n### [Discord](https://discordapp.com/)\n\n- [Using React Native: One Year Later](https://blog.discordapp.com/using-react-native-one-year-later-91fd5e949933) (June 7, 2016)\n- [Lessons from migrating a large codebase to React 16](https://blog.discordapp.com/lessons-from-migrating-a-large-codebase-to-react-16-e60e49102aa6) (October 5, 2017)\n- [Why Discord is Sticking with React Native](https://blog.discordapp.com/why-discord-is-sticking-with-react-native-ccc34be0d427) (July 26, 2018)\n- [How Discord Maintains Performance While Adding Features](https://blog.discordapp.com/how-discord-maintains-performance-while-adding-features-28ddaf044333) (August 2, 2018)\n- [How Discord Handles Two and Half Million Concurrent Voice Users using WebRTC](https://blog.discordapp.com/how-discord-handles-two-and-half-million-concurrent-voice-users-using-webrtc-ce01c3187429) (September 10, 2018)\n- [Investigating Discord’s React Memory Leak](https://blog.discordapp.com/discord-react-memory-leak-565c89763e8) (August 8, 2019)\n- [How Discord achieves native iOS performance with React Native](https://blog.discordapp.com/how-discord-achieves-native-ios-performance-with-react-native-390c84dcd502) (November 7, 2019)\n- [How Discord Implemented App-Wide Keyboard Navigation](https://blog.discord.com/how-discord-implemented-app-wide-keyboard-navigation-abf073fd71de) (December 17, 2020)\n\n### [&lt;div&gt;RIOTS](https://divriots.com)\n\n- [A story of how we migrated to pnpm](https://divriots.com/blog/switching-to-pnpm) (January 18, 2022)\n\n### [DoorDash](https://www.doordash.com)\n\n- [Things to Keep in Mind When Integrating a Map Feature to a Web App](https://doordash.engineering/2020/09/11/integrating-a-map-feature-to-a-web-app/) (Septermber 11, 2020)\n- [Building the Caviar Web Experience Using Reusable React Components on the DoorDash Platform](https://doordash.engineering/2020/09/29/caviar-web-experience-react-components/) (September 29, 2020)\n- [Implementing Theming in DoorDash’s Design Language System](https://doordash.engineering/2020/12/17/design-language-system-theming/) (December 17, 2020)\n- [Serving Multiple Websites and Business Logic From a Single Platform](https://doordash.engineering/2021/02/09/serving-multiple-websites-and-business-logic-from-a-single-platform/) (February 9, 2021)\n- [Managing React State on DoorDash’s Item Modal Using the Class Pattern](https://doordash.engineering/2021/04/21/managing-react-state-using-the-class-pattern/) (April 21, 2021)\n- [Building a Marketing Engineering Platform using Next.js, Cloudflare, and Contentful](https://doordash.engineering/2022/02/22/building-a-marketing-engineering-platform-using-next-js-cloudflare-and-contentful/) (February 22, 2022)\n- [Improving Web Page Performance at DoorDash Through Server-Side Rendering with Next.JS](https://doordash.engineering/2022/03/29/improving-web-page-performance-at-doordash-throughserver-side-rendering-with-next-js/) (March 29, 2022)\n- [Building a Common Web Library for Fast Implementations of Risk Frictions](https://doordash.engineering/2022/03/31/building-a-common-web-library-for-fast-implementations-of-risk-frictions/) (March 31, 2022)\n- [DoorDash’s Lessons on Improving Performance on High-Traffic Web Pages](https://doordash.engineering/2022/08/30/doordashs-lessons-on-improving-performance-on-high-traffic-web-pages/) (August 30, 2022)\n\n### [Dropbox](https://www.dropbox.com)\n\n- [Translating Dropbox](https://blogs.dropbox.com/tech/2011/04/hello-world/) (April 18, 2011)\n- [Some love for JavaScript applications](https://blogs.dropbox.com/tech/2012/08/some-love-for-javascript-applications-2/) (August 31, 2012)\n- [Dropbox dives into CoffeeScript](https://blogs.dropbox.com/tech/2012/09/dropbox-dives-into-coffeescript/) (September 13, 2012)\n- Content Security Policy at Dropbox (September 2015): [On Reporting and Filtering](https://blogs.dropbox.com/tech/2015/09/on-csp-reporting-and-filtering/), [Unsafe-inline and nonce deployment](https://blogs.dropbox.com/tech/2015/09/unsafe-inline-and-nonce-deployment/), [The Unexpected Eval](https://blogs.dropbox.com/tech/2015/09/csp-the-unexpected-eval/), [Third Party Integrations and Privilege Separation](https://blogs.dropbox.com/tech/2015/09/csp-third-party-integrations-and-privilege-separation/)\n- [Enabling HTTP/2 for Dropbox web services: experiences and observations](https://blogs.dropbox.com/tech/2016/05/enabling-http2-for-dropbox-web-services-experiences-and-observations/) (May 11, 2016)\n- [Annotations on Document Previews](https://blogs.dropbox.com/tech/2016/11/annotations-on-document-previews/) (November 30, 2016)\n- [Preventing cross-site attacks using same-site cookies](https://blogs.dropbox.com/tech/2017/03/preventing-cross-site-attacks-using-same-site-cookies/) (March 16, 2017)\n- [Deploying Brotli for static content](https://blogs.dropbox.com/tech/2017/04/deploying-brotli-for-static-content/) (April 6, 2017)\n- [Dropbox Paper: Emojis and Exformation](https://blogs.dropbox.com/tech/2017/11/dropbox-paper-emojis-and-exformation/) (November 15, 2017)\n- [Improving Document Preview Performance](https://blogs.dropbox.com/tech/2017/12/improving-document-preview-performance/) (December 1, 2017)\n- [Migrating from Underscore to Lodash](https://blogs.dropbox.com/tech/2018/09/migrating-from-underscore-to-lodash/) (September 5, 2018)\n- [Redux with Code-Splitting and Type Checking](https://blogs.dropbox.com/tech/2019/07/redux-with-code-splitting-and-type-checking/) (July 16, 2019)\n- [Design Tooling at Scale](https://dropbox.design/article/design-tooling-at-scale) (October 12, 2019)\n- [The Great CoffeeScript to Typescript Migration of 2017](https://dropbox.tech/frontend/the-great-coffeescript-to-typescript-migration-of-2017) (May 13, 2020)\n- [JQuery to React: How we rewrote the HelloSign Editor](https://dropbox.tech/application/jquery-to-react--how-we-rewrote-the-hellosign-editor) (September 30, 2020)\n\n### [eBay](https://www.ebay.com)\n\n- [Data URI Sprites](https://tech.ebayinc.com/engineering/data-uri-sprites/) (July 12, 2011)\n- [The New eBay Motors Homepage is 2X Faster](https://tech.ebayinc.com/engineering/the-new-ebay-motors-homepage-is-2x-faster/) (October 14, 2011)\n- [Five JavaScript Tips for a Sleek User Experience](https://tech.ebayinc.com/engineering/five-javascript-tips-for-a-sleek-user-experience/) (April 16, 2012)\n- [Page Loading and Rendering Optimizations](https://tech.ebayinc.com/engineering/page-loading-and-rendering-optimizations/) (June 22, 2012)\n- [Bandwidth-based Experience](https://tech.ebayinc.com/engineering/bandwidth-based-experience/) (October 10, 2012)\n- [Early Detection of Frontend Single Points of Failure](https://tech.ebayinc.com/engineering/early-detection-of-frontend-single-points-of-failure/) (January 22, 2013)\n- [Front-end Renaissance at eBay](https://tech.ebayinc.com/engineering/front-end-renaissance-at-ebay/) (January 13, 2014)\n- [Yet Another Responsive vs. Adaptive Story](https://tech.ebayinc.com/engineering/yet-another-responsive-vs-adaptive-story/) (March 5, 2014)\n- [Don't Build Pages, Build Modules](https://tech.ebayinc.com/engineering/dont-build-pages-build-modules/) (October 2, 2014)\n- [Async Fragments: Rediscovering Progressive HTML Rendering with Marko](https://tech.ebayinc.com/engineering/async-fragments-rediscovering-progressive-html-rendering-with-marko/) (December 8, 2014)\n- [The Power of Perceived Performance](https://tech.ebayinc.com/engineering/the-power-of-perceived-performance/) (January 5, 2015)\n- [Mobile First - A Retrospective](https://www.ebayinc.com/stories/blogs/tech/mobile-first-a-retrospective/) (May 13, 2015)\n- [How Our CSS Framework Helps Enforce Accessibility](https://www.ebayinc.com/stories/blogs/tech/how-our-css-framework-helps-enforce-accessibility/) (November 4, 2015)\n- [Packaging for Performance](https://tech.ebayinc.com/engineering/packaging-for-performance/) (January 4, 2016)\n- [The Path to JavaScript Next](https://www.ebayinc.com/stories/blogs/tech/the-path-to-javascript-next/) (March 15, 2016)\n- [Browse eBay with Style and Speed](https://tech.ebayinc.com/engineering/browse-ebay-with-style-and-speed/) (June 30, 2016)\n- [Experience the Lightning Bolt](https://tech.ebayinc.com/engineering/experience-the-lightning-bolt/) (September 21, 2016)\n- [Effective Front-End Code Review](https://tech.ebayinc.com/engineering/effective-front-end-code-review/) (March 2, 2017)\n- [Building a UI Component in 2017 and Beyond](https://www.ebayinc.com/stories/blogs/tech/building-a-ui-component-in-2017-and-beyond) (May 3, 2017)\n- [eBay’s Font Loading Strategy](https://www.ebayinc.com/stories/blogs/tech/ebays-font-loading-strategy) (September 21, 2017)\n- [The Future of Marko](https://www.ebayinc.com/stories/blogs/tech/the-future-of-marko/) (October 26, 2017)\n- [Beyond HTTPS](https://www.ebayinc.com/stories/blogs/tech/beyond-https/) (December 13, 2017)\n- [Integration Testing with React and Enzyme](https://tech.ebayinc.com/engineering/integration-testing-with-react-and-enzyme/) (June 26, 2018)\n- [WebAssembly at eBay: A Real-World Use Case](https://www.ebayinc.com/stories/blogs/tech/webassembly-at-ebay-a-real-world-use-case/) (May 22, 2019)\n- [Autofill on Browsers: A Deep Dive](https://tech.ebayinc.com/engineering/autofill-deep-dive/) (December 3, 2019)\n- [Speed By A Thousand Cuts](https://tech.ebayinc.com/engineering/speed-by-a-thousand-cuts/) (January 23, 2020)\n- [Front End Debugging — Tips on Resolving Issues Quickly so You Can Move on to Better Things](https://tech.ebayinc.com/engineering/front-end-debugging-tips-on-resolving-issues-quickly-so-you-can-move-on-to-better-things/) (April 7, 2020)\n- [Auto Effect Pattern with Redux and React Hooks](https://tech.ebayinc.com/engineering/auto-effect-pattern-with-redux-and-react-hooks/) (April 15, 2020)\n\n### [EdgeDB](https://www.edgedb.com)\n\n- [An approach to optimizing TypeScript type checking performance](https://www.edgedb.com/blog/an-approach-to-optimizing-typescript-type-checking-performance#the-next-generation-of-performance-tools) (August 8, 2024)\n\n### [Electronic Arts](https://www.ea.com)\n\n- [Building UI at Enterprise Scale with Web Components](https://youtu.be/FJ2KEvzlyo4) (August 22, 2017)\n\n### [Ele.me](https://www.ele.me)\n\n- [Upgrading Ele.me to Progressive Web App](https://medium.com/elemefe/upgrading-ele-me-to-progressive-web-app-2a446832e509) (May 6, 2017)\n\n### [Etsy](https://www.etsy.com)\n\n- [Localizing Logically for a Global Marketplace](https://codeascraft.com/2011/10/21/localizing-logically-for-a-global-marketplace/) (October 21, 2011)\n- [Multilingual User Generated Content and SEO](https://codeascraft.com/2011/12/02/multilingual-user-generated-content-and-seo/) (December 2, 2011)\n- [Measuring Front-end Performance With Real Users](https://codeascraft.com/2012/11/29/measuring-front-end-performance-with-real-users/) (November 29, 2012)\n- [Responsive emails that really work](https://codeascraft.com/2014/03/13/responsive-emails-that-really-work/) (March 13, 2014)\n- [Transitioning to SCSS at Scale](https://codeascraft.com/2015/02/02/transitioning-to-scss-at-scale/) (February 2, 2015)\n- [Rebuilding the Foundation of Etsy’s Seller Tools](https://codeascraft.com/2015/02/05/rebuilding-the-foundation-of-etsy-seller-tools/) (February 5, 2015)\n- [How Etsy Formats Currency](https://codeascraft.com/2016/04/19/how-etsy-formats-currency/) (April 19, 2016)\n- [SEO Title Tag Optimization at Etsy: Experimental Design and Causal Inference](https://codeascraft.com/2016/10/25/seo-title-tag-optimization/) (October 25, 2016)\n- [Optimizing Meta Descriptions, H1s and Title Tags: Lessons from Multivariate SEO Testing at Etsy](https://codeascraft.com/2017/01/25/optimizing-meta-descriptions-h1s-and-title-tags-lessons-from-multivariate-seo-testing-at-etsy/) (January 25, 2017)\n- [Reducing Image File Size at Etsy](https://codeascraft.com/2017/05/30/reducing-image-file-size-at-etsy/) (May 30, 2017)\n- [How Etsy Localizes Addresses](https://codeascraft.com/2018/09/26/how-etsy-localizes-addresses/) (September 26, 2018)\n- [Developing in a Monorepo While Still Using Webpack](https://codeascraft.com/2020/04/06/developing-in-a-monorepo-while-still-using-webpack/) (April 6, 2020)\n- [The journey to fast production asset builds with Webpack](https://codeascraft.com/2020/02/03/production-webpack-builds/) (February 3, 2020)\n- [Etsy’s Journey to TypeScript](https://codeascraft.com/2021/11/08/etsys-journey-to-typescript) (November 8, 2021)\n\n### [Evil Martians](https://evilmartians.com/)\n\n- [Is React Native podium-ready?](https://evilmartians.com/chronicles/is-react-native-podium-ready) (May 14, 2018)\n\n### [Expedia Group](https://www.expediagroup.com)\n\n- [Scoping A/B Test Code in React](https://medium.com/expedia-group-tech/a-b-testing-and-the-cloak-of-invisibility-a-better-way-to-scope-variant-code-in-your-react-app-902a68a0c2c3) (September 4, 2018)\n- [Profiling React Server-Side Rendering to Free the Node.js Event Loop](https://medium.com/expedia-group-tech/profiling-react-server-side-rendering-to-free-the-node-js-event-loop-7f0fe455a901) (February 18, 2019)\n- [Creating Your Own Apollo Cache for Perf and Profit](https://medium.com/expedia-group-tech/creating-your-own-apollo-cache-for-perf-and-profit-8f786849e5f6) (February 7, 2019)\n- [Optimizing a Page: Resource Hints, Critical CSS, and Webpack](https://medium.com/expedia-group-tech/optimize-a-page-resource-hint-critical-css-webpack-c8cc7319fb87) (March 20, 2019)\n- [Contextual and Consistent Analytic Events in React](https://medium.com/expedia-group-tech/contextual-and-consistent-analytic-event-triggering-in-react-40b48b15739e) (April 22, 2019)\n- [Minimizing DOM Nodes for Performance](https://medium.com/expedia-group-tech/minimizing-dom-nodes-for-performance-57f347df4c72) (September 24, 2019)\n- [Web Performance vs. User Engagement](https://medium.com/expedia-group-tech/web-performance-vs-user-engagement-7eda84f6436b) (October 31, 2019)\n- [Migrating to WKWebView](https://medium.com/expedia-group-tech/migrating-to-wkwebview-d5b6d0e52c4f) (December 11, 2019)\n- [A (Small) Case for Function-Based React Components](https://medium.com/expedia-group-tech/a-small-case-for-function-based-react-components-2939cd8df975) (December 10, 2019)\n- [Measuring Interaction Performance with FPS Data](https://medium.com/expedia-group-tech/measuring-interaction-performance-with-fps-data-b0eee1d102c4) (December 16, 2019)\n- [File Upload with GraphQL, Apollo Server, Hapi 18+, and React](https://medium.com/expedia-group-tech/file-upload-with-graphql-apollo-server-hapi-18-and-react-2390e297619d) (January 16, 2020)\n- [Web Applications: Analyzing Client-Side Performance](https://medium.com/expedia-group-tech/web-applications-analyzing-client-side-performance-37e9cc4ad86b) (January 7, 2020)\n- [Schema Driven UIs](https://medium.com/expedia-group-tech/schema-driven-uis-dd8fdb516120) (January 23, 2020)\n- [Responsive Accessibility Guidelines at Expedia.com](https://medium.com/expedia-group-tech/responsive-accessibility-guidelines-at-expedia-com-cc1184c4f271) (February 27, 2020)\n- [12 Tips to Improve Client Side Page Performance](https://medium.com/expedia-group-tech/12-tips-to-improve-client-side-page-performance-88c7bec27933) (April 28, 2020)\n- [Using Webpack Module Federation to Create an App Shell](https://medium.com/expedia-group-tech/using-webpack-module-federation-to-share-an-app-shell-7d23633510e) (June 10, 2020)\n- [CSS-in-JS: An Investigation](https://medium.com/expedia-group-tech/css-in-js-an-investigation-39338a1057db) (July 7, 2020)\n- [Multi-Variate Web Optimisation Using Linear Contextual Bandits](https://medium.com/expedia-group-tech/multi-variate-web-optimisation-using-linear-contextual-bandits-567f563cb59) (September 1, 2020)\n- [How Expedia.com Uses Accessibility Automation](https://medium.com/expedia-group-tech/how-expedia-com-uses-accessibility-automation-d3de3e3ff775) (October 1, 2020)\n- [Sizing Android WebView iframes with JavaScript](https://medium.com/expedia-group-tech/sizing-android-webview-iframes-with-javascript-abae73fe6602) (April 27, 2021)\n\n### [ezCater](https://www.ezcater.com/)\n\n- [The case against React snapshot testing](https://engineering.ezcater.com/the-case-against-react-snapshot-testing) (June 27, 2019)\n- [Saying goodbye to emotion](https://engineering.ezcater.com/saying-goodbye-to-emotion) (June 1, 2021)\n\n### [Facebook](https://facebook.com)\n\n- [Building the F8 App with React Native](http://makeitopen.com)\n- [BigPipe: Pipelining web pages for high performance](https://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919/) (June 4, 2010)\n- [Facebook has 30,000 react components. How do you manage large project directories with many components?](https://www.reddit.com/r/reactjs/comments/6al7h2/facebook_has_30000_react_components_how_do_you/dhgruqh/) (December 31, 2013)\n- [The technology behind preview photos](https://code.facebook.com/posts/991252547593574/the-technology-behind-preview-photos/) (August 6, 2015)\n- [Improving CSS quality at Facebook and beyond](https://code.fb.com/open-source/improving-css-quality-at-facebook-and-beyond/) (June 13, 2016)\n- [This browser tweak saved 60% of requests to Facebook](https://code.facebook.com/posts/557147474482256) (January 26, 2017)\n- [Building High-Quality JavaScript Tools](https://youtu.be/PvabBs_utr8) (June 2, 2017)\n- [React 16: A look inside an API-compatible rewrite of our frontend UI library](https://code.facebook.com/posts/1716776591680069) (September 26, 2017)\n- [Design Systems & Tools at Facebook](https://vimeo.com/242899818) (November 15, 2017)\n- [Behind the Scenes: Improving the React Repository Infrastructure](https://reactjs.org/blog/2017/12/15/improving-the-repository-infrastructure.html) (December 15, 2017)\n- [Faster input events with Facebook’s first browser API contribution](https://code.fb.com/developer-tools/isinputpending-api/) (April 22, 2019)\n- [Building the New facebook.com with React, GraphQL and Relay](https://developers.facebook.com/videos/2019/building-the-new-facebookcom-with-react-graphql-and-relay/) (April 30, 2019)\n- [Rebuilding our tech stack for the new Facebook.com](https://engineering.fb.com/web/facebook-redesign/) (May 8, 2020)\n- [Making Facebook.com accessible to as many people as possible](https://engineering.fb.com/web/facebook-com-accessibility/) (July 30, 2020)\n\n### [FARFETCH](https://www.farfetch.com)\n\n- [The need for speed — 1: measuring today’s web performance](https://www.linkedin.com/pulse/need-speed-1-measuring-todays-web-performance-manuel-garcia/) (February 19, 2019)\n- [The need for speed — 2: call for metrics](https://www.linkedin.com/pulse/need-speed-2-call-metrics-manuel-garcia/) (February 19, 2019)\n- [How to build a performance culture at scale](https://www.linkedin.com/pulse/how-build-performance-culture-scale-manuel-garcia/) (September 11, 2019)\n- [One less second for the page, one giant leap for the business](https://www.linkedin.com/pulse/one-less-second-page-giant-leap-business-manuel-garcia) (July 2, 2020)\n- [GraphQL sessions: powering farfetch.com](https://farfetchtech.medium.com/graphql-sessions-powering-farfetch-com-305e7c0901e7) (May 6, 2022)\n\n### [fastq.bio](http://www.fastq.bio/)\n\n- [How We Used WebAssembly To Speed Up Our Web App By 20X](https://www.smashingmagazine.com/2019/04/webassembly-speed-web-app/) (April 5, 2019)\n\n### [Figma](https://www.figma.com)\n\n- [Building a professional design tool on the web](https://www.figma.com/blog/building-a-professional-design-tool-on-the-web/) (December 7, 2015)\n- [Debugging Data Corruption with Emscripten](https://www.figma.com/blog/debugging-data-corruption-with-emscripten/) (November 7, 2016)\n- [WebAssembly cut Figma’s load time by 3x](https://blog.figma.com/webassembly-cut-figmas-load-time-by-3x-76f3f2395164) (June 8, 2017)\n- [Introducing BrowserView for Electron](https://www.figma.com/blog/introducing-browserview-for-electron/) (June 29, 2017)\n- [Introducing: Figma to React](https://www.figma.com/blog/introducing-figma-to-react/) (April 26, 2018)\n- [Figma, faster 🏎](https://www.figma.com/blog/figma-faster/) (August 13, 2018)\n- [How to build a plugin system on the web and also sleep well at night](https://www.figma.com/blog/how-we-built-the-figma-plugin-system/) (August 22, 2019)\n- [React at 60fps: improving scrolling comments in Figma](https://www.figma.com/blog/improving-scrolling-comments-in-figma/) (August 19, 2020)\n- [Inside Figma: a case study on strict null checks](https://www.figma.com/blog/inside-figma-a-case-study-on-strict-null-checks/#what-are-strict-null-checks) (December 17, 2020)\n- [Illuminating dark mode](https://www.figma.com/blog/illuminating-dark-mode) (July 21, 2022)\n- [The evolution of Figma’s mobile engine: Compiling away our custom programming language](https://www.figma.com/blog/figmas-journey-to-typescript-compiling-away-our-custom-programming-language/) (May 1, 2024)\n\n### [Financial Times](https://www.ft.com)\n\n- [Building The New Financial Times Web App](https://www.smashingmagazine.com/2013/05/building-the-new-financial-times-web-app-a-case-study) (May 23, 2013)\n- [Free-market software development](http://matt.chadburn.co.uk/notes/teams-as-services.html) (August 21, 2015)\n- [SVG icons are easy but the fallbacks aren't](https://www.maketea.co.uk/2015/12/14/svg-icons-are-easy-but-the-fallbacks-arent.html) (December 1, 2015)\n- [A faster FT.com](https://medium.com/ft-product-technology/a-faster-ft-com-10e7c077dc1c) (April 4, 2016)\n- [YES, your site too can (and should) be accessible](https://www.youtube.com/watch?v=H4FzW9oFObs) (May 23, 2017)\n- [Improving the cache performance of The Polyfill Service](https://jakechampion.name/posts/2017-06-09-improving-the-cache-performance-of-the-polyfill-service/) (June 9, 2017)\n- [Can't You Just Make It More like Bootstrap?](https://vimeo.com/226575101) (July 22, 2017)\n- [Speeding up without slowing down](https://ldnwebperf.org/sessions/speeding-up-without-slowing-down/) (November 7, 2017)\n- [What happens when you visit ft.com?](https://medium.com/ft-product-technology/making-a-request-to-the-financial-times-b2119a2f422d) (November 24, 2017)\n- [Tips for in-house teams in a free market software culture](https://medium.com/ft-product-technology/tips-for-in-house-teams-in-a-free-market-software-culture-d18ba80c8c4) (January 30, 2018)\n- [An outbreak of Accessibility anti-patterns](https://medium.com/ft-product-technology/an-outbreak-of-accessibility-anti-patterns-e73577242ee8) (May 18, 2018)\n- [This one line of Javascript made FT.com 10 times slower](https://medium.com/ft-product-technology/this-one-line-of-javascript-made-ft-com-10-times-slower-5afb02bfd93f) (July 16, 2018)\n- [Improving the cache performance of The Polyfill Service even more](https://jakechampion.name/posts/improving-the-cache-performance-of-the-polyfill-service-even-more/) (January 21, 2019)\n- [Designing a sustainable front-end toolset for FT.com](https://medium.com/ft-product-technology/designing-a-sustainable-front-end-toolset-for-ft-com-f37c59d27eeb) (April 27, 2020)\n- [Animating list reordering with React Hooks](https://medium.com/ft-product-technology/animating-list-reordering-with-react-hooks-1aa0d78a24dc) (August 26, 2020)\n- [Taming Webpackʼs content hashes](https://www.matthinchliffe.dev/2020/06/03/taming-webpacks-content-hashes.html) (June 3, 2020)\n\n### [Flickr](https://www.flickr.com/)\n\n- [Lessons Learned from the Flickr Touch Lightbox](http://code.flickr.net/2011/07/20/lessons-learned-from-the-flickr-touch-lightbox/) (July 20, 2011)\n- [Creating an interface for geofences](http://code.flickr.net/2011/09/06/creating-an-interface-for-geofences/) (September 6, 2011)\n- [Raising the bar on web uploads](http://code.flickr.net/2012/04/25/raising-the-bar-on-web-uploads/) (April 25, 2012)\n- [Building an HTML5 Photo Editor](http://code.flickr.net/2012/04/18/building-an-html5-photo-editor/) (April 18, 2012)\n- [Building The Flickr Web Uploadr: The Grid](http://code.flickr.net/2012/05/11/building-the-flickr-web-uploadr-the-grid/) (May 11, 2012)\n- [Parsing Exif client-side using JavaScript](http://code.flickr.net/2012/06/01/parsing-exif-client-side-using-javascript-2/) (June 1, 2012)\n- [Adventures in Jank Busting: Parallax, performance, and the new Flickr Home Page](http://code.flickr.net/2013/06/04/adventures-in-jank-busting-parallax-performance-and-the-new-flickr-home-page/) (June 4, 2013)\n- [Building Flickr’s new Hybrid Signed-Out Homepage](http://code.flickr.net/2014/04/23/building-flickrs-new-hybrid-signed-out-homepage/) (April 23, 2014)\n- [Perceptual Image Compression at Flickr](http://code.flickr.net/2015/09/25/perceptual-image-compression-at-flickr/) (September 25, 2015)\n- [Introducing yakbak: Record and playback HTTP interactions in NodeJS](http://code.flickr.net/2016/04/25/introducing-yakbak-record-and-playback-http-interactions-in-nodejs/) (April 25, 2016)\n\n### [Flipboard](https://flipboard.com)\n\n- [Layout in Flipboard for Web and Windows](https://engineering.flipboard.com/2014/03/web-layouts) (March 24, 2014)\n- [60 FPS on the mobile web](https://engineering.flipboard.com/2015/02/mobile-web) (February 10, 2015)\n\n### [Flipkart](https://www.flipkart.com)\n\n- [Building Flipkart Lite: A Progressive Web App](https://medium.com/progressive-web-apps/building-flipkart-lite-a-progressive-web-app-2c211e641883) (November 11, 2015)\n\n### [Flocktory](https://www.flocktory.com)\n\n- [Third party libraries](http://slonoed.net/third-party-js) (May 22, 2017)\n\n### [Futurice](https://futurice.com)\n\n- [How Elm made our work better](https://futurice.com/blog/elm-in-the-real-world) (November 1, 2016)\n\n### [Garbarino](https://www.garbarino.com/)\n\n- [Building a PWA in Argentina](https://medium.com/@leopittelli/building-a-pwa-in-argentina-3ac669eabbeb) (July 24, 2017)\n\n### [GitHub](https://github.com)\n\n- [GitHub's CSS](https://markdotto.com/blog/githubs-css/) (July 23, 2014)\n- [How GitHub is using Web Components in production](https://www.webcomponents.org/community/articles/interview-with-joshua-peek) (September 30, 2014)\n- [Browser Monitoring for GitHub.com](https://githubengineering.com/browser-monitoring-for-github-com/) (May 19, 2015)\n- [GitHub's CSP journey](https://githubengineering.com/githubs-csp-journey/) (April 12, 2016)\n- [GitHub's post-CSP journey](https://githubengineering.com/githubs-post-csp-journey/) (January 19, 2017)\n- [Shipping system fonts to GitHub.com](https://markdotto.com/blog/github-system-fonts/) (February 7, 2018)\n- [Design Systems at GitHub](https://medium.com/@broccolini/design-systems-at-github-c8e5378d2542) (July 6, 2018)\n- [Removing jQuery from GitHub.com frontend](https://githubengineering.com/removing-jquery-from-github-frontend/) (September 6, 2018)\n- [From 48k lines of code to 10—the story of GitHub’s JavaScript SDK](https://github.blog/2020-04-09-from-48k-lines-of-code-to-10-the-story-of-githubs-javascript-sdk) (April 9, 2020)\n- [How we built the GitHub globe](https://github.blog/2020-12-21-how-we-built-the-github-globe/) (December 21, 2020)\n- [How GitHub Actions renders large-scale logs](https://github.blog/2021-03-25-how-github-actions-renders-large-scale-logs/) (March 25, 2021)\n\n### [GitLab](https://gitlab.com)\n\n- [Why We Chose Vue.js](https://youtu.be/ioogrvs2Ejc) (December 1, 2016)\n- [Our big Frontend plan revealed](https://about.gitlab.com/2017/02/06/vue-big-plan/) (February 6, 2017): long term plan to make GitLab as fast and performant as possible with Vue and webpack\n- [How we do Vue: one year later](https://about.gitlab.com/2017/11/09/gitlab-vue-one-year-later/) (November 9, 2017)\n- [How GitLab switched to Headless Chrome for testing](https://about.gitlab.com/2017/12/19/moving-to-headless-chrome) (December 19, 2017)\n- [Our journey in switching to native Unicode emoji](https://about.gitlab.com/blog/2018/05/30/journey-in-native-unicode-emoji/) (May 30, 2018)\n- [How we iterated and improved our frontend team culture](https://about.gitlab.com/2018/06/26/iterating-improving-frontend-culture/) (June 26, 2018)\n- [Why we chose ECharts for data visualizations](https://about.gitlab.com/2019/09/30/why-we-chose-echarts/) (September 30, 2019)\n- [How GitLab Pages made our Sketch design handoffs easier and faster](https://about.gitlab.com/blog/2019/11/07/how-gitlab-pages-made-our-sketch-design-handoffs-easier-and-faster/) (November 7, 2019)\n- [How we created a dark UI for GitLab's Web IDE](https://about.gitlab.com/blog/2020/05/20/creating-a-dark-ui-for-gitlabs-web-ide/) (May 20, 2020)\n\n### [Goibibo](https://www.goibibo.com)\n\n- [How Goibibo's PWA improved conversions by 60%](https://web.dev/goibibo/) (September 29, 2020)\n\n### [Google](https://google.com)\n\n- [Designing very large (JavaScript) applications](https://medium.com/@cramforce/designing-very-large-javascript-applications-6e013a3291a3) (April 15, 2018)\n- [Building the Google Photos Web UI](https://medium.com/google-design/google-photos-45b714dfbed1) (July 10, 2018)\n- [TypeScript at Google](http://neugierig.org/software/blog/2018/09/typescript-at-google.html) (September 1, 2018)\n- [The Chrome Dev Summit site: case study](https://dev.to/chromiumdev/the-chrome-dev-summit-site-case-study-15ng) (March 12,2019)\n- [The new AdWords UI uses Dart — we asked why](https://news.dartlang.org/2016/03/the-new-adwords-ui-uses-dart-we-asked.html) (March 31, 2016)\n- [A Recipe for Designing Animations — Without Sacrificing Performance](https://medium.com/google-design/a-streamlined-workflow-for-performative-animations-be0a6ff3df7a) (June 4, 2019)\n- [Bringing service workers to Google Search](https://web.dev/google-search-sw/) (June 20, 2019)\n- [How we built the Chrome DevTools WebAuthn tab](https://developer.chrome.com/blog/webauthn-tab/) (October 22, 2020)\n- [Migrating Puppeteer to TypeScript](https://developers.google.com/web/updates/2021/01/puppeteer-typescript) (January 21, 2021)\n- [DevTools architecture refresh: migrating DevTools to TypeScript](https://developer.chrome.com/blog/migrating-to-typescript/) (April 8, 2021)\n- [Implementing CSP and Trusted Types debugging in Chrome DevTools](https://developer.chrome.com/en/blog/csp-issues/) (November 1, 2021)\n- [Why Google Sheets ported its calculation worker from JavaScript to WasmGC](https://web.dev/case-studies/google-sheets-wasmgc) (June 26, 2024)\n\n### [GOV.UK](https://www.gov.uk)\n\n- [Accessibility for developers: building a frontend that everyone can use](https://frontendne.co.uk/talks/accessibility-for-developers-building-a-frontend-that-everyone-can-use) (October 6, 2016)\n- [Patterns for accessible webchats](https://accessibility.blog.gov.uk/2016/12/09/patterns-for-accessible-webchats) (December 9, 2016)\n- [How to create content that works well with screen readers](https://accessibility.blog.gov.uk/2017/02/08/advice-for-creating-content-that-works-well-with-screen-readers) (February 8, 2017)\n- [How we’ve made GOV.UK Elements even more accessible](https://accessibility.blog.gov.uk/2018/02/28/how-weve-made-gov-uk-elements-even-more-accessible) (February 28, 2018)\n- [What we learned from getting our autocomplete tested for accessibility](https://accessibility.blog.gov.uk/2018/05/15/what-we-learned-from-getting-our-autocomplete-tested-for-accessibility) (May 15, 2018)\n- [Accessibility lessons: dealing with a large amount of form inputs](https://accessibility.blog.gov.uk/2019/04/08/accessibility-lessons-dealing-with-a-large-amount-of-form-inputs) (April 8, 2019)\n- [Why the GOV.UK Design System team changed the input type for numbers](https://technology.blog.gov.uk/2020/02/24/why-the-gov-uk-design-system-team-changed-the-input-type-for-numbers/) (February 24, 2020)\n- [Why videos on GOV.UK use the YouTube video player](https://accessibility.blog.gov.uk/2020/03/16/why-videos-on-gov-uk-use-the-youtube-video-player/) (March 16, 2020)\n- [How we reduced CSS size and improved performance across GOV.UK](https://gds.blog.gov.uk/2023/12/15/how-we-reduced-css-size-and-improved-performance-across-gov-uk/) (December 15, 2023)\n\n### [grammarly](https://www.grammarly.com)\n\n- [Building Browser Extensions At Scale](https://web.archive.org/web/20190304201001/https://tech.grammarly.com/blog/building-browser-extensions-at-scale) (October 6, 2017)\n- [Introducing Embrace: A Framework for Building Declarative UIs](https://www.grammarly.com/blog/engineering/introducing-embrace/) (September 3, 2021)\n- Under the Hood of the Grammarly Editor: [Real-Time Collaborative Text Editing](https://www.grammarly.com/blog/engineering/real-time-collaborative-text-editing/) and [How Suggestions Work](https://www.grammarly.com/blog/engineering/how-suggestions-work-grammarly-editor/) (April 22, 2022)\n- [Making Grammarly Feel Native On Every Website](https://www.grammarly.com/blog/engineering/making-grammarly-feel-native-on-every-website/) (March 7, 2022)\n- How Grammarly Tackles Hidden Complexity in Front-End Applications: [part 1](https://www.grammarly.com/blog/engineering/part-1-how-grammarly-tackles-hidden-complexity-in-front-end-applications/) and [part 2](https://www.grammarly.com/blog/engineering/part-2-how-grammarly-tackles-hidden-complexity-in-front-end-applications/) (March 7, 2022)\n- [Signals With @grammarly/focal](https://www.grammarly.com/blog/engineering/signals-with-focal-library/) (August 21, 2023)\n\n### [Gusto](https://gusto.com/)\n\n- [Scaling Front-end Architecture](https://engineering.gusto.com/gusto-tech-talk-scaling-front-end-architecture/) (June 10, 2016)\n- [Evolving JavaScript Part 1: Goodbye Backbone](https://engineering.gusto.com/evolving-javascript-part-1-goodbye-backbone/) (July 12, 2016)\n- [Evolving JavaScript Part 2: Hello React](https://engineering.gusto.com/evolving-javascript-part-2-hello-react/) (July 12, 2016)\n- [Evolving JavaScript Part 3: Building a React Application](https://engineering.gusto.com/evolving-javascript-part-3-building-a-react-application/) (July 12, 2016)\n- [Taking off with Apollo](https://engineering.gusto.com/taking-off-with-apollo/) (September 12, 2018)\n- [How I fell out of love with HOCs](https://engineering.gusto.com/how-i-fell-out-of-love-with-hocs/) (December 9, 2018)\n\n### [HealthCare.gov](https://www.healthcare.gov/)\n\n- [Building a design system for HealthCare.gov](https://blog.navapbc.com/building-a-design-system-for-healthcare-gov-20dc1a833ab3) (August 29, 2017)\n\n### [Heap](https://heap.io)\n\n- [Goodbye CoffeeScript, Hello TypeScript](https://heap.io/blog/engineering/goodbye-coffeescript-hello-typescript) (October 7, 2015)\n- [Migrating To React + MobX While Shipping New Features](https://heap.io/blog/engineering/migrating-react-mobx-while-shipping-new-features) (August 16, 2017)\n- [How We Write Front-end Code](https://heap.io/blog/engineering/how-we-write-front-end-code) (February 20, 2018)\n- [Redesigning Heap Without a Feature Branch](https://heap.io/blog/engineering/redesigning-heap-without-a-feature-branch) (April 10, 2019)\n- [How we failed, then succeeded, at migrating to TypeScript](https://heap.io/blog/engineering/migrating-to-typescript) (October 10, 2019)\n- [How we leveraged ASTs and Babel to capture everything on React Native apps](https://heap.io/blog/engineering/how-we-leveraged-asts-and-babel-to-capture-everything-on-react-native-apps) (June 23, 2020)\n\n### [in der Apotheke](https://www.inderapotheke.de/)\n\n- [Farewell, Google Maps](https://www.inderapotheke.de/blog/farewell-google-maps) (July 18, 2018)\n\n### [Infinite Red](https://infinite.red/)\n\n- [Switching from Ava to Jest for TypeScript](https://shift.infinite.red/switching-from-ava-to-jest-for-typescript-a6dac7d1712f) (November 6, 2017)\n- [Using TypeScript to upgrade Ignite without losing my mind](https://shift.infinite.red/using-typescript-to-upgrade-ignite-without-losing-my-mind-352d8076d331) (March 20, 2019)\n- [Yarn 1 vs Yarn 2 vs NPM](https://shift.infinite.red/yarn-1-vs-yarn-2-vs-npm-a69ccf0229cd) (February 6, 2020)\n- [Why Infinite Red uses MobX-State-Tree instead of Redux](https://shift.infinite.red/why-infinite-red-uses-mobx-state-tree-instead-of-redux-d6c1407dead) (June 16, 2020)\n\n### [Insider Inc.](https://www.insider-inc.com/)\n\n- [How to style different sites with one CSS collection](https://medium.com/insider-inc-engineering/how-to-style-different-sites-with-one-css-collection-6f33126d4cdb) (December 17, 2018)\n- [Why we got rid of all our front-end and back-end engineers](https://medium.com/insider-inc-engineering/why-we-got-rid-of-all-our-front-end-and-back-end-engineers-f9c06034548) (February 13, 2019)\n- [Delightful ways to write reusable CSS using subclasses](https://medium.com/insider-inc-engineering/delightful-ways-to-write-reusable-css-using-subclasses-903e90c9cf87) (March 1 , 2019)\n\n### [Instagram](https://www.instagram.com/)\n\n- [React Native at Instagram](https://instagram-engineering.com/react-native-at-instagram-dd828a9a90c7) (February 7, 2017)\n- Making Instagram.com faster: [part 1](https://instagram-engineering.com/making-instagram-com-faster-part-1-62cc0c327538) (August 1, 2019), [part 2](https://instagram-engineering.com/making-instagram-com-faster-part-2-f350c8fba0d4) (September 6, 2019), [part 3](https://instagram-engineering.com/making-instagram-com-faster-part-3-cache-first-6f3f130b9669) (October 11, 2019), [part 4](https://instagram-engineering.com/making-instagram-com-faster-code-size-and-execution-optimizations-part-4-57668be796a8) (November 1, 2019)\n\n### [Internet Archive](https://archive.org/)\n\n- [Pixels vs. Ems: Users DO Change Font Size](https://medium.com/@vamptvo/pixels-vs-ems-users-do-change-font-size-5cfb20831773) (June 13, 2018)\n\n### [Intuit](https://www.intuit.com)\n\n- [Making Accessibility an Integral Part of the Creative Workflow](https://medium.com/blueprint-by-intuit/making-accessibility-an-integral-part-of-the-creative-workflow-ca78767dd05b) (April 15, 2018)\n- [TurboTax Live’s Approach to a Gender-Neutral Design System](https://medium.com/blueprint-by-intuit/turbotax-lives-approach-to-a-gender-neutral-design-system-bed0c45ece44) (February 21, 2019)\n- [Delivering Consistent Animations with a Design System Library](https://medium.com/blueprint-by-intuit/delivering-consistent-animations-with-a-design-system-library-323f29f5efc6) (April 25, 2019)\n- [GraphQL: Intuit’s Path to ONE API System](https://medium.com/blueprint-by-intuit/graphql-intuits-path-to-one-api-system-b8495e4dd281) (March 13, 2019)\n\n### [InVision](https://www.invisionapp.com)\n\n- [Sharing ESLint Across Teams](https://engineering.invisionapp.com/post/sharing-eslint-across-teams/) (April 5, 2016)\n- [Optimizing Webpack for Faster React Builds](https://engineering.invisionapp.com/post/optimizing-webpack/) (April 12, 2016)\n- [Persist Redux State by Using Sagas](https://engineering.invisionapp.com/post/persist-redux-state-by-using-sagas/) (April 26, 2016)\n- [Testing Our Shared ESLint Configs](https://engineering.invisionapp.com/post/testing-eslint/) (May 12, 2016)\n- [How ESLint Saved Our Soul](https://engineering.invisionapp.com/post/how-eslint-saved-our-soul/) (August 12, 2016)\n- [React Performance Tune-Up](https://engineering.invisionapp.com/post/react-performance-tune-up/) (September 23, 2016)\n- [Building the inspect measurement engine](https://engineering.invisionapp.com/post/building-the-inspect-measurement-engine) (July 17, 2019)\n\n### [Khan Academy](http://khanacademy.org/)\n\n- [Babel in Khan Academy's i18n Toolchain](http://engineering.khanacademy.org/posts/i18n-babel-plugin.htm) (June 22, 2015)\n- [Fun with slope fields, css and react](http://engineering.khanacademy.org/posts/fun-with-slopfields.htm) (August 5, 2015)\n- [Copy-pasting more than just text](http://engineering.khanacademy.org/posts/copy-pasting-more-than-just-text.htm) (August 31, 2015)\n- [i18nize-templates: Internationalization After the Fact](http://engineering.khanacademy.org/posts/i18nize-templates.htm) (September 28, 2015)\n- [Schrödinger's deploys no more: how we update translations](http://engineering.khanacademy.org/posts/translation-server.htm) (October 12, 2015)\n- [Forgo JS packaging? Not so fast](http://engineering.khanacademy.org/posts/js-packaging-http2.htm) (November 23, 2015)\n- [Inline CSS at Khan Academy: Aphrodite](http://engineering.khanacademy.org/posts/aphrodite-inline-css.htm) (March 29, 2016)\n- [Migrating to a Mobile Monorepo for React Native](http://engineering.khanacademy.org/posts/react-native-monorepo.htm) (May 29, 2017)\n- [Creating Query Components with Apollo](http://engineering.khanacademy.org/posts/creating-query-components-with-apollo.htm) (June 12, 2017)\n- [tota11y - an accessibility visualization toolkit](http://engineering.khanacademy.org/posts/tota11y.htm) (April 15, 2018)\n\n### [Kickstarter](https://www.kickstarter.com/)\n\n- [Namespacing Actions for Redux](https://kickstarter.engineering/namespacing-actions-for-redux-d9b55a88b1b1) (November 20, 2017)\n\n### [Klarna](https://www.klarna.com)\n\n- [Migrating from Rails’ asset pipeline to Node’s webpack](https://engineering.klarna.com/migrating-from-rails-asset-pipeline-to-node-s-webpack-684230e3a93a) (January 2, 2016)\n- [How removing caching improved mobile performance by 25%](https://engineering.klarna.com/how-removing-caching-improved-mobile-performance-by-25-52a17cc339a2) (January 10, 2017)\n- [Improving Communication and Confidence with Visual Snapshot Testing](https://engineering.klarna.com/improving-communication-and-confidence-with-visual-snapshot-testing-b04154c3aaf0) (March 14, 2017)\n- [6 Lessons learned from optimizing the performance of a Node.js service](https://engineering.klarna.com/6-lessons-learned-from-optimizing-the-performance-of-a-node-js-service-f163cac20473) (January 9, 2020)\n\n### [Line](https://line.me)\n\n- [LINE MANGA: Smooth page transition with Page Stack](https://engineering.linecorp.com/en/blog/detail/200) (January 18, 2018)\n- [Easy code-splitting with grow-loader](https://engineering.linecorp.com/en/blog/detail/235) (January 24, 2018)\n\n### [LinkedIn](https://www.linkedin.com)\n\n- [Bringing a Modern Javascript Build Pipeline to LinkedIn](https://engineering.linkedin.com/blog/2016/01/smashing-the-monolith) (January 20, 2016)\n- [Sleek and Fast: Speeding Up your Fat Web Client](https://engineering.linkedin.com/blog/2017/10/sleek-and-fast--speeding-up-your-fat-web-client) (October 19, 2017)\n- [The Glimmer Binary Experience](https://engineering.linkedin.com/blog/2017/12/the-glimmer-binary-experience) (December 7, 2017)\n- [Ember Timer Leaks: The Bad Apples in Your Test Infrastructure](https://engineering.linkedin.com/blog/2018/01/ember-timer-leaks) (January 3, 2018)\n- [Lighter than Lightweight: How We Built the Same App Twice with Preact and Glimmer.js](https://engineering.linkedin.com/blog/2018/03/how-we-built-the-same-app-twice-with-preact-and-glimmerjs) (March 12, 2018)\n- [LinkedIn’s approach to automated accessibility (A11y) testing](https://engineering.linkedin.com/blog/2020/automated-accessibility-testing) (May 21, 2020)\n\n### [Lucidchart](https://www.lucidchart.com/)\n\n- [IE10: How does it really stack up?](https://www.lucidchart.com/techblog/2012/11/14/ie10-how-does-it-really-stack-up/) (November 14, 2012)\n- [Atomic CSS as a tool set](https://www.lucidchart.com/techblog/2014/01/31/atomic-css-tool-set/) (January 31, 2014)\n- [The Definitive Guide to Copying and Pasting in JavaScript](https://www.lucidchart.com/techblog/2014/12/02/definitive-guide-copying-pasting-javascript/) (December 2, 2014)\n- [Big content in a little canvas](https://www.lucidchart.com/techblog/2015/05/19/big-content-in-a-little-canvas/) (May 19, 2015)\n- [Improving Angular 2 Load Times and a 29KB Hello World App](https://www.lucidchart.com/techblog/2016/09/26/improving-angular-2-load-times/) (September 26, 2016)\n- [Angular 2 and Observables: Data Sharing in a Multi-View Application](https://www.lucidchart.com/techblog/2016/11/08/angular-2-and-observables-data-sharing-in-a-multi-view-application/) (November 8, 2016)\n- [Using Angular 2 Components In a Non-Angular App](https://www.lucidchart.com/techblog/2017/04/10/using-angular-2-components-in-a-non-angular-app/) (April 10, 2017)\n- [Converting 600k lines to TypeScript in 72 hours](https://www.lucidchart.com/techblog/2017/11/16/converting-600k-lines-to-typescript-in-72-hours/) (November 16, 2017)\n- [How to handle folder uploads in Angular 2+](https://www.lucidchart.com/techblog/2018/01/03/folder-upload-in-an-angular-app/) (January 3, 2018)\n- [JavaScriptCore – The Holy Grail of Cross Platform](https://www.lucidchart.com/techblog/2018/02/14/javascriptcore-the-holy-grail-of-cross-platform/) (February 14, 2018)\n- [How to Actually Improve Type Safety with the TypeScript Strict Flags](https://www.lucidchart.com/techblog/2018/06/20/how-to-actually-improve-type-safety-with-the-typescript-strict-flags/) (June 20, 2018)\n- [ZoneTracker: Tracking JavaScript Performance with Zone.js](https://www.lucidchart.com/techblog/2018/11/09/tracking-javascript-performance-zone-js/) (November 9, 2018)\n- [JavaScriptCore—10 Months Later](https://www.lucidchart.com/techblog/2019/01/03/javascriptcore-10-months-later/) (January 3, 2019)\n\n### [Lyft](https://lyft.com)\n\n- [TypeScript at Lyft](https://eng.lyft.com/typescript-at-lyft-64f0702346ea) (September 27, 2017)\n- [Re-approaching Color](https://design.lyft.com/re-approaching-color-9e604ba22c88) (September 21, 2018)\n- [Changing Lanes: How Lyft is Migrating 100+ Frontend Microservices to Next.js](https://eng.lyft.com/changing-lanes-how-lyft-is-migrating-100-frontend-microservices-to-next-js-42199aaebd5f) (November 30, 2020)\n- [Frontend at Lyft: An Overview](https://eng.lyft.com/frontend-at-lyft-an-overview-f934c1524370) (March 9, 2021)\n\n### [Mail.ru](https://mail.ru)\n\n- [Improving Core Web Vitals on the Mail.ru home page resulted in an average 10% increase in conversion rates](https://web.dev/mailru-cwv/) (November 15, 2021)\n\n### [Mailchimp](https://mailchimp.com)\n\n- [Designing automated tests for React](https://increment.com/testing/designing-automated-tests-for-react/) (August 10, 2019)\n\n### [MDN](https://developer.mozilla.org)\n\n- [Refactoring MDN macros with async, await, and Object.freeze()](https://hacks.mozilla.org/2019/02/refactoring-mdn-macros-with-async-await-and-object-freeze/) (February 7, 2019)\n\n### [Medium](https://medium.com/)\n\n- [Why ContentEditable is Terrible](https://medium.engineering/why-contenteditable-is-terrible-122d8a40e480) (May 14, 2014)\n- [Wait, Don’t Touch That! Mutual Exclusion Locks & JavaScript](https://medium.engineering/wait-dont-touch-that-a211832adc3a) (January 17, 2015)\n- [The curious case of the disappearing Polish S](https://medium.engineering/the-curious-case-of-disappearing-polish-s-fa398313d4df) (February 2, 2015)\n- [Five Goofy Things Medium Did That Break Accessibility](https://medium.engineering/five-goofy-things-medium-did-that-break-accessibility-3bc804ae818d) (June 29, 2015)\n- [The Unluckiest Paragraphs: A Tale of CSS and Why Parts of Medium Sometimes Disappear](https://medium.engineering/the-unluckiest-paragraphs-751dd36d2d30) (December 5, 2015)\n- [Simple Style Sheets, Or How to Improve Your Sleep by Dropping the Cascade](https://medium.engineering/simple-style-sheets-c3b588867899) (September 28, 2016)\n- [2 Fast 2 Furious: migrating Medium’s codebase without slowing down](https://medium.engineering/2-fast-2-furious-migrating-mediums-codebase-without-slowing-down-84b1e33d81f4) (March 22, 2018)\n- [The case of the eternal blur: a bug hunt horror novella](https://medium.engineering/the-case-of-the-eternal-blur-ab350b9653ea) (May 2, 2018)\n- [GraphQL Server Design @ Medium](https://medium.engineering/graphql-server-design-medium-34862677b4b8) (November 2, 2018)\n\n### [MemSQL](https://www.memsql.com)\n\n- [Porting 30K lines of code from Flow to TypeScript](http://davidgom.es/porting-30k-lines-of-code-from-flow-to-typescript/) (January 13, 2019)\n\n### [Mercado Libre](http://www.mercadolibre.com)\n\n- [How Mercado Libre optimized for Web Vitals (TBT/FID)](https://web.dev/how-mercadolibre-optimized-web-vitals/) (September 21, 2020)\n\n### [Microsoft Bing](https://bing.com)\n\n- [Fast Front-End Performance for Microsoft Bing](https://blogs.bing.com/search-quality-insights/august-2022/Fast-Front-End-Performance-for-Microsoft-Bing) (August 25, 2022)\n\n### [Microsoft To-Do](https://to-do.microsoft.com/)\n\n- [How We React at Microsoft To-Do](https://youtu.be/CWxc3AYja1I) (January 5, 2018)\n\n### [Mixmax](https://mixmax.com/)\n\n- [Scaling Mixmax: Front-end performance](https://mixmax.com/blog/scaling-mixmax-front-end) (May 5, 2015)\n- [How we built ‘instant’ autocomplete for Mixmax](https://mixmax.com/blog/autocomplete-search-performance) (November 5, 2015)\n- [Yarn-ifying Mixmax: why and how we moved from npm to Yarn](https://mixmax.com/blog/yarn-ifying-mixmax) (April 24, 2017)\n- [Using CORS policies to implement CSRF protection](https://mixmax.com/blog/modern-csrf) (June 13, 2017)\n- [React without Redux: how we moved from Backbone to React without rewriting](https://mixmax.com/blog/backbone-to-react-without-rewriting) (July 26, 2017)\n- [Handling 3rd-party JavaScript with Rollup: how and when to leave JS out of the bundle](https://mixmax.com/blog/rollup-externals) (December 3, 2017)\n- [Precisely observing structural page changes](https://mixmax.com/blog/precisely-observing-structural-page-changes) (December 7, 2017)\n- [Choosing (and using) Javascript static typing: how Mixmax Engineering adopted Flow](https://mixmax.com/blog/flow-vs-typescript) (May 15, 2018)\n- [To Yarn and Back (to npm) Again](https://mixmax.com/blog/to-yarn-and-back-again-npm) (May 29, 2018)\n\n### [Mixpanel](https://mixpanel.com/)\n\n- [Straightening our Backbone: A lesson in event-driven UI development](https://engineering.mixpanel.com/2015/04/08/straightening-our-backbone-a-lesson-in-event-driven-ui-development/) (April 8, 2015)\n- [Making Web Components Work, or: How We Learned to Stop Worrying and Love the DOM](https://engineering.mixpanel.com/2018/06/12/making-web-components-work/) (June 12, 2018)\n\n### [Monzo](https://monzo.com)\n\n- [Building a Bank with Next.js: How We Use Next.js at Monzo](https://youtu.be/UXpY3-DlZ9c) (December 2, 2020)\n\n### [Mozilla](https://www.mozilla.org)\n\n- [The Art of UI Skeletons](http://farmdev.com/thoughts/108/the-art-of-ui-skeletons) (April 23, 2019)\n- [To Eleventy and Beyond](https://hacks.mozilla.org/2020/10/to-eleventy-and-beyond/) (October 1, 2020)\n\n### [Mud](https://ournameismud.co.uk)\n\n- [A Year of Utility Classes](https://css-irl.info/a-year-of-utility-classes/) (January 28, 2019)\n\n### [Myntra](https://www.myntra.com)\n\n- [Myntra’s Web UI Journey — AMP and PWA](https://medium.com/@nvkudva/myntras-web-ui-journey-amp-and-pwa-77b87523ee7d) (January 31, 2018)\n\n### [Netflix](https://netflix.com)\n\n- [HTML5 Video Playback UI](https://medium.com/netflix-techblog/html5-video-playback-ui-62cfdd9b5d19) (October 21, 2013)\n- [Improving the performance of our JavaScript inheritance model](https://medium.com/netflix-techblog/improving-the-performance-of-our-javascript-inheritance-model-af376d75665) (May 16, 2014)\n- [Node.js in Flames](https://medium.com/netflix-techblog/node-js-in-flames-ddd073803aa4) (November 19, 2014)\n- [JSON Graph: Reactive REST at Netflix](https://youtu.be/hOE6nVVr14c) (April 1, 2015)\n- [Localization Technologies at Netflix](https://medium.com/netflix-techblog/localization-technologies-at-netflix-d033e7b13cf) (June 4, 2015)\n- [Making Netflix.com Faster](https://medium.com/netflix-techblog/making-netflix-com-faster-f95d15f2e972) (August 5, 2015)\n- [Crafting a high-performance TV user interface using React](https://medium.com/netflix-techblog/crafting-a-high-performance-tv-user-interface-using-react-3350e5a6ad3b) (January 12, 2017)\n- [Netflix's approach to ES6 feature detection](https://gist.github.com/DaBs/89ccc2ffd1d435efdacff05248514f38) (January 20, 2017)\n- [Pass the Remote: User Input on TV Devices](https://medium.com/netflix-techblog/pass-the-remote-user-input-on-tv-devices-923f6920c9a8) (May 17, 2017)\n- [Shop Talk podcast #264: React with Netflix](https://shoptalkshow.com/episodes/264-react-netflix) (May 22, 2017)\n- [Performance Signup in React & Transactional Apps with Redux](https://youtu.be/V8oTJ8OZ5S0) (October 25, 2017)\n- [Implementing Japanese Subtitles on Netflix](https://medium.com/netflix-techblog/implementing-japanese-subtitles-on-netflix-c165fbe61989) (December 11, 2017)\n- [Integrating imperative APIs into a React application](https://medium.com/netflix-techblog/integrating-imperative-apis-into-a-react-application-1257e1b45ac6) (December 20, 2017)\n- [Pseudo Localization @ Netflix](https://medium.com/netflix-techblog/pseudo-localization-netflix-12fff76fbcbe) (August 6, 2018)\n- [A Netflix Web Performance Case Study](https://medium.com/dev-channel/a-netflix-web-performance-case-study-c0bcde26a9d9) (November 5, 2018)\n- [Delivering Meaning with Previews on Web](https://medium.com/netflix-techblog/delivering-meaning-with-previews-on-web-3cedc0341b9e) (November 12, 2018)\n- [Enhancing the Netflix UI Experience with HDR](https://medium.com/netflix-techblog/enhancing-the-netflix-ui-experience-with-hdr-1e7506ad3e8) (September 24, 2018)\n- [Our learnings from adopting GraphQL](https://medium.com/netflix-techblog/our-learnings-from-adopting-graphql-f099de39ae5f) (December 10, 2018)\n- [Modernizing the Web Playback UI](https://medium.com/netflix-techblog/modernizing-the-web-playback-ui-1ad2f184a5a0) (December 12, 2018)\n- [Architecting UI for Netflix Studio Technology](https://youtu.be/LtrXwX81CPE) (November 14, 2019)\n\n### [New Relic](https://newrelic.com/)\n\n- [Real-World JavaScript Performance Tips](https://blog.newrelic.com/engineering/javascript-perf-tips/) (November 14, 2014)\n- [How We Architected the New Relic Mobile Web UI in React](https://blog.newrelic.com/engineering/mobile-ui-react/) (January 3, 2018)\n\n### [Notion](https://www.notion.so)\n\n- [Migrating Notion's marketing site to Next.js](https://www.notion.so/blog/migrating-notion-marketing-to-next-js) (August 12, 2021)\n\n### [npm](https://www.npmjs.com)\n\n- [Re-inventing npmjs.com](http://blog.npmjs.org/post/172567815935/re-inventing-npmjscom) (April 3, 2018)\n- [JavaScript Usage by Industry](https://blog.npmjs.org/post/175311966445/javascript-usage-by-industry) (June 27, 2018)\n\n### [OK GROW!](https://www.okgrow.com/)\n\n- [Migrating from Iron Router to FlowRouter (with Blaze)](https://www.okgrow.com/posts/flow-router-migration-guide) (September 17, 2015)\n- [Where does Redux fit in Meteor?](https://www.okgrow.com/posts/where-does-redux-fit-in-meteor) (July 15, 2016)\n- [Real-world Unit Testing with Meteor and Jest](https://www.okgrow.com/posts/real-world-unit-testing-with-meteor-and-jest) (October 17, 2017)\n- [Optimizing a GraphQL app using Apollo Engine](https://www.okgrow.com/posts/optimizing-graphql-apollo-engine) (February 12, 2019)\n\n### [OYO](https://www.oyorooms.com)\n\n- [OYO on a User Experience Quest with AMP ⚡](https://medium.com/oyotech/oyo-on-a-user-experience-quest-with-amp-cff515cf849e) (January 11, 2018)\n- [Brotli vs Gzip Compression. How we improved our latency by 37%](https://medium.com/oyotech/how-brotli-compression-gave-us-37-latency-improvement-14d41e50fee4) (June 29, 2018)\n- [AMP for Email - Interactive and Dynamic Email Experiences at OYO](https://medium.com/oyotech/amp-for-email-making-interactive-and-dynamic-email-experiences-at-oyo-ed7a6d8754b3) (March 26, 2019)\n- [Shipping ES6 in browsers without Polyfill](https://medium.com/oyotech/shipping-es6-in-browsers-without-polyfill-90d1fb440a55) (April 17, 2019)\n- [Signed-Exchange: Solving the AMP URLs Display Problem](https://medium.com/oyotech/implementing-signed-exchange-for-better-amp-urls-38abd64c6766) (May 7, 2019)\n- [Building Chrome Extension with ReactJs: Beginner’s Guide](https://medium.com/oyotech/building-chrome-extension-with-reactjs-beginners-guide-ca44acdf9ffc) (May 13, 2019)\n- [A complete implementation guide to Trusted Web Activity(TWA)- OYO Lite](https://medium.com/oyotech/a-complete-guide-to-trusted-web-activity-twa-oyo-case-study-3dd327d7afc5) (November 7, 2019)\n- [Migrating to webpack 5 to improve build time and reduce chunk sizes](https://tech.oyorooms.com/migrating-to-webpack-5-to-improve-build-time-and-reduce-chunk-sizes-50486918d348) (June 30, 2021)\n\n### [Oyster](https://www.oyster.com/)\n\n- [Oyster Shots on the Front End](http://tech.oyster.com/oyster-shots-on-the-front-end/) (July 29, 2011)\n- [Using React and jQuery Together](http://tech.oyster.com/using-react-and-jquery-together/) (March 22, 2016)\n\n### [Palantir](https://www.palantir.com/)\n\n- [Scaling product design with Blueprint](https://medium.com/palantir/scaling-product-design-with-blueprint-25492827bb4a) (January 6, 2017)\n- [TSLint in 2019](https://medium.com/palantir/tslint-in-2019-1a144c2317a9) (February 19, 2019)\n\n### [PayPal](https://www.paypal.com)\n\n- [Sane, scalable Angular apps are tricky, but not impossible. Lessons learned from PayPal Checkout](https://medium.com/@bluepnume/sane-scalable-angular-apps-are-tricky-but-not-impossible-lessons-learned-from-paypal-checkout-c5320558d4ef) (September 26, 2015)\n- [Auto-shrink-wrapping in PayPal Checkout, and how it’s saved us more than once](https://medium.com/@bluepnume/how-we-manage-sane-tagging-releasing-and-shrink-wrapping-for-paypal-checkout-d1e37f20533a) (February 10, 2016)\n- [Dependency injection in Angular isn’t worth it. More lessons learned from scaling PayPal Checkout](https://medium.com/@bluepnume/dependency-injection-in-angular-isn-t-worth-it-more-lessons-learned-from-scaling-paypal-checkout-2189ec9c21a0) (April 3, 2016)\n- [Less is more: reducing thousands of PayPal buttons into a single iframe, using zoid](https://medium.com/@bluepnume/less-is-more-reducing-thousands-of-paypal-buttons-into-a-single-iframe-using-xcomponent-d902d71d8875) (March 17, 2017)\n- [Safari’s new third party tracking rules, and enabling cross-domain data storage](https://medium.com/@bluepnume/safaris-new-tracking-rules-and-enabling-cross-domain-data-storage-85241eea7483) (August 30, 2017 )\n- [Reinventing cross-origin requests, without CORS](https://medium.com/@bluepnume/reinventing-cross-origin-requests-without-cors-b9c4cb645376) (September 6, 2017)\n- [Introducing PayPal’s open-source cross-domain javascript suite](https://medium.com/@bluepnume/introducing-paypals-open-source-cross-domain-javascript-suite-95f991b2731d) (October 16, 2017)\n- [GraphQL: A success story for PayPal Checkout](https://medium.com/paypal-engineering/graphql-a-success-story-for-paypal-checkout-3482f724fb53) (October 17, 2018)\n- [Why every new web app at PayPal starts with TypeScript](https://medium.com/paypal-engineering/why-every-new-web-app-at-paypal-starts-with-typescript-9d1acc07c839) (January 21, 2019)\n- [Scaling GraphQL at PayPal](https://medium.com/paypal-engineering/scaling-graphql-at-paypal-b5b5ac098810) (October 30, 2019)\n- [Sharing UI Components at an Enterprise Level](https://medium.com/paypal-tech/reusing-ui-components-at-enterprise-level-a7df1ea1f8dd) (June 2, 2020)\n- [How Micro Frontend Has Changed Our Team Dynamic](https://medium.com/paypal-engineering/how-micro-frontend-has-changed-our-team-dynamic-ba2f01597f48) (August 10, 2020)\n- [GraphQL at PayPal: An Adoption Story](https://medium.com/paypal-tech/graphql-at-paypal-an-adoption-story-b7e01175f2b7) (September 1, 2021)\n\n### [Pinafore](https://pinafore.social)\n\n- [Introducing Pinafore for Mastodon](https://nolanlawson.com/2018/04/09/introducing-pinafore-for-mastodon) (April 9, 2018)\n- [Scrolling the main document is better for performance, accessibility, and usability](https://nolanlawson.com/2018/11/18/scrolling-the-main-document-is-better-for-performance-accessibility-and-usability) (November 18, 2018)\n- [Building a modern carousel with CSS scroll snap, smooth scrolling, and pinch-zoom](https://nolanlawson.com/2019/02/10/building-a-modern-carousel-with-css-scroll-snap-smooth-scrolling-and-pinch-zoom) (February 10, 2019)\n- [One year of Pinafore](https://nolanlawson.com/2019/06/02/one-year-of-pinafore) (June 2, 2019)\n- [The joy and challenge of developing for KaiOS](https://nolanlawson.com/2019/09/22/the-joy-and-challenge-of-developing-for-kaios) (September 22, 2019)\n- [What I’ve learned about accessibility in SPAs](https://nolanlawson.com/2019/11/05/what-ive-learned-about-accessibility-in-spas) (November 5, 2019)\n\n### [Pinterest](https://pinterest.com)\n\n- [Gone In 60 Frames Per Second: A Pinterest Paint Performance Case Study](https://www.smashingmagazine.com/2013/06/pinterest-paint-performance-case-study/) (June 10, 2013)\n- [Demystifying SEO with experiments](https://medium.com/@Pinterest_Engineering/demystifying-seo-with-experiments-a183b325cf4c) (January 27, 2015)\n- [How we made JavaScript testing 15x faster](https://medium.com/@Pinterest_Engineering/how-we-made-javascript-testing-15x-faster-5ba35b5d3947) (February 3, 2015)\n- [Making Pinterest HTTPS](https://medium.com/@Pinterest_Engineering/making-pinterest-https-637ec925a8ad) (March 13, 2015)\n- [How we switched our template rendering engine to React](https://medium.com/@Pinterest_Engineering/how-we-switched-our-template-rendering-engine-to-react-a799a3d540b0) (November 18, 2016)\n- [Introducing Bonsai: an open source Webpack analyzer](https://medium.com/@Pinterest_Engineering/introducing-bonsai-an-open-source-webpack-analyzer-6bdfe22f8984) (June 2, 2017)\n- [Migrating Pinterest profiles to React](https://medium.com/@Pinterest_Engineering/migrating-pinterest-profiles-to-react-479f4f7306aa) (September 23, 2016) ([video](https://youtu.be/dx9ZlpUx59I)) (November 22, 2017)\n- [A Pinterest Progressive Web App Performance Case Study](https://medium.com/dev-channel/a-pinterest-progressive-web-app-performance-case-study-3bd6ed2e6154) (November 30, 2017)\n- [Supporting React Native at Pinterest](https://medium.com/@Pinterest_Engineering/supporting-react-native-at-pinterest-f8c2233f90e6) (May 10, 2018)\n- [A one year PWA retrospective](https://medium.com/@Pinterest_Engineering/a-one-year-pwa-retrospective-f4a2f4129e05) (July 20, 2018)\n\n### [Pivotal Tracker](https://www.pivotaltracker.com)\n\n- [Using Elm in Production at Pivotal Tracker](https://www.pivotaltracker.com/blog/Elm-pivotal-tracker/) (January 31, 2017)\n- [Improving Accessibility in Pivotal Tracker](https://www.pivotaltracker.com/blog/improving-accessibility-in-pivotal-tracker) (February 1, 2018)\n\n### [Plaid](https://plaid.com)\n\n- [Securing WebViews with Chrome Custom Tabs](https://blog.plaid.com/securing-webviews-with-chrome-custom-tabs) (April 9, 2020)\n\n### [Plotly](https://plot.ly/)\n\n- [Modularizing monolithic javascript projects in plotly.js](https://plot.ly/javascript/modularizing-monolithic-javascript-projects/) (January 28, 2016)\n\n### [Product Hunt](https://www.producthunt.com)\n\n- [React @ Product Hunt](https://youtu.be/F38nRMktS9Q) (May 30, 2017)\n- [GraphQL @ Product Hunt](https://www.youtube.com/watch?v=H0YCeHeHbr0) (November 2, 2017)\n\n### [Proton](https://proton.me)\n\n- [Deploying CSS Logical Properties On Web Apps](https://www.smashingmagazine.com/2022/12/deploying-css-logical-properties-on-web-apps/) (December 23, 2022)\n\n### [Quizlet](https://quizlet.com/)\n\n- [Smooth Game Animations in React](https://medium.com/tech-quizlet/smooth-game-animations-in-react-df43ece916c8) (February 18, 2016)\n- [Launching A Successful Redesign For 20 Million Students](https://medium.com/tech-quizlet/launching-a-successful-redesign-for-20-million-students-2f4c4b518b6e) (June 13, 2017)\n- [Cypress: The future of end-to-end testing for web applications](https://medium.com/tech-quizlet/cypress-the-future-of-end-to-end-testing-for-web-applications-8ee108c5b255) (February 8, 2018)\n- [Now or Never: Migrating 300k LOC from Flow to TypeScript at Quizlet](https://medium.com/tech-quizlet/now-or-never-migrating-300k-loc-from-flow-to-typescript-at-quizlet-d3bae5830a1) (June 18, 2019)\n\n### [Quora](https://www.quora.com/)\n\n- [Faster Paint Times](https://www.quora.com/q/quoraengineering/Faster-Paint-Times) (August 18, 2016)\n- [Choosing Quora’s GraphQL client](https://www.quora.com/q/quoraengineering/Choosing-Quora-s-GraphQL-client) (July 22, 2020)\n\n### [REA Group](https://www.rea-group.com/)\n\n- [ReactJS – Real World Examples of Higher-Order Components](https://www.rea-group.com/blog/reactjs-real-world-examples-of-higher-order-components/) (May 6, 2016)\n- [Singletons Suck (aka Flux to Redux)](https://www.rea-group.com/blog/singletons-suck-aka-flux-to-redux/) (August 17, 2016)\n- [ReactJS Performance Debugging (aka The Magic of Reselect Selectors)](https://www.rea-group.com/blog/reactjs-performance-debugging-aka-the-magic-of-reselect-selectors/) (September 9, 2016)\n- [My Journey in a UI Project (aka front-end is the new back-end)](https://www.rea-group.com/blog/my-journey-in-a-ui-project-aka-front-end-is-the-new-back-end/) (June 23, 2017)\n\n### [Reaktor](https://reaktor.com/)\n\n- [Refactoring 30000 lines of JS with types](https://www.reaktor.com/blog/refactoring-30000-lines-js-types/) (January 24, 2017)\n\n### [Reddit](https://about.reddit.com)\n\n- [How We Built r/Place](https://redditblog.com/2017/04/13/how-we-built-rplace/) (April 13, 2017)\n- [Why We Chose Typescript](https://redditblog.com/2017/06/30/why-we-chose-typescript/) (June 30, 2017)\n\n### [Redmart](https://redmart.com/)\n\n- [Angular The Hard Way #1 Organise and manage domain data](http://geeks.redmart.com/2015/04/22/angular-the-hard-way-1/) (April 22, 2015)\n- [RedMart's experience with PWA](http://geeks.redmart.com/2018/10/25/redmarts-experience-with-pwa/) (October 25, 2018)\n- [How we use Storybook for documentation and code reviews](http://geeks.redmart.com/2018/11/14/how-we-use-storybook-for-documentation-and-code-reviews/) (November 14, 2018)\n\n### [repl.it](https://repl.it)\n\n- [Infinite Loops](https://repl.it/site/blog/infinite-loops) (January 23, 2017)\n- [Modular, fast, small: how we built a server-rendered IDE](https://repl.it/site/blog/ide) (February 14, 2018)\n\n### [Revolut](https://www.revolut.com)\n\n- [How we learned to stop worrying and love GraphQL](https://medium.com/revolut/how-we-learned-to-stop-worrying-and-love-graphql-80a5f83f36d9) (August 8, 2019)\n- [The fundamentals of web development at Revolut](https://medium.com/revolut/the-fundamentals-of-web-development-at-revolut-bb5e2888e84f) (January 4, 2021)\n\n### [Roompact](https://roompact.com)\n\n- [Elm In Production: 25,000 Lines Later](https://charukiewi.cz/posts/elm/) (July 30, 2017)\n\n### [Safety Culture](https://safetyculture.com/)\n\n- [Why we moved our graphQL server from Node.js to Golang](https://medium.com/safetycultureengineering/why-we-moved-our-graphql-server-from-node-js-to-golang-645b00571535) (June 27, 2018)\n\n### [Scratch](https://scratch.mit.edu)\n\n- [Porting Scratch from Flash to JavaScript: Performance, Interoperability and Extensions](https://bocoup.com/blog/porting-scratch-from-flash-to-javascript-performance-interoperability-and-extensions) (February 28, 2019)\n\n### [Sentry](https://sentry.io)\n\n- [Building Sentry: Source maps and their problems](https://sentry.engineering/blog/building-sentry-source-maps-and-their-problems) (July 16, 2019)\n- [Slow and Steady: Converting Sentry’s Entire Frontend to TypeScript](https://sentry.engineering/blog/slow-and-steady-converting-sentrys-entire-frontend-to-typescript) (April 12, 2021)\n- [How we trimmed the Sentry JavaScript SDK file size by 20%](https://sentry.engineering/blog/js-browser-sdk-bundle-size-matters) (February 28, 2022)\n- [JavaScript SDK “Package Size is Massive” - So we reduced it by 29%](https://blog.sentry.io/2022/07/19/javascript-sdk-package-reduced) (July 19, 2022)\n- [Understanding the Performance Impact of Generated JavaScript](https://sentry.engineering/blog/understanding-the-performance-impact-of-generated-javascript) (July 22, 2022)\n- [How We Made JavaScript Stack Traces Awesome](https://sentry.engineering/blog/how-we-made-javascript-stack-traces-awesome) (November 30, 2022)\n- [Sentry’s Frontend Tests: Migrating from Enzyme to React Testing Library](https://sentry.engineering/blog/sentrys-frontend-tests-migrating-from-enzyme-to-react-testing-library) (February 23, 2023)\n- [How we reduced CI time by 35% with Nx Caching](https://sentry.engineering/blog/reduce-ci-time-with-nx-caching) (March 31, 2023)\n- [Measuring Session Replay Overhead](https://sentry.engineering/blog/measuring-session-replay-overhead) (July 5, 2023)\n- [How We Reduced Replay SDK Bundle Size by 35%](https://sentry.engineering/blog/session-replay-sdk-bundle-size-optimizations) (November 14, 2023)\n\n### [Shopify](https://shopify.com)\n\n- [How 17 lines of code improved shopify.com loading by 50%](https://shopify.engineering/how-17-lines-of-code-improved-shopify-com-loading-by-50) (May 24, 2017)\n- [Building Shopify mobile with native and web technology](https://shopify.engineering/building-shopify-mobile-with-native-and-web-technology) (September 29, 2017)\n- [Designing a GraphQL API](https://gist.github.com/swalkinshaw/3a33e2d292b60e68fcebe12b62bbb3e2) (June 18, 2018)\n- [Want to Improve UI Performance? Start by Understanding Your User](https://shopify.engineering/improve-ui-performance-understanding-your-user) (October 20, 2019)\n- [How We Built Hydrogen: A React Framework for Building Custom Storefronts](https://shopify.engineering/how-we-built-hydrogen) (June 22, 2022)\n\n### [Skillshare](https://skillshare.com/)\n\n- [How We Ditched Redux for MobX](https://medium.com/skillshare-team/how-we-ditched-redux-for-mobx-a05442279a2b) (July 2, 2018)\n\n### [Slack](https://slack.com)\n\n- [Reducing Slack’s memory footprint](https://slack.engineering/reducing-slacks-memory-footprint-4480fec7e8eb) (March 3, 2017)\n- [TypeScript at Slack](https://slack.engineering/typescript-at-slack-a81307fa288d) (April 11, 2017)\n- [Rebuilding Slack’s Emoji Picker in React](https://slack.engineering/rebuilding-slacks-emoji-picker-in-react-bfbd8ce6fbfe) (May 23, 2017)\n- [Getting to Slack faster with incremental boot](https://slack.engineering/getting-to-slack-faster-with-incremental-boot-ff063c9222e4) (July 5, 2016)\n- [Localizing Slack](https://slack.engineering/localizing-slack-680c4bc7f45a) (September 12, 2017)\n- [Rebuilding slack.com](https://slack.engineering/rebuilding-slack-com-b124c405c193) (October 11, 2017)\n- [Keep webpack Fast: A Field Guide for Better Build Performance](https://slack.engineering/keep-webpack-fast-a-field-guide-for-better-build-performance-f56a5995e8f1) (January 17, 2018)\n- [When a rewrite isn’t: rebuilding Slack on the desktop](https://slack.engineering/rebuilding-slack-on-the-desktop-308d6fe94ae4) (July 22, 2019)\n- [Service Workers at Slack: Our Quest for Faster Boot Times and Offline Support](https://slack.engineering/service-workers-at-slack-our-quest-for-faster-boot-times-and-offline-support-3492cf79c88) (August 29, 2019)\n- [The Gradual Design System: How We Built Slack Kit](https://slack.engineering/the-gradual-design-system-how-we-built-slack-kit-8a2830484259) (September 12, 2019)\n- [Building Dark Mode on Desktop](https://slack.engineering/building-dark-mode-on-desktop-811508b5d15f) (September 24, 2019)\n- [Gantry: Slack’s Fast-booting Frontend Framework](https://slack.engineering/gantry-slacks-fast-booting-frontend-framework-fb70c8eed2fd) (October 23, 2019)\n- [A Day in the Life of a Frontend Product Engineer at Slack](https://slack.engineering/a-day-in-the-life-of-a-frontend-product-engineer-at-slack-27375455cfaa) (February 5, 2020)\n- [How Slack changed the way it designs accessible frontend components](https://increment.com/frontend/case-study-web-components-for-screen-readers/) (May 2020)\n- [The Unsuspecting Beauty & Complexity of Web Forms](https://slack.engineering/the-unsuspecting-beauty-complexity-of-web-forms/) (September 15, 2020)\n- Creating a React Analytics Logging Library: [part 1](https://slack.engineering/creating-a-react-analytics-logging-library/) (November 7, 2020) and [part 2](https://slack.engineering/creating-a-react-analytics-logging-library-2/) (December 16, 2020)\n- [Managing Focus Transitions in Slack](https://slack.engineering/managing-focus-transitions-in-slack) (July 13, 2021)\n\n### [Snipcart](https://snipcart.com)\n\n- [The Story of our Progressive Migration from Backbone to Vue.js](https://snipcart.com/blog/progressive-migration-backbone-vuejs-refactoring) (July 20, 2017)\n\n### [SoundCloud](https://soundcloud.com/)\n\n- [Front-end JavaScript bug tracking](https://developers.soundcloud.com/blog/front-end-javascript-bug-tracking) (November 21, 2011)\n- [Building The Next SoundCloud](https://developers.soundcloud.com/blog/building-the-next-soundcloud) (June 14, 2012)\n- [Smooth image loading by upscaling](https://developers.soundcloud.com/blog/smooth-image-loading-by-upscaling) (February 20, 2014)\n- [React Native at SoundCloud](https://developers.soundcloud.com/blog/react-native-at-soundcloud) (August 3, 2016)\n- [Garbage Collection in Redux Applications](https://developers.soundcloud.com/blog/garbage-collection-in-redux-applications) (January 24, 2019)\n- [Playback on Web at SoundCloud](https://developers.soundcloud.com/blog/playback-on-web-at-soundcloud) (May 3, 2019)\n\n### [Spectrum](https://spectrum.chat/)\n\n- [Tech Choices I Regret at Spectrum](https://mxstbr.com/thoughts/tech-choice-regrets-at-spectrum/) (January 16, 2019)\n\n### [Spotify](https://www.spotify.com)\n\n- [Spotify Wrapped 2018 — Technical Case Study](https://medium.com/@activetheory/spotify-wrapped-2018-technical-case-study-5b7cfb7e9d3a) (December 18, 2018)\n- [Building Spotify’s New Web Player](https://labs.spotify.com/2019/03/25/building-spotifys-new-web-player/) (March 25, 2019)\n- [(Right to Left (The Mirror World](https://labs.spotify.com/2019/04/15/right-to-left-the-mirror-world/) (April 15, 2019)\n- [web-scripts – creating NPM libraries in a snap at Spotify](https://labs.spotify.com/2019/07/03/web-scripts-creating-npm-libraries-in-a-snap-at-spotify/) (July 3, 2019)\n- [Reimagining Design Systems at Spotify](https://spotify.design/articles/2019-12-16/reimagining-design-systems-at-spotify/) (December 16, 2019)\n\n### [Stack Overflow](https://stackoverflow.com)\n\n- [HTTPS on Stack Overflow: The End of a Long Road](https://nickcraver.com/blog/2017/05/22/https-on-stack-overflow) (May 22, 2017)\n- [Building dark mode on Stack Overflow](https://stackoverflow.blog/2020/03/31/building-dark-mode-on-stack-overflow/) (March 31, 2020)\n\n### [stripe](https://stripe.com)\n\n- [Connect: behind the front-end experience](https://stripe.com/blog/connect-front-end-experience) (June 19, 2017)\n- [A new approach to mocking GraphQL data: how we power React component tests and examples at Stripe](https://medium.freecodecamp.org/a-new-approach-to-mocking-graphql-data-1ef49de3d491) (December 11, 2018)\n- [Designing accessible color systems](https://stripe.com/en-pt/blog/accessible-color-systems) (October 15, 2019)\n- [To design and develop an interactive globe](https://stripe.com/blog/globe) (September 1, 2020)\n- [Migrating millions of lines of code to TypeScript](https://stripe.com/blog/migrating-to-typescript) (May 20, 2022)\n\n### [SumUp](https://sumup.com)\n\n- [10 lessons learned building SumUp’s design system](https://medium.com/sumup-engineering/10-lessons-learned-building-sumups-design-system-577af292ae56) (August 15, 2019)\n\n### [Superhuman](https://superhuman.com)\n\n- [Delightful search: more than meets the eye](https://blog.superhuman.com/delightful-search-more-than-meets-the-eye-d3fa2e3ef3b6) (May 5, 2017)\n\n### [TakeShape](https://www.takeshape.io)\n\n- [Why we switched from Yarn to pnpm](https://www.takeshape.io/articles/why-we-switched-from-yarn-to-pnpm/) (June 9, 2020)\n\n### [The Guardian](https://www.theguardian.com/)\n\n- [What we learnt from our mistakes in 2016](https://www.theguardian.com/info/developer-blog/2016/dec/18/what-we-learnt-from-our-mistakes-in-2016) (December 18, 2016)\n- [Revisiting the rendering tier](https://www.theguardian.com/info/2019/apr/04/revisiting-the-rendering-tier) (April 4, 2019)\n- [Migrating the Guardian website to React](https://www.theguardian.com/info/2019/dec/08/migrating-the-guardian-website-to-react) (December 8, 2019)\n\n### [The Knot Worldwide](https://www.theknotww.com/)\n\n- [Rebuilding the Guest List Manager with React + MobX at The Knot](https://tech.xogrp.com/rebuilding-the-guest-list-manager-with-react-mobx-at-the-knot-e34e32920571) (June 19, 2017)\n- [React Native @ The Knot](https://tech.xogrp.com/react-native-the-knot-ca255494da79) (February 8, 2019)\n- [React Native @ The Knot: A Designer’s Perspective](https://tech.xogrp.com/react-native-at-the-knot-a-designers-perspective-d3d3fe41ada1) (February 13, 2019)\n\n### [The New York Times](https://www.nytimes.com)\n\n- [The Technology Behind the NYTimes.com Redesign](https://open.nytimes.com/the-technology-behind-the-nytimes-com-redesign-3d3d3da70b9c) (January 8, 2014)\n- [Improving Article Accessibility](https://open.nytimes.com/improving-article-accessibility-7bca8cf02b34) (June 24, 2014)\n- [Building a Cross Platform 360-degree Video Experience at The New York Times](https://open.nytimes.com/building-a-cross-platform-360-degree-video-experience-at-the-new-york-times-c35afa92a2e8) (November 11, 2016)\n- [React, Relay and GraphQL: Under the Hood of The Times Website Redesign](https://open.nytimes.com/react-relay-and-graphql-under-the-hood-of-the-times-website-redesign-22fb62ea9764) (June 30, 2017)\n- [GraphQL in real life](https://youtu.be/HlZ3ZecECOU) (April 19, 2019)\n- [How We Implemented a Baseline Grid Using CSS](https://open.nytimes.com/how-we-implemented-a-baseline-grid-using-css-cb13cac45201) (November 21, 2019)\n- [A More Accessible Web](https://open.nytimes.com/a-more-accessible-web-fa87592da6d2) (February 25, 2021)\n\n### [The Telegraph](https://www.telegraph.co.uk)\n\n- [React Serverside rendering : build slicker apps with better SEO ranking](https://medium.com/the-telegraph-engineering/a-server-side-rendered-react-project-2fc7e75f4c57) (September 10, 2018)\n- [Improving third-party web performance at The Telegraph](https://medium.com/the-telegraph-engineering/improving-third-party-web-performance-at-the-telegraph-a0a1000be5) (April 30, 2019)\n- [Improving Cumulative Layout Shift at Telegraph Media Group](https://web.dev/telegraph) (June 14, 2021)\n\n### [The Times & The Sunday Times](https://www.thetimes.co.uk)\n\n- [Building the UI for the new The Times website](https://medium.com/swlh/building-the-ui-for-the-new-the-times-website-26dc4e6569e) (March 30, 2016)\n\n### [The U.S. Digital Service](https://www.usds.gov/)\n\n- [Building Forms Faster on Vets.gov](https://medium.com/the-u-s-digital-service/building-forms-faster-on-vets-gov-d8619f4e9db) (June 2, 2017)\n\n### [The Wall Street Journal](https://www.wsj.com)\n\n- [Making WSJ.com more accessible](https://matthewstrom.com/writing/wsj-accessibility.html) (August 3, 2016)\n\n### [This Also](http://thisalso.com)\n\n- [Fixing HTML Video on Mobile](https://medium.com/this-also/whitewater-9b47f1e32ffe) (July 14, 2016)\n\n### [ThomasNet](https://www.thomasnet.com/)\n\n- [How We Adopted CSS Grid at Scale](https://julian.is/article/css-grid-at-scale/) (March 1, 2018)\n\n### [Thread](https://www.thread.com/)\n\n- [Dealing with legacy code in React](https://thread.engineering/dealing-with-legacy-code-in-react-18bc0c039e8b) (May 10, 2018)\n- [Searching and sorting text with diacritical marks in JavaScript](https://thread.engineering/searching-and-sorting-text-with-diacritical-marks-in-javascript-45afef20e7f2) (August 29, 2018)\n\n### [Tinder](https://tinder.com)\n\n- [A Tinder Progressive Web App Performance Case Study](https://medium.com/@addyosmani/a-tinder-progressive-web-app-performance-case-study-78919d98ece0) (December 24, 2017)\n- [Building Tinder Online](https://medium.com/@roderickhsiao/building-tinder-online-a447e6c0265e) (February 9, 2018)\n\n### [Tines](https://www.tines.com)\n\n- [Our approach to CSS and how we chose it](https://www.tines.com/blog/our-approach-to-css-and-how-we-chose-it) (publication date is unknown)\n- [Understanding why our build got 15x slower with Webpack 5](https://www.tines.com/blog/understanding-why-our-build-got-15x-slower-with-webpack-5) (publication date is unknown)\n\n### [TinyMCE](https://www.tinymce.com/)\n\n- [TinyMCE is going mobile](https://go.tinymce.com/blog/tinymce-is-going-mobile/) (March 31, 2017)\n- [Benefits of gradual strong typing in JavaScript](https://go.tinymce.com/blog/benefits-of-gradual-strong-typing-in-javascript/) (January 25, 2019)\n\n### [Tokopedia](hthttps://www.tokopedia.com)\n\n- [A Tokopedia Mobile Web Performance Case Study](https://medium.com/tokopedia-engineering/a-tokopedia-mobile-web-performance-case-study-48ee5c6e4d5c) (May 22, 2020)\n- [How focusing on web performance improved Tokopedia's click-through rate by 35%](https://web.dev/tokopedia/) (October 13, 2020)\n\n### [Treebo](https://www.treebo.com/)\n\n- [A React And Preact Progressive Web App Performance Case Study: Treebo](https://tech.treebo.com/a-react-and-preact-progressive-web-app-performance-case-study-treebo-c09ef145bc2e) (September 13, 2017)\n- [Redux Middlewares — An approach to cancel redux actions](https://tech.treebo.com/redux-middlewares-an-approach-to-cancel-redux-actions-7e08b51b83ce) (May 4, 2018)\n- [How do we design for an operations heavy product?](https://tech.treebo.com/how-do-we-design-for-an-operations-heavy-product-84c10713d3ab) (May 31, 2018)\n- [Iconography for Treebo](https://tech.treebo.com/iconography-for-treebo-c379bc910da1) (August 13, 2018)\n- [Improving User Experience with AMP⚡- A Treebo Case Study](https://tech.treebo.com/improving-user-experience-with-amp-treebos-case-study-9d382c53cba5) (March 16, 2019)\n- [A Tale of Brotli Compression](https://tech.treebo.com/a-tale-of-brotli-compression-bcb071d9780a) (January 20, 2020)\n- [GraphQL at Treebo](https://tech.treebo.com/graphql-at-treebo-f5b41c22c06f) (October 23, 2020)\n\n### [Trivago](https://www.trivago.com)\n\n- [Designing for RTL platforms - A flipped layout](https://tech.trivago.com/2015/04/27/right-to-left/) (April 27, 2015)\n- [Risk-free Migration From Assetic to Webpack](https://tech.trivago.com/2015/05/28/introduce-webpack/) (May 28, 2015)\n- [Speeding up webpack performance with parallel builds](https://tech.trivago.com/2015/12/15/parallel-webpack/) (December 15, 2015)\n- [Large Scale CSS Refactoring at trivago](https://tech.trivago.com/2016/02/02/large-scale-css-refactoring-at-trivago/) (February 2, 2016)\n- [Dropping IE8 Support: Consequences for JavaScript](https://tech.trivago.com/2016/06/01/dropping-ie8-support-consequences-for-javascript/) (June 1, 2016)\n- [Thoughts on Atom Building in the Pattern Library](https://tech.trivago.com/2016/06/16/thoughts-on-atom-building-in-the-pattern-library/) (June 16, 2016)\n- [An Inline SVG Icon System For Our Hotel Search Application](https://tech.trivago.com/2016/09/05/inline-svg-icon-system/) (September 5, 2016)\n- [CSS done right - Post RTLCSS](https://tech.trivago.com/2017/07/07/css-done-right-post-rtlcss/) (July 7, 2017)\n- [Accessibility at trivago](https://tech.trivago.com/2017/09/26/accessibility-at-trivago/) (September 26, 2017)\n- [trivago just made filtering faster and more accessible, but why and how?](https://tech.trivago.com/2017/12/22/trivago-just-made-filtering-faster-and-more-accessible-but-why-and-how/) (December 22, 2017)\n- [Melody - the sound of JavaScript for our Hotel Search](https://tech.trivago.com/2018/06/28/melody-the-sound-of-javascript-for-our-hotel-search/) (June 28, 2018)\n- [Building fast and reliable web applications](https://tech.trivago.com/2018/10/12/building-fast-and-reliable-web-applications/) (October 12, 2018)\n- [Presenting babel-plugin-cloudinary](https://tech.trivago.com/2019/04/02/presenting-babel-plugin-cloudinary/) (April 2, 2019)\n- [trivago Magazine's Journey to Server-Side Rendering](https://tech.trivago.com/2020/01/29/trivago-magazines-journey-to-server-side-rendering/) (January 29, 2020)\n- [The First Prettier Plugin For Twig is Here](https://tech.trivago.com/2020/03/10/the-first-prettier-plugin-for-twig-is-here/) (March 10, 2020)\n- [Exploring the Page Visibility API for Detecting Page Background State](https://tech.trivago.com/2020/11/17/exploring-the-page-visibility-api-for-detecting-page-background-state/) (November 17, 2020)\n- [Rethinking the Next-gen Analytics Web App at trivago](https://tech.trivago.com/2021/02/09/rethinking-the-next-gen-analytics-web-app-at-trivago/) (February 9, 2021)\n- [Designing Marketing Emails via predefined Modules in Salesforce Email Studio](https://tech.trivago.com/post/2021-04-19-designingmarketingemailsviapredefinedmod) (April 19, 2021)\n- [WARP - A Web Application Rewrite Project](https://tech.trivago.com/post/2022-05-16-warp-a-web-application-rewrite-project) (May 16, 2022)\n- [3 Things We Learned When Switching to TypeScript](https://tech.trivago.com/post/2022-08-01-three-learnings-switching-to-typescript) (August 1, 2022)\n- [End-to-end tests retry strategies](https://tech.trivago.com/post/2023-09-27-end-to-end-tests-retry-strategies) (September 27, 2023)\n\n### [Tumblr](https://www.tumblr.com/)\n\n- [Moving things out of critical rendering path](https://javascript.tumblr.com/post/139610473242/moving-things-out-of-critical-rendering-path) (February 19, 2016)\n- [The Road to Webpack](https://javascript.tumblr.com/post/143583264647/here-at-tumblr-we-use-a-js-bundler-to-compile-our#notes) (April 29, 2016)\n- [Flow and TypeScript](https://javascript.tumblr.com/post/165082071937/flow-and-typescript) (September 7, 2017)\n- [Using srcset and sizes to make responsive HTML5 images](https://javascript.tumblr.com/post/171557569007/responsive-images) (March 5, 2018)\n- [A Big New Beautiful Future for the Web at Tumblr](https://javascript.tumblr.com/post/172624931022/a-big-new-beautiful-future-for-the-web-at-tumblr) (April 5, 2018)\n- [How we wrote our own Service Worker](https://javascript.tumblr.com/post/182476050141/how-we-wrote-our-own-service-worker-as-we) (February 1, 2019)\n- [We’re making Tumblr more accessible!](https://javascript.tumblr.com/post/182090529587/were-making-tumblr-more-accessible) (January 17, 2019)\n\n### [Twitch](https://www.twitch.tv)\n\n- [Improving Chat Rendering Performance](https://blog.twitch.tv/en/2016/08/08/improving-chat-rendering-performance-1c0945b82764/) (August 8, 2016)\n- [Investigating React Native](https://blog.twitch.tv/en/2017/04/25/investigating-react-native-6032ecced610/) (April 25, 2017)\n- [Beyond Purple](https://blog.twitch.tv/en/2019/12/03/beyond-purple/) (December 3, 2019)\n\n### [Twitter](https://twitter.com)\n\n- [View Source: Twitter.com](https://pusher.com/sessions/meetup/viennajs/view-source-twittercom) (January 1, 2017)\n- [How we built Twitter Lite](https://blog.twitter.com/engineering/en_us/topics/open-source/2017/how-we-built-twitter-lite.html) (April 6, 2017)\n- [Infinite List and React](http://itsze.ro/blog/2017/04/09/infinite-list-and-react.html) (April 9, 2017)\n- [Twitter Lite and High Performance React Progressive Web Apps at Scale](https://medium.com/@paularmstrong/twitter-lite-and-high-performance-react-progressive-web-apps-at-scale-d28a00e780a3) (April 11, 2017)\n- [The Twitter Lite team about their use of Node.js](https://youtu.be/iWXC5VCfQHI) (April 12, 2017)\n- [Redux modules and code-splitting](http://nicolasgallagher.com/redux-modules-and-code-splitting/) (February 02, 2018)\n- [How using component-based design helps us build faster](https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/buildingfasterwithcomponents.html) (July 16, 2019)\n\n### [Uber](https://www.uber.com)\n\n- [Powering UberEATS with React Native and Uber Engineering](https://eng.uber.com/ubereats-react-native/) (March 28, 2017)\n- [Building m.uber: Engineering a High-Performance Web App for the Global Market](https://eng.uber.com/m-uber) (June 27, 2017)\n- [Javascript @ Uber](https://youtu.be/JWFyH13_I3o) (July 10, 2017)\n- [Building a More Seamless Web Booking Flow for Uber](https://eng.uber.com/web-booking-flow/) (July 25, 2019)\n- [Best Practices for Unit Testing in React Version 16](https://eng.uber.com/best-practices-for-react-v16/) (August 29, 2019)\n- [Counting Calories: How We Improved the Performance and Developer Experience of UberEats.com](https://eng.uber.com/uber-eats-com-web-app-rewrite/) (February 12, 2020)\n\n### [Udacity](https://www.udacity.com/)\n\n- [How a Fixed-Width Button Can Get Your Company Trending on Reddit for All the Wrong Reasons: A Front-End Developer Tale](https://engineering.udacity.com/how-a-fixed-width-button-can-get-your-company-trending-on-reddit-for-all-the-wrong-reasons-a-front-6214280888ab) (April 11, 2016)\n- [React Native: A retrospective from the mobile-engineering team at Udacity](https://engineering.udacity.com/react-native-a-retrospective-from-the-mobile-engineering-team-at-udacity-89975d6a8102) (July 3, 2018)\n- [Udacity’s Front-End Tech Stack](https://engineering.udacity.com/udacitys-front-end-tech-stack-b19dae07f0ac) (July 18, 2016)\n\n### [Unity](https://unity.com/)\n\n- [WebAssembly is here!](https://blogs.unity3d.com/2018/08/15/webassembly-is-here/) (August 15, 2018)\n- [WebAssembly Load Times and Performance](https://blogs.unity3d.com/2018/09/17/webassembly-load-times-and-performance/) (September 17, 2018)\n\n### [Unsplash](https://unsplash.com)\n\n- [How we gradually migrated to TypeScript at Unsplash](https://medium.com/unsplash/how-we-gradually-migrated-to-typescript-at-unsplash-7a34caa24ef1) (March 14, 2018)\n\n### [Vercel](https://vercel.com)\n\n- [How we made the Vercel Dashboard twice as fast](https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast) (August 9, 2022)\n- [Designing the Vercel virtual product tour](https://vercel.com/blog/designing-the-vercel-virtual-product-tour) (June 2, 2023)\n- [Design Engineering at Vercel](https://vercel.com/blog/design-engineering-at-vercel) (March 29, 2024)\n- [How Vercel adopted microfrontends](https://vercel.com/blog/how-vercel-adopted-microfrontends) (October 22, 2024)\n\n### [Verve](https://verve.co)\n\n- [GraphQL: A Retrospective](https://verve.co/engineering/graphql-a-retrospective/) (November 28, 2018)\n\n### [Walmart Labs](https://www.walmartlabs.com/)\n\n- [React Native at WalmartLabs](https://medium.com/walmartlabs/react-native-at-walmartlabs-cdd140589560) (December 19, 2016)\n- [Cutting Dev Time in Half With Invalid User Input Prevention](https://medium.com/walmartlabs/cutting-dev-time-in-half-with-invalid-user-input-prevention-bea29ea315c) (October 25, 2017)\n- [Migrating Angular 1.x apps to React — The Hybrid Way!](https://medium.com/walmartlabs/migrating-angular-1-x-apps-to-react-the-hybrid-way-3267ccf33755) (November 15, 2017)\n- [Migrating Large Enterprise to NodeJS](https://medium.com/walmartlabs/migrating-large-enterprise-to-nodejs-6c38523d2b33) (December 9, 2017)\n- [Primer on Front End Automation](https://medium.com/walmartlabs/primer-on-front-end-automation-a9eee2c6bc1) (July 27, 2018)\n- [Lazy Loading Images with IntersectionObserver](https://medium.com/walmartlabs/lazy-loading-images-intersectionobserver-8c5bff730920) (September 10, 2018)\n- [Midway: Walmart’s mocking journey…](https://medium.com/walmartlabs/midway-walmarts-mocking-journey-84c34fcc4593) (October 5, 2018)\n- [Infinite Scroll’ing the right way](https://medium.com/walmartlabs/infinite-scrolling-the-right-way-11b098a08815) (April 2, 2019)\n- [Delivering ReactJS applications at scale](https://medium.com/walmartlabs/delivering-reactjs-applications-at-scale-5cb8a363f99) (August 26, 2019)\n- [Turbocharging Walmart.com](https://youtu.be/vB8JUx9Dp08) (April 9, 2020)\n- [Differential Serving — Food for latest browsers](https://medium.com/walmartlabs/differential-serving-food-for-latest-browsers-ba96192eb0ad) (June 23, 2020)\n\n### [Wikimedia](https://www.wikimedia.org)\n\n- [Creative Techniques for Loading Web Pages Faster](https://vimeo.com/59916225) (January 17, 2012)\n- [Investigating a performance improvement](https://phabricator.wikimedia.org/phame/post/view/15/investigating_a_performance_improvement/) (June 2, 2017)\n- [Improving time-to-logo performance with preload links](https://phabricator.wikimedia.org/phame/post/view/19/improving_time-to-logo_performance_with_preload_links/) (June 7, 2017)\n- [Beacons](https://phabricator.wikimedia.org/phame/post/view/61/beacons/) (August 16, 2017)\n- [Measuring Wikipedia page load times](https://phabricator.wikimedia.org/phame/post/view/83/measuring_wikipedia_page_load_times/) (January 9, 2018)\n- [mustache.js replaced with JavaScript template literals in Extension:Popups](https://phabricator.wikimedia.org/phame/post/view/90/mustache.js_replaced_with_javascript_template_literals_in_extension_popups/) (April 3, 2018)\n- [Extension:Popups (Page Previews) front-end tooling](https://phabricator.wikimedia.org/phame/post/view/93/extension_popups_page_previews_front-end_tooling/) (April 19, 2018)\n- [Mobile web performance: the importance of the device](https://phabricator.wikimedia.org/phame/post/view/109/mobile_web_performance_the_importance_of_the_device/) (June 22, 2018)\n- [Why performance matters](https://phabricator.wikimedia.org/phame/post/view/131/why_performance_matters/) (December 12, 2018)\n- [Migrating code from MediaWiki's ResourceLoader to Webpack](https://phabricator.wikimedia.org/phame/post/view/146/migrating_code_from_mediawiki_s_resourceloader_to_webpack/) (March 13 2019)\n- [Evaluating Element Timing for Images](https://phabricator.wikimedia.org/phame/post/view/157/evaluating_element_timing_for_images/) (April 10, 2019)\n- [Performance perception: how satisfied are Wikipedia users?](https://phabricator.wikimedia.org/phame/post/view/161/performance_perception_how_satisfied_are_wikipedia_users/) (May 29, 2019)\n- [Performance perception: the effect of late-loading banners](https://phabricator.wikimedia.org/phame/post/view/165/performance_perception_the_effect_of_late-loading_banners/) (June 13, 2019)\n- [Performance perception: correlation to RUM metrics](https://phabricator.wikimedia.org/phame/post/view/167/performance_perception_correlation_to_rum_metrics/) (June 17, 2019)\n- [Tracking down slow event handlers with Event Timing](https://phabricator.wikimedia.org/phame/post/view/168/tracking_down_slow_event_handlers_with_event_timing/) (June 19, 2019)\n- [Wikipedia's JavaScript initialisation on a budget](https://phabricator.wikimedia.org/phame/post/view/175/wikipedia_s_javascript_initialisation_on_a_budget/) (Septemper 18, 2019)\n- [Measuring Long Tasks and First Input Delay](https://calendar.perfplanet.com/2019/measuring-long-tasks-and-first-input-delay/) (December 21, 2019)\n- [Analyzing Wikipedia's Search Performance](https://www.nray.dev/blog/analyzing-search-performance/) (April 5, 2021)\n- [300ms Faster: Reducing Wikipedia's Total Blocking Time](https://www.nray.dev/blog/300ms-faster-reducing-wikipedias-total-blocking-time/) (May 21, 2023)\n\n### [Wingify](https://wingify.com/)\n\n- [jQuery Promises: The answer to PostMessage's asynchrony](https://engineering.wingify.com/posts/jquery-promises-with-postmessage/) (June 17, 2013)\n- [How We Made The Animated A/B Testing Guide](https://engineering.wingify.com/posts/making-of-abtesting-scrollmation/) (July 8, 2013)\n- [Getting 60 FPS using Chrome devtools](https://engineering.wingify.com/posts/getting-60fps-using-devtools/) (July 29, 2013)\n- [Overcoming the Challenges of Performance Testing Single-page Apps](https://engineering.wingify.com/posts/performance-testing/) (January 29, 2015)\n- [Testing AngularJS Apps End to End Using Protractor](https://engineering.wingify.com/posts/angularapp-e2e-testing-with-protractor/) (February 13, 2015)\n- [A layout trick](https://engineering.wingify.com/posts/layout-trick/) (April 4, 2016)\n- [Speeding Up VWO](https://engineering.wingify.com/posts/speeding-up-vwo/) (September 17, 2016)\n- [Migrating towards Yarn and Webpack](https://engineering.wingify.com/posts/migrating-towards-yarn-webpack/) (October 4, 2017)\n- [Why we've removed Inheritance/Extend from SASS & you should do the same!](https://engineering.wingify.com/posts/sass-inheritance-removal/) (November 30, 2017)\n- [Automated Heatmap Verification E2E using Selenium and Canvas](https://engineering.wingify.com/posts/automated-heatmap-verification/) (April 3, 2018)\n\n### [Wix](https://www.wix.com/)\n\n- [Taking CSS To Scale: A Pragmatic Approach](https://www.wix.engineering/blog/taking-css-to-scale-a-pragmatic-approach) (July 13, 2016)\n- [Building a React Native App for 80 Million Users](https://youtu.be/abSNo2P9mMM) (October 1, 2016)\n- [The Story of Making Wix Accessible](https://www.wix.engineering/blog/the-story-of-making-wix-accessible) (December 14, 2017)\n- [Improving load time for 100 million websites](https://youtu.be/FKpShne3I4E) (June 26, 2018)\n- [Trim the Fat From Your Bundles Using Webpack Analyzer & React Lazy/Suspense](https://www.wix.engineering/post/trim-the-fat-from-your-bundles-using-webpack-analyzer-react-lazy-suspense) (September 2, 2019)\n- [How Wix improved website performance by evolving their infrastructure](https://web.dev/wix/) (March 10, 2021)\n- [When life gives you lemons, write better error messages](https://medium.com/wix-ux/when-life-gives-you-lemons-write-better-error-messages-46c5223e1a2f) (September 12, 2022)\n\n### [Yelp](https://www.yelp.com)\n\n- [Whoa! That Embedded Web View Looks Hot in Your iOS App!](https://engineeringblog.yelp.com/2013/11/whoa-that-embedded-web-view-looks-hot-in-your-ios-app.html) (November 7, 2013)\n- [CSS in the Age of React: How We Traded the Cascade for Consistency](https://engineeringblog.yelp.com/2018/03/css-in-the-age-of-react.html) (March 5, 2018)\n- [Organizing and Securing Third-Party CDN Assets at Yelp](https://engineeringblog.yelp.com/2019/11/organizing-and-securing-third-party-cdn-assets-at-yelp.html) (November 20, 2019)\n- [Server Side Rendering at Scale](https://engineeringblog.yelp.com/2022/02/server-side-rendering-at-scale.html) (February 22, 2022)\n- [Migrating from Styleguidist to Storybook](https://engineeringblog.yelp.com/2022/07/migrating-from-styleguidist-to-storybook.html) (July 6, 2022)\n- [Writing Emails Using React](https://engineeringblog.yelp.com/2022/07/writing-emails-using-react.html) (July 20, 2022)\n- [Gondola: an internal PaaS architecture for frontend app deployment](https://engineeringblog.yelp.com/2023/03/gondola-an-internal-paas-architecture-for-frontend-app-deployment.html) (March 3, 2023)\n\n### [YNAB](https://www.youneedabudget.com)\n\n- [Progressive Conversion of TypeScript Namespaces to Modules](https://dev.to/ynab/progressive-conversion-of-typescript-namespaces-to-modules-3f1j) (September 23, 2019)\n- Semantic Colors for Designers and Developers: [part 1](https://dev.to/ynab/a-semantic-color-system-the-theory-hk7), [part 2](https://dev.to/ynab/semantic-colors-for-designers-2lf2) and [part 3](https://dev.to/ynab/the-practice-semantic-colors-for-developers-1o6g) (February 12, 2020)\n- [How we use OpenAPI / Swagger for the YNAB API](https://dev.to/ynab/how-we-use-openapi-swagger-for-the-ynab-api-5453) (March 16, 2020)\n\n### [YouTube](https://www.youtube.com)\n\n- [Page Weight Matters](https://blog.chriszacharias.com/page-weight-matters) (December 21, 2012)\n- [Polymer @ YouTube](https://youtu.be/tNulrEbTQf8) (August 22, 2017)\n- [A Conspiracy To Kill IE6](https://blog.chriszacharias.com/a-conspiracy-to-kill-ie6) (May 1, 2019)\n- [Building a Better Web - Part 1: A faster YouTube on web](https://web.dev/better-youtube-web-part1/) (October 20, 2022)\n\n### [Zajno](https://zajno.com/)\n\n- [Visualizing money: how we explained a complex financial product using animation](https://medium.com/zajnocrew/visualizing-money-how-we-explained-a-complex-financial-product-using-animation-3ee8b3e4277e) (September 25, 2018)\n\n### [Zynga](https://www.zynga.com/)\n\n- [Why & How Words With Friends Is Adopting React Native](https://medium.com/zynga-engineering/why-how-words-with-friends-is-adopting-react-native-b24a405f421c) (September 17, 2018)\n- [React Native Stability Monitoring](https://medium.com/zynga-engineering/react-native-stability-monitoring-fbf425eb71ac) (May 14, 2019)\n\n### [18F](https://18f.gsa.gov/)\n\n- [Building a large-scale design system: How we created a design system for the U.S. government](https://18f.gsa.gov/2017/10/03/building-a-large-scale-design-system/) (October 3, 2017)\n\n### [1Password](https://1password.com/)\n\n- [From dark to light and back again](https://blog.1password.com/from-dark-to-light-and-back-again/) (November 8, 2018)\n- [How we used esbuild to reduce our browser extension build times by 90%](https://blog.1password.com/new-extension-build-system/) (May 30, 2024)\n\n### Miscellaneous\n\n- [PWA Stats](https://www.pwastats.com)\n- [Web Performance Optimization Stats](https://wpostats.com/)\n- [Production Web Apps Performance Study Q4/16 - Q1/17](https://github.com/GoogleChromeLabs/discovery/issues/1) (January 21, 2017)\n- [Case study: improving a popular library’s size for webpack users](https://iamakulov.com/notes/polished-webpack) (June 23, 2017)\n- [Case study: analyzing the Walmart site performance](https://iamakulov.com/notes/walmart/) (April 27, 2018)\n- Web Components for Enterprise (July 2019): [part 1](https://dev.to/webpadawan/web-components-for-enterprise-part-1-salesforce-oracle-sap-e70) and [part 2](https://dev.to/webpadawan/web-components-for-enterprise-part-2-nuxeo-ionic-vaadin-22l7)\n- [Frontend at scale](https://increment.com/frontend/frontend-at-scale/): leaders at Atlassian, Canva, Tinder, and Vimeo discuss frameworks, tooling, and rapidly evolving technologies (May 2020)\n- [Introducing emoji-picker-element: a memory-efficient emoji picker for the web](https://nolanlawson.com/2020/06/28/introducing-emoji-picker-element-a-memory-efficient-emoji-picker-for-the-web/) (June 28, 2020)\n- [Building an accessible emoji picker](https://nolanlawson.com/2020/07/01/building-an-accessible-emoji-picker/) (July 1, 2020)\n- [How ZDF created a video PWA with offline and dark mode](https://web.dev/zdf/) (October 7, 2020)\n- [NDTV achieved a 55% improvement in LCP by optimizing for Core Web Vitals](https://web.dev/ndtv/) (October 27, 2020)\n- [Rakuten 24’s investment in PWA increases user retention by 450%](https://web.dev/rakuten-24/) (November 17, 2020)\n- [JD.ID improves their mobile conversion rate by 53% with caching strategies, installation, and push notifications](https://web.dev/jdid/) (November 24, 2020)\n- [PWA users are 2.5x more likely to purchase Gravit Designer PRO](https://web.dev/gravit-designer/) (December 8, 2020)\n- [Clipchamp's video editor PWA installs see a 97% monthly growth](https://web.dev/clipchamp/) (December 8, 2020)\n- [How Zalando reduced performance feedback time from 1 day to 15 minutes with Lighthouse CI](https://web.dev/zalando/) (April 13, 2021)\n- [Mainline Menswear implements PWA and sees a 55% conversion rate uplift](https://web.dev/mainline-mensware/) (April 20, 2021)\n- [How Swappie increased mobile revenue by 42% by focusing on Core Web Vitals](https://web.dev/swappie/) (September 15, 2021)\n- [How Terra improved user engagement thanks to Dark Mode](https://web.dev/terra-dark-mode/#identifying-the-%22prefers-light%22-vs-%22dark%22-user-cohorts) (December 18, 2021)\n\n## Russian\n\n### [Amplifr](https://amplifr.com)\n\n- [Принципы разработки Амплифера](https://gist.github.com/ai/473dd603baa92d5c8590f3573514c7a1) (2019)\n- [Как Амплифер использует Logux — инструмент для связи клиента и сервера](https://habr.com/ru/post/491170/) (5 марта 2020)\n\n### [Aviasales](https://www.aviasales.ru)\n\n- [Как мы строим веб-платформу в Авиасейлс](https://blog.kamyshev.me/salo-selene/) (4 ноября 2021)\n\n### [Avito](https://www.avito.ru/)\n\n- [Фронтенд в Avito](https://youtu.be/OFKbwNc8AIw) (13 декабря 2015)\n- [Фронтенд для миллионов](https://youtu.be/hwQVbyKcRnA) (24 июня 2017)\n- [Дизайн-платформа в Avito](https://youtu.be/7vY3_vPipW8) (8 апреля 2017)\n- [Скриншоты как сервис](https://youtu.be/B_gLzbgJo98) (7 марта 2018)\n- [Unit-тестирование скриншотами: преодолеваем звуковой барьер](https://habr.com/ru/company/avito/blog/350604/) (14 марта 2018)\n- [Масштабируемая архитектура фронтенда](https://youtu.be/z9y6PNC2FL0) (7 апреля 2018)\n- [Каталог компонентов: переосмысление](https://youtu.be/zZUbXAVV-HA) (19 мая 2018)\n- [Avito Online Frontend: Infrastructure](https://youtu.be/3r3IYaaEcS8) (11 декабря 2018)\n- [Avito Online Frontend: Performance](https://youtu.be/CnsrImdBYz8) (18 декабря 2018)\n- [Жесть для Jest](https://youtu.be/8_6Kuo5jFpU) (17 августа 2019)\n- [Как мы нарисовали на карте несколько тысяч интерактивных объектов без вреда для перформанса](https://habr.com/ru/company/avito/blog/512146/) (29 июля 2020)\n- [Webpack в дикой природе](https://youtu.be/qKz9YAeKYMs) (20 ноября 2020)\n\n### [auto.ru](https://auto.ru/)\n\n- [Полный цикл тестирования React-приложений](https://habr.com/ru/company/yandex/blog/459924/) (14 июля 2019)\n\n### [Badoo](https://badoo.com)\n\n- [Многоязычный Badoo: «трудности перевода»](https://habrahabr.ru/company/badoo/blog/223767) (22 мая 2014)\n- [Специфика верстки мультиязычных веб-приложений](https://tech.badoo.com/ru/presentation/23/speczifika-verstki-multiyazychnyx-veb-prilozhenij) (26 марта 2015)\n- [Как собрать статистику с веб-сайта и не набить себе шишек](https://habrahabr.ru/company/badoo/blog/325062/) (29 марта 2017)\n- [Работаем с API по-взрослому](https://youtu.be/ErhWb-iTRmc) (14 апреля 2017)\n- [Покрываем A/B-тесты UI-тестами. Как не запутаться в собственном коде](https://habr.com/company/badoo/blog/434448/) (26 декабря 2018)\n- Sketch + Node.js: генерируем иконки для множества платформ и брендов. [Часть 1](https://habr.com/ru/company/badoo/blog/441898/) (27 февраля 2019) и [часть 2](https://habr.com/ru/company/badoo/blog/442886/) (12 марта 2019)\n- [Локализация приложений: как мы подружили перевод и разработку](https://habr.com/ru/company/badoo/blog/485138/) (23 января 2020)\n- [Дизайн-токены способны на большее: создаем единый источник информации о компонентах UI](https://habr.com/ru/company/badoo/blog/491948/) (12 марта 2020)\n- [Как перенести на TypeScript большую кодовую базу React UI-компонентов](https://habr.com/ru/company/badoo/blog/518246/) (9 сентября 2020)\n\n### [Delivery Club](https://www.delivery-club.ru/)\n\n- [Микрофронтенды: разделяй и властвуй](https://habr.com/ru/company/deliveryclub/blog/552240/) (14 апреля 2021)\n\n### [DIRECTUM](https://www.directum.ru/)\n\n- [Опыт перевода большого проекта с Flow на TypeScript](https://habr.com/ru/company/directum/blog/462055/) (1 августа 2019)\n\n### [Flocktory](https://www.flocktory.com)\n\n- [Разработка сторонних библиотек](https://slonoed.net/ru/third-party-js/) (22 мая 2017)\n\n### [GitLab](https://gitlab.com)\n\n- [Методы борьбы с legacy-кодом на примере GitLab](https://youtu.be/3tdfBMRq34o) (10 декабря 2019)\n\n### [HeadHunter](https://hh.ru/)\n\n- [Нянчим проект на React-redux с пелёнок](https://habr.com/ru/company/hh/blog/310524/) (21 сентября 2016)\n- [Качество кода фронтенда в HH](https://habr.com/ru/company/hh/blog/438812/) (4 февраля 2019)\n- [Как мы пилили серверный рендеринг и что из этого вышло](https://habr.com/ru/company/hh/blog/445816/) (28 марта 2019)\n- [Перфоманс фронтенда как современное искусство: графики, код, кулстори](https://habr.com/ru/company/hh/blog/519474/) (17 сентября 2020)\n- [«Продам гараж»: фронт и реклама в hh.ru](https://habr.com/ru/company/hh/blog/552288/) (14 апреля 2021)\n\n### [ISPSystem](https://www.ispsystem.ru)\n\n- [Обновляем Angular до 6-ой версии в проекте без использования CLI](https://habr.com/ru/company/ispsystem/blog/358696/) (16 мая 2018)\n- [Как организовать собственный репозиторий модулей Node.js с блэкджеком и версионностью](https://habr.com/ru/company/ispsystem/blog/418135/) (25 июля 2018)\n- [Как разделить фронтенд и бэкенд, сохранив взаимопонимание](https://habr.com/ru/company/ispsystem/blog/447650/) (11 апреля 2019)\n- [От библиотеки компонентов к дизайн-системе](https://habr.com/ru/company/ispsystem/blog/507826/) (23 июня 2020)\n- [Ленивая подгрузка переводов с Angular](https://habr.com/ru/company/ispsystem/blog/512008/) (22 июля 2020)\n\n### [Joom](https://www.joom.com)\n\n- [Автоматизируем локализацию макетов в Figma](https://habr.com/ru/company/joom/blog/535188/) (29 декабря 2020)\n- [Пошаговая инструкция: как с Node.js организовать иконки из Figma в проекте](https://habr.com/ru/company/joom/blog/708286/) (30 декабря 2022)\n\n### [Mail.Ru](https://mail.ru)\n\n- [Разработка собственного решения: риски и ответственность](https://habr.com/ru/company/mailru/blog/271689/) (26 ноября 2015)\n- [Frontend: Разработка и поддержка](https://habr.com/ru/company/mailru/blog/309212/) (6 сентября 2016)\n- [Архитектура фронтенда крупного проекта, как она есть](https://youtu.be/J08UOAJdjWc) (19 апреля 2018)\n- WebAuthn в реальной жизни: [запись доклада](https://youtu.be/yx_eHBsXyIo) (27 ноября 2019), [статья](https://habr.com/ru/company/mailru/blog/489270/) (20 февраля 2020)\n- [Кастомизация компонентов Ant Design и оптимизация бандла](https://habr.com/ru/company/mailru/blog/530798/) (11 декабря 2020)\n- [Адаптивный layout — как переверстать весь проект, не перевёрстывая его](https://habr.com/ru/company/mailru/blog/579798/) (24 сентября 2021)\n\n### [Microsoft To-Do](https://to-do.microsoft.com/)\n\n- [Как Microsoft To-Do использует React](https://youtu.be/ZdrnIUgeDAs) (18 июня 2018)\n\n### [Miro](https://miro.com/)\n\n- [Как мы учились рисовать тексты на Canvas](https://habr.com/ru/company/miro/blog/458624/) (3 июля 2019)\n- [Как мы боролись за байты на фронтенде. Усмиряем прожорливый виджет рисования и помогаем iPad его переварить](https://habr.com/ru/company/miro/blog/566426/) (6 июля 2021)\n\n### [Netcracker](https://www.netcracker.com/)\n\n- [Выбранный UI-фреймворк – вред. Архитектурные требования – профит](https://habr.com/company/netcracker/blog/333734/) (20 июля 2017)\n- [Микросервисный фронтенд — современный подход к разделению фронта](https://habr.com/company/netcracker/blog/420753/) (21 августа 2018)\n\n### [OneTwoTrip](https://www.onetwotrip.com/)\n\n- [9 лет в монолите на Node.JS](https://habr.com/ru/post/459206/) (9 июля 2019)\n- [Как мигрировать с mocha на jest в 14 простых шагов — и зачем](https://habr.com/ru/post/486360/) (31 января 2020)\n\n### [Rambler Group](https://rambler-co.ru/)\n\n- [Как мы разогнали мобильную Lenta.ru до скорости света](https://habr.com/company/rambler-co/blog/280602/) (31 марта 2016)\n- [Проектирование дизайн-системы Рамблера](https://youtu.be/ZxmcIpmenoY) (18 июня 2018)\n- [Опыт Rambler Group: как мы начали полностью контролировать формирование и поведение фронтовых React компонентов](https://habr.com/company/rambler-co/blog/417023/) (12 июля 2018)\n- [Apollo: 9 месяцев — полет нормальный](https://habr.com/company/rambler-co/blog/418417/) (27 июля 2018)\n- [Способы синхронизации вкладок браузера](https://habr.com/ru/company/rambler-co/blog/422545/) (7 сентября 2018)\n- [Маршрутизация в большом приложении на React](https://habr.com/company/rambler-co/blog/424025/) (27 сентября 2018)\n\n### [Setka](https://setka.io/)\n\n- [Разработка Rich Text Editor: проблемы и решения](https://habrahabr.ru/company/oleg-bunin/blog/350252/) (5 марта 2018)\n\n### [Skyeng](https://skyeng.ru)\n\n- [Как масштабировать сложный Single Page Application](https://youtu.be/a6mGNqubTcg) (5 июня 2017)\n- Переход с AngularJS на Angular (февраль 2018): [цели, планы и правила переноса элементов](https://habrahabr.ru/company/skyeng/blog/348356), [проблемы и решения гибридного режима](https://habr.com/ru/company/skyeng/blog/348512/), [жизнь после AngularJS](https://habr.com/ru/company/skyeng/blog/348606/)\n- [От Skype до WebRTC: как мы организовали видеосвязь через веб](https://habr.com/ru/company/skyeng/blog/446444/) (3 апреля 2019)\n- [Как мы подружили SCSS с CSS Variables на примере c темизацией UI Kit](https://habr.com/ru/company/skyeng/blog/459194/) (9 июля 2019)\n\n### [Sports.ru](https://www.sports.ru)\n\n- [Как в Sports.ru писали свой WYSIWYG-редактор](https://habr.com/ru/company/sports_ru/blog/492228/) (13 марта 2020)\n\n### [Tinkoff](https://www.tinkoff.ru/)\n\n- [Как мы разрабатываем новый фронтенд Tinkoff.ru](https://habrahabr.ru/company/tinkoff/blog/303580/) (23 июня 2016)\n- [Создание Tinkoff Design System. Первые шаги](https://habrahabr.ru/company/tinkoff/blog/326782/) (18 апреля 2017)\n- [Создание Tinkoff Design System. UI Kit, версионирование и витрина компонентов](https://habrahabr.ru/company/tinkoff/blog/339660/) (9 октября 2017)\n- [Как организовать работу над библиотекой общих компонентов](https://habr.com/ru/company/tinkoff/blog/468589/) (25 сентября 2019)\n- [WARNING: sanitizing HTML stripped some content и как с ним правильно бороться](https://m.habr.com/ru/company/tinkoff/blog/459396/) (27 сентября 2019)\n- [Как заопенсорсить npm-пакет с нормальным деплоем, CI и демо (без потери радости к жизни)](https://m.habr.com/ru/company/tinkoff/blog/467227/) (30 сентября 2019)\n- [Компоненты-агностики в Angular](https://m.habr.com/ru/company/tinkoff/blog/473108/) (25 октября 2019)\n- [«Шакал»: сжимаем фронтенд](https://habr.com/ru/company/tinkoff/blog/474632/) (7 ноября 2019)\n- Как мы распилили монолит: [часть 1](https://habr.com/ru/company/tinkoff/blog/517230/), [часть 2](https://habr.com/ru/company/tinkoff/blog/520476/), [часть 3](https://habr.com/ru/company/tinkoff/blog/527922/), [часть 4](https://habr.com/ru/company/tinkoff/blog/534522/) (август–декабрь 2020)\n\n### [Wrike](https://www.wrike.com)\n\n- [Чем плох JavaScript в большом проекте? С какими проблемами мы столкнулись и как их решали](https://habrahabr.ru/company/wrike/blog/277255/) (16 февраля 2016)\n- [Как отрефакторить 2 500 000 строк кода и не сойти с ума](https://habr.com/ru/company/wrike/blog/334590/) (5 июня 2017)\n- [Два года с Dart: о том, как мы пишем на языке, который ежегодно «хоронят»](https://habrahabr.ru/company/wrike/blog/330832/) (15 июня 2017)\n- [DIY: Как мы делали «живое» расписание для Codefest X](https://habr.com/ru/company/wrike/blog/448610/) (18 апреля 2019)\n- [10 верстальщиков на 30 команд. Вы рехнулись?](https://habr.com/ru/company/wrike/blog/452820/) (21 мая 2019)\n- [Как настроить веб-аналитику на AMP страницах](https://habr.com/ru/company/wrike/blog/451928/) (26 июня 2019)\n\n### [Альфа-Банк](https://alfabank.ru)\n\n- [Предъявите паспорт](https://habrahabr.ru/company/alfa/blog/335892/) (18 августа 2017)\n- [БЭМ + React: гибкая архитектура дизайн-системы](https://habrahabr.ru/company/alfa/blog/340522/) (23 октября 2017)\n- [Изоморфное приложение React JS + Spring Boot](https://habrahabr.ru/company/alfa/blog/340776/) (27 октября 2017)\n- [Атомарные SPA](https://youtu.be/pkHWttaktWk) (7 апреля 2018)\n- [Тёмная сторона дизайн-системы и что с ней делать](https://habr.com/ru/company/alfa/blog/492010/) (16 марта 2020)\n\n### [Бюро Горбунова](https://bureau.ru)\n\n- [Как в книгах Бюро тяжёлые картинки выгружаются из памяти, чтобы браузер не тормозил](https://bureau.ru/bb/soviet/20170629) (29 июня 2017)\n\n### [ВКонтакте](https://vk.com)\n\n- [React со скоростью света: не совсем обычный серверный рендеринг](https://www.youtube.com/watch?v=3rXueXJeGlw) (2 июня 2017)\n- [Как оседлать радугу: история создания тёмной темы](https://habr.com/ru/company/vk/blog/449720/) (29 апреля 2019)\n- [Баги, которые вы никогда не встретите](https://ok.ru/video/2423311305323) (26 ноября 2019)\n- [Бенчмарки VKUI и других ребят из UI-библиотек](https://habr.com/ru/company/vk/blog/558996/) (26 мая 2021)\n\n### [Додо Пицца](https://dodois.com)\n\n- [Додо Пицца: собственная касса на веб-технологиях](https://youtu.be/G_3qp1HbhR4) (14 октября 2019)\n- [Лошадь сдохла – слезь: переход с tslint на eslint](https://habr.com/ru/company/dodopizzaio/blog/473648/) (29 октября 2019)\n\n### [Леруа Мерлен](https://leroymerlin.ru)\n\n- [Опыт интеграции веб-компонентов на сайт Леруа Мерлен](https://habr.com/ru/company/leroy_merlin/blog/488648/) (18 февраля 2020)\n\n### [Медуза](https://meduza.io/)\n\n- [Веб-пуш уведомления в Медузе](https://dev.meduza.io/%D0%B2%D0%B5%D0%B1-%D0%BF%D1%83%D1%88-%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-%D0%BC%D0%B5%D0%B4%D1%83%D0%B7%D0%B5-4d10fd4e1d7f) (10 декабря 2015)\n- [AMP, Instant Articles, Instant View, whut?](http://telegra.ph/AMP-Instant-Articles-Instant-View-whut-11-23) (23 ноября 2016)\n- [Как использовать кастомные шрифты в вебе и не сойти с ума](https://dev.meduza.io/%D0%BA%D0%B0%D0%BA-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B5-%D1%88%D1%80%D0%B8%D1%84%D1%82%D1%8B-%D0%B2-%D0%B2%D0%B5%D0%B1%D0%B5-%D0%B8-%D0%BD%D0%B5-%D1%81%D0%BE%D0%B9%D1%82%D0%B8-%D1%81-%D1%83%D0%BC%D0%B0-9ba8a2998bcc) (1 декабря 2016)\n- [Подкасты «Медузы»](https://dev.meduza.io/%D0%BF%D0%BE%D0%B4%D0%BA%D0%B0%D1%81%D1%82%D1%8B-%D0%BC%D0%B5%D0%B4%D1%83%D0%B7%D1%8B-eff4c68d24f2) (21 сентября 2017)\n- [Как техотдел «Медузы» решил оптимизировать картинки — а в процессе переделал сайт, админку и подход к интерфейсу](https://meduza.io/feature/2020/07/13/kak-tehotdel-meduzy-reshil-optimizirovat-kartinki-a-v-protsesse-peredelal-sayt-adminku-i-podhod-k-interfeysu) (13 июля 2020)\n\n### [Одноклассники](https://ok.ru/)\n\n- [Архитектура и платформа проекта Одноклассники](https://habr.com/ru/company/odnoklassniki/blog/115881/) (21 марта 2011)\n- [Как мы оптимизировали социальную кнопку](https://habr.com/ru/company/mailru/blog/191154/) (26 августа 2013)\n- Новый фронтенд Одноклассников: запуск React в Java. [Часть 1](https://habr.com/ru/company/odnoklassniki/blog/480808/) и [часть 2](https://habr.com/ru/company/odnoklassniki/blog/486810/) (январь–февраль 2020)\n\n### [Сбербанк](http://sberbank.ru/)\n\n- [За закрытой дверью фронтенда Единой фронтальной системы (ЕФС)](https://habrahabr.ru/company/efs/blog/325916/) (7 апреля 2017)\n- [Redux как сердце архитектуры фронтенда Единой фронтальной системы](https://habrahabr.ru/company/efs/blog/328012/) (4 мая 2017)\n- [Работа с периферией из JavaScript: от теории к практике](https://habrahabr.ru/company/efs/blog/330374/) (15 июня 2017)\n- [Как работают приложения Сбербанк Онлайн: Workflow API и фрэймворки](https://habr.com/company/sberbank/blog/353746/) (18 апреля 2018)\n\n### [Ситимобил](https://city-mobil.ru)\n\n- [Хороший ли выбор Svelte для реализации виджета?](https://habr.com/ru/company/citymobil/blog/504270/) (28 мая 2020)\n\n### [Спортмастер](https://www.sportmaster.ru)\n\n- [Frontend в Sportmaster Lab](https://habr.com/ru/company/sportmaster_lab/blog/531342/) (4 декабря 2020)\n\n### [Учи.ру](https://uchi.ru)\n\n- [Интерфейсы для тех, кто еще не читает. Принципы проектирования детского UX-UI](https://habr.com/ru/company/uchi_ru/blog/516356/) (24 августа 2020)\n- [Единый UI-кит и синхронизация дизайна в Учи.ру. Часть 1](https://habr.com/ru/company/uchi_ru/blog/543308/) (20 февраля 2021)\n\n### [Хабр](https://habr.com/ru)\n\n- [Как мы ускоряли комментарии Хабра](https://habr.com/ru/company/habr/blog/590111/) (25 ноября 2021)\n\n### [ЦИАН](https://cian.ru)\n\n- [Микросервисный фронтенд](https://youtu.be/YANolrn4PYc) (7 ноября 2018)\n- Как разрабатывать сотни A/B-экспериментов: [доклад](https://youtu.be/uQh5_a2tx64), [текстовая версия](https://habr.com/ru/company/oleg-bunin/blog/528350/) (28 мая 2019)\n- [Внедряем Sign in with Apple — систему авторизации от Apple](https://habr.com/ru/company/cian/blog/475062/) (8 ноября 2019)\n- [Micro-frontends. Асинхронный подход к мультикомандной разработке](https://habr.com/ru/company/cian/blog/516958/) (28 августа 2020)\n- [Время менять шапки: ускорение мобильной поисковой выдачи Циан](https://habr.com/ru/company/cian/blog/598799/) (11 января 2021)\n\n### [ЮMoney (Яндекс.Деньги)](http://money.yandex.ru/)\n\n- [Прототипирование на продакшн-технологиях](https://habrahabr.ru/company/yamoney/blog/341028/) (26 октября 2017)\n- [Почему Node.js в качестве основы фронтенда – это круто](https://habrahabr.ru/company/yamoney/blog/334500/) (31 июля 2017)\n- [Создание NPM-модуля Яндекс.Кассы под Node.js — опыт Lodoss Team](https://habrahabr.ru/company/yamoney/blog/348070/) (1 февраля 2018)\n- [Фронтенд как у сына маминой подруги](https://habr.com/company/yamoney/blog/354416/) (26 апреля 2018)\n- [Реактивный фронтенд. История о том, как мы снова всё переписали](https://habr.com/company/yamoney/blog/414183/) (15 июня 2018)\n- [Jenkins на службе фронтенд-разработки](https://youtu.be/DA_R8mIaRJg) (22 февраля 2018)\n- [Обзор архитектуры фронтенда ЮMoney](https://youtu.be/7wGYxT1UZl4) (15 декабря 2020)\n\n### [Яндекс](https://www.yandex.ru/)\n\n- [Как инкрементальные обновления влияют на скорость загрузки. Опыт Яндекс.Почты](https://habrahabr.ru/company/yandex/blog/242503/) (6 ноября 2014)\n- [Accessibility. Как мы делаем Яндекс доступным людям с ограниченными возможностями и почему считаем это важным](https://habrahabr.ru/company/yandex/blog/258477/) (21 мая 2015)\n- [Лекция Виталия Харисова «10k» про лёгкую версию поиска для медленных соединений и способы оптимизации кода, позволяющие уложиться в 10 килобайт](https://youtu.be/RoO0Fcyf0FE?t=2443/) (22 апреля 2017)\n- [Как создавалась карта с голосами болельщиков для Олимпиады](https://habrahabr.ru/company/yandex/blog/335982/) (20 августа 2017)\n- [Как мы делали «нарратив» – новый формат публикаций в Яндекс.Дзене](https://habrahabr.ru/company/yandex/blog/349220/) (16 февраля 2018)\n- [React в Яндекс Поиске. Новая архитектура фронтенда СЕРПа](https://youtu.be/5T7mP-FpHN4) (27 октября 2018)\n- [Бэкенд для фронтенда, или как в Яндекс.Маркете создают API без костылей](https://habr.com/company/yandex/blog/428141/) (1 ноября 2018)\n- [React & БЭМ – официальная коллаборация. Часть историческая](https://habr.com/en/company/yandex/blog/438598/) (5 февраля 2019)\n- [Как создать тёмную тему и не навредить. Опыт команды Яндекс.Почты](https://habr.com/ru/company/yandex/blog/446780/) (9 апреля 2019)\n- [«Под капотом» Турбо-страниц: архитектура технологии быстрой загрузки веб-страниц](https://habr.com/ru/company/yandex/blog/460373/) (17 июля 2019)\n- [От идеи до релиза. Детальный опыт фронтенда Маркета](https://habr.com/ru/company/yandex/blog/459960/) (22 июля 2019)\n- [Разработка в монорепозитории](https://habr.com/ru/company/yandex/blog/469021/) (3 октября 2019)\n- [Как мы внедряли WebAssembly в Яндекс.Картах и почему оставили JavaScript](https://habr.com/ru/company/yandex/blog/475382/) (19 ноября 2019)\n- [Как устроено тестирование фронтенда в Яндекс.Маркете и почему мы отказываемся от еженедельных релизов](https://habr.com/ru/company/yandex/blog/478862/) (10 декабря 2019)\n- [Как переписать фронтенд нагруженного проекта и не потерять главного](https://habr.com/ru/company/yandex/blog/486146/) (3 февраля 2020)\n- [Минифицируем приватные поля в TypeScript](https://habr.com/ru/company/yandex/blog/506030/) (13 июня 2020)\n- [Технические предпочтения пользователей с нарушениями зрения в 2020 году](https://habr.com/ru/company/yandex/blog/515460/) (18 августа 2020)\n- [Как и почему мы переехали с собственного npm-репозитория на Verdaccio](https://habr.com/ru/company/yandex/blog/528386/) (17 ноября 2020)\n- [Веб-тренажёр Яндекс.Практикума. Как всё устроено](https://habr.com/ru/company/yandex_praktikum/blog/530268/) (27 ноября 2020)\n\n### [2ГИС](https://2gis.ru)\n\n- [TARS, сделай уровень frontend-рутины 0%](https://habrahabr.ru/company/2gis/blog/254105) (26 марта 2015)\n- [Тестируем вёрстку правильно](https://habrahabr.ru/company/2gis/blog/277457) (18 февраля 2016)\n- [Этажи: 3D-навигация на WebGL в 2gis.ru](https://habrahabr.ru/company/2gis/blog/282207) (22 апреля 2016)\n- [Дели — сокращай, или как мы делали мобильный 2ГИС Онлайн](https://habrahabr.ru/company/2gis/blog/333016) (20 июля 2017)\n- [Справа налево. Что такое dir=rtl и как приручить арабский язык](https://habr.com/company/2gis/blog/358148) (10 мая 2018)\n- [Справа налево. Как перевернуть интерфейс сайта под RTL](https://habr.com/company/2gis/blog/416635) (10 июля 2018)\n- [Быстрая генерализация маркеров на WebGL-карте](https://habr.com/ru/company/2gis/blog/442720/) (6 марта 2019)\n- [3D-аркада в браузере: как мы сделали игру на React + Redux](https://habr.com/ru/company/2gis/blog/498638) (23 апреля 2020)\n\n### Прочее\n\n- [Вавилонская башня из миллиона печенек. Как мы делали игру в VK mini app](https://habr.com/ru/company/kts/blog/546388/) (10 марта 2021)\n\n## License\n\n[![License: CC BY 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons.org/licenses/by/4.0/)\n"
  },
  {
    "path": "website/.gitignore",
    "content": "# build output\ndist/\n\n# generated types\n.astro/\n\n# dependencies\nnode_modules/\n\n# logs\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n# environment variables\n.env\n.env.production\n\n# macOS-specific files\n.DS_Store\n\n# jetbrains setting folder\n.idea/\n\n# claude local files\n.claude/*.local*\n"
  },
  {
    "path": "website/CLAUDE.md",
    "content": "# Project Instructions\n\nFrontend Case Studies website built with Astro. Content stored in TOML files.\n\n## Adding a New Company\n\nEdit `src/domain/company/data.toml`:\n\n```toml\n[companyid]\nname = \"Company Name\"\nwebsiteUrl = \"https://company.com\"\nblogUrl = \"https://company.com/blog\"        # Optional\nrssUrl = \"https://company.com/blog/rss.xml\" # Optional\n```\n\n**Required**: `name`, `websiteUrl`\n**Optional**: `blogUrl`, `rssUrl`\n\n## Adding a New Case Study\n\nEdit `src/domain/caseStudy/data.toml`:\n\n```toml\n[[companyid]]\nid = \"https://full-url-to-article\"\ntitle = \"Article or Talk Title\"\npublishedAt = \"YYYY-MM-DD\"\n```\n\n**Notes**:\n- Use `[[companyid]]` (double brackets) for multiple case studies per company\n- The `companyid` must match an existing company\n- Order by date (newest first) within each company section\n\n## Example\n\n```toml\n# In src/domain/company/data.toml\n[stripe]\nname = \"Stripe\"\nwebsiteUrl = \"https://stripe.com\"\nblogUrl = \"https://stripe.com/blog/engineering\"\n\n# In src/domain/caseStudy/data.toml\n[[stripe]]\nid = \"https://stripe.com/blog/payment-api-design\"\ntitle = \"Designing APIs for payments\"\npublishedAt = \"2023-05-15\"\n```\n"
  },
  {
    "path": "website/README.md",
    "content": "# Website\n\nWebsite is built with [pnpm](https://pnpm.io) and [astro](https://astro.build).\n\n## Getting started\n\n```sh\nnvm use # Ensure using the expected Node.js version\npnpm install # Install dependencies\npnpm run dev # Run local dev server\n```\n\n## Source data\n\nCompanies are defined in\n[src/domain/company/data.toml](src/domain/company/data.toml). See\n[schema](src/domain/company/schema.ts) for reference.\n\nCase studies are defined in\n[src/domain/caseStudy/data.toml](src/domain/caseStudy/data.toml). See\n[schema](src/domain/caseStudy/schema.ts) for reference.\n"
  },
  {
    "path": "website/astro.config.mjs",
    "content": "// @ts-check\nimport sitemap from \"@astrojs/sitemap\";\nimport { defineConfig } from \"astro/config\";\nimport { SITE_URL } from \"./src/config\";\n\n// https://astro.build/config\nexport default defineConfig({\n  site: SITE_URL,\n  integrations: [sitemap()],\n});\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"name\": \"website\",\n  \"type\": \"module\",\n  \"version\": \"0.0.1\",\n  \"scripts\": {\n    \"dev\": \"astro dev\",\n    \"build\": \"astro build\",\n    \"preview\": \"astro preview\",\n    \"astro\": \"astro\"\n  },\n  \"dependencies\": {\n    \"@astrojs/sitemap\": \"^3.2.1\",\n    \"astro\": \"^5.1.1\",\n    \"smol-toml\": \"^1.3.1\"\n  },\n  \"devDependencies\": {\n    \"@astrojs/rss\": \"^4.0.10\"\n  }\n}\n"
  },
  {
    "path": "website/public/robots.txt",
    "content": "User-agent: *\nAllow: /\n\nSitemap: https://frontendcs.com/sitemap-index.xml\n"
  },
  {
    "path": "website/src/components/BackToTop.astro",
    "content": "<a href=\"#top\">↑ Back to Top</a>\n<div data-bt-reference></div>\n\n<style>\n  a {\n    display: block;\n    text-align: center;\n    padding: 1rem;\n    z-index: 1;\n    position: sticky;\n    border-block-end: thin solid var(--color-border);\n    top: 0;\n    background: var(--color-bg);\n    visibility: hidden;\n    opacity: 0;\n  }\n\n  a[data-visible=\"true\"] {\n    visibility: visible;\n    opacity: 1;\n  }\n\n  @keyframes fadein {\n    from {\n      visibility: hidden;\n      opacity: 0;\n    }\n    to {\n      visibility: visible;\n      opacity: 1;\n    }\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    @supports (animation-range: entry 1cqh) {\n      a {\n        position: sticky;\n        animation: fadein linear both;\n        animation-timeline: view();\n        animation-range: entry 120cqh entry 125cqh;\n      }\n    }\n  }\n\n  @media (min-width: 66rem) {\n    a {\n      grid-column: full;\n    }\n  }\n</style>\n\n<script>\n  if (!CSS.supports(\"animation-range: entry 1cqh\")) {\n    document.addEventListener(\"DOMContentLoaded\", () => {\n      const linkNode = document.querySelector(\"a[href='#top']\");\n      // Observe a sibling to avoid infinite loop caused by sticky positioning\n      const observedNode = document.querySelector(\"[data-bt-reference]\");\n\n      if (!linkNode || !observedNode) {\n        return;\n      }\n\n      const observer = new IntersectionObserver(\n        ([entry]) => {\n          linkNode.setAttribute(\n            \"data-visible\",\n            !entry.isIntersecting ? \"true\" : \"false\"\n          );\n        },\n        { threshold: 0 }\n      );\n\n      observer.observe(observedNode);\n    });\n  }\n</script>\n"
  },
  {
    "path": "website/src/components/CaseStudiesList.astro",
    "content": "---\nimport { getAllCompanies } from \"@/domain/company/lib\";\nimport type { CollectionEntry } from \"astro:content\";\n\ninterface Props {\n  items: CollectionEntry<\"caseStudies\">[];\n  showCompany?: boolean;\n}\n\nconst { showCompany } = Astro.props;\n\nconst items = Astro.props.items.sort(\n  (a, b) => b.data.publishedAt.getTime() - a.data.publishedAt.getTime()\n);\n\nconst allCompanies = await getAllCompanies();\nconst companiesById = Object.fromEntries(\n  allCompanies.map((item) => [item.id, item])\n);\n\nconst dateFormatter = new Intl.DateTimeFormat(\"en-US\", {\n  year: \"numeric\",\n  month: \"long\",\n});\n---\n\n<ul>\n  {\n    items.map((caseStudy) => (\n      <li>\n        <div>\n          <a href={caseStudy.id}>{caseStudy.data.title}</a>\n          {showCompany ? (\n            <a\n              class=\"company novisited muted\"\n              href={`/companies/${caseStudy.data.company}`}\n            >\n              {companiesById[caseStudy.data.company].data.name}\n            </a>\n          ) : null}\n        </div>\n\n        <time class=\"muted\" datetime={caseStudy.data.publishedAt.toISOString()}>\n          {dateFormatter.format(caseStudy.data.publishedAt)}\n        </time>\n      </li>\n    ))\n  }\n</ul>\n\n<style>\n  ul {\n    display: contents;\n  }\n\n  li {\n    margin-block: 1.5rem;\n  }\n\n  .company {\n    display: table;\n    color: var(--color-muted);\n    text-decoration: none;\n  }\n\n  @media (min-width: 66rem) {\n    li {\n      display: grid;\n      grid-template-columns: subgrid;\n      grid-column: full;\n      margin-block: 1.5rem 0;\n    }\n\n    li > a {\n      grid-column: main;\n    }\n\n    time {\n      text-align: right;\n      grid-column: full-start / main-start;\n      grid-row: 1 / 1;\n    }\n  }\n</style>\n"
  },
  {
    "path": "website/src/components/Factoids.astro",
    "content": "---\nimport { getAllCaseStudies, getYearsRange } from \"@/domain/caseStudy/lib\";\nimport { getAllCompanies } from \"@/domain/company/lib\";\n\nconst companies = await getAllCompanies();\nconst allCaseStudies = await getAllCaseStudies();\nconst yearsRange = getYearsRange(allCaseStudies);\n---\n\n<dl>\n  <div>\n    <dt>Companies</dt>\n    <dd>{companies.length}</dd>\n  </div>\n  <div>\n    <dt>Case Studies</dt>\n    <dd>{allCaseStudies.length}</dd>\n  </div>\n  <div>\n    <dt>Period Covered</dt>\n    <dd>{yearsRange[0]}–{yearsRange[1]}</dd>\n  </div>\n</dl>\n\n<style>\n  dl {\n    grid-column: main;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 1rem 2rem;\n    margin-block-start: 1.5rem;\n  }\n\n  div {\n    display: inline-flex;\n    flex-direction: column-reverse;\n    margin-inline-end: 2rem;\n  }\n\n  dt {\n    font-size: 1.25rem;\n    color: var(--color-muted);\n  }\n\n  dd {\n    line-height: 1;\n    font-weight: bold;\n    font-size: 2.5rem;\n  }\n</style>\n"
  },
  {
    "path": "website/src/components/Footer.astro",
    "content": "<footer>\n  Made by <a href=\"https://andreyromanov.com\">Andrey Romanov</a> and <a\n    href=\"https://github.com/andrew--r/frontend-case-studies/graphs/contributors\"\n    >contributors</a\n  > • <a href=\"https://github.com/andrew--r/frontend-case-studies/issues/new\"\n    >Add a case study</a\n  > • ☆ <a href=\"https://github.com/andrew--r/frontend-case-studies\">\n    Star on GitHub</a\n  >\n</footer>\n\n<style>\n  footer {\n    border-top: thin solid var(--color-border);\n    margin-block-start: 3rem;\n    padding-block: 0.75rem 1rem;\n  }\n\n  @media (min-width: 66rem) {\n    footer {\n      grid-column: main;\n    }\n  }\n</style>\n"
  },
  {
    "path": "website/src/components/Header.astro",
    "content": "---\nimport Factoids from \"./Factoids.astro\";\nimport RssLink from \"./RssLink.astro\";\n\nconst isRoot = Astro.originPathname === \"/\";\nconst title = \"Frontend Case Studies\";\n---\n\n<header>\n  <h1 id=\"top\" class:list={[{ root: isRoot }]}>\n    {\n      isRoot ? (\n        title\n      ) : (\n        <a href=\"/\" class=\"raw\">\n          ← Frontend Case Studies\n        </a>\n      )\n    }\n\n    {isRoot ? <RssLink href=\"/rss.xml\" /> : null}\n  </h1>\n\n  {\n    isRoot ? (\n      <>\n        <p>\n          Go beyond basic tutorials. Explore real-world frontend challenges\n          and learn industry best practices.\n        </p>\n        <Factoids />\n      </>\n    ) : null\n  }\n</header>\n\n<style>\n  header {\n    padding-block: 1rem;\n  }\n\n  h1:not(.root) {\n    font-size: 1.25rem;\n    font-weight: normal;\n  }\n\n  .root {\n    font-size: 3.5rem;\n  }\n\n  p {\n    margin-block-start: 1rem;\n    font-size: 1.5rem;\n  }\n\n  a {\n    text-decoration: none;\n    color: inherit;\n  }\n\n  a:is(:hover, :focus-visible) {\n    color: var(--color-link-hover);\n  }\n\n  @media (min-width: 66rem) {\n    header {\n      grid-column: main;\n    }\n  }\n</style>\n"
  },
  {
    "path": "website/src/components/Navigation.astro",
    "content": "---\ninterface Props {\n  items: { id: string; name: string }[];\n  layout: \"inline\" | \"column\";\n}\n\nconst { items, layout } = Astro.props;\n---\n\n<nav class:list={[layout]}>\n  <ul>\n    {\n      items.map((item) => (\n        <li>\n          <a href={`#${item.id}`}>{item.name}</a>\n        </li>\n      ))\n    }\n  </ul>\n</nav>\n\n<style>\n  .column {\n    columns: 8.75rem auto;\n    column-gap: 1rem;\n  }\n\n  .inline li {\n    display: inline-block;\n    margin-inline-end: 1.25rem;\n  }\n\n  @keyframes fadeout {\n    from {\n      opacity: 1;\n    }\n    to {\n      opacity: 0;\n    }\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    nav {\n      animation: fadeout linear;\n      animation-timeline: view();\n      animation-range: exit 75% exit 100%;\n    }\n  }\n</style>\n"
  },
  {
    "path": "website/src/components/RssLink.astro",
    "content": "---\ninterface Props {\n  href: string;\n}\n\nconst { href } = Astro.props;\n---\n\n<a class=\"raw\" href={href} title=\"RSS Feed\" aria-label=\"RSS Feed\">\n  <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415a3.3 3.3 0 013.293 3.295A3.303 3.303 0 013.283 24C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z\"\n      fill=\"currentColor\"></path>\n  </svg>\n</a>\n\n<style>\n  a {\n    display: inline-block;\n    width: 1cap;\n    height: 1cap;\n    color: #f60;\n    vertical-align: baseline;\n  }\n\n  a:hover,\n  a:focus-visible {\n    color: var(--color-link-hover);\n  }\n\n  svg {\n    display: block;\n    width: 100%;\n    height: 100%;\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    svg {\n      transition-property: color, transform;\n      transition-duration: 200ms;\n      transform-origin: left bottom;\n    }\n\n    a:is(:hover, :focus-visible) svg {\n      transform: rotate(4deg) scale(1.05);\n    }\n  }\n</style>\n"
  },
  {
    "path": "website/src/components/RssMetaLink.astro",
    "content": "---\nimport { SITE_URL } from \"../config\";\n\ninterface Props {\n  title: string;\n  href: string;\n}\n\nconst { title, href } = Astro.props;\n---\n\n<link\n  rel=\"alternate\"\n  type=\"application/rss+xml\"\n  title={title}\n  href={new URL(href, SITE_URL)}\n/>\n"
  },
  {
    "path": "website/src/config.ts",
    "content": "export const SITE_URL = \"https://frontendcs.com\";\nexport const SITE_NAME = \"Frontend Case Studies\";\nexport const SITE_DESCRIPTION =\n  \"A curated list of talks and articles about real-world frontend development\";\n"
  },
  {
    "path": "website/src/content.config.ts",
    "content": "import { file } from \"astro/loaders\";\nimport { defineCollection, z } from \"astro:content\";\nimport { parseCaseStudiesFromTomlUnsafe } from \"./domain/caseStudy/lib\";\nimport { caseStudySchema } from \"./domain/caseStudy/schema\";\nimport { parseCompaniesFromTomlUnsafe } from \"./domain/company/lib\";\nimport { companySchema } from \"./domain/company/schema\";\n\nconst companies = defineCollection({\n  loader: file(\"src/domain/company/data.toml\", {\n    parser: parseCompaniesFromTomlUnsafe,\n  }),\n  schema: companySchema,\n});\n\nconst caseStudies = defineCollection({\n  loader: file(\"src/domain/caseStudy/data.toml\", {\n    parser: parseCaseStudiesFromTomlUnsafe,\n  }),\n  schema: caseStudySchema,\n});\n\nexport const collections = {\n  companies,\n  caseStudies,\n};\n"
  },
  {
    "path": "website/src/domain/caseStudy/data.ru.toml",
    "content": "[[amplifr]]\nid = \"https://gist.github.com/ai/473dd603baa92d5c8590f3573514c7a1\"\ntitle = \"Принципы разработки Амплифера\"\npublishedAt = \"2019\"\n\n[[amplifr]]\nid = \"https://habr.com/ru/post/491170/\"\ntitle = \"Как Амплифер использует Logux — инструмент для связи клиента и сервера\"\npublishedAt = \"2020-03-05\"\n\n[[aviasales]]\nid = \"https://blog.kamyshev.me/salo-selene/\"\ntitle = \"Как мы строим веб-платформу в Авиасейлс\"\npublishedAt = \"2021-11-04\"\n\n[[avito]]\nid = \"https://youtu.be/OFKbwNc8AIw\"\ntitle = \"Фронтенд в Avito\"\npublishedAt = \"2015-12-13\"\n\n[[avito]]\nid = \"https://youtu.be/hwQVbyKcRnA\"\ntitle = \"Фронтенд для миллионов\"\npublishedAt = \"2017-06-24\"\n\n[[avito]]\nid = \"https://youtu.be/7vY3_vPipW8\"\ntitle = \"Дизайн-платформа в Avito\"\npublishedAt = \"2017-04-08\"\n\n[[avito]]\nid = \"https://youtu.be/B_gLzbgJo98\"\ntitle = \"Скриншоты как сервис\"\npublishedAt = \"2018-03-07\"\n\n[[avito]]\nid = \"https://habr.com/ru/company/avito/blog/350604/\"\ntitle = \"Unit-тестирование скриншотами: преодолеваем звуковой барьер\"\npublishedAt = \"2018-03-14\"\n\n[[avito]]\nid = \"https://youtu.be/z9y6PNC2FL0\"\ntitle = \"Масштабируемая архитектура фронтенда\"\npublishedAt = \"2018-04-07\"\n\n[[avito]]\nid = \"https://youtu.be/zZUbXAVV-HA\"\ntitle = \"Каталог компонентов: переосмысление\"\npublishedAt = \"2018-05-19\"\n\n[[avito]]\nid = \"https://youtu.be/3r3IYaaEcS8\"\ntitle = \"Avito Online Frontend: Infrastructure\"\npublishedAt = \"2018-12-11\"\n\n[[avito]]\nid = \"https://youtu.be/CnsrImdBYz8\"\ntitle = \"Avito Online Frontend: Performance\"\npublishedAt = \"2018-12-18\"\n\n[[avito]]\nid = \"https://youtu.be/8_6Kuo5jFpU\"\ntitle = \"Жесть для Jest\"\npublishedAt = \"2019-08-17\"\n\n[[avito]]\nid = \"https://habr.com/ru/company/avito/blog/512146/\"\ntitle = \"Как мы нарисовали на карте несколько тысяч интерактивных объектов без вреда для перформанса\"\npublishedAt = \"2020-07-29\"\n\n[[avito]]\nid = \"https://youtu.be/qKz9YAeKYMs\"\ntitle = \"Webpack в дикой природе\"\npublishedAt = \"2020-11-20\"\n\n[[autoru]]\nid = \"https://habr.com/ru/company/yandex/blog/459924/\"\ntitle = \"Полный цикл тестирования React-приложений\"\npublishedAt = \"2019-07-14\"\n\n[[badoo]]\nid = \"https://habrahabr.ru/company/badoo/blog/223767\"\ntitle = \"Многоязычный Badoo: «трудности перевода»\"\npublishedAt = \"2014-05-22\"\n\n[[badoo]]\nid = \"https://tech.badoo.com/ru/presentation/23/speczifika-verstki-multiyazychnyx-veb-prilozhenij\"\ntitle = \"Специфика верстки мультиязычных веб-приложений\"\npublishedAt = \"2015-03-26\"\n\n[[badoo]]\nid = \"https://habrahabr.ru/company/badoo/blog/325062/\"\ntitle = \"Как собрать статистику с веб-сайта и не набить себе шишек\"\npublishedAt = \"2017-03-29\"\n\n[[badoo]]\nid = \"https://youtu.be/ErhWb-iTRmc\"\ntitle = \"Работаем с API по-взрослому\"\npublishedAt = \"2017-04-14\"\n\n[[badoo]]\nid = \"https://habr.com/company/badoo/blog/434448/\"\ntitle = \"Покрываем A/B-тесты UI-тестами. Как не запутаться в собственном коде\"\npublishedAt = \"2018-12-26\"\n\n[[badoo]]\nid = \"https://habr.com/ru/company/badoo/blog/441898/\"\ntitle = \"Часть 1\"\npublishedAt = \"2019-02-27\"\n\n[[badoo]]\nid = \"https://habr.com/ru/company/badoo/blog/485138/\"\ntitle = \"Локализация приложений: как мы подружили перевод и разработку\"\npublishedAt = \"2020-01-23\"\n\n[[badoo]]\nid = \"https://habr.com/ru/company/badoo/blog/491948/\"\ntitle = \"Дизайн-токены способны на большее: создаем единый источник информации о компонентах UI\"\npublishedAt = \"2020-03-12\"\n\n[[badoo]]\nid = \"https://habr.com/ru/company/badoo/blog/518246/\"\ntitle = \"Как перенести на TypeScript большую кодовую базу React UI-компонентов\"\npublishedAt = \"2020-09-09\"\n\n[[deliveryclub]]\nid = \"https://habr.com/ru/company/deliveryclub/blog/552240/\"\ntitle = \"Микрофронтенды: разделяй и властвуй\"\npublishedAt = \"2021-04-14\"\n\n[[directum]]\nid = \"https://habr.com/ru/company/directum/blog/462055/\"\ntitle = \"Опыт перевода большого проекта с Flow на TypeScript\"\npublishedAt = \"2019-08-01\"\n\n[[flocktory]]\nid = \"https://slonoed.net/ru/third-party-js/\"\ntitle = \"Разработка сторонних библиотек\"\npublishedAt = \"2017-05-22\"\n\n[[gitlab]]\nid = \"https://youtu.be/3tdfBMRq34o\"\ntitle = \"Методы борьбы с legacy-кодом на примере GitLab\"\npublishedAt = \"2019-12-10\"\n\n[[headhunter]]\nid = \"https://habr.com/ru/company/hh/blog/310524/\"\ntitle = \"Нянчим проект на React-redux с пелёнок\"\npublishedAt = \"2016-09-21\"\n\n[[headhunter]]\nid = \"https://habr.com/ru/company/hh/blog/438812/\"\ntitle = \"Качество кода фронтенда в HH\"\npublishedAt = \"2019-02-04\"\n\n[[headhunter]]\nid = \"https://habr.com/ru/company/hh/blog/445816/\"\ntitle = \"Как мы пилили серверный рендеринг и что из этого вышло\"\npublishedAt = \"2019-03-28\"\n\n[[headhunter]]\nid = \"https://habr.com/ru/company/hh/blog/519474/\"\ntitle = \"Перфоманс фронтенда как современное искусство: графики, код, кулстори\"\npublishedAt = \"2020-09-17\"\n\n[[headhunter]]\nid = \"https://habr.com/ru/company/hh/blog/552288/\"\ntitle = \"«Продам гараж»: фронт и реклама в hh.ru\"\npublishedAt = \"2021-04-14\"\n\n[[ispsystem]]\nid = \"https://habr.com/ru/company/ispsystem/blog/358696/\"\ntitle = \"Обновляем Angular до 6-ой версии в проекте без использования CLI\"\npublishedAt = \"2018-05-16\"\n\n[[ispsystem]]\nid = \"https://habr.com/ru/company/ispsystem/blog/418135/\"\ntitle = \"Как организовать собственный репозиторий модулей Node.js с блэкджеком и версионностью\"\npublishedAt = \"2018-07-25\"\n\n[[ispsystem]]\nid = \"https://habr.com/ru/company/ispsystem/blog/447650/\"\ntitle = \"Как разделить фронтенд и бэкенд, сохранив взаимопонимание\"\npublishedAt = \"2019-04-11\"\n\n[[ispsystem]]\nid = \"https://habr.com/ru/company/ispsystem/blog/507826/\"\ntitle = \"От библиотеки компонентов к дизайн-системе\"\npublishedAt = \"2020-06-23\"\n\n[[ispsystem]]\nid = \"https://habr.com/ru/company/ispsystem/blog/512008/\"\ntitle = \"Ленивая подгрузка переводов с Angular\"\npublishedAt = \"2020-07-22\"\n\n[[joom]]\nid = \"https://habr.com/ru/company/joom/blog/535188/\"\ntitle = \"Автоматизируем локализацию макетов в Figma\"\npublishedAt = \"2020-12-29\"\n\n[[joom]]\nid = \"https://habr.com/ru/company/joom/blog/708286/\"\ntitle = \"Пошаговая инструкция: как с Node.js организовать иконки из Figma в проекте\"\npublishedAt = \"2022-12-30\"\n\n[[mailru]]\nid = \"https://habr.com/ru/company/mailru/blog/271689/\"\ntitle = \"Разработка собственного решения: риски и ответственность\"\npublishedAt = \"2015-11-26\"\n\n[[mailru]]\nid = \"https://habr.com/ru/company/mailru/blog/309212/\"\ntitle = \"Frontend: Разработка и поддержка\"\npublishedAt = \"2016-09-06\"\n\n[[mailru]]\nid = \"https://youtu.be/J08UOAJdjWc\"\ntitle = \"Архитектура фронтенда крупного проекта, как она есть\"\npublishedAt = \"2018-04-19\"\n\n[[mailru]]\nid = \"https://youtu.be/yx_eHBsXyIo\"\ntitle = \"запись доклада\"\npublishedAt = \"2019-11-27\"\n\n[[mailru]]\nid = \"https://habr.com/ru/company/mailru/blog/530798/\"\ntitle = \"Кастомизация компонентов Ant Design и оптимизация бандла\"\npublishedAt = \"2020-12-11\"\n\n[[mailru]]\nid = \"https://habr.com/ru/company/mailru/blog/579798/\"\ntitle = \"Адаптивный layout — как переверстать весь проект, не перевёрстывая его\"\npublishedAt = \"2021-09-24\"\n\n[[microsofttodo]]\nid = \"https://youtu.be/ZdrnIUgeDAs\"\ntitle = \"Как Microsoft To-Do использует React\"\npublishedAt = \"2018-06-18\"\n\n[[miro]]\nid = \"https://habr.com/ru/company/miro/blog/458624/\"\ntitle = \"Как мы учились рисовать тексты на Canvas\"\npublishedAt = \"2019-07-03\"\n\n[[miro]]\nid = \"https://habr.com/ru/company/miro/blog/566426/\"\ntitle = \"Как мы боролись за байты на фронтенде. Усмиряем прожорливый виджет рисования и помогаем iPad его переварить\"\npublishedAt = \"2021-07-06\"\n\n[[netcracker]]\nid = \"https://habr.com/company/netcracker/blog/333734/\"\ntitle = \"Выбранный UI-фреймворк – вред. Архитектурные требования – профит\"\npublishedAt = \"2017-07-20\"\n\n[[netcracker]]\nid = \"https://habr.com/company/netcracker/blog/420753/\"\ntitle = \"Микросервисный фронтенд — современный подход к разделению фронта\"\npublishedAt = \"2018-08-21\"\n\n[[onetwotrip]]\nid = \"https://habr.com/ru/post/459206/\"\ntitle = \"9 лет в монолите на Node.JS\"\npublishedAt = \"2019-07-09\"\n\n[[onetwotrip]]\nid = \"https://habr.com/ru/post/486360/\"\ntitle = \"Как мигрировать с mocha на jest в 14 простых шагов — и зачем\"\npublishedAt = \"2020-01-31\"\n\n[[ramblergroup]]\nid = \"https://habr.com/company/rambler-co/blog/280602/\"\ntitle = \"Как мы разогнали мобильную Lenta.ru до скорости света\"\npublishedAt = \"2016-03-31\"\n\n[[ramblergroup]]\nid = \"https://youtu.be/ZxmcIpmenoY\"\ntitle = \"Проектирование дизайн-системы Рамблера\"\npublishedAt = \"2018-06-18\"\n\n[[ramblergroup]]\nid = \"https://habr.com/company/rambler-co/blog/417023/\"\ntitle = \"Опыт Rambler Group: как мы начали полностью контролировать формирование и поведение фронтовых React компонентов\"\npublishedAt = \"2018-07-12\"\n\n[[ramblergroup]]\nid = \"https://habr.com/company/rambler-co/blog/418417/\"\ntitle = \"Apollo: 9 месяцев — полет нормальный\"\npublishedAt = \"2018-07-27\"\n\n[[ramblergroup]]\nid = \"https://habr.com/ru/company/rambler-co/blog/422545/\"\ntitle = \"Способы синхронизации вкладок браузера\"\npublishedAt = \"2018-09-07\"\n\n[[ramblergroup]]\nid = \"https://habr.com/company/rambler-co/blog/424025/\"\ntitle = \"Маршрутизация в большом приложении на React\"\npublishedAt = \"2018-09-27\"\n\n[[setka]]\nid = \"https://habrahabr.ru/company/oleg-bunin/blog/350252/\"\ntitle = \"Разработка Rich Text Editor: проблемы и решения\"\npublishedAt = \"2018-03-05\"\n\n[[skyeng]]\nid = \"https://youtu.be/a6mGNqubTcg\"\ntitle = \"Как масштабировать сложный Single Page Application\"\npublishedAt = \"2017-06-05\"\n\n# [[skyeng]]\n# id = \"https://habrahabr.ru/company/skyeng/blog/348356\"\n# title = \"цели, планы и правила переноса элементов\"\n# publishedAt = \"февраль 2018): [цели, планы и правила переноса элементов](https://habrahabr.ru/company/skyeng/blog/348356), [проблемы и решения гибридного режима](https://habr.com/ru/company/skyeng/blog/348512/), [жизнь после AngularJS](https://habr.com/ru/company/skyeng/blog/348606/\"\n# language = \"ru\"\n\n[[skyeng]]\nid = \"https://habr.com/ru/company/skyeng/blog/446444/\"\ntitle = \"От Skype до WebRTC: как мы организовали видеосвязь через веб\"\npublishedAt = \"2019-04-03\"\n\n[[skyeng]]\nid = \"https://habr.com/ru/company/skyeng/blog/459194/\"\ntitle = \"Как мы подружили SCSS с CSS Variables на примере c темизацией UI Kit\"\npublishedAt = \"2019-07-09\"\n\n[[sportsru]]\nid = \"https://habr.com/ru/company/sports_ru/blog/492228/\"\ntitle = \"Как в Sports.ru писали свой WYSIWYG-редактор\"\npublishedAt = \"2020-03-13\"\n\n[[tinkoff]]\nid = \"https://habrahabr.ru/company/tinkoff/blog/303580/\"\ntitle = \"Как мы разрабатываем новый фронтенд Tinkoff.ru\"\npublishedAt = \"2016-06-23\"\n\n[[tinkoff]]\nid = \"https://habrahabr.ru/company/tinkoff/blog/326782/\"\ntitle = \"Создание Tinkoff Design System. Первые шаги\"\npublishedAt = \"2017-04-18\"\n\n[[tinkoff]]\nid = \"https://habrahabr.ru/company/tinkoff/blog/339660/\"\ntitle = \"Создание Tinkoff Design System. UI Kit, версионирование и витрина компонентов\"\npublishedAt = \"2017-10-09\"\n\n[[tinkoff]]\nid = \"https://habr.com/ru/company/tinkoff/blog/468589/\"\ntitle = \"Как организовать работу над библиотекой общих компонентов\"\npublishedAt = \"2019-09-25\"\n\n[[tinkoff]]\nid = \"https://m.habr.com/ru/company/tinkoff/blog/459396/\"\ntitle = \"WARNING: sanitizing HTML stripped some content и как с ним правильно бороться\"\npublishedAt = \"2019-09-27\"\n\n[[tinkoff]]\nid = \"https://m.habr.com/ru/company/tinkoff/blog/467227/\"\ntitle = \"Как заопенсорсить npm-пакет с нормальным деплоем, CI и демо (без потери радости к жизни)\"\npublishedAt = \"2019-09-30\"\n\n[[tinkoff]]\nid = \"https://m.habr.com/ru/company/tinkoff/blog/473108/\"\ntitle = \"Компоненты-агностики в Angular\"\npublishedAt = \"2019-10-25\"\n\n[[tinkoff]]\nid = \"https://habr.com/ru/company/tinkoff/blog/474632/\"\ntitle = \"«Шакал»: сжимаем фронтенд\"\npublishedAt = \"2019-11-07\"\n\n[[tinkoff]]\nid = \"https://habr.com/ru/company/tinkoff/blog/517230/\"\ntitle = \"часть 1\"\npublishedAt = \"август–декабрь 2020\"\n\n[[wrike]]\nid = \"https://habrahabr.ru/company/wrike/blog/277255/\"\ntitle = \"Чем плох JavaScript в большом проекте? С какими проблемами мы столкнулись и как их решали\"\npublishedAt = \"2016-02-16\"\n\n[[wrike]]\nid = \"https://habr.com/ru/company/wrike/blog/334590/\"\ntitle = \"Как отрефакторить 2 500 000 строк кода и не сойти с ума\"\npublishedAt = \"2017-06-05\"\n\n[[wrike]]\nid = \"https://habrahabr.ru/company/wrike/blog/330832/\"\ntitle = \"Два года с Dart: о том, как мы пишем на языке, который ежегодно «хоронят»\"\npublishedAt = \"2017-06-15\"\n\n[[wrike]]\nid = \"https://habr.com/ru/company/wrike/blog/448610/\"\ntitle = \"DIY: Как мы делали «живое» расписание для Codefest X\"\npublishedAt = \"2019-04-18\"\n\n[[wrike]]\nid = \"https://habr.com/ru/company/wrike/blog/452820/\"\ntitle = \"10 верстальщиков на 30 команд. Вы рехнулись?\"\npublishedAt = \"2019-05-21\"\n\n[[wrike]]\nid = \"https://habr.com/ru/company/wrike/blog/451928/\"\ntitle = \"Как настроить веб-аналитику на AMP страницах\"\npublishedAt = \"2019-06-26\"\n\n[[alfabank]]\nid = \"https://habrahabr.ru/company/alfa/blog/335892/\"\ntitle = \"Предъявите паспорт\"\npublishedAt = \"2017-08-18\"\n\n[[alfabank]]\nid = \"https://habrahabr.ru/company/alfa/blog/340522/\"\ntitle = \"БЭМ + React: гибкая архитектура дизайн-системы\"\npublishedAt = \"2017-10-23\"\n\n[[alfabank]]\nid = \"https://habrahabr.ru/company/alfa/blog/340776/\"\ntitle = \"Изоморфное приложение React JS + Spring Boot\"\npublishedAt = \"2017-10-27\"\n\n[[alfabank]]\nid = \"https://youtu.be/pkHWttaktWk\"\ntitle = \"Атомарные SPA\"\npublishedAt = \"2018-04-07\"\n\n[[alfabank]]\nid = \"https://habr.com/ru/company/alfa/blog/492010/\"\ntitle = \"Тёмная сторона дизайн-системы и что с ней делать\"\npublishedAt = \"2020-03-16\"\n\n[[bureau]]\nid = \"https://bureau.ru/bb/soviet/20170629\"\ntitle = \"Как в книгах Бюро тяжёлые картинки выгружаются из памяти, чтобы браузер не тормозил\"\npublishedAt = \"2017-06-29\"\n\n[[vk]]\nid = \"https://www.youtube.com/watch?v=3rXueXJeGlw\"\ntitle = \"React со скоростью света: не совсем обычный серверный рендеринг\"\npublishedAt = \"2017-06-02\"\n\n[[vk]]\nid = \"https://habr.com/ru/company/vk/blog/449720/\"\ntitle = \"Как оседлать радугу: история создания тёмной темы\"\npublishedAt = \"2019-04-29\"\n\n[[vk]]\nid = \"https://ok.ru/video/2423311305323\"\ntitle = \"Баги, которые вы никогда не встретите\"\npublishedAt = \"2019-11-26\"\n\n[[vk]]\nid = \"https://habr.com/ru/company/vk/blog/558996/\"\ntitle = \"Бенчмарки VKUI и других ребят из UI-библиотек\"\npublishedAt = \"2021-05-26\"\n\n[[dodobrands]]\nid = \"https://youtu.be/G_3qp1HbhR4\"\ntitle = \"Додо Пицца: собственная касса на веб-технологиях\"\npublishedAt = \"2019-10-14\"\n\n[[dodobrands]]\nid = \"https://habr.com/ru/company/dodopizzaio/blog/473648/\"\ntitle = \"Лошадь сдохла – слезь: переход с tslint на eslint\"\npublishedAt = \"2019-10-29\"\n\n[[leroymerlin]]\nid = \"https://habr.com/ru/company/leroy_merlin/blog/488648/\"\ntitle = \"Опыт интеграции веб-компонентов на сайт Леруа Мерлен\"\npublishedAt = \"2020-02-18\"\n\n[[meduza]]\nid = \"https://dev.meduza.io/%D0%B2%D0%B5%D0%B1-%D0%BF%D1%83%D1%88-%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-%D0%BC%D0%B5%D0%B4%D1%83%D0%B7%D0%B5-4d10fd4e1d7f\"\ntitle = \"Веб-пуш уведомления в Медузе\"\npublishedAt = \"2015-12-10\"\n\n[[meduza]]\nid = \"http://telegra.ph/AMP-Instant-Articles-Instant-View-whut-11-23\"\ntitle = \"AMP, Instant Articles, Instant View, whut?\"\npublishedAt = \"2016-11-23\"\n\n[[meduza]]\nid = \"https://dev.meduza.io/%D0%BA%D0%B0%D0%BA-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B5-%D1%88%D1%80%D0%B8%D1%84%D1%82%D1%8B-%D0%B2-%D0%B2%D0%B5%D0%B1%D0%B5-%D0%B8-%D0%BD%D0%B5-%D1%81%D0%BE%D0%B9%D1%82%D0%B8-%D1%81-%D1%83%D0%BC%D0%B0-9ba8a2998bcc\"\ntitle = \"Как использовать кастомные шрифты в вебе и не сойти с ума\"\npublishedAt = \"2016-12-01\"\n\n[[meduza]]\nid = \"https://dev.meduza.io/%D0%BF%D0%BE%D0%B4%D0%BA%D0%B0%D1%81%D1%82%D1%8B-%D0%BC%D0%B5%D0%B4%D1%83%D0%B7%D1%8B-eff4c68d24f2\"\ntitle = \"Подкасты «Медузы»\"\npublishedAt = \"2017-09-21\"\n\n[[meduza]]\nid = \"https://meduza.io/feature/2020/07/13/kak-tehotdel-meduzy-reshil-optimizirovat-kartinki-a-v-protsesse-peredelal-sayt-adminku-i-podhod-k-interfeysu\"\ntitle = \"Как техотдел «Медузы» решил оптимизировать картинки — а в процессе переделал сайт, админку и подход к интерфейсу\"\npublishedAt = \"2020-07-13\"\n\n[[ok]]\nid = \"https://habr.com/ru/company/odnoklassniki/blog/115881/\"\ntitle = \"Архитектура и платформа проекта Одноклассники\"\npublishedAt = \"2011-03-21\"\n\n[[ok]]\nid = \"https://habr.com/ru/company/mailru/blog/191154/\"\ntitle = \"Как мы оптимизировали социальную кнопку\"\npublishedAt = \"2013-08-26\"\n\n[[ok]]\nid = \"https://habr.com/ru/company/odnoklassniki/blog/480808/\"\ntitle = \"Часть 1\"\npublishedAt = \"январь–февраль 2020\"\n\n[[sber]]\nid = \"https://habrahabr.ru/company/efs/blog/325916/\"\ntitle = \"За закрытой дверью фронтенда Единой фронтальной системы (ЕФС)\"\npublishedAt = \"2017-04-07\"\n\n[[sber]]\nid = \"https://habrahabr.ru/company/efs/blog/328012/\"\ntitle = \"Redux как сердце архитектуры фронтенда Единой фронтальной системы\"\npublishedAt = \"2017-05-04\"\n\n[[sber]]\nid = \"https://habrahabr.ru/company/efs/blog/330374/\"\ntitle = \"Работа с периферией из JavaScript: от теории к практике\"\npublishedAt = \"2017-06-15\"\n\n[[sber]]\nid = \"https://habr.com/company/sberbank/blog/353746/\"\ntitle = \"Как работают приложения Сбербанк Онлайн: Workflow API и фрэймворки\"\npublishedAt = \"2018-04-18\"\n\n[[citymobil]]\nid = \"https://habr.com/ru/company/citymobil/blog/504270/\"\ntitle = \"Хороший ли выбор Svelte для реализации виджета?\"\npublishedAt = \"2020-05-28\"\n\n[[sportmaster]]\nid = \"https://habr.com/ru/company/sportmaster_lab/blog/531342/\"\ntitle = \"Frontend в Sportmaster Lab\"\npublishedAt = \"2020-12-04\"\n\n[[uchiru]]\nid = \"https://habr.com/ru/company/uchi_ru/blog/516356/\"\ntitle = \"Интерфейсы для тех, кто еще не читает. Принципы проектирования детского UX-UI\"\npublishedAt = \"2020-08-24\"\n\n[[uchiru]]\nid = \"https://habr.com/ru/company/uchi_ru/blog/543308/\"\ntitle = \"Единый UI-кит и синхронизация дизайна в Учи.ру. Часть 1\"\npublishedAt = \"2021-02-20\"\n\n[[habr]]\nid = \"https://habr.com/ru/company/habr/blog/590111/\"\ntitle = \"Как мы ускоряли комментарии Хабра\"\npublishedAt = \"2021-11-25\"\n\n[[cian]]\nid = \"https://youtu.be/YANolrn4PYc\"\ntitle = \"Микросервисный фронтенд\"\npublishedAt = \"2018-11-07\"\n\n[[cian]]\nid = \"https://youtu.be/uQh5_a2tx64\"\ntitle = \"доклад\"\npublishedAt = \"2019-05-28\"\n\n[[cian]]\nid = \"https://habr.com/ru/company/cian/blog/475062/\"\ntitle = \"Внедряем Sign in with Apple — систему авторизации от Apple\"\npublishedAt = \"2019-11-08\"\n\n[[cian]]\nid = \"https://habr.com/ru/company/cian/blog/516958/\"\ntitle = \"Micro-frontends. Асинхронный подход к мультикомандной разработке\"\npublishedAt = \"2020-08-28\"\n\n[[cian]]\nid = \"https://habr.com/ru/company/cian/blog/598799/\"\ntitle = \"Время менять шапки: ускорение мобильной поисковой выдачи Циан\"\npublishedAt = \"2021-01-11\"\n\n[[yoomoney]]\nid = \"https://habrahabr.ru/company/yamoney/blog/341028/\"\ntitle = \"Прототипирование на продакшн-технологиях\"\npublishedAt = \"2017-10-26\"\n\n[[yoomoney]]\nid = \"https://habrahabr.ru/company/yamoney/blog/334500/\"\ntitle = \"Почему Node.js в качестве основы фронтенда – это круто\"\npublishedAt = \"2017-07-31\"\n\n[[yoomoney]]\nid = \"https://habrahabr.ru/company/yamoney/blog/348070/\"\ntitle = \"Создание NPM-модуля Яндекс.Кассы под Node.js — опыт Lodoss Team\"\npublishedAt = \"2018-02-01\"\n\n[[yoomoney]]\nid = \"https://habr.com/company/yamoney/blog/354416/\"\ntitle = \"Фронтенд как у сына маминой подруги\"\npublishedAt = \"2018-04-26\"\n\n[[yoomoney]]\nid = \"https://habr.com/company/yamoney/blog/414183/\"\ntitle = \"Реактивный фронтенд. История о том, как мы снова всё переписали\"\npublishedAt = \"2018-06-15\"\n\n[[yoomoney]]\nid = \"https://youtu.be/DA_R8mIaRJg\"\ntitle = \"Jenkins на службе фронтенд-разработки\"\npublishedAt = \"2018-02-22\"\n\n[[yoomoney]]\nid = \"https://youtu.be/7wGYxT1UZl4\"\ntitle = \"Обзор архитектуры фронтенда ЮMoney\"\npublishedAt = \"2020-12-15\"\n\n[[yandex]]\nid = \"https://habrahabr.ru/company/yandex/blog/242503/\"\ntitle = \"Как инкрементальные обновления влияют на скорость загрузки. Опыт Яндекс.Почты\"\npublishedAt = \"2014-11-06\"\n\n[[yandex]]\nid = \"https://habrahabr.ru/company/yandex/blog/258477/\"\ntitle = \"Accessibility. Как мы делаем Яндекс доступным людям с ограниченными возможностями и почему считаем это важным\"\npublishedAt = \"2015-05-21\"\n\n[[yandex]]\nid = \"https://youtu.be/RoO0Fcyf0FE?t=2443/\"\ntitle = \"Лекция Виталия Харисова «10k» про лёгкую версию поиска для медленных соединений и способы оптимизации кода, позволяющие уложиться в 10 килобайт\"\npublishedAt = \"2017-04-22\"\n\n[[yandex]]\nid = \"https://habrahabr.ru/company/yandex/blog/335982/\"\ntitle = \"Как создавалась карта с голосами болельщиков для Олимпиады\"\npublishedAt = \"2017-08-20\"\n\n[[yandex]]\nid = \"https://habrahabr.ru/company/yandex/blog/349220/\"\ntitle = \"Как мы делали «нарратив» – новый формат публикаций в Яндекс.Дзене\"\npublishedAt = \"2018-02-16\"\n\n[[yandex]]\nid = \"https://youtu.be/5T7mP-FpHN4\"\ntitle = \"React в Яндекс Поиске. Новая архитектура фронтенда СЕРПа\"\npublishedAt = \"2018-10-27\"\n\n[[yandex]]\nid = \"https://habr.com/company/yandex/blog/428141/\"\ntitle = \"Бэкенд для фронтенда, или как в Яндекс.Маркете создают API без костылей\"\npublishedAt = \"2018-11-01\"\n\n[[yandex]]\nid = \"https://habr.com/en/company/yandex/blog/438598/\"\ntitle = \"React & БЭМ – официальная коллаборация. Часть историческая\"\npublishedAt = \"2019-02-05\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/446780/\"\ntitle = \"Как создать тёмную тему и не навредить. Опыт команды Яндекс.Почты\"\npublishedAt = \"2019-04-09\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/460373/\"\ntitle = \"«Под капотом» Турбо-страниц: архитектура технологии быстрой загрузки веб-страниц\"\npublishedAt = \"2019-07-17\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/459960/\"\ntitle = \"От идеи до релиза. Детальный опыт фронтенда Маркета\"\npublishedAt = \"2019-07-22\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/469021/\"\ntitle = \"Разработка в монорепозитории\"\npublishedAt = \"2019-10-03\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/475382/\"\ntitle = \"Как мы внедряли WebAssembly в Яндекс.Картах и почему оставили JavaScript\"\npublishedAt = \"2019-11-19\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/478862/\"\ntitle = \"Как устроено тестирование фронтенда в Яндекс.Маркете и почему мы отказываемся от еженедельных релизов\"\npublishedAt = \"2019-12-10\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/486146/\"\ntitle = \"Как переписать фронтенд нагруженного проекта и не потерять главного\"\npublishedAt = \"2020-02-03\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/506030/\"\ntitle = \"Минифицируем приватные поля в TypeScript\"\npublishedAt = \"2020-06-13\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/515460/\"\ntitle = \"Технические предпочтения пользователей с нарушениями зрения в 2020 году\"\npublishedAt = \"2020-08-18\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex/blog/528386/\"\ntitle = \"Как и почему мы переехали с собственного npm-репозитория на Verdaccio\"\npublishedAt = \"2020-11-17\"\n\n[[yandex]]\nid = \"https://habr.com/ru/company/yandex_praktikum/blog/530268/\"\ntitle = \"Веб-тренажёр Яндекс.Практикума. Как всё устроено\"\npublishedAt = \"2020-11-27\"\n\n[[2gis]]\nid = \"https://habrahabr.ru/company/2gis/blog/254105\"\ntitle = \"TARS, сделай уровень frontend-рутины 0%\"\npublishedAt = \"2015-03-26\"\n\n[[2gis]]\nid = \"https://habrahabr.ru/company/2gis/blog/277457\"\ntitle = \"Тестируем вёрстку правильно\"\npublishedAt = \"2016-02-18\"\n\n[[2gis]]\nid = \"https://habrahabr.ru/company/2gis/blog/282207\"\ntitle = \"Этажи: 3D-навигация на WebGL в 2gis.ru\"\npublishedAt = \"2016-04-22\"\n\n[[2gis]]\nid = \"https://habrahabr.ru/company/2gis/blog/333016\"\ntitle = \"Дели — сокращай, или как мы делали мобильный 2ГИС Онлайн\"\npublishedAt = \"2017-07-20\"\n\n[[2gis]]\nid = \"https://habr.com/company/2gis/blog/358148\"\ntitle = \"Справа налево. Что такое dir=rtl и как приручить арабский язык\"\npublishedAt = \"2018-05-10\"\n\n[[2gis]]\nid = \"https://habr.com/company/2gis/blog/416635\"\ntitle = \"Справа налево. Как перевернуть интерфейс сайта под RTL\"\npublishedAt = \"2018-07-10\"\n\n[[2gis]]\nid = \"https://habr.com/ru/company/2gis/blog/442720/\"\ntitle = \"Быстрая генерализация маркеров на WebGL-карте\"\npublishedAt = \"2019-03-06\"\n\n[[2gis]]\nid = \"https://habr.com/ru/company/2gis/blog/498638\"\ntitle = \"3D-аркада в браузере: как мы сделали игру на React + Redux\"\npublishedAt = \"2020-04-23\"\n"
  },
  {
    "path": "website/src/domain/caseStudy/data.toml",
    "content": "[[aha]]\nid = \"https://www.aha.io/blog/coffescript-to-es6\"\ntitle = \"How I Convinced Our CTO to Switch From CoffeeScript to ES6\"\npublishedAt = \"2017-09-07\"\n\n[[datadog]]\nid = \"https://www.datadoghq.com/blog/engineering/redux-doghouse-reusable-react-redux-components-through-scoping/\"\ntitle = \"Redux-Doghouse: Creating reusable React-Redux components through scoping\"\npublishedAt = \"2016-11-14\"\n\n[[datadog]]\nid = \"https://www.datadoghq.com/blog/engineering/how-datadog-uses-datadog-to-gain-visibility-into-the-datadog-user-experience/\"\ntitle = \"How Datadog uses Datadog to gain visibility into the Datadog user experience\"\npublishedAt = \"2022-02-22\"\n\n[[datadog]]\nid = \"https://www.datadoghq.com/blog/engineering/druids-the-design-system-that-powers-datadog/\"\ntitle = \"DRUIDS, the Design System that Powers Datadog\"\npublishedAt = \"2022-09-29\"\n\n[[datadog]]\nid = \"https://www.datadoghq.com/blog/engineering/making-fetch-happen-building-a-general-purpose-query-and-render-scheduler/\"\ntitle = \"Making Fetch Happen - Building a General-purpose Query & Render Scheduler\"\npublishedAt = \"2023-04-17\"\n\n[[datadog]]\nid = \"https://www.datadoghq.com/blog/engineering/migrating-acceptance-tests-to-synthetic-monitoring/\"\ntitle = \"How We Migrated Our Acceptance Tests to Use Synthetic Monitoring\"\npublishedAt = \"2023-06-30\"\n\n[[datadog]]\nid = \"https://dev.to/datadog-frontend-dev/why-scaling-typescript-became-a-necessity-at-datadog-1nmn\"\ntitle = \"Why Scaling TypeScript Became a Necessity at Datadog\"\npublishedAt = \"2025-07-04\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/turbocharged-javascript-refactoring-with-codemods-b0cae8b326b9\"\ntitle = \"Turbocharged JavaScript Refactoring with Codemods\"\npublishedAt = \"2016-04-27\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/rearchitecting-airbnbs-frontend-5e213efc24d2\"\ntitle = \"Rearchitecting Airbnb’s Frontend\"\npublishedAt = \"2017-05-15\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/unlocking-test-performance-migrating-from-mocha-to-jest-2796c508ec50\"\ntitle = \"Migrating from Mocha to Jest\"\npublishedAt = \"2017-06-15\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/recent-web-performance-fixes-on-airbnb-listing-pages-6cd8d93df6f4\"\ntitle = \"React Performance Fixes on Airbnb Listing Pages\"\npublishedAt = \"2017-12-05\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/server-rendering-code-splitting-and-lazy-loading-with-react-router-v4-bfe596a6af70\"\ntitle = \"Server Rendering, Code Splitting, and Lazy Loading with React Router v4\"\npublishedAt = \"2018-01-10\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c\"\ntitle = \"React Native at Airbnb\"\npublishedAt = \"2018-06-19\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/operationalizing-node-js-for-server-side-rendering-c5ba718acfc9\"\ntitle = \"Operationalizing Node.js for Server Side Rendering\"\npublishedAt = \"2018-07-18\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/how-airbnb-is-moving-10x-faster-at-scale-with-graphql-and-apollo-aa4ec92d69e2\"\ntitle = \"How Airbnb is Moving 10x Faster at Scale with GraphQL and Apollo\"\npublishedAt = \"2018-12-05\"\n\n[[airbnb]]\nid = \"https://youtu.be/fHQ1WSx41CA\"\ntitle = \"Building (And Re-Building) the Airbnb Design System\"\npublishedAt = \"2019-10-30\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/ts-migrate-a-tool-for-migrating-to-typescript-at-scale-cd23bfeb5cc\"\ntitle = \"ts-migrate: A Tool for Migrating to TypeScript at Scale\"\npublishedAt = \"2020-08-18\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/building-a-faster-web-experience-with-the-posttask-scheduler-276b83454e91\"\ntitle = \"Building a Faster Web Experience with the postTask Scheduler\"\npublishedAt = \"2021-05-20\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/a-deep-dive-into-airbnbs-server-driven-ui-system-842244c5f5\"\ntitle = \"A Deep Dive into Airbnb’s Server-Driven UI System\"\npublishedAt = \"2021-06-29\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/measuring-web-performance-at-airbnb-122da8d3ea3f\"\ntitle = \"Measuring Web Performance at Airbnb\"\npublishedAt = \"2021-12-07\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/faster-javascript-builds-with-metro-cfc46d617a1f\"\ntitle = \"Faster JavaScript Builds with Metro\"\npublishedAt = \"2022-05-24\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/airbnbs-trip-to-linaria-dc169230bd12\"\ntitle = \"Airbnb’s Trip to Linaria\"\npublishedAt = \"2022-06-16\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/improving-performance-with-http-streaming-ba9e72c66408\"\ntitle = \"Improving Performance with HTTP Streaming\"\npublishedAt = \"2023-05-17\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/rethinking-text-resizing-on-web-1047b12d2881\"\ntitle = \"Rethinking Text Resizing on Web\"\npublishedAt = \"2024-05-16\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/how-airbnb-smoothly-upgrades-react-b1d772a565fd\"\ntitle = \"How Airbnb Smoothly Upgrades React\"\npublishedAt = \"2024-07-23\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/adopting-bazel-for-web-at-scale-a784b2dbe325\"\ntitle = \"Adopting Bazel for Web at Scale\"\npublishedAt = \"2024-11-12\"\n\n[[airbnb]]\nid = \"https://youtu.be/P-J9Eg7hJwE\"\ntitle = \"Adopting Typescript at Scale\"\npublishedAt = \"2019-06-16\"\n\n[[aldo]]\nid = \"https://simplified.dev/performance/impact-of-web-performance\"\ntitle = \"The Impact of Web Performance\"\npublishedAt = \"2020-02-06\"\n\n[[algolia]]\nid = \"https://www.algolia.com/blog/engineering/improving-web-performance-to-mirror-engine-speed\"\ntitle = \"Improving Web Performance to Mirror Engine Speed\"\npublishedAt = \"2017-07-26\"\n\n[[algolia]]\nid = \"https://www.algolia.com/blog/engineering/netinfo-api-algolia-javascript-client\"\ntitle = \"Using NetInfo API to Improve Algolia’s JavaScript Client\"\npublishedAt = \"2019-07-30\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2016/03/Managing-Frontend-in-the-microservices-architecture.html\"\ntitle = \"Managing Frontend in the Microservices Architecture\"\npublishedAt = \"2016-03-12\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2019/04/why-allegro-ads-chose-typescript.html\"\ntitle = \"Why Allegro Ads chose TypeScript\"\npublishedAt = \"2019-04-09\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2019/09/page-visibility-and-performance-metrics.html\"\ntitle = \"Page visibility and performance metrics\"\npublishedAt = \"2019-09-02\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2019/11/performance-of-javascript-optional-chaining.html\"\ntitle = \"Performance of JavaScript optional chaining\"\npublishedAt = \"2019-11-08\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2020/08/using-eslint.html\"\ntitle = \"Using ESLint to improve your app’s performance\"\npublishedAt = \"2020-08-11\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2021/06/measuring-web-performance.html\"\ntitle = \"Measuring Web Performance\"\npublishedAt = \"2021-06-08\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2021/07/making-api-calls-seamless-ux.html\"\ntitle = \"Making API calls a seamless user experience\"\npublishedAt = \"2021-07-21\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2021/07/css-architecture-and-performance-of-micro-frontends.html\"\ntitle = \"CSS Architecture and Performance in Micro Frontends\"\npublishedAt = \"2021-07-29\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2021/09/How-to-turn-on-TypeScript-strict-mode-in-specific-files.html\"\ntitle = \"How to turn on TypeScript strict mode in specific files\"\npublishedAt = \"2021-09-06\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2021/09/evolution-of-web-performance-culture.html\"\ntitle = \"Evolution of web performance culture\"\npublishedAt = \"2021-09-23\"\n\n[[allegro]]\nid = \"https://blog.allegro.tech/2021/10/refactoring-opbox-search.html\"\ntitle = \"How we refactored the search form UI component\"\npublishedAt = \"2021-10-26\"\n\n[[allegro]]\ntitle = \"Why should we rewrite enzyme.js to react-testing-library and how to do that?\"\nid = \"https://blog.allegro.tech/2022/02/why-we-should-rewrite-enzymejs-to-rtl-and-how-to-do-that.html\"\npublishedAt = \"2022-02-10\"\n\n[[allegro]]\ntitle = \"Vanilla JS is not dead! Microfrontends without web performance issues.\"\nid = \"https://blog.allegro.tech/2022/11/vanilla-js-is-not-dead.html\"\npublishedAt = \"2022-11-10\"\n\n[[allegro]]\ntitle = \"Embed multicolor icons using a single DOM element\"\nid = \"https://blog.allegro.tech/2024/01/embed-multicolor-icons-using-a-single-DOM-element.html\"\npublishedAt = \"2024-01-10\"\n\n[[allegro]]\ntitle = \"INP — what is the new Core Web Vitals metric and how do we work with it at Allegro.\"\nid = \"https://blog.allegro.tech/2024/07/INP-new-core-web-vitals.html\"\npublishedAt = \"2024-07-01\"\n\n[[amazon]]\nid = \"https://aws.amazon.com/blogs/developer/how-we-halved-the-publish-size-of-modular-aws-sdk-for-javascript-clients/\"\ntitle = \"How we halved the publish size of modular AWS SDK for JavaScript clients\"\npublishedAt = \"2021-10-14\"\n\n[[amazon]]\nid = \"https://www.amazon.science/blog/how-prime-video-updates-its-app-for-more-than-8-000-device-types\"\ntitle = \"How Prime Video updates its app for more than 8,000 device types: the switch to WebAssembly increases stability, speed\"\npublishedAt = \"2022-01-27\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2013/11/30/rendering-on-the-server-and-client-in-node-dot-js/\"\ntitle = \"Rendering on the Server and Client in Node.js\"\npublishedAt = \"2013-11-30\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2016/08/09/the-tech-behind-live-auction-integration/\"\ntitle = \"The Tech Behind Live Auction Integration\"\npublishedAt = \"2016-08-09\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2016/08/15/React-Native-at-Artsy/\"\ntitle = \"React Native at Artsy\"\npublishedAt = \"2016-08-15\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2017/08/29/Making-Artsy-Editorial-Accessible/\"\ntitle = \"Making Artsy Editorial Accessible\"\npublishedAt = \"2017-08-29\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2016/09/06/Milestone-on-OSS-by-Default/\"\ntitle = \"Helping the Web Towards OSS by Default\"\npublishedAt = \"2016-09-06\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2016/10/26/jwt-artsy-journey/\"\ntitle = \"JSON Web Tokens: Artsy's Journey\"\npublishedAt = \"2016-10-26\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/\"\ntitle = \"Exploration: Front-end JavaScript at Artsy in 2017\"\npublishedAt = \"2017-02-05\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2017/09/05/Modernizing-Force/\"\ntitle = \"Modernizing Force\"\npublishedAt = \"2017-09-05\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2018/03/17/two-years-of-react-native/\"\ntitle = \"React Native, 2 years later\"\npublishedAt = \"2018-03-17\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2018/11/26/keeping-dependencies-updated/\"\ntitle = \"Keeping Artsy's dependencies up to date\"\npublishedAt = \"2018-11-26\"\n\n[[artsy]]\nid = \"http://artsy.github.io/blog/2018/11/27/switch-from-capybara-webkit-to-chrome/\"\ntitle = \"Switch from Capybara Webkit to Chrome\"\npublishedAt = \"2018-11-27\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2018/12/11/GraphQL-Stitching/\"\ntitle = \"GraphQL Stitching 101\"\npublishedAt = \"2018-12-11\"\n\n[[artsy]]\nid = \"http://artsy.github.io/blog/2019/01/14/graphql-union-vs-interface/\"\ntitle = \"GraphQL: Union vs. Interface\"\npublishedAt = \"2019-01-14\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2019/01/29/from-tslint-to-eslint/\"\ntitle = \"From TSLint to ESLint, or How I Learned to Lint GraphQL Code\"\npublishedAt = \"2019-01-29\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2019/03/05/custom-editorial-features/\"\ntitle = \"The Anatomy of an Editorial Feature\"\npublishedAt = \"2019-03-05\"\n\n[[artsy]]\ntitle = \"React Native at Artsy, 3 years later\"\nid = \"https://artsy.github.io/blog/2019/03/17/three-years-of-react-native/\"\npublishedAt = \"2019-03-17\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2019/04/05/omakase-typescript/\"\ntitle = \"What is TypeScript?\"\npublishedAt = \"2019-04-05\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2019/05/24/server-rendering-responsively/\"\ntitle = \"Server-Rendering Responsively\"\npublishedAt = \"2019-05-24\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2019/10/29/css-is-hard-and-vanguard-2019-learnings/\"\ntitle = \"CSS is Hard and Other Things I Learned Working on the 2019 Artsy Vanguard\"\npublishedAt = \"2019-10-29\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2020/01/21/graphql-relay-windowed-pagination/\"\ntitle = \"Effortless Pagination with GraphQL and Relay? Really!\"\npublishedAt = \"2020-01-21\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2020/08/31/relay-pagination-containers-demystified/\"\ntitle = \"Relay Pagination Containers Demystified\"\npublishedAt = \"2020-08-31\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2021/04/15/accessing-the-relay-store/\"\ntitle = \"Accessing the Relay Store Without a Mutation\"\npublishedAt = \"2021-04-15\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2021/04/15/testing-react-tracking-with-jest-and-enzyme/\"\ntitle = \"Testing React Tracking with Jest and Enzyme\"\npublishedAt = \"2021-04-15\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2022/02/01/using-context-to-simplify-a-react-form/\"\ntitle = \"Using Context to Simplify a VERY Large React Form\"\npublishedAt = \"2022-02-01\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2022/08/23/getting-around-7-day-cookie/\"\ntitle = \"Hacking Around Safari's 7-day Cookie Limit\"\npublishedAt = \"2022-08-23\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2022/09/07/quick-tips-to-speed-up-ci/\"\ntitle = \"Parallelizing Jest and Cypress.io Tests on CircleCI\"\npublishedAt = \"2022-09-07\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2023/03/01/typescript-magic/\"\ntitle = \"TypeScript magic\"\npublishedAt = \"2023-03-01\"\n\n[[artsy]]\nid = \"https://artsy.github.io/blog/2024/03/07/nextjs-at-artsy-retrospective/\"\ntitle = \"Two years of Next.js at Artsy: A Retrospective\"\npublishedAt = \"2024-03-07\"\n\n[[nextroll]]\nid = \"https://tech.nextroll.com/blog/web/2013/11/12/lazyloading-backbone-collection-with-promises.html\"\ntitle = \"Lazy loading Backbone collections with Promises\"\npublishedAt = \"2013-11-12\"\n\n[[nextroll]]\nid = \"https://tech.nextroll.com/blog/frontend/2015/11/05/rollup-shared-ui-components.html\"\ntitle = \"Rollup: Shared UI components at AdRoll\"\npublishedAt = \"2015-11-05\"\n\n[[nextroll]]\nid = \"https://tech.nextroll.com/blog/frontend/2015/11/12/rollup-react-and-npm-at-adroll.html\"\ntitle = \"Rollup: How we use React.js and npm to share UI code at AdRoll\"\npublishedAt = \"2015-11-12\"\n\n[[nextroll]]\nid = \"https://tech.nextroll.com/blog/frontend/2015/11/19/rollup-major-learnings.html\"\ntitle = \"Rollup: What we have learned from sharing UI code at AdRoll\"\npublishedAt = \"2015-11-19\"\n\n[[nextroll]]\nid = \"https://tech.nextroll.com/blog/frontend/2015/12/21/gulp-react-docs.html\"\ntitle = \"gulp-react-docs: From propTypes to Markdown in 3 seconds\"\npublishedAt = \"2015-12-21\"\n\n[[nextroll]]\nid = \"https://tech.nextroll.com/blog/product/2016/07/29/how-to-create-a-style-guide.html\"\ntitle = \"How to Create a Style Guide: Start with a UI Framework\"\npublishedAt = \"2016-07-29\"\n\n[[nextroll]]\nid = \"https://tech.nextroll.com/blog/frontend/2017/08/29/how-to-run-a-front-end-infrastructure-team.html\"\ntitle = \"How to Run a Front-End Infrastructure Team\"\npublishedAt = \"2017-08-29\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/engineering/trellisheets-how-we-spin-up-css-for-trello-sites-with-ease\"\ntitle = \"Trellisheets: How we spin up CSS for Trello sites with ease\"\npublishedAt = \"2016-03-01\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/engineering/a-look-at-trello-adopting-graphql-and-apollo-in-a-legacy-application\"\ntitle = \"A look at Trello: adopting GraphQL and Apollo in a legacy application\"\npublishedAt = \"2019-08-28\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/engineering/using-an-event-driven-architecture-to-improve-jira-software-responsiveness\"\ntitle = \"Using an event-driven architecture to improve Jira Software responsiveness\"\npublishedAt = \"2019-11-05\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/engineering/scaling-react-server-side-rendering-in-jira-cloud\"\ntitle = \"Scaling React server-side rendering in Jira Cloud\"\npublishedAt = \"2020-02-04\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/blog/atlassian-engineering/react-resource-router-deep-dive\"\ntitle = \"Improving performance through better architecture\"\npublishedAt = \"2020-06-23\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/engineering/performance-in-jira-front-end\"\ntitle = \"Performance in Jira front-end: the story of a single line of code\"\npublishedAt = \"2020-11-16\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/engineering/performance-in-jira-front-end-modern-bundles\"\ntitle = \"Performance in Jira front-end: using modern bundles to improve load time\"\npublishedAt = \"2020-12-05\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/engineering/performance-in-jira-front-end-solving-bundle-duplicates-with-webpack-and-yarn\"\ntitle = \"Performance in Jira front-end: solving bundle duplicates with Webpack and yarn\"\npublishedAt = \"2020-12-22\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/blog/atlassian-engineering/colorful-and-accessible-theming-in-trello\"\ntitle = \"Colorful and accessible theming in Trello with CSS custom properties\"\npublishedAt = \"2022-07-11\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/blog/atlassian-engineering/fixing-trello-react-bug\"\ntitle = \"A Trello feature froze, but engineering didn’t: How we fixed an unreproducible React bug\"\npublishedAt = \"2022-07-28\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/blog/atlassian-engineering/rendering-like-butter-a-confluence-whiteboards-story\"\ntitle = \"Rendering like Butter – a Confluence Whiteboards Story\"\npublishedAt = \"2023-08-08\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/blog/atlassian-engineering/gpu-rendering-shapes-and-connectors-in-confluence-whiteboards\"\ntitle = \"Triangles at work: GPU rendering shapes and connectors in Confluence whiteboards\"\npublishedAt = \"2023-11-13\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/blog/design/designed-for-delight-built-for-performance\"\ntitle = \"Designed for delight, built for performance: The journey of pragmatic drag and drop\"\npublishedAt = \"2024-12-17\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/blog/design/implementing-typography-at-scale-the-journey-behind-the-screens\"\ntitle = \"Implementing typography at scale: the journey behind the screens\"\npublishedAt = \"2025-04-10\"\n\n[[atlassian]]\nid = \"https://www.atlassian.com/blog/atlassian-engineering/faster-builds-when-removing-barrel-files\"\ntitle = \"How We Achieved 75% Faster Builds by Removing Barrel Files\"\npublishedAt = \"2025-06-26\"\n\n[[abc]]\nid = \"https://www.abc.net.au/digital-product/composing-components/102183756\"\ntitle = \"Composing Components\"\npublishedAt = \"2018-09-28\"\n\n[[abc]]\nid = \"https://www.abc.net.au/digital-product/from-data-to-dom-building-a-text-rendering-pipeline-for-react/102169934\"\ntitle = \"From data to DOM: Building a text rendering pipeline for React\"\npublishedAt = \"2019-10-23\"\n\n[[abc]]\nid = \"https://www.abc.net.au/digital-product/migrating-the-platform-that-powers-abc-sites-to-typescript/102209404\"\ntitle = \"Migrating the platform that powers ABC sites to TypeScript\"\npublishedAt = \"2021-09-30\"\n\n[[abc]]\nid = \"https://www.abc.net.au/digital-product/branding-for-abc-websites/102135092\"\ntitle = \"Branding for ABC Websites\"\npublishedAt = \"2021-12-08\"\n\n[[abc]]\nid = \"https://www.abc.net.au/digital-product/exploring-component-reuse-at-abc/103359474\"\ntitle = \"How we optimise front-end component reuse at the ABC\"\npublishedAt = \"2024-02-21\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/how-to-teach-a-web-app-to-speak-100-languages-the-specifics-of-localisation-514f13ed235c\"\ntitle = \"How to teach a web app to speak 100 languages: the specifics of localisation\"\npublishedAt = \"2017-03-08\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/the-painless-way-to-collect-statistics-from-a-web-site-cadc6aa67688\"\ntitle = \"The painless way to collect statistics from a web-site\"\npublishedAt = \"2017-05-18\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/translating-interfaces-into-almost-fifty-languages-sketch-dc196cf23ee5\"\ntitle = \"Translating interfaces into almost fifty languages: Sketch\"\npublishedAt = \"2017-10-17\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/hot-localisations-update-part-1-86fc013d6327\"\ntitle = \"Hot localisations update: part 1\"\npublishedAt = \"2017-11-01\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/part2-hot-localisations-update-12272511df0c\"\ntitle = \"Hot localisations update: part 2\"\npublishedAt = \"2017-11-01\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/from-zero-to-cosmos-part-1-2d080fe35bf2\"\ntitle = \"From zero to Cosmos: part 1\"\npublishedAt = \"2018-02-01\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/from-zero-to-cosmos-part-2-97929e13f839\"\ntitle = \"From zero to Cosmos: part 2\"\npublishedAt = \"2018-02-01\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/from-zero-to-cosmos-part-3-95e2c98c45a6\"\ntitle = \"From zero to Cosmos: part 3\"\npublishedAt = \"2018-02-01\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/translating-dust-templates-to-jsx-bed273ef41de\"\ntitle = \"Translating Dust templates to JSX\"\npublishedAt = \"2018-05-16\"\n\n[[bumble]]\nid = \"https://medium.com/@didoo/how-to-manage-your-design-tokens-with-style-dictionary-98c795b938aa\"\ntitle = \"How to manage your Design Tokens with Style Dictionary\"\npublishedAt = \"2018-09-27\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/optical-alignment-for-frontend-developers-part-i-why-it-is-not-the-same-as-for-designers-a082ffca1d3b\"\ntitle = \"Optical alignment for frontend developers: why is it not the same as it is for designers\"\npublishedAt = \"2018-11-22\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/optical-alignment-for-frontend-developers-part-ii-how-can-the-process-be-automated-e41d8de2b18f\"\ntitle = \"Optical alignment for frontend developers: how can the process be automated\"\npublishedAt = \"2018-11-22\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/generating-multi-brand-multi-platform-icons-with-sketch-and-a-node-js-script-part1-82f438c7e16c\"\ntitle = \"Generating multi-brand multi-platform icons with Sketch and a Node.js script: from the idea to the assets Sketch files\"\npublishedAt = \"2018-12-01\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/generating-multi-brand-multi-platform-icons-with-sketch-and-a-node-js-script-part2-8d02e8bb915a\"\ntitle = \"Generating multi-brand multi-platform icons with Sketch and a Node.js script: the build script and the generation of the assets\"\npublishedAt = \"2018-12-01\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/covering-ab-tests-with-ui-testing-1df5401ff0e1\"\ntitle = \"Covering A/B tests with UI tests: how to avoid getting tangled up in your own code\"\npublishedAt = \"2019-02-22\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/design-tokens-beyond-colors-typography-and-spacing-ad7c98f4f228\"\ntitle = \"Design Tokens beyond colors, typography, and spacing\"\npublishedAt = \"2019-11-12\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/interface-localisation-adapting-text-fields-for-rtl-languages-67a386006a17\"\ntitle = \"Interface localisation: adapting text fields for RTL languages\"\npublishedAt = \"2020-12-17\"\n\n[[bumble]]\nid = \"https://medium.com/bumble-tech/how-to-move-large-scale-react-ui-components-codebase-to-typescript-52e6f3ca1b55\"\ntitle = \"How to move large-scale React UI-components codebase to TypeScript\"\npublishedAt = \"2020-09-03\"\n\n[[bbc]]\nid = \"https://wildlyinaccurate.com/redefining-the-bcc-news-core-experience/\"\ntitle = \"Redefining the BBC News core experience\"\npublishedAt = \"2016-07-22\"\n\n[[bbc]]\nid = \"https://medium.com/bbc-design-engineering/http-2-is-easy-just-turn-it-on-34baad2d1fb1\"\ntitle = \"HTTP/2 is easy, just turn it on…\"\npublishedAt = \"2017-11-07\"\n\n[[bbc]]\nid = \"https://www.smashingmagazine.com/2018/03/bbc-interactive-content-amp-apps-web/\"\ntitle = \"How BBC Interactive Content Works Across AMP, Apps, And The Web\"\npublishedAt = \"2018-03-15\"\n\n[[bbc]]\nid = \"https://medium.com/bbc-product-technology/optimising-bbc-onlines-code-splitting-strategy-eb17172dea44\"\ntitle = \"Optimising BBC Online’s Code Splitting Strategy\"\npublishedAt = \"2022-05-20\"\n\n[[bbc]]\nid = \"https://medium.com/bbc-product-technology/sounds-web-next-a-persistent-player-prototype-for-bbc-sounds-bf996ef0c332\"\ntitle = \"Sounds Web Next: a “persistent player” prototype for BBC Sounds\"\npublishedAt = \"2021-12-21\"\n\n[[bbc]]\nid = \"https://medium.com/bbc-product-technology/solving-the-problem-with-npm-link-and-react-hooks-266c832dd019\"\ntitle = \"Solving the problem with NPM Link and React Hooks\"\npublishedAt = \"2021-11-12\"\n\n[[bbc]]\nid = \"https://medium.com/bbc-product-technology/the-lessons-learnt-creating-a-design-system-for-bbc-online-38625885870e\"\ntitle = \"The lessons learnt creating a design system for BBC Online\"\npublishedAt = \"2020-11-20\"\n\n[[bettycrocker]]\nid = \"https://web.dev/betty-crocker/\"\ntitle = \"Wake Lock API case study: 300% increase in purchase intent indicators on BettyCrocker.com\"\npublishedAt = \"2020-05-19\"\n\n[[bitmovin]]\nid = \"https://bitmovin.com/bitmovin-used-reactredux-to-develop-new-dashboard/\"\ntitle = \"How Bitmovin Used React/Redux to Develop Its New Dashboard\"\npublishedAt = \"2017-09-07\"\n\n[[bitmovin]]\nid = \"https://bitmovin.com/play-not-play-new-autoplay-policies-safari-11-chrome-64/\"\ntitle = \"To Play, or Not to Play – New AutoPlay Policies for Safari 11 and Chrome 64\"\npublishedAt = \"2017-09-28\"\n\n[[bitmovin]]\nid = \"https://bitmovin.com/firefox-blocks-audible-autoplay/\"\ntitle = \"To Play, or Not to Play #2 – Firefox blocks audible autoplay by default!\"\npublishedAt = \"2019-02-20\"\n\n[[bloomberg]]\nid = \"https://www.techatbloomberg.com/blog/bloomberg-used-react-native-develop-new-consumer-app/\"\ntitle = \"How Bloomberg Used React Native to Develop its new Consumer App\"\npublishedAt = \"2016-12-15\"\n\n[[bloomberg]]\nid = \"https://www.techatbloomberg.com/blog/wsk-straightforward-maintainable-build-system-bloomberg-graphics-team/\"\ntitle = \"wsk: A Straightforward and Maintainable Build System from the Bloomberg Graphics Team\"\npublishedAt = \"2017-12-12\"\n\n[[bloomberg]]\nid = \"https://www.techatbloomberg.com/blog/10-insights-adopting-typescript-at-scale/\"\ntitle = \"10 Insights from Adopting TypeScript at Scale\"\npublishedAt = \"2020-11-09\"\n\n[[buzzfeed]]\nid = \"https://tech.buzzfeed.com/micro-frontends-at-buzzfeed-b8754b31d178\"\ntitle = \"Micro Frontends at BuzzFeed\"\npublishedAt = \"2019-09-17\"\n\n[[buzzfeed]]\nid = \"https://tech.buzzfeed.com/accessible-buzzfeed-2e1f3f94f352\"\ntitle = \"Accessible BuzzFeed\"\npublishedAt = \"2020-08-27\"\n\n[[buzzfeed]]\nid = \"https://tech.buzzfeed.com/improving-cumulative-layout-shift-at-buzzfeed-part-1-8b7ead2381dd\"\ntitle = \"CLS at BuzzFeed — Part 1: Raising The Floor\"\npublishedAt = \"2021-11-06\"\n\n[[buzzfeed]]\nid = \"https://tech.buzzfeed.com/improving-cumulative-layout-shift-at-buzzfeed-part-2-2a846adeb097\"\ntitle = \"CLS at BuzzFeed — Part 2: Getting Help From Real Users\"\npublishedAt = \"2021-11-06\"\n\n[[buzzfeed]]\nid = \"https://tech.buzzfeed.com/improving-cumulative-layout-shift-at-buzzfeed-part-3-3a36240861e4\"\ntitle = \"CLS at BuzzFeed — Part 3: Dealing with the unpredictable\"\npublishedAt = \"2021-11-06\"\n\n[[campaignmonitor]]\nid = \"https://cm.engineering/fixing-bugs-with-outlook-specific-css-f4b8ae5be4f4\"\ntitle = \"Fixing bugs with Outlook specific CSS\"\npublishedAt = \"2016-11-09\"\n\n[[campaignmonitor]]\nid = \"https://cm.engineering/better-video-previews-for-email-12432ce71846\"\ntitle = \"Better video previews for email\"\npublishedAt = \"2016-12-20\"\n\n[[campaignmonitor]]\nid = \"https://cm.engineering/how-to-test-accessibility-of-emails-b68fed03f5f4\"\ntitle = \"How to test accessibility of emails\"\npublishedAt = \"2018-06-05\"\n\n[[carousell]]\nid = \"https://medium.com/carousell-insider/how-we-made-carousells-mobile-web-experience-3x-faster-bbb3be93e006\"\ntitle = \"How we made Carousell’s mobile web experience 3x faster\"\npublishedAt = \"2018-10-31\"\n\n[[carousell]]\nid = \"https://medium.com/carousell-insider/building-a-dynamic-ui-system-at-carousell-part-1-849c30ceacb9\"\ntitle = \"Building a Dynamic UI System at Carousell (Part 1)\"\npublishedAt = \"2019-02-19\"\n\n[[carousell]]\nid = \"https://medium.com/carousell-insider/building-a-dynamic-ui-system-at-carousell-part-2-d46bba8facaa\"\ntitle = \"Building a Dynamic UI System at Carousell (Part 2)\"\npublishedAt = \"2019-02-26\"\n\n[[carousell]]\nid = \"https://medium.com/carousell-insider/building-a-dynamic-ui-system-at-carousell-part-3-18a317ac37a1\"\ntitle = \"Building a Dynamic UI System at Carousell (Part 3)\"\npublishedAt = \"2019-03-05\"\n\n[[carousell]]\nid = \"https://medium.com/carousell-insider/an-experiment-with-json-schema-133344ebbf82\"\ntitle = \"An Experiment with JSON Schema\"\npublishedAt = \"2019-04-18\"\n\n[[carscom]]\nid = \"https://modernweb.com/cars-nodejs\"\ntitle = \"How Cars.com Developer Mac Heller-Ogden Convinced His Bosses to Adopt Node.js\"\npublishedAt = \"2017-07-17\"\n\n[[checkbot]]\nid = \"https://www.checkbot.io/article/web-page-screenshots-with-svg/\"\ntitle = \"Scalable & lightweight web screenshots with SVG\"\npublishedAt = \"2018-11-30\"\n\n[[clearleft]]\nid = \"https://clearleft.com/posts/how-to-use-variable-fonts-in-the-real-world\"\ntitle = \"How to use variable fonts in the real world\"\npublishedAt = \"2018-01-26\"\n\n[[clearleft]]\nid = \"https://clearleft.com/posts/a-framework-for-web-performance\"\ntitle = \"A framework for web performance\"\npublishedAt = \"2018-09-20\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/how-we-built-origin-ca-web-crypto/\"\ntitle = \"How we built Origin CA: Web Crypto\"\npublishedAt = \"2016-05-10\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/cf-ui/\"\ntitle = \"Open Sourcing CloudFlare’s UI Framework\"\npublishedAt = \"2016-06-08\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/going-global-a-localization-case-study-at-cloudflare/\"\ntitle = \"Going Global - a Localization Case Study at Cloudflare\"\npublishedAt = \"2017-08-23\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/making-page-load-even-faster/\"\ntitle = \"How we made our page-load optimisations even faster\"\npublishedAt = \"2018-02-02\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/real-urls-for-amp-cached-content-using-cloudflare-workers/\"\ntitle = \"Real URLs for AMP Cached Content Using Cloudflare Workers\"\npublishedAt = \"2018-11-13\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/fast-google-fonts-with-cloudflare-workers/\"\ntitle = \"Fast Google Fonts with Cloudflare Workers\"\npublishedAt = \"2018-11-22\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/migrating-to-react-land-gatsby/\"\ntitle = \"Migrating to React land: Gatsby\"\npublishedAt = \"2020-03-26\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/moving-from-recaptcha-to-hcaptcha/\"\ntitle = \"Moving from reCAPTCHA to hCaptcha\"\npublishedAt = \"2020-04-08\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/dark-mode/\"\ntitle = \"Dark Mode for the Cloudflare Dashboard\"\npublishedAt = \"2021-09-29\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/cloudflare-radar-localization-journey/\"\ntitle = \"Internationalization and localization: bringing Cloudflare Radar to a global audience\"\npublishedAt = \"2024-12-16\"\n\n[[cloudflare]]\nid = \"https://blog.cloudflare.com/vinext/\"\ntitle = \"How we rebuilt Next.js with AI in one week\"\npublishedAt = \"2026-02-24\"\n\n[[cloudfour]]\nid = \"https://cloudfour.com/thinks/all-mixed-up-isomorphic-sorting-gone-wrong/\"\ntitle = \"All Mixed Up: Isomorphic Sorting Gone Wrong\"\npublishedAt = \"2019-10-17\"\n\n[[codesandbox]]\nid = \"https://medium.com/p/40e9a5646281\"\ntitle = \"Lessons learned refactoring Codesandbox.io from Redux to Cerebral\"\npublishedAt = \"2018-02-07\"\n\n[[condenast]]\nid = \"https://blog.amp.dev/2017/09/08/the-why-and-how-of-accelerated-mobile-pages-at-conde-nast\"\ntitle = \"The Why and How of Google AMP at Condé Nast\"\npublishedAt = \"2017-08-29\"\n\n[[conductor]]\nid = \"https://www.youtube.com/watch?v=d8oBIzIgVMA\"\ntitle = \"Painless Migration From Backbone to React/Redux\"\npublishedAt = \"2018-02-16\"\n\n[[dazn]]\nid = \"https://medium.com/dazn-tech/testing-mobx-state-tree-c588f4bfc430\"\ntitle = \"Testing MobX State Tree\"\npublishedAt = \"2018-12-07\"\n\n[[dazn]]\nid = \"https://medium.com/dazn-tech/handling-complexity-in-lambda-functions-e7acfbeb920a\"\ntitle = \"Handling complexity in lambda functions\"\npublishedAt = \"2019-02-08\"\n\n[[dazn]]\nid = \"https://medium.com/dazn-tech/micro-frontends-the-future-of-frontend-architectures-5867ceded39a\"\ntitle = \"Micro-frontends, the future of Frontend architectures\"\npublishedAt = \"2019-04-02\"\n\n[[dazn]]\nid = \"https://medium.com/dazn-tech/adopting-a-micro-frontends-architecture-e283e6a3c4f3\"\ntitle = \"Adopting a Micro-frontends architecture\"\npublishedAt = \"2019-04-08\"\n\n[[dazn]]\nid = \"https://medium.com/dazn-tech/orchestrating-micro-frontends-a5d2674cbf33\"\ntitle = \"Orchestrating micro-frontends\"\npublishedAt = \"2019-04-12\"\n\n[[dazn]]\nid = \"https://medium.com/dazn-tech/jest-our-journey-into-performant-unit-tests-a6efcb4bd9b\"\ntitle = \"Jest: Our journey into performant unit tests\"\npublishedAt = \"2019-04-15\"\n\n[[dazn]]\nid = \"https://medium.com/dazn-tech/identifying-micro-frontends-in-our-applications-4b4995f39257\"\ntitle = \"Identifying micro-frontends in our applications\"\npublishedAt = \"2019-05-21\"\n\n[[voorhoede]]\nid = \"https://www.voorhoede.nl/en/blog/why-our-website-is-faster-than-yours\"\ntitle = \"Why our website is faster than yours\"\npublishedAt = \"2016-07-16\"\n\n[[dev]]\nid = \"https://github.com/GoogleChrome/web.dev/blob/a64d870f59c25431bbedf0ef06aa635072c43a2e/src/site/content/en/reliable/app-shell-ux-with-service-workers/index.md\"\ntitle = \"App shell UX with service workers and streams\"\npublishedAt = \"2020-06-23\"\n\n[[discord]]\nid = \"https://discord.com/blog/using-react-native-one-year-later\"\ntitle = \"Using React Native: One Year Later\"\npublishedAt = \"2016-06-07\"\n\n[[discord]]\nid = \"https://discord.com/blog/lessons-from-migrating-a-large-codebase-to-react-16\"\ntitle = \"Lessons from migrating a large codebase to React 16\"\npublishedAt = \"2017-10-05\"\n\n[[discord]]\nid = \"https://discord.com/blog/why-discord-is-sticking-with-react-native\"\ntitle = \"Why Discord is Sticking with React Native\"\npublishedAt = \"2018-07-26\"\n\n[[discord]]\nid = \"https://discord.com/blog/how-discord-maintains-performance-while-adding-features\"\ntitle = \"How Discord Maintains Performance While Adding Features\"\npublishedAt = \"2018-08-02\"\n\n[[discord]]\nid = \"https://discord.com/blog/how-discord-handles-two-and-half-million-concurrent-voice-users-using-webrtc\"\ntitle = \"How Discord Handles Two and Half Million Concurrent Voice Users using WebRTC\"\npublishedAt = \"2018-09-10\"\n\n[[discord]]\nid = \"https://discord.com/blog/investigating-discords-react-memory-leak\"\ntitle = \"Investigating Discord’s React Memory Leak\"\npublishedAt = \"2019-08-08\"\n\n[[discord]]\nid = \"https://discord.com/blog/how-discord-achieves-native-ios-performance-with-react-native\"\ntitle = \"How Discord achieves native iOS performance with React Native\"\npublishedAt = \"2019-11-07\"\n\n[[discord]]\nid = \"https://discord.com/blog/how-discord-implemented-app-wide-keyboard-navigation\"\ntitle = \"How Discord Implemented App-Wide Keyboard Navigation\"\npublishedAt = \"2020-12-17\"\n\n[[discord]]\nid = \"https://discord.com/blog/how-discord-modernized-mfa-with-webauthn\"\ntitle = \"How Discord Modernized MFA with WebAuthn\"\npublishedAt = \"2023-12-12\"\n\n[[divriots]]\nid = \"https://divriots.com/blog/switching-to-pnpm\"\ntitle = \"A story of how we migrated to pnpm\"\npublishedAt = \"2022-01-18\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/integrating-a-map-feature-to-a-web-app/\"\ntitle = \"Things to Keep in Mind When Integrating a Map Feature to a Web App\"\npublishedAt = \"2020-09-11\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/caviar-web-experience-react-components/\"\ntitle = \"Building the Caviar Web Experience Using Reusable React Components on the DoorDash Platform\"\npublishedAt = \"2020-09-29\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/design-language-system-theming/\"\ntitle = \"Implementing Theming in DoorDash’s Design Language System\"\npublishedAt = \"2020-12-17\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/serving-multiple-websites-and-business-logic-from-a-single-platform/\"\ntitle = \"Serving Multiple Websites and Business Logic From a Single Platform\"\npublishedAt = \"2021-02-09\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/managing-react-state-using-the-class-pattern/\"\ntitle = \"Managing React State on DoorDash’s Item Modal Using the Class Pattern\"\npublishedAt = \"2021-04-21\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/building-a-marketing-engineering-platform-using-next-js-cloudflare-and-contentful/\"\ntitle = \"Building a Marketing Engineering Platform using Next.js, Cloudflare, and Contentful\"\npublishedAt = \"2022-02-22\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/improving-web-page-performance-at-doordash-throughserver-side-rendering-with-next-js/\"\ntitle = \"Improving Web Page Performance at DoorDash Through Server-Side Rendering with Next.JS\"\npublishedAt = \"2022-03-29\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/building-a-common-web-library-for-fast-implementations-of-risk-frictions/\"\ntitle = \"Building a Common Web Library for Fast Implementations of Risk Frictions\"\npublishedAt = \"2022-03-31\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/doordashs-lessons-on-improving-performance-on-high-traffic-web-pages/\"\ntitle = \"DoorDash’s Lessons on Improving Performance on High-Traffic Web Pages\"\npublishedAt = \"2022-08-30\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/revamping-dasher-faq-hub-through-server-driven-content-and-webview/\"\ntitle = \"Revamping Dasher FAQ Hub Through Server-Driven Content and WebView\"\npublishedAt = \"2023-10-24\"\n\n[[doordash]]\nid = \"https://careersatdoordash.com/blog/how-doordash-slashed-web-developer-build-times/\"\ntitle = \"How DoorDash slashed web developer build times\"\npublishedAt = \"2025-10-20\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2011/04/hello-world/\"\ntitle = \"Translating Dropbox\"\npublishedAt = \"2011-04-18\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2012/08/some-love-for-javascript-applications-2/\"\ntitle = \"Some love for JavaScript applications\"\npublishedAt = \"2012-08-31\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2012/09/dropbox-dives-into-coffeescript/\"\ntitle = \"Dropbox dives into CoffeeScript\"\npublishedAt = \"2012-09-13\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/security/on-csp-reporting-and-filtering\"\ntitle = \"[CSP] On Reporting and Filtering\"\npublishedAt = \"2015-09-21\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/security/unsafe-inline-and-nonce-deployment\"\ntitle = \"[CSP] Unsafe-inline and nonce deployment\"\npublishedAt = \"2015-09-22\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/security/csp-the-unexpected-eval\"\ntitle = \"[CSP] The Unexpected Eval\"\npublishedAt = \"2015-09-23\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/security/csp-third-party-integrations-and-privilege-separation\"\ntitle = \"[CSP] Third Party Integrations and Privilege Separation\"\npublishedAt = \"2015-09-24\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2016/05/enabling-http2-for-dropbox-web-services-experiences-and-observations/\"\ntitle = \"Enabling HTTP/2 for Dropbox web services: experiences and observations\"\npublishedAt = \"2016-05-11\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2016/11/annotations-on-document-previews/\"\ntitle = \"Annotations on Document Previews\"\npublishedAt = \"2016-11-30\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2017/03/preventing-cross-site-attacks-using-same-site-cookies/\"\ntitle = \"Preventing cross-site attacks using same-site cookies\"\npublishedAt = \"2017-03-16\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2017/04/deploying-brotli-for-static-content/\"\ntitle = \"Deploying Brotli for static content\"\npublishedAt = \"2017-04-06\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2017/11/dropbox-paper-emojis-and-exformation/\"\ntitle = \"Dropbox Paper: Emojis and Exformation\"\npublishedAt = \"2017-11-15\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2017/12/improving-document-preview-performance/\"\ntitle = \"Improving Document Preview Performance\"\npublishedAt = \"2017-12-01\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2018/09/migrating-from-underscore-to-lodash/\"\ntitle = \"Migrating from Underscore to Lodash\"\npublishedAt = \"2018-09-05\"\n\n[[dropbox]]\nid = \"https://blogs.dropbox.com/tech/2019/07/redux-with-code-splitting-and-type-checking/\"\ntitle = \"Redux with Code-Splitting and Type Checking\"\npublishedAt = \"2019-07-16\"\n\n[[dropbox]]\nid = \"https://dropbox.design/article/design-tooling-at-scale\"\ntitle = \"Design Tooling at Scale\"\npublishedAt = \"2019-10-12\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/frontend/the-great-coffeescript-to-typescript-migration-of-2017\"\ntitle = \"The Great CoffeeScript to Typescript Migration of 2017\"\npublishedAt = \"2020-05-13\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/application/jquery-to-react--how-we-rewrote-the-hellosign-editor\"\ntitle = \"JQuery to React: How we rewrote the HelloSign Editor\"\npublishedAt = \"2020-09-30\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/frontend/how-we-reduced-the-size-of-our-javascript-bundles-by-33-percent\"\ntitle = \"How we reduced the size of our JavaScript bundles by 33%\"\npublishedAt = \"2023-08-16\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/frontend/measuring-ttvc-web-performance-metric-open-source-library\"\ntitle = \"We’re using TTVC to measure performance on the web—and now you can too\"\npublishedAt = \"2022-08-31\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/frontend/edison-webserver-a-faster-more-powerful-dropbox-on-the-web\"\ntitle = \"How Edison is helping us build a faster, more powerful Dropbox on the web\"\npublishedAt = \"2023-04-11\"\n\n[[dropbox]]\nid = \"https://dropbox.tech/frontend/investigating-the-impact-of-http3-on-network-latency-for-search\"\ntitle = \"Investigating the impact of HTTP3 on network latency for search\"\npublishedAt = \"2023-05-16\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/data-uri-sprites/\"\ntitle = \"Data URI Sprites\"\npublishedAt = \"2011-07-12\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/the-new-ebay-motors-homepage-is-2x-faster/\"\ntitle = \"The New eBay Motors Homepage is 2X Faster\"\npublishedAt = \"2011-10-14\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/five-javascript-tips-for-a-sleek-user-experience/\"\ntitle = \"Five JavaScript Tips for a Sleek User Experience\"\npublishedAt = \"2012-04-16\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/page-loading-and-rendering-optimizations/\"\ntitle = \"Page Loading and Rendering Optimizations\"\npublishedAt = \"2012-06-22\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/bandwidth-based-experience/\"\ntitle = \"Bandwidth-based Experience\"\npublishedAt = \"2012-10-10\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/early-detection-of-frontend-single-points-of-failure/\"\ntitle = \"Early Detection of Frontend Single Points of Failure\"\npublishedAt = \"2013-01-22\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/front-end-renaissance-at-ebay/\"\ntitle = \"Front-end Renaissance at eBay\"\npublishedAt = \"2014-01-13\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/yet-another-responsive-vs-adaptive-story/\"\ntitle = \"Yet Another Responsive vs. Adaptive Story\"\npublishedAt = \"2014-03-05\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/dont-build-pages-build-modules/\"\ntitle = \"Don't Build Pages, Build Modules\"\npublishedAt = \"2014-10-02\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/async-fragments-rediscovering-progressive-html-rendering-with-marko/\"\ntitle = \"Async Fragments: Rediscovering Progressive HTML Rendering with Marko\"\npublishedAt = \"2014-12-08\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/the-power-of-perceived-performance/\"\ntitle = \"The Power of Perceived Performance\"\npublishedAt = \"2015-01-05\"\n\n[[ebay]]\nid = \"https://www.ebayinc.com/stories/blogs/tech/mobile-first-a-retrospective/\"\ntitle = \"Mobile First - A Retrospective\"\npublishedAt = \"2015-05-13\"\n\n[[ebay]]\nid = \"https://www.ebayinc.com/stories/blogs/tech/how-our-css-framework-helps-enforce-accessibility/\"\ntitle = \"How Our CSS Framework Helps Enforce Accessibility\"\npublishedAt = \"2015-11-04\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/packaging-for-performance/\"\ntitle = \"Packaging for Performance\"\npublishedAt = \"2016-01-04\"\n\n[[ebay]]\nid = \"https://www.ebayinc.com/stories/blogs/tech/the-path-to-javascript-next/\"\ntitle = \"The Path to JavaScript Next\"\npublishedAt = \"2016-03-15\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/browse-ebay-with-style-and-speed/\"\ntitle = \"Browse eBay with Style and Speed\"\npublishedAt = \"2016-06-30\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/experience-the-lightning-bolt/\"\ntitle = \"Experience the Lightning Bolt\"\npublishedAt = \"2016-09-21\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/effective-front-end-code-review/\"\ntitle = \"Effective Front-End Code Review\"\npublishedAt = \"2017-03-02\"\n\n[[ebay]]\nid = \"https://www.ebayinc.com/stories/blogs/tech/building-a-ui-component-in-2017-and-beyond\"\ntitle = \"Building a UI Component in 2017 and Beyond\"\npublishedAt = \"2017-05-03\"\n\n[[ebay]]\nid = \"https://www.ebayinc.com/stories/blogs/tech/ebays-font-loading-strategy\"\ntitle = \"eBay’s Font Loading Strategy\"\npublishedAt = \"2017-09-21\"\n\n[[ebay]]\nid = \"https://www.ebayinc.com/stories/blogs/tech/the-future-of-marko/\"\ntitle = \"The Future of Marko\"\npublishedAt = \"2017-10-26\"\n\n[[ebay]]\nid = \"https://www.ebayinc.com/stories/blogs/tech/beyond-https/\"\ntitle = \"Beyond HTTPS\"\npublishedAt = \"2017-12-13\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/integration-testing-with-react-and-enzyme/\"\ntitle = \"Integration Testing with React and Enzyme\"\npublishedAt = \"2018-06-26\"\n\n[[ebay]]\nid = \"https://www.ebayinc.com/stories/blogs/tech/webassembly-at-ebay-a-real-world-use-case/\"\ntitle = \"WebAssembly at eBay: A Real-World Use Case\"\npublishedAt = \"2019-05-22\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/autofill-deep-dive/\"\ntitle = \"Autofill on Browsers: A Deep Dive\"\npublishedAt = \"2019-12-03\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/speed-by-a-thousand-cuts/\"\ntitle = \"Speed By A Thousand Cuts\"\npublishedAt = \"2020-01-23\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/front-end-debugging-tips-on-resolving-issues-quickly-so-you-can-move-on-to-better-things/\"\ntitle = \"Front End Debugging — Tips on Resolving Issues Quickly so You Can Move on to Better Things\"\npublishedAt = \"2020-04-07\"\n\n[[ebay]]\nid = \"https://tech.ebayinc.com/engineering/auto-effect-pattern-with-redux-and-react-hooks/\"\ntitle = \"Auto Effect Pattern with Redux and React Hooks\"\npublishedAt = \"2020-04-15\"\n\n[[ebay]]\nid = \"https://innovation.ebayinc.com/stories/rethink-modals-management-in-react/\"\ntitle = \"Rethink Modals Management in React\"\npublishedAt = \"2021-11-19\"\n\n[[ebay]]\nid = \"https://innovation.ebayinc.com/stories/introducing-an-accessibility-linter-for-marko-shortening-the-accessibility-testing-pipeline/\"\ntitle = \"Introducing an Accessibility Linter for Marko: Shortening the Accessibility Testing Pipeline\"\npublishedAt = \"2023-11-27\"\n\n[[edgedb]]\nid = \"https://www.edgedb.com/blog/an-approach-to-optimizing-typescript-type-checking-performance#the-next-generation-of-performance-tools\"\ntitle = \"An approach to optimizing TypeScript type checking performance\"\npublishedAt = \"2024-08-08\"\n\n[[ea]]\nid = \"https://youtu.be/FJ2KEvzlyo4\"\ntitle = \"Building UI at Enterprise Scale with Web Components\"\npublishedAt = \"2017-08-22\"\n\n[[eleme]]\nid = \"https://medium.com/elemefe/upgrading-ele-me-to-progressive-web-app-2a446832e509\"\ntitle = \"Upgrading Ele.me to Progressive Web App\"\npublishedAt = \"2017-05-06\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/localizing-logically-for-a-global-marketplace/\"\ntitle = \"Localizing Logically for a Global Marketplace\"\npublishedAt = \"2011-10-21\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/multilingual-user-generated-content-and-seo/\"\ntitle = \"Multilingual User Generated Content and SEO\"\npublishedAt = \"2011-12-02\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/measuring-front-end-performance-with-real-users/\"\ntitle = \"Measuring Front-end Performance With Real Users\"\npublishedAt = \"2012-11-29\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/responsive-emails-that-really-work/\"\ntitle = \"Responsive emails that really work\"\npublishedAt = \"2014-03-13\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/transitioning-to-scss-at-scale/\"\ntitle = \"Transitioning to SCSS at Scale\"\npublishedAt = \"2015-02-02\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/rebuilding-the-foundation-of-etsy-seller-tools/\"\ntitle = \"Rebuilding the Foundation of Etsy’s Seller Tools\"\npublishedAt = \"2015-02-05\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/how-etsy-formats-currency/\"\ntitle = \"How Etsy Formats Currency\"\npublishedAt = \"2016-04-19\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/seo-title-tag-optimization/\"\ntitle = \"SEO Title Tag Optimization at Etsy: Experimental Design and Causal Inference\"\npublishedAt = \"2016-10-25\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/optimizing-meta-descriptions-h1s-and-title-tags-lessons-from-multivariate-seo-testing-at-etsy/\"\ntitle = \"Optimizing Meta Descriptions, H1s and Title Tags: Lessons from Multivariate SEO Testing at Etsy\"\npublishedAt = \"2017-01-25\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/reducing-image-file-size-at-etsy/\"\ntitle = \"Reducing Image File Size at Etsy\"\npublishedAt = \"2017-05-30\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/how-etsy-localizes-addresses/\"\ntitle = \"How Etsy Localizes Addresses\"\npublishedAt = \"2018-09-26\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/developing-in-a-monorepo-while-still-using-webpack/\"\ntitle = \"Developing in a Monorepo While Still Using Webpack\"\npublishedAt = \"2020-04-06\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/production-webpack-builds/\"\ntitle = \"The journey to fast production asset builds with Webpack\"\npublishedAt = \"2020-02-03\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/mobius-adopting-jsx-while-prioritizing-user-experience\"\ntitle = \"Mobius: Adopting JSX While Prioritizing User Experience\"\npublishedAt = \"2021-11-04\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/etsys-journey-to-typescript\"\ntitle = \"Etsy’s Journey to TypeScript\"\npublishedAt = \"2021-11-08\"\n\n[[etsy]]\nid = \"https://www.etsy.com/codeascraft/search-prefetching-performance\"\ntitle = \"Improving performance by prefetching product pages from Etsy Search\"\npublishedAt = \"2025-10-29\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/building-elbow-arrows-part-two\"\ntitle = \"Building Elbow Arrows in Excalidraw (Part 2)\"\npublishedAt = \"2025-12-18\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/building-elbow-arrows-part-one\"\ntitle = \"Building Elbow Arrows in Excalidraw (Part 1)\"\npublishedAt = \"2025-10-06\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/excalidraw-soc2\"\ntitle = \"Excalidraw+ is SOC 2 compliant\"\npublishedAt = \"2025-06-18\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/adding-hand-drawn-font-for-chinese-japanese-korean\"\ntitle = \"Adding hand-drawn font for Chinese, Japanese and Korean\"\npublishedAt = \"2024-11-07\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/redesigning-editor-api\"\ntitle = \"Rethinking the Component API\"\npublishedAt = \"2023-01-13\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/excalidraw-and-fugu\"\ntitle = \"Excalidraw and Fugu: Improving Core User Journeys\"\npublishedAt = \"2021-05-21\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/deprecating-excalidraw-electron\"\ntitle = \"Deprecating Excalidraw Electron in favor of the Web version\"\npublishedAt = \"2020-12-17\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/browser-fs-access\"\ntitle = \"Reading and writing files and directories with the browser-fs-access library\"\npublishedAt = \"2020-12-09\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/enabling-translations\"\ntitle = \"Enabling Translations\"\npublishedAt = \"2020-04-16\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/building-excalidraw-p2p-collaboration-feature\"\ntitle = \"Building Excalidraw's P2P Collaboration Feature\"\npublishedAt = \"2020-03-29\"\n\n[[excalidraw]]\nid = \"https://plus.excalidraw.com/blog/end-to-end-encryption\"\ntitle = \"End-to-End Encryption in the Browser\"\npublishedAt = \"2020-03-21\"\n\n[[evilmartians]]\nid = \"https://evilmartians.com/chronicles/is-react-native-podium-ready\"\ntitle = \"Is React Native podium-ready?\"\npublishedAt = \"2018-05-14\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/a-b-testing-and-the-cloak-of-invisibility-a-better-way-to-scope-variant-code-in-your-react-app-902a68a0c2c3\"\ntitle = \"Scoping A/B Test Code in React\"\npublishedAt = \"2018-09-04\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/profiling-react-server-side-rendering-to-free-the-node-js-event-loop-7f0fe455a901\"\ntitle = \"Profiling React Server-Side Rendering to Free the Node.js Event Loop\"\npublishedAt = \"2019-02-18\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/creating-your-own-apollo-cache-for-perf-and-profit-8f786849e5f6\"\ntitle = \"Creating Your Own Apollo Cache for Perf and Profit\"\npublishedAt = \"2019-02-07\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/optimize-a-page-resource-hint-critical-css-webpack-c8cc7319fb87\"\ntitle = \"Optimizing a Page: Resource Hints, Critical CSS, and Webpack\"\npublishedAt = \"2019-03-20\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/contextual-and-consistent-analytic-event-triggering-in-react-40b48b15739e\"\ntitle = \"Contextual and Consistent Analytic Events in React\"\npublishedAt = \"2019-04-22\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/minimizing-dom-nodes-for-performance-57f347df4c72\"\ntitle = \"Minimizing DOM Nodes for Performance\"\npublishedAt = \"2019-09-24\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/web-performance-vs-user-engagement-7eda84f6436b\"\ntitle = \"Web Performance vs. User Engagement\"\npublishedAt = \"2019-10-31\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/migrating-to-wkwebview-d5b6d0e52c4f\"\ntitle = \"Migrating to WKWebView\"\npublishedAt = \"2019-12-11\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/a-small-case-for-function-based-react-components-2939cd8df975\"\ntitle = \"A (Small) Case for Function-Based React Components\"\npublishedAt = \"2019-12-10\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/measuring-interaction-performance-with-fps-data-b0eee1d102c4\"\ntitle = \"Measuring Interaction Performance with FPS Data\"\npublishedAt = \"2019-12-16\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/file-upload-with-graphql-apollo-server-hapi-18-and-react-2390e297619d\"\ntitle = \"File Upload with GraphQL, Apollo Server, Hapi 18+, and React\"\npublishedAt = \"2020-01-16\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/web-applications-analyzing-client-side-performance-37e9cc4ad86b\"\ntitle = \"Web Applications: Analyzing Client-Side Performance\"\npublishedAt = \"2020-01-07\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/schema-driven-uis-dd8fdb516120\"\ntitle = \"Schema Driven UIs\"\npublishedAt = \"2020-01-23\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/responsive-accessibility-guidelines-at-expedia-com-cc1184c4f271\"\ntitle = \"Responsive Accessibility Guidelines at Expedia.com\"\npublishedAt = \"2020-02-27\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/12-tips-to-improve-client-side-page-performance-88c7bec27933\"\ntitle = \"12 Tips to Improve Client Side Page Performance\"\npublishedAt = \"2020-04-28\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/using-webpack-module-federation-to-share-an-app-shell-7d23633510e\"\ntitle = \"Using Webpack Module Federation to Create an App Shell\"\npublishedAt = \"2020-06-10\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/css-in-js-an-investigation-39338a1057db\"\ntitle = \"CSS-in-JS: An Investigation\"\npublishedAt = \"2020-07-07\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/multi-variate-web-optimisation-using-linear-contextual-bandits-567f563cb59\"\ntitle = \"Multi-Variate Web Optimisation Using Linear Contextual Bandits\"\npublishedAt = \"2020-09-01\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/how-expedia-com-uses-accessibility-automation-d3de3e3ff775\"\ntitle = \"How Expedia.com Uses Accessibility Automation\"\npublishedAt = \"2020-10-01\"\n\n[[expediagroup]]\nid = \"https://medium.com/expedia-group-tech/sizing-android-webview-iframes-with-javascript-abae73fe6602\"\ntitle = \"Sizing Android WebView iframes with JavaScript\"\npublishedAt = \"2021-04-27\"\n\n[[ezcater]]\nid = \"https://engineering.ezcater.com/the-case-against-react-snapshot-testing\"\ntitle = \"The case against React snapshot testing\"\npublishedAt = \"2019-06-27\"\n\n[[ezcater]]\nid = \"https://engineering.ezcater.com/saying-goodbye-to-emotion\"\ntitle = \"Saying goodbye to emotion\"\npublishedAt = \"2021-06-01\"\n\n[[meta]]\nid = \"http://makeitopen.com\"\ntitle = \"Building the F8 App with React Native\"\npublishedAt = \"2017-01-01\"\n\n[[meta]]\nid = \"https://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919/\"\ntitle = \"BigPipe: Pipelining web pages for high performance\"\npublishedAt = \"2010-06-04\"\n\n[[meta]]\nid = \"https://www.reddit.com/r/reactjs/comments/6al7h2/facebook_has_30000_react_components_how_do_you/dhgruqh/\"\ntitle = \"Facebook has 30,000 react components. How do you manage large project directories with many components?\"\npublishedAt = \"2013-12-31\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2015/08/06/android/the-technology-behind-preview-photos/\"\ntitle = \"The technology behind preview photos\"\npublishedAt = \"2015-08-06\"\n\n[[meta]]\nid = \"https://code.fb.com/open-source/improving-css-quality-at-facebook-and-beyond/\"\ntitle = \"Improving CSS quality at Facebook and beyond\"\npublishedAt = \"2016-06-13\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2017/01/26/web/this-browser-tweak-saved-60-of-requests-to-facebook/\"\ntitle = \"This browser tweak saved 60% of requests to Facebook\"\npublishedAt = \"2017-01-26\"\n\n[[meta]]\nid = \"https://youtu.be/PvabBs_utr8\"\ntitle = \"Building High-Quality JavaScript Tools\"\npublishedAt = \"2017-06-02\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2017/09/26/web/react-16-a-look-inside-an-api-compatible-rewrite-of-our-frontend-ui-library/\"\ntitle = \"React 16: A look inside an API-compatible rewrite of our frontend UI library\"\npublishedAt = \"2017-09-26\"\n\n[[meta]]\nid = \"https://reactjs.org/blog/2017/12/15/improving-the-repository-infrastructure.html\"\ntitle = \"Behind the Scenes: Improving the React Repository Infrastructure\"\npublishedAt = \"2017-12-15\"\n\n[[meta]]\nid = \"https://code.fb.com/developer-tools/isinputpending-api/\"\ntitle = \"Faster input events with Facebook’s first browser API contribution\"\npublishedAt = \"2019-04-22\"\n\n[[meta]]\nid = \"https://developers.facebook.com/videos/2019/building-the-new-facebookcom-with-react-graphql-and-relay/\"\ntitle = \"Building the New facebook.com with React, GraphQL and Relay\"\npublishedAt = \"2019-04-30\"\n\n[[meta]]\nid = \"https://engineering.fb.com/web/facebook-redesign/\"\ntitle = \"Rebuilding our tech stack for the new Facebook.com\"\npublishedAt = \"2020-05-08\"\n\n[[meta]]\nid = \"https://engineering.fb.com/web/facebook-com-accessibility/\"\ntitle = \"Making Facebook.com accessible to as many people as possible\"\npublishedAt = \"2020-07-30\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2020/10/21/networking-traffic/how-facebook-is-bringing-quic-to-billions/\"\ntitle = \"How Facebook is bringing QUIC to billions\"\npublishedAt = \"2020-10-21\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2020/05/05/connectivity/discover/\"\ntitle = \"Implementing a secure web-based proxy service for Discover\"\npublishedAt = \"2020-05-05\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2017/03/28/web/aria-grid-supporting-nonvisual-layout-and-keyboard-traversal/\"\ntitle = \"ARIA Grid: Supporting nonvisual layout and keyboard traversal\"\npublishedAt = \"2017-03-28\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2022/09/12/open-source/memlab/\"\ntitle = \"MemLab: An open source framework for finding JavaScript memory leaks\"\npublishedAt = \"2022-09-12\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2024/05/14/web/threads-for-web-behind-the-scenes/\"\ntitle = \"Behind the scenes of Threads for web\"\npublishedAt = \"2024-05-14\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2024/10/02/android/react-at-meta-connect-2024/\"\ntitle = \"React at Meta Connect 2024\"\npublishedAt = \"2024-10-02\"\n\n[[meta]]\nid = \"https://engineering.fb.com/2025/11/11/web/stylex-a-styling-library-for-css-at-scale/\"\ntitle = \"StyleX: A Styling Library for CSS at Scale\"\npublishedAt = \"2025-11-11\"\n\n[[farfetch]]\nid = \"https://www.linkedin.com/pulse/need-speed-1-measuring-todays-web-performance-manuel-garcia/\"\ntitle = \"The need for speed — 1: measuring today’s web performance\"\npublishedAt = \"2019-02-19\"\n\n[[farfetch]]\nid = \"https://www.linkedin.com/pulse/need-speed-2-call-metrics-manuel-garcia/\"\ntitle = \"The need for speed — 2: call for metrics\"\npublishedAt = \"2019-02-19\"\n\n[[farfetch]]\nid = \"https://www.linkedin.com/pulse/how-build-performance-culture-scale-manuel-garcia/\"\ntitle = \"How to build a performance culture at scale\"\npublishedAt = \"2019-09-11\"\n\n[[farfetch]]\nid = \"https://www.linkedin.com/pulse/one-less-second-page-giant-leap-business-manuel-garcia\"\ntitle = \"One less second for the page, one giant leap for the business\"\npublishedAt = \"2020-07-02\"\n\n[[farfetch]]\nid = \"https://farfetchtech.medium.com/graphql-sessions-powering-farfetch-com-305e7c0901e7\"\ntitle = \"GraphQL sessions: powering farfetch.com\"\npublishedAt = \"2022-05-06\"\n\n[[farfetch]]\nid = \"https://medium.com/farfetch-tech-blog/lessons-learned-when-building-product-agnostic-reusable-ui-components-d58e1d96534d\"\ntitle = \"Lessons learned when building product-agnostic reusable UI Components\"\npublishedAt = \"2019-03-14\"\n\n[[fastqbio]]\nid = \"https://www.smashingmagazine.com/2019/04/webassembly-speed-web-app/\"\ntitle = \"How We Used WebAssembly To Speed Up Our Web App By 20X\"\npublishedAt = \"2019-04-05\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/building-a-professional-design-tool-on-the-web/\"\ntitle = \"Building a professional design tool on the web\"\npublishedAt = \"2015-12-07\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/debugging-data-corruption-with-emscripten/\"\ntitle = \"Debugging Data Corruption with Emscripten\"\npublishedAt = \"2016-11-07\"\n\n[[figma]]\nid = \"https://blog.figma.com/webassembly-cut-figmas-load-time-by-3x-76f3f2395164\"\ntitle = \"WebAssembly cut Figma’s load time by 3x\"\npublishedAt = \"2017-06-08\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/introducing-browserview-for-electron/\"\ntitle = \"Introducing BrowserView for Electron\"\npublishedAt = \"2017-06-29\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/introducing-figma-to-react/\"\ntitle = \"Introducing: Figma to React\"\npublishedAt = \"2018-04-26\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/figma-faster/\"\ntitle = \"Figma, faster 🏎\"\npublishedAt = \"2018-08-13\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/how-we-built-the-figma-plugin-system/\"\ntitle = \"How to build a plugin system on the web and also sleep well at night\"\npublishedAt = \"2019-08-22\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/improving-scrolling-comments-in-figma/\"\ntitle = \"React at 60fps: improving scrolling comments in Figma\"\npublishedAt = \"2020-08-19\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/inside-figma-a-case-study-on-strict-null-checks/#what-are-strict-null-checks\"\ntitle = \"Inside Figma: a case study on strict null checks\"\npublishedAt = \"2020-12-17\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/illuminating-dark-mode\"\ntitle = \"Illuminating dark mode\"\npublishedAt = \"2022-07-21\"\n\n[[figma]]\nid = \"https://www.figma.com/blog/figmas-journey-to-typescript-compiling-away-our-custom-programming-language/\"\ntitle = \"The evolution of Figma’s mobile engine: Compiling away our custom programming language\"\npublishedAt = \"2024-05-01\"\n\n[[ft]]\nid = \"https://www.smashingmagazine.com/2013/05/building-the-new-financial-times-web-app-a-case-study\"\ntitle = \"Building The New Financial Times Web App\"\npublishedAt = \"2013-05-23\"\n\n[[ft]]\nid = \"http://matt.chadburn.co.uk/notes/teams-as-services.html\"\ntitle = \"Free-market software development\"\npublishedAt = \"2015-08-21\"\n\n[[ft]]\nid = \"https://www.maketea.co.uk/2015/12/14/svg-icons-are-easy-but-the-fallbacks-arent.html\"\ntitle = \"SVG icons are easy but the fallbacks aren't\"\npublishedAt = \"2015-12-01\"\n\n[[ft]]\nid = \"https://medium.com/ft-product-technology/a-faster-ft-com-10e7c077dc1c\"\ntitle = \"A faster FT.com\"\npublishedAt = \"2016-04-04\"\n\n[[ft]]\nid = \"https://www.youtube.com/watch?v=H4FzW9oFObs\"\ntitle = \"YES, your site too can (and should) be accessible\"\npublishedAt = \"2017-05-23\"\n\n[[ft]]\nid = \"https://vimeo.com/226575101\"\ntitle = \"Can't You Just Make It More like Bootstrap?\"\npublishedAt = \"2017-07-22\"\n\n[[ft]]\nid = \"https://ldnwebperf.org/sessions/speeding-up-without-slowing-down/\"\ntitle = \"Speeding up without slowing down\"\npublishedAt = \"2017-11-07\"\n\n[[ft]]\nid = \"https://medium.com/ft-product-technology/making-a-request-to-the-financial-times-b2119a2f422d\"\ntitle = \"What happens when you visit ft.com?\"\npublishedAt = \"2017-11-24\"\n\n[[ft]]\nid = \"https://medium.com/ft-product-technology/tips-for-in-house-teams-in-a-free-market-software-culture-d18ba80c8c4\"\ntitle = \"Tips for in-house teams in a free market software culture\"\npublishedAt = \"2018-01-30\"\n\n[[ft]]\nid = \"https://medium.com/ft-product-technology/an-outbreak-of-accessibility-anti-patterns-e73577242ee8\"\ntitle = \"An outbreak of Accessibility anti-patterns\"\npublishedAt = \"2018-05-18\"\n\n[[ft]]\nid = \"https://medium.com/ft-product-technology/this-one-line-of-javascript-made-ft-com-10-times-slower-5afb02bfd93f\"\ntitle = \"This one line of Javascript made FT.com 10 times slower\"\npublishedAt = \"2018-07-16\"\n\n[[ft]]\nid = \"https://medium.com/ft-product-technology/designing-a-sustainable-front-end-toolset-for-ft-com-f37c59d27eeb\"\ntitle = \"Designing a sustainable front-end toolset for FT.com\"\npublishedAt = \"2020-04-27\"\n\n[[ft]]\nid = \"https://medium.com/ft-product-technology/animating-list-reordering-with-react-hooks-1aa0d78a24dc\"\ntitle = \"Animating list reordering with React Hooks\"\npublishedAt = \"2020-08-26\"\n\n[[ft]]\nid = \"https://www.matthinchliffe.dev/2020/06/03/taming-webpacks-content-hashes.html\"\ntitle = \"Taming Webpackʼs content hashes\"\npublishedAt = \"2020-06-03\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2011/07/20/lessons-learned-from-the-flickr-touch-lightbox/\"\ntitle = \"Lessons Learned from the Flickr Touch Lightbox\"\npublishedAt = \"2011-07-20\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2011/09/06/creating-an-interface-for-geofences/\"\ntitle = \"Creating an interface for geofences\"\npublishedAt = \"2011-09-06\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2012/04/25/raising-the-bar-on-web-uploads/\"\ntitle = \"Raising the bar on web uploads\"\npublishedAt = \"2012-04-25\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2012/04/18/building-an-html5-photo-editor/\"\ntitle = \"Building an HTML5 Photo Editor\"\npublishedAt = \"2012-04-18\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2012/05/11/building-the-flickr-web-uploadr-the-grid/\"\ntitle = \"Building The Flickr Web Uploadr: The Grid\"\npublishedAt = \"2012-05-11\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2012/06/01/parsing-exif-client-side-using-javascript-2/\"\ntitle = \"Parsing Exif client-side using JavaScript\"\npublishedAt = \"2012-06-01\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2013/06/04/adventures-in-jank-busting-parallax-performance-and-the-new-flickr-home-page/\"\ntitle = \"Adventures in Jank Busting: Parallax, performance, and the new Flickr Home Page\"\npublishedAt = \"2013-06-04\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2014/04/23/building-flickrs-new-hybrid-signed-out-homepage/\"\ntitle = \"Building Flickr’s new Hybrid Signed-Out Homepage\"\npublishedAt = \"2014-04-23\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2015/09/25/perceptual-image-compression-at-flickr/\"\ntitle = \"Perceptual Image Compression at Flickr\"\npublishedAt = \"2015-09-25\"\n\n[[flickr]]\nid = \"http://code.flickr.net/2016/04/25/introducing-yakbak-record-and-playback-http-interactions-in-nodejs/\"\ntitle = \"Introducing yakbak: Record and playback HTTP interactions in NodeJS\"\npublishedAt = \"2016-04-25\"\n\n[[flipboard]]\nid = \"https://engineering.flipboard.com/2014/03/web-layouts\"\ntitle = \"Layout in Flipboard for Web and Windows\"\npublishedAt = \"2014-03-24\"\n\n[[flipboard]]\nid = \"https://engineering.flipboard.com/2015/02/mobile-web\"\ntitle = \"60 FPS on the mobile web\"\npublishedAt = \"2015-02-10\"\n\n[[flipkart]]\nid = \"https://medium.com/progressive-web-apps/building-flipkart-lite-a-progressive-web-app-2c211e641883\"\ntitle = \"Building Flipkart Lite: A Progressive Web App\"\npublishedAt = \"2015-11-11\"\n\n[[flocktory]]\nid = \"http://slonoed.net/third-party-js\"\ntitle = \"Third party libraries\"\npublishedAt = \"2017-05-22\"\n\n[[futurice]]\nid = \"https://futurice.com/blog/elm-in-the-real-world\"\ntitle = \"How Elm made our work better\"\npublishedAt = \"2016-11-01\"\n\n[[garbarino]]\nid = \"https://medium.com/@leopittelli/building-a-pwa-in-argentina-3ac669eabbeb\"\ntitle = \"Building a PWA in Argentina\"\npublishedAt = \"2017-07-24\"\n\n[[github]]\nid = \"https://markdotto.com/blog/githubs-css/\"\ntitle = \"GitHub's CSS\"\npublishedAt = \"2014-07-23\"\n\n[[github]]\nid = \"https://www.webcomponents.org/community/articles/interview-with-joshua-peek\"\ntitle = \"How GitHub is using Web Components in production\"\npublishedAt = \"2014-09-30\"\n\n[[github]]\nid = \"https://githubengineering.com/browser-monitoring-for-github-com/\"\ntitle = \"Browser Monitoring for GitHub.com\"\npublishedAt = \"2015-05-19\"\n\n[[github]]\nid = \"https://githubengineering.com/githubs-csp-journey/\"\ntitle = \"GitHub's CSP journey\"\npublishedAt = \"2016-04-12\"\n\n[[github]]\nid = \"https://githubengineering.com/githubs-post-csp-journey/\"\ntitle = \"GitHub's post-CSP journey\"\npublishedAt = \"2017-01-19\"\n\n[[github]]\nid = \"https://markdotto.com/blog/github-system-fonts/\"\ntitle = \"Shipping system fonts to GitHub.com\"\npublishedAt = \"2018-02-07\"\n\n[[github]]\nid = \"https://medium.com/@broccolini/design-systems-at-github-c8e5378d2542\"\ntitle = \"Design Systems at GitHub\"\npublishedAt = \"2018-07-06\"\n\n[[github]]\nid = \"https://githubengineering.com/removing-jquery-from-github-frontend/\"\ntitle = \"Removing jQuery from GitHub.com frontend\"\npublishedAt = \"2018-09-06\"\n\n[[github]]\nid = \"https://github.blog/2020-04-09-from-48k-lines-of-code-to-10-the-story-of-githubs-javascript-sdk\"\ntitle = \"From 48k lines of code to 10—the story of GitHub’s JavaScript SDK\"\npublishedAt = \"2020-04-09\"\n\n[[github]]\nid = \"https://github.blog/2020-12-21-how-we-built-the-github-globe/\"\ntitle = \"How we built the GitHub globe\"\npublishedAt = \"2020-12-21\"\n\n[[github]]\nid = \"https://github.blog/2021-03-25-how-github-actions-renders-large-scale-logs/\"\ntitle = \"How GitHub Actions renders large-scale logs\"\npublishedAt = \"2021-03-25\"\n\n[[github]]\nid = \"https://github.blog/engineering/architecture-optimization/how-we-use-web-components-at-github/\"\ntitle = \"How we use Web Components at GitHub\"\npublishedAt = \"2021-05-04\"\n\n[[github]]\nid = \"https://github.blog/engineering/infrastructure/how-we-think-about-browsers/\"\ntitle = \"How we think about browsers\"\npublishedAt = \"2022-06-10\"\n\n[[github]]\nid = \"https://github.blog/engineering/user-experience/creating-an-accessible-search-experience-with-the-querybuilder-component/\"\ntitle = \"Creating an accessible search experience with the QueryBuilder component\"\npublishedAt = \"2022-12-13\"\n\n[[github]]\nid = \"https://github.blog/engineering/user-experience/accessibility-considerations-behind-code-search-and-code-view/\"\ntitle = \"Accessibility considerations behind code search and code view\"\npublishedAt = \"2023-07-06\"\n\n[[github]]\nid = \"https://github.blog/engineering/user-experience/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop/\"\ntitle = \"Exploring the challenges in creating an accessible sortable list (drag-and-drop)\"\npublishedAt = \"2024-07-09\"\n\n[[github]]\nid = \"https://github.blog/engineering/user-experience/considerations-for-making-a-tree-view-component-accessible/\"\ntitle = \"Considerations for making a tree view component accessible\"\npublishedAt = \"2025-01-28\"\n\n[[github]]\nid = \"https://github.blog/engineering/user-experience/design-system-annotations-part-1-how-accessibility-gets-left-out-of-components/\"\ntitle = \"Design system annotations, part 1: How accessibility gets left out of components\"\npublishedAt = \"2025-05-09\"\n\n[[github]]\nid = \"https://github.blog/engineering/user-experience/design-system-annotations-part-2-advanced-methods-of-annotating-components/\"\ntitle = \"Design system annotations, part 2: Advanced methods of annotating components\"\npublishedAt = \"2025-05-09\"\n\n[[gitlab]]\nid = \"https://youtu.be/ioogrvs2Ejc\"\ntitle = \"Why We Chose Vue.js\"\npublishedAt = \"2016-12-01\"\n\n[[gitlab]]\nid = \"https://about.gitlab.com/2017/02/06/vue-big-plan/\"\ntitle = \"Our big Frontend plan revealed\"\npublishedAt = \"2017-02-06\"\n\n[[gitlab]]\nid = \"https://about.gitlab.com/2017/11/09/gitlab-vue-one-year-later/\"\ntitle = \"How we do Vue: one year later\"\npublishedAt = \"2017-11-09\"\n\n[[gitlab]]\nid = \"https://about.gitlab.com/2017/12/19/moving-to-headless-chrome\"\ntitle = \"How GitLab switched to Headless Chrome for testing\"\npublishedAt = \"2017-12-19\"\n\n[[gitlab]]\nid = \"https://about.gitlab.com/blog/2018/05/30/journey-in-native-unicode-emoji/\"\ntitle = \"Our journey in switching to native Unicode emoji\"\npublishedAt = \"2018-05-30\"\n\n[[gitlab]]\nid = \"https://about.gitlab.com/2018/06/26/iterating-improving-frontend-culture/\"\ntitle = \"How we iterated and improved our frontend team culture\"\npublishedAt = \"2018-06-26\"\n\n[[gitlab]]\nid = \"https://about.gitlab.com/2019/09/30/why-we-chose-echarts/\"\ntitle = \"Why we chose ECharts for data visualizations\"\npublishedAt = \"2019-09-30\"\n\n[[gitlab]]\nid = \"https://about.gitlab.com/blog/2019/11/07/how-gitlab-pages-made-our-sketch-design-handoffs-easier-and-faster/\"\ntitle = \"How GitLab Pages made our Sketch design handoffs easier and faster\"\npublishedAt = \"2019-11-07\"\n\n[[gitlab]]\nid = \"https://about.gitlab.com/blog/2020/05/20/creating-a-dark-ui-for-gitlabs-web-ide/\"\ntitle = \"How we created a dark UI for GitLab's Web IDE\"\npublishedAt = \"2020-05-20\"\n\n[[goibibo]]\nid = \"https://web.dev/goibibo/\"\ntitle = \"How Goibibo's PWA improved conversions by 60%\"\npublishedAt = \"2020-09-29\"\n\n[[google]]\nid = \"https://medium.com/@cramforce/designing-very-large-javascript-applications-6e013a3291a3\"\ntitle = \"Designing very large (JavaScript) applications\"\npublishedAt = \"2018-04-15\"\n\n[[google]]\nid = \"https://medium.com/google-design/google-photos-45b714dfbed1\"\ntitle = \"Building the Google Photos Web UI\"\npublishedAt = \"2018-07-10\"\n\n[[google]]\nid = \"http://neugierig.org/software/blog/2018/09/typescript-at-google.html\"\ntitle = \"TypeScript at Google\"\npublishedAt = \"2018-09-01\"\n\n[[google]]\nid = \"https://youtu.be/sjov1k5jexA\"\ntitle = \"TypeScript at Google (TSConf 2018)\"\npublishedAt = \"2018-05-01\"\n\n[[google]]\nid = \"https://dev.to/chromiumdev/the-chrome-dev-summit-site-case-study-15ng\"\ntitle = \"The Chrome Dev Summit site: case study\"\npublishedAt = \"March 12,2019\"\n\n[[google]]\nid = \"https://news.dartlang.org/2016/03/the-new-adwords-ui-uses-dart-we-asked.html\"\ntitle = \"The new AdWords UI uses Dart — we asked why\"\npublishedAt = \"2016-03-31\"\n\n[[google]]\nid = \"https://medium.com/google-design/a-streamlined-workflow-for-performative-animations-be0a6ff3df7a\"\ntitle = \"A Recipe for Designing Animations — Without Sacrificing Performance\"\npublishedAt = \"2019-06-04\"\n\n[[google]]\nid = \"https://web.dev/google-search-sw/\"\ntitle = \"Bringing service workers to Google Search\"\npublishedAt = \"2019-06-20\"\n\n[[google]]\nid = \"https://developer.chrome.com/blog/webauthn-tab/\"\ntitle = \"How we built the Chrome DevTools WebAuthn tab\"\npublishedAt = \"2020-10-22\"\n\n[[google]]\nid = \"https://developers.google.com/web/updates/2021/01/puppeteer-typescript\"\ntitle = \"Migrating Puppeteer to TypeScript\"\npublishedAt = \"2021-01-21\"\n\n[[google]]\nid = \"https://developer.chrome.com/blog/migrating-to-typescript/\"\ntitle = \"DevTools architecture refresh: migrating DevTools to TypeScript\"\npublishedAt = \"2021-04-08\"\n\n[[google]]\nid = \"https://developer.chrome.com/en/blog/csp-issues/\"\ntitle = \"Implementing CSP and Trusted Types debugging in Chrome DevTools\"\npublishedAt = \"2021-11-01\"\n\n[[google]]\nid = \"https://web.dev/case-studies/google-sheets-wasmgc\"\ntitle = \"Why Google Sheets ported its calculation worker from JavaScript to WasmGC\"\npublishedAt = \"2024-06-26\"\n\n[[google]]\nid = \"https://neugierig.org/software/blog/2020/10/scaling-typescript.html\"\ntitle = \"Scaling TypeScript compilation\"\npublishedAt = \"2020-10-28\"\n\n[[govuk]]\nid = \"https://frontendne.co.uk/talks/accessibility-for-developers-building-a-frontend-that-everyone-can-use\"\ntitle = \"Accessibility for developers: building a frontend that everyone can use\"\npublishedAt = \"2016-10-06\"\n\n[[govuk]]\nid = \"https://accessibility.blog.gov.uk/2016/12/09/patterns-for-accessible-webchats\"\ntitle = \"Patterns for accessible webchats\"\npublishedAt = \"2016-12-09\"\n\n[[govuk]]\nid = \"https://accessibility.blog.gov.uk/2017/02/08/advice-for-creating-content-that-works-well-with-screen-readers\"\ntitle = \"How to create content that works well with screen readers\"\npublishedAt = \"2017-02-08\"\n\n[[govuk]]\nid = \"https://accessibility.blog.gov.uk/2018/02/28/how-weve-made-gov-uk-elements-even-more-accessible\"\ntitle = \"How we’ve made GOV.UK Elements even more accessible\"\npublishedAt = \"2018-02-28\"\n\n[[govuk]]\nid = \"https://accessibility.blog.gov.uk/2018/05/15/what-we-learned-from-getting-our-autocomplete-tested-for-accessibility\"\ntitle = \"What we learned from getting our autocomplete tested for accessibility\"\npublishedAt = \"2018-05-15\"\n\n[[govuk]]\nid = \"https://accessibility.blog.gov.uk/2019/04/08/accessibility-lessons-dealing-with-a-large-amount-of-form-inputs\"\ntitle = \"Accessibility lessons: dealing with a large amount of form inputs\"\npublishedAt = \"2019-04-08\"\n\n[[govuk]]\nid = \"https://technology.blog.gov.uk/2020/02/24/why-the-gov-uk-design-system-team-changed-the-input-type-for-numbers/\"\ntitle = \"Why the GOV.UK Design System team changed the input type for numbers\"\npublishedAt = \"2020-02-24\"\n\n[[govuk]]\nid = \"https://accessibility.blog.gov.uk/2020/03/16/why-videos-on-gov-uk-use-the-youtube-video-player/\"\ntitle = \"Why videos on GOV.UK use the YouTube video player\"\npublishedAt = \"2020-03-16\"\n\n[[govuk]]\nid = \"https://gds.blog.gov.uk/2023/12/15/how-we-reduced-css-size-and-improved-performance-across-gov-uk/\"\ntitle = \"How we reduced CSS size and improved performance across GOV.UK\"\npublishedAt = \"2023-12-15\"\n\n[[grammarly]]\nid = \"https://web.archive.org/web/20190304201001/https://tech.grammarly.com/blog/building-browser-extensions-at-scale\"\ntitle = \"Building Browser Extensions At Scale\"\npublishedAt = \"2017-10-06\"\n\n[[grammarly]]\nid = \"https://www.grammarly.com/blog/engineering/introducing-embrace/\"\ntitle = \"Introducing Embrace: A Framework for Building Declarative UIs\"\npublishedAt = \"2021-09-03\"\n\n[[grammarly]]\nid = \"https://www.grammarly.com/blog/engineering/real-time-collaborative-text-editing/\"\ntitle = \"Real-Time Collaborative Text Editing\"\npublishedAt = \"2022-04-22\"\n\n[[grammarly]]\nid = \"https://www.grammarly.com/blog/engineering/making-grammarly-feel-native-on-every-website/\"\ntitle = \"Making Grammarly Feel Native On Every Website\"\npublishedAt = \"2022-03-07\"\n\n[[grammarly]]\nid = \"https://www.grammarly.com/blog/engineering/part-1-how-grammarly-tackles-hidden-complexity-in-front-end-applications/\"\ntitle = \"Part 1: How Grammarly Tackles Hidden Complexity in Front-End Applications\"\npublishedAt = \"2022-03-07\"\n\n[[grammarly]]\nid = \"https://www.grammarly.com/blog/engineering/part-2-how-grammarly-tackles-hidden-complexity-in-front-end-applications/\"\ntitle = \"Part 2: How Grammarly Tackles Hidden Complexity in Front-End Applications\"\npublishedAt = \"2022-03-07\"\n\n[[grammarly]]\nid = \"https://www.grammarly.com/blog/engineering/signals-with-focal-library/\"\ntitle = \"Signals With @grammarly/focal\"\npublishedAt = \"2023-08-21\"\n\n[[grammarly]]\nid = \"https://www.grammarly.com/blog/engineering/reducing-text-input-lag/\"\ntitle = \"How We Reduced Text Input Lag to Improve Web Performance\"\npublishedAt = \"2025-02-12\"\n\n[[gusto]]\nid = \"https://engineering.gusto.com/solving-the-double-click-in-backbone-js-41452da08169\"\ntitle = \"Solving the double-click in Backbone.js\"\npublishedAt = \"2014-04-02\"\n\n[[gusto]]\nid = \"https://engineering.gusto.com/gusto-tech-talk-41d221b12d9a\"\ntitle = \"Scaling Front-end Architecture\"\npublishedAt = \"2016-06-10\"\n\n[[gusto]]\nid = \"https://engineering.gusto.com/evolving-javascript-478451d08793\"\ntitle = \"Evolving JavaScript Part 1: Goodbye Backbone\"\npublishedAt = \"2016-07-12\"\n\n[[gusto]]\nid = \"https://engineering.gusto.com/evolving-javascript-7e3ffbd9819b\"\ntitle = \"Evolving JavaScript Part 2: Hello React\"\npublishedAt = \"2016-07-12\"\n\n[[gusto]]\nid = \"https://engineering.gusto.com/evolving-javascript-be0338eb0d38\"\ntitle = \"Evolving JavaScript Part 3: Building a React Application\"\npublishedAt = \"2016-07-12\"\n\n[[gusto]]\nid = \"https://engineering.gusto.com/taking-off-with-apollo-5a0d5f11a2fc\"\ntitle = \"Taking off with Apollo\"\npublishedAt = \"2018-09-12\"\n\n[[gusto]]\nid = \"https://engineering.gusto.com/how-i-fell-out-of-love-with-hocs-cc25e1ca65fd\"\ntitle = \"How I fell out of love with HOCs\"\npublishedAt = \"2018-12-09\"\n\n[[gusto]]\nid = \"https://engineering.gusto.com/how-we-made-gusto-page-loads-40-faster-245cea3d090e\"\ntitle = \"How We Made Gusto Page Loads 40% Faster\"\npublishedAt = \"2023-06-15\"\n\n[[healthcaregov]]\nid = \"https://blog.navapbc.com/building-a-design-system-for-healthcare-gov-20dc1a833ab3\"\ntitle = \"Building a design system for HealthCare.gov\"\npublishedAt = \"2017-08-29\"\n\n[[heap]]\nid = \"https://www.heap.io/blog/goodbye-coffeescript-hello-typescript\"\ntitle = \"Goodbye CoffeeScript, Hello TypeScript\"\npublishedAt = \"2015-10-07\"\n\n[[heap]]\nid = \"https://www.heap.io/blog/migrating-react-mobx-while-shipping-new-features\"\ntitle = \"Migrating To React + MobX While Shipping New Features\"\npublishedAt = \"2017-08-16\"\n\n[[heap]]\nid = \"https://www.heap.io/blog/how-we-write-front-end-code\"\ntitle = \"How We Write Front-end Code\"\npublishedAt = \"2018-02-20\"\n\n[[heap]]\nid = \"https://www.heap.io/blog/redesigning-heap-without-a-feature-branch\"\ntitle = \"Redesigning Heap Without a Feature Branch\"\npublishedAt = \"2019-04-10\"\n\n[[heap]]\nid = \"https://www.heap.io/blog/migrating-to-typescript\"\ntitle = \"How we failed, then succeeded, at migrating to TypeScript\"\npublishedAt = \"2019-10-10\"\n\n[[heap]]\nid = \"https://www.heap.io/blog/how-we-leveraged-asts-and-babel-to-capture-everything-on-react-native-apps\"\ntitle = \"Using Babel Transforms to Inject Analytics Code in React Native Apps\"\npublishedAt = \"2020-06-23\"\n\n[[heap]]\nid = \"https://www.heap.io/blog/turning-front-end-code-into-component-library\"\ntitle = \"We Turned Our Front-End Code Into a Component Library (and You Can, Too)\"\npublishedAt = \"2021-09-02\"\n\n[[inderapotheke]]\nid = \"https://www.inderapotheke.de/blog/farewell-google-maps\"\ntitle = \"Farewell, Google Maps\"\npublishedAt = \"2018-07-18\"\n\n[[infinitered]]\nid = \"https://shift.infinite.red/switching-from-ava-to-jest-for-typescript-a6dac7d1712f\"\ntitle = \"Switching from Ava to Jest for TypeScript\"\npublishedAt = \"2017-11-06\"\n\n[[infinitered]]\nid = \"https://shift.infinite.red/using-typescript-to-upgrade-ignite-without-losing-my-mind-352d8076d331\"\ntitle = \"Using TypeScript to upgrade Ignite without losing my mind\"\npublishedAt = \"2019-03-20\"\n\n[[infinitered]]\nid = \"https://shift.infinite.red/yarn-1-vs-yarn-2-vs-npm-a69ccf0229cd\"\ntitle = \"Yarn 1 vs Yarn 2 vs NPM\"\npublishedAt = \"2020-02-06\"\n\n[[infinitered]]\nid = \"https://shift.infinite.red/why-infinite-red-uses-mobx-state-tree-instead-of-redux-d6c1407dead\"\ntitle = \"Why Infinite Red uses MobX-State-Tree instead of Redux\"\npublishedAt = \"2020-06-16\"\n\n[[insider-inc]]\nid = \"https://medium.com/insider-inc-engineering/how-to-style-different-sites-with-one-css-collection-6f33126d4cdb\"\ntitle = \"How to style different sites with one CSS collection\"\npublishedAt = \"2018-12-17\"\n\n[[insider-inc]]\nid = \"https://medium.com/insider-inc-engineering/why-we-got-rid-of-all-our-front-end-and-back-end-engineers-f9c06034548\"\ntitle = \"Why we got rid of all our front-end and back-end engineers\"\npublishedAt = \"2019-02-13\"\n\n[[insider-inc]]\nid = \"https://medium.com/insider-inc-engineering/delightful-ways-to-write-reusable-css-using-subclasses-903e90c9cf87\"\ntitle = \"Delightful ways to write reusable CSS using subclasses\"\npublishedAt = \"March 1 , 2019\"\n\n[[instagram]]\nid = \"https://instagram-engineering.com/react-native-at-instagram-dd828a9a90c7\"\ntitle = \"React Native at Instagram\"\npublishedAt = \"2017-02-07\"\n\n[[instagram]]\nid = \"https://instagram-engineering.com/making-instagram-com-faster-part-1-62cc0c327538\"\ntitle = \"Making Instagram.com faster: Part 1\"\npublishedAt = \"2019-08-01\"\n\n[[instagram]]\nid = \"https://instagram-engineering.com/making-instagram-com-faster-part-2-f350c8fba0d4\"\ntitle = \"Making Instagram.com faster: Part 2\"\npublishedAt = \"2019-09-06\"\n\n[[instagram]]\nid = \"https://instagram-engineering.com/making-instagram-com-faster-part-3-cache-first-6f3f130b9669\"\ntitle = \"Making Instagram.com faster: Part 3 — cache first\"\npublishedAt = \"2019-10-11\"\n\n[[instagram]]\nid = \"https://instagram-engineering.com/making-instagram-com-faster-code-size-and-execution-optimizations-part-4-57668be796a8\"\ntitle = \"Making instagram.com faster: Code size and execution optimizations (Part 4)\"\npublishedAt = \"2019-11-01\"\n\n[[instagram]]\nid = \"https://engineering.fb.com/2022/07/26/web/launching-instagram-messaging-on-desktop/\"\ntitle = \"Launching Instagram Messaging on desktop\"\npublishedAt = \"2022-07-26\"\n\n[[internetarchive]]\nid = \"https://medium.com/@vamptvo/pixels-vs-ems-users-do-change-font-size-5cfb20831773\"\ntitle = \"Pixels vs. Ems: Users DO Change Font Size\"\npublishedAt = \"2018-06-13\"\n\n[[intuit]]\nid = \"https://medium.com/blueprint-by-intuit/making-accessibility-an-integral-part-of-the-creative-workflow-ca78767dd05b\"\ntitle = \"Making Accessibility an Integral Part of the Creative Workflow\"\npublishedAt = \"2018-04-15\"\n\n[[intuit]]\nid = \"https://medium.com/blueprint-by-intuit/turbotax-lives-approach-to-a-gender-neutral-design-system-bed0c45ece44\"\ntitle = \"TurboTax Live’s Approach to a Gender-Neutral Design System\"\npublishedAt = \"2019-02-21\"\n\n[[intuit]]\nid = \"https://medium.com/blueprint-by-intuit/delivering-consistent-animations-with-a-design-system-library-323f29f5efc6\"\ntitle = \"Delivering Consistent Animations with a Design System Library\"\npublishedAt = \"2019-04-25\"\n\n[[intuit]]\nid = \"https://medium.com/blueprint-by-intuit/graphql-intuits-path-to-one-api-system-b8495e4dd281\"\ntitle = \"GraphQL: Intuit’s Path to ONE API System\"\npublishedAt = \"2019-03-13\"\n\n[[invision]]\nid = \"https://web.archive.org/web/20240930154734/https://engineering.invisionapp.com/post/sharing-eslint-across-teams/\"\ntitle = \"Sharing ESLint Across Teams\"\npublishedAt = \"2016-04-05\"\n\n[[invision]]\nid = \"https://web.archive.org/web/20240930155356/https://engineering.invisionapp.com/post/optimizing-webpack/\"\ntitle = \"Optimizing Webpack for Faster React Builds\"\npublishedAt = \"2016-04-12\"\n\n[[invision]]\nid = \"https://web.archive.org/web/20240930154747/https://engineering.invisionapp.com/post/persist-redux-state-by-using-sagas/\"\ntitle = \"Persist Redux State by Using Sagas\"\npublishedAt = \"2016-04-26\"\n\n[[invision]]\nid = \"https://web.archive.org/web/20240930155237/https://engineering.invisionapp.com/post/testing-eslint/\"\ntitle = \"Testing Our Shared ESLint Configs\"\npublishedAt = \"2016-05-12\"\n\n[[invision]]\nid = \"https://web.archive.org/web/20240930154708/https://engineering.invisionapp.com/post/how-eslint-saved-our-soul/\"\ntitle = \"How ESLint Saved Our Soul\"\npublishedAt = \"2016-08-12\"\n\n[[invision]]\nid = \"https://web.archive.org/web/20240930155305/https://engineering.invisionapp.com/post/react-performance-tune-up/\"\ntitle = \"React Performance Tune-Up\"\npublishedAt = \"2016-09-23\"\n\n[[invision]]\nid = \"https://web.archive.org/web/20240930154803/https://engineering.invisionapp.com/post/building-the-inspect-measurement-engine/\"\ntitle = \"Building the inspect measurement engine\"\npublishedAt = \"2019-07-17\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/babel-in-khan-academys-i18n-toolchain/\"\ntitle = \"Babel in Khan Academy's i18n Toolchain\"\npublishedAt = \"2015-06-22\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/fun-with-slope-fields-css-and-react/\"\ntitle = \"Fun with slope fields, css and react\"\npublishedAt = \"2015-08-05\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/copy-pasting-more-than-just-text/\"\ntitle = \"Copy-pasting more than just text\"\npublishedAt = \"2015-08-31\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/i18nize-templates-internationalization-after-the-fact/\"\ntitle = \"i18nize-templates: Internationalization After the Fact\"\npublishedAt = \"2015-09-28\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/schrodingers-deploys-no-more-how-we-update-translations/\"\ntitle = \"Schrödinger's deploys no more: how we update translations\"\npublishedAt = \"2015-10-12\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/forgo-js-packaging-not-so-fast/\"\ntitle = \"Forgo JS packaging? Not so fast\"\npublishedAt = \"2015-11-23\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/inline-css-at-khan-academy-aphrodite/\"\ntitle = \"Inline CSS at Khan Academy: Aphrodite\"\npublishedAt = \"2016-03-29\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/migrating-to-a-mobile-monorepo-for-react-native/\"\ntitle = \"Migrating to a Mobile Monorepo for React Native\"\npublishedAt = \"2017-05-29\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/creating-query-components-with-apollo/\"\ntitle = \"Creating Query Components with Apollo\"\npublishedAt = \"2017-06-12\"\n\n[[khanacademy]]\nid = \"https://blog.khanacademy.org/tota11y-an-accessibility-visualization-toolkit/\"\ntitle = \"tota11y - an accessibility visualization toolkit\"\npublishedAt = \"2018-04-15\"\n\n[[khanacademy]]\ntitle = \"Making Websites Work with Windows High Contrast Mode\"\nid = \"https://blog.khanacademy.org/making-websites-work-with-windows-high-contrast-mode/\"\npublishedAt = \"2019-03-21\"\n\n[[khanacademy]]\ntitle = \"How to upgrade hundreds of React components without breaking production\"\nid = \"https://blog.khanacademy.org/how-to-upgrade-hundreds-of-react-components-without-breaking-production/\"\npublishedAt = \"2019-09-23\"\n\n[[khanacademy]]\ntitle = \"Overcoming a false sense of security when using Flow types\"\nid = \"https://blog.khanacademy.org/overcoming-a-false-sense-of-security-when-using-flow-types/\"\npublishedAt = \"2021-01-13\"\n\n[[khanacademy]]\ntitle = \"Communication for Custom Developer Tools\"\nid = \"https://blog.khanacademy.org/communication-for-custom-developer-tools/\"\npublishedAt = \"2024-01-04\"\n\n[[kickstarter]]\nid = \"https://kickstarter.engineering/namespacing-actions-for-redux-d9b55a88b1b1\"\ntitle = \"Namespacing Actions for Redux\"\npublishedAt = \"2017-11-20\"\n\n[[klarna]]\nid = \"https://engineering.klarna.com/how-removing-caching-improved-mobile-performance-by-25-52a17cc339a2\"\ntitle = \"How removing caching improved mobile performance by 25%\"\npublishedAt = \"2017-01-10\"\n\n[[klarna]]\nid = \"https://engineering.klarna.com/improving-communication-and-confidence-with-visual-snapshot-testing-b04154c3aaf0\"\ntitle = \"Improving Communication and Confidence with Visual Snapshot Testing\"\npublishedAt = \"2017-03-14\"\n\n[[klarna]]\nid = \"https://engineering.klarna.com/6-lessons-learned-from-optimizing-the-performance-of-a-node-js-service-f163cac20473\"\ntitle = \"6 Lessons learned from optimizing the performance of a Node.js service\"\npublishedAt = \"2020-01-09\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/line-manga-smooth-page-transition-with-page-stack/\"\ntitle = \"LINE MANGA: Smooth page transition with Page Stack\"\npublishedAt = \"2018-01-18\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/easy-code-splitting-with-grow-loader\"\ntitle = \"Easy code-splitting with grow-loader\"\npublishedAt = \"2018-01-24\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/line-animation-sticker-checker-on-web-browser\"\ntitle = \"LINE Animation Sticker Checker on Web browser\"\npublishedAt = \"2018-06-04\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/page-stack-revisited\"\ntitle = \"LINE Securities: Page Stack revisited\"\npublishedAt = \"2020-06-15\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/how-and-what-front-end-developers-actually-do-at-line\"\ntitle = \"How and what front-end developers actually do at LINE?\"\npublishedAt = \"2019-06-19\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/line-web-services-technology\"\ntitle = \"LINE's Web-based services and technology. Isn't LINE an app developer?\"\npublishedAt = \"2019-09-30\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/line-developers-site-from-middleman-to-vuepress\"\ntitle = \"LINE Developers site: From Middleman to VuePress\"\npublishedAt = \"2020-03-10\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/create-figma-translation-plugin-with-vuejs\"\ntitle = \"How I made a Figma translation plugin with Vue.js after a couple of drinks\"\npublishedAt = \"2023-07-28\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/support-prettier-and-oss\"\ntitle = \"LINE has started to donate to Prettier - why companies should support OSS\"\npublishedAt = \"2022-02-15\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/web-styling-with-reactjs\"\ntitle = \"Web Styling with ReactJS\"\npublishedAt = \"2021-04-29\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/team-and-project-introducing-the-team-developing-web-frontend-for-line-user-services\"\ntitle = \"Introducing the Team Developing Web Front-end for LINE User Services\"\npublishedAt = \"2021-05-24\"\n\n[[line]]\nid = \"https://engineering.linecorp.com/en/blog/floor-map-management-system-on-web-with-leaflet\"\ntitle = \"Floor map management system on web, with Leaflet\"\npublishedAt = \"2018-04-02\"\n\n[[line]]\nid = \"https://techblog.lycorp.co.jp/en/20231005a\"\ntitle = \"How We Rearchitected A/B Testing at LINE NEWS\"\npublishedAt = \"2023-10-05\"\n\n[[line]]\nid = \"https://techblog.lycorp.co.jp/en/20250321a\"\ntitle = \"State of LY Frontend 2024 report: Unveiling LY Corporation's frontend technology\"\npublishedAt = \"2025-03-21\"\n\n[[line]]\nid = \"https://techblog.lycorp.co.jp/en/improve-development-experience-with-flutter-web\"\ntitle = \"Improving the product development environment using Flutter Web\"\npublishedAt = \"2025-05-21\"\n\n[[linkedin]]\nid = \"https://engineering.linkedin.com/blog/2016/01/smashing-the-monolith\"\ntitle = \"Bringing a Modern Javascript Build Pipeline to LinkedIn\"\npublishedAt = \"2016-01-20\"\n\n[[linkedin]]\nid = \"https://engineering.linkedin.com/blog/2017/10/sleek-and-fast--speeding-up-your-fat-web-client\"\ntitle = \"Sleek and Fast: Speeding Up your Fat Web Client\"\npublishedAt = \"2017-10-19\"\n\n[[linkedin]]\nid = \"https://engineering.linkedin.com/blog/2017/12/the-glimmer-binary-experience\"\ntitle = \"The Glimmer Binary Experience\"\npublishedAt = \"2017-12-07\"\n\n[[linkedin]]\nid = \"https://engineering.linkedin.com/blog/2018/01/ember-timer-leaks\"\ntitle = \"Ember Timer Leaks: The Bad Apples in Your Test Infrastructure\"\npublishedAt = \"2018-01-03\"\n\n[[linkedin]]\nid = \"https://engineering.linkedin.com/blog/2018/03/how-we-built-the-same-app-twice-with-preact-and-glimmerjs\"\ntitle = \"Lighter than Lightweight: How We Built the Same App Twice with Preact and Glimmer.js\"\npublishedAt = \"2018-03-12\"\n\n[[linkedin]]\nid = \"https://engineering.linkedin.com/blog/2020/automated-accessibility-testing\"\ntitle = \"LinkedIn’s approach to automated accessibility (A11y) testing\"\npublishedAt = \"2020-05-21\"\n\n[[linkedin]]\nid = \"https://www.linkedin.com/blog/engineering/profile/leveraging-configurable-components-to-scale-linkedin-s-profile-e\"\ntitle = \"Leveraging configurable components to scale LinkedIn's Profile experience\"\npublishedAt = \"2022-04-05\"\n\n[[linkedin]]\nid = \"https://www.linkedin.com/blog/engineering/member-customer-experience/building-a-next-generation-forms-framework-at-linkedin\"\ntitle = \"Building a next-generation forms framework at LinkedIn\"\npublishedAt = \"2022-03-31\"\n\n[[linkedin]]\nid = \"https://www.linkedin.com/blog/engineering/product-design/updating-linkedins-ui\"\ntitle = \"Under the hood: Updating LinkedIn's UI\"\npublishedAt = \"2020-10-22\"\n\n[[linkedin]]\nid = \"https://www.linkedin.com/blog/engineering/infrastructure/accelerating-code-delivery-by-97-with-yarn-workspaces\"\ntitle = \"Accelerating Code Delivery By 97% With Yarn Workspaces\"\npublishedAt = \"2022-12-15\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2012/11/14/ie10-how-does-it-really-stack-up/\"\ntitle = \"IE10: How does it really stack up?\"\npublishedAt = \"2012-11-14\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2014/01/31/atomic-css-tool-set/\"\ntitle = \"Atomic CSS as a tool set\"\npublishedAt = \"2014-01-31\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2014/12/02/definitive-guide-copying-pasting-javascript/\"\ntitle = \"The Definitive Guide to Copying and Pasting in JavaScript\"\npublishedAt = \"2014-12-02\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2015/05/19/big-content-in-a-little-canvas/\"\ntitle = \"Big content in a little canvas\"\npublishedAt = \"2015-05-19\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2016/09/26/improving-angular-2-load-times/\"\ntitle = \"Improving Angular 2 Load Times and a 29KB Hello World App\"\npublishedAt = \"2016-09-26\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2016/11/08/angular-2-and-observables-data-sharing-in-a-multi-view-application/\"\ntitle = \"Angular 2 and Observables: Data Sharing in a Multi-View Application\"\npublishedAt = \"2016-11-08\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2017/04/10/using-angular-2-components-in-a-non-angular-app/\"\ntitle = \"Using Angular 2 Components In a Non-Angular App\"\npublishedAt = \"2017-04-10\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2017/11/16/converting-600k-lines-to-typescript-in-72-hours/\"\ntitle = \"Converting 600k lines to TypeScript in 72 hours\"\npublishedAt = \"2017-11-16\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2018/01/03/folder-upload-in-an-angular-app/\"\ntitle = \"How to handle folder uploads in Angular 2+\"\npublishedAt = \"2018-01-03\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2018/02/14/javascriptcore-the-holy-grail-of-cross-platform/\"\ntitle = \"JavaScriptCore – The Holy Grail of Cross Platform\"\npublishedAt = \"2018-02-14\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2018/06/20/how-to-actually-improve-type-safety-with-the-typescript-strict-flags/\"\ntitle = \"How to Actually Improve Type Safety with the TypeScript Strict Flags\"\npublishedAt = \"2018-06-20\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2018/11/09/tracking-javascript-performance-zone-js/\"\ntitle = \"ZoneTracker: Tracking JavaScript Performance with Zone.js\"\npublishedAt = \"2018-11-09\"\n\n[[lucidchart]]\nid = \"https://www.lucidchart.com/techblog/2019/01/03/javascriptcore-10-months-later/\"\ntitle = \"JavaScriptCore—10 Months Later\"\npublishedAt = \"2019-01-03\"\n\n[[lucidchart]]\nid = \"https://lucid.co/techblog/2019/01/22/what-you-should-know-before-making-a-service-worker\"\ntitle = \"What you should know before making a service worker\"\npublishedAt = \"2019-01-22\"\n\n[[lucidchart]]\nid = \"https://lucid.co/techblog/2019/09/17/angular-change-detection-challenge\"\ntitle = \"An Angular Change Detection Challenge\"\npublishedAt = \"2019-09-17\"\n\n[[lucidchart]]\nid = \"https://lucid.co/techblog/2023/08/25/design-for-canvas-based-applications\"\ntitle = \"Design for canvas-based applications\"\npublishedAt = \"2023-08-25\"\n\n[[lucidchart]]\nid = \"https://lucid.co/techblog/2019/04/18/internationalizing-software-part-one\"\ntitle = \"Internationalizing Your Software Part One: The Process\"\npublishedAt = \"2019-04-18\"\n\n[[lucidchart]]\nid = \"https://lucid.co/techblog/2019/05/29/internationalizing-your-software-part-two-handling-language-differences\"\ntitle = \"Internationalizing Your Software Part Two: Handling Language Differences\"\npublishedAt = \"2019-05-29\"\n\n[[lucidchart]]\nid = \"https://lucid.co/techblog/2019/06/17/internationalizing-software-part-three\"\ntitle = \"Internationalizing Your Software Part Three: Final Thoughts\"\npublishedAt = \"2019-06-17\"\n\n[[lyft]]\nid = \"https://eng.lyft.com/typescript-at-lyft-64f0702346ea\"\ntitle = \"TypeScript at Lyft\"\npublishedAt = \"2017-09-27\"\n\n[[lyft]]\nid = \"https://design.lyft.com/re-approaching-color-9e604ba22c88\"\ntitle = \"Re-approaching Color\"\npublishedAt = \"2018-09-21\"\n\n[[lyft]]\nid = \"https://eng.lyft.com/changing-lanes-how-lyft-is-migrating-100-frontend-microservices-to-next-js-42199aaebd5f\"\ntitle = \"Changing Lanes: How Lyft is Migrating 100+ Frontend Microservices to Next.js\"\npublishedAt = \"2020-11-30\"\n\n[[lyft]]\nid = \"https://eng.lyft.com/frontend-at-lyft-an-overview-f934c1524370\"\ntitle = \"Frontend at Lyft: An Overview\"\npublishedAt = \"2021-03-09\"\n\n[[lyft]]\nid = \"https://eng.lyft.com/the-journey-to-server-driven-ui-at-lyft-bikes-and-scooters-c19264a0378e#1467\"\ntitle = \"The Journey to Server Driven UI At Lyft Bikes and Scooters\"\npublishedAt = \"2023-03-09\"\n\n[[lyft]]\nid = \"https://eng.lyft.com/speeding-ahead-with-a-systematic-approach-to-web-performance-282b6cf8ae2\"\ntitle = \"Speeding Ahead with a Systematic Approach to Web Performance\"\npublishedAt = \"2021-04-28\"\n\n[[mailru]]\nid = \"https://web.dev/mailru-cwv/\"\ntitle = \"Improving Core Web Vitals on the Mail.ru home page resulted in an average 10% increase in conversion rates\"\npublishedAt = \"2021-11-15\"\n\n[[mailchimp]]\nid = \"https://increment.com/testing/designing-automated-tests-for-react/\"\ntitle = \"Designing automated tests for React\"\npublishedAt = \"2019-08-10\"\n\n[[mdn]]\nid = \"https://hacks.mozilla.org/2019/02/refactoring-mdn-macros-with-async-await-and-object-freeze/\"\ntitle = \"Refactoring MDN macros with async, await, and Object.freeze()\"\npublishedAt = \"2019-02-07\"\n\n[[medium]]\nid = \"https://medium.engineering/why-contenteditable-is-terrible-122d8a40e480\"\ntitle = \"Why ContentEditable is Terrible\"\npublishedAt = \"2014-05-14\"\n\n[[medium]]\nid = \"https://medium.engineering/wait-dont-touch-that-a211832adc3a\"\ntitle = \"Wait, Don’t Touch That! Mutual Exclusion Locks & JavaScript\"\npublishedAt = \"2015-01-17\"\n\n[[medium]]\nid = \"https://medium.engineering/the-curious-case-of-disappearing-polish-s-fa398313d4df\"\ntitle = \"The curious case of the disappearing Polish S\"\npublishedAt = \"2015-02-02\"\n\n[[medium]]\nid = \"https://medium.engineering/five-goofy-things-medium-did-that-break-accessibility-3bc804ae818d\"\ntitle = \"Five Goofy Things Medium Did That Break Accessibility\"\npublishedAt = \"2015-06-29\"\n\n[[medium]]\nid = \"https://medium.engineering/the-unluckiest-paragraphs-751dd36d2d30\"\ntitle = \"The Unluckiest Paragraphs: A Tale of CSS and Why Parts of Medium Sometimes Disappear\"\npublishedAt = \"2015-12-05\"\n\n[[medium]]\nid = \"https://medium.engineering/simple-style-sheets-c3b588867899\"\ntitle = \"Simple Style Sheets, Or How to Improve Your Sleep by Dropping the Cascade\"\npublishedAt = \"2016-09-28\"\n\n[[medium]]\nid = \"https://medium.engineering/2-fast-2-furious-migrating-mediums-codebase-without-slowing-down-84b1e33d81f4\"\ntitle = \"2 Fast 2 Furious: migrating Medium’s codebase without slowing down\"\npublishedAt = \"2018-03-22\"\n\n[[medium]]\nid = \"https://medium.engineering/the-case-of-the-eternal-blur-ab350b9653ea\"\ntitle = \"The case of the eternal blur: a bug hunt horror novella\"\npublishedAt = \"2018-05-02\"\n\n[[medium]]\nid = \"https://medium.engineering/graphql-server-design-medium-34862677b4b8\"\ntitle = \"GraphQL Server Design @ Medium\"\npublishedAt = \"2018-11-02\"\n\n[[memsql]]\nid = \"https://davidgomes.com/porting-30k-lines-of-code-from-flow-to-typescript/\"\ntitle = \"Porting 30K lines of code from Flow to TypeScript\"\npublishedAt = \"2019-01-13\"\n\n[[mercadolibre]]\nid = \"https://web.dev/how-mercadolibre-optimized-web-vitals/\"\ntitle = \"How Mercado Libre optimized for Web Vitals (TBT/FID)\"\npublishedAt = \"2020-09-21\"\n\n[[microsoft]]\nid = \"https://blogs.bing.com/search-quality-insights/august-2022/Fast-Front-End-Performance-for-Microsoft-Bing\"\ntitle = \"Fast Front-End Performance for Microsoft Bing\"\npublishedAt = \"2022-08-25\"\n\n[[microsoft]]\nid = \"https://youtu.be/CWxc3AYja1I\"\ntitle = \"How We React at Microsoft To-Do\"\npublishedAt = \"2018-01-05\"\n\n[[microsoft]]\nid = \"https://medium.com/web-on-the-edge/deminifying-javascript-call-stacks-ef600d01bd4a\"\ntitle = \"Deminifying JavaScript call stacks\"\npublishedAt = \"2017-03-30\"\n\n[[microsoft]]\nid = \"https://medium.com/web-on-the-edge/performance-gains-from-switching-to-closure-compiler-8b97b7e434e5\"\ntitle = \"Performance gains from switching to Closure Compiler\"\npublishedAt = \"2017-03-15\"\n\n[[microsoft]]\nid = \"https://medium.com/web-on-the-edge/thinking-in-typescript-cb7f8a6434c0\"\ntitle = \"Thinking in TypeScript\"\npublishedAt = \"2017-09-19\"\n\n[[microsoft]]\nid = \"https://medium.com/web-on-the-edge/modernizing-word-onlines-ux-platform-df1050344e3a\"\ntitle = \"Modernizing Word Online’s UX platform\"\npublishedAt = \"2018-08-29\"\n\n[[microsoft]]\nid = \"https://medium.com/web-on-the-edge/creating-the-microsoft-edge-devtools-3d-view-d27c7bdffc9d\"\ntitle = \"Creating the Microsoft Edge DevTools 3D View\"\npublishedAt = \"2020-03-03\"\n\n[[microsoft]]\nid = \"https://medium.com/web-on-the-edge/how-we-built-the-devtools-tooltips-4e9933abbd8a\"\ntitle = \"How we built the DevTools Tooltips\"\npublishedAt = \"2021-03-08\"\n\n[[microsoft]]\nid = \"https://blogs.bing.com/search-quality-insights/2019-03/Bing-and-React-on-Amazon-Tablets\"\ntitle = \"Bing and React on Amazon Tablets\"\npublishedAt = \"2019-03-18\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/scaling-mixmax-front-end\"\ntitle = \"Scaling Mixmax: Front-end performance\"\npublishedAt = \"2015-05-05\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/autocomplete-search-performance\"\ntitle = \"How we built ‘instant’ autocomplete for Mixmax\"\npublishedAt = \"2015-11-05\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/yarn-ifying-mixmax\"\ntitle = \"Yarn-ifying Mixmax: why and how we moved from npm to Yarn\"\npublishedAt = \"2017-04-24\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/modern-csrf\"\ntitle = \"Using CORS policies to implement CSRF protection\"\npublishedAt = \"2017-06-13\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/backbone-to-react-without-rewriting\"\ntitle = \"React without Redux: how we moved from Backbone to React without rewriting\"\npublishedAt = \"2017-07-26\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/rollup-externals\"\ntitle = \"Handling 3rd-party JavaScript with Rollup: how and when to leave JS out of the bundle\"\npublishedAt = \"2017-12-03\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/precisely-observing-structural-page-changes\"\ntitle = \"Precisely observing structural page changes\"\npublishedAt = \"2017-12-07\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/flow-vs-typescript\"\ntitle = \"Choosing (and using) Javascript static typing: how Mixmax Engineering adopted Flow\"\npublishedAt = \"2018-05-15\"\n\n[[mixmax]]\nid = \"https://mixmax.com/blog/to-yarn-and-back-again-npm\"\ntitle = \"To Yarn and Back (to npm) Again\"\npublishedAt = \"2018-05-29\"\n\n[[mixpanel]]\nid = \"https://engineering.mixpanel.com/straightening-our-backbone-a-lesson-in-event-driven-ui-development-11894835604f\"\ntitle = \"Straightening our Backbone: A lesson in event-driven UI development\"\npublishedAt = \"2015-04-08\"\n\n[[mixpanel]]\nid = \"https://web.archive.org/web/20181022045420/https://engineering.mixpanel.com/2018/06/12/making-web-components-work/\"\ntitle = \"Making Web Components Work, or: How We Learned to Stop Worrying and Love the DOM\"\npublishedAt = \"2018-06-12\"\n\n[[mixpanel]]\nid = \"https://engineering.mixpanel.com/how-does-css-grid-work-with-height-width-margin-and-padding-e3dc3afdea2b\"\ntitle = \"How does CSS Grid work with Height/Width, Margin and Padding?\"\npublishedAt = \"2023-08-24\"\n\n[[mixpanel]]\nid = \"https://engineering.mixpanel.com/best-javascript-charting-libraries-72e30974fc88\"\ntitle = \"Best Javascript Charting Libraries\"\npublishedAt = \"2010-09-18\"\n\n[[mixpanel]]\nid = \"https://mixpanel.substack.com/p/building-heatmaps-at-scale\"\ntitle = \"Building Heatmaps at Scale\"\npublishedAt = \"2025-08-19\"\n\n[[monzo]]\nid = \"https://youtu.be/UXpY3-DlZ9c\"\ntitle = \"Building a Bank with Next.js: How We Use Next.js at Monzo\"\npublishedAt = \"2020-12-02\"\n\n[[mozilla]]\nid = \"http://farmdev.com/thoughts/108/the-art-of-ui-skeletons\"\ntitle = \"The Art of UI Skeletons\"\npublishedAt = \"2019-04-23\"\n\n[[mozilla]]\nid = \"https://hacks.mozilla.org/2020/10/to-eleventy-and-beyond/\"\ntitle = \"To Eleventy and Beyond\"\npublishedAt = \"2020-10-01\"\n\n[[mud]]\nid = \"https://css-irl.info/a-year-of-utility-classes/\"\ntitle = \"A Year of Utility Classes\"\npublishedAt = \"2019-01-28\"\n\n[[myntra]]\nid = \"https://medium.com/@nvkudva/myntras-web-ui-journey-amp-and-pwa-77b87523ee7d\"\ntitle = \"Myntra’s Web UI Journey — AMP and PWA\"\npublishedAt = \"2018-01-31\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/html5-video-playback-ui-62cfdd9b5d19\"\ntitle = \"HTML5 Video Playback UI\"\npublishedAt = \"2013-10-21\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/improving-the-performance-of-our-javascript-inheritance-model-af376d75665\"\ntitle = \"Improving the performance of our JavaScript inheritance model\"\npublishedAt = \"2014-05-16\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/node-js-in-flames-ddd073803aa4\"\ntitle = \"Node.js in Flames\"\npublishedAt = \"2014-11-19\"\n\n[[netflix]]\nid = \"https://youtu.be/hOE6nVVr14c\"\ntitle = \"JSON Graph: Reactive REST at Netflix\"\npublishedAt = \"2015-04-01\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/localization-technologies-at-netflix-d033e7b13cf\"\ntitle = \"Localization Technologies at Netflix\"\npublishedAt = \"2015-06-04\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/making-netflix-com-faster-f95d15f2e972\"\ntitle = \"Making Netflix.com Faster\"\npublishedAt = \"2015-08-05\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/crafting-a-high-performance-tv-user-interface-using-react-3350e5a6ad3b\"\ntitle = \"Crafting a high-performance TV user interface using React\"\npublishedAt = \"2017-01-12\"\n\n[[netflix]]\nid = \"https://gist.github.com/DaBs/89ccc2ffd1d435efdacff05248514f38\"\ntitle = \"Netflix's approach to ES6 feature detection\"\npublishedAt = \"2017-01-20\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/pass-the-remote-user-input-on-tv-devices-923f6920c9a8\"\ntitle = \"Pass the Remote: User Input on TV Devices\"\npublishedAt = \"2017-05-17\"\n\n[[netflix]]\nid = \"https://shoptalkshow.com/episodes/264-react-netflix\"\ntitle = \"Shop Talk podcast #264: React with Netflix\"\npublishedAt = \"2017-05-22\"\n\n[[netflix]]\nid = \"https://youtu.be/V8oTJ8OZ5S0\"\ntitle = \"Performance Signup in React & Transactional Apps with Redux\"\npublishedAt = \"2017-10-25\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/implementing-japanese-subtitles-on-netflix-c165fbe61989\"\ntitle = \"Implementing Japanese Subtitles on Netflix\"\npublishedAt = \"2017-12-11\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/integrating-imperative-apis-into-a-react-application-1257e1b45ac6\"\ntitle = \"Integrating imperative APIs into a React application\"\npublishedAt = \"2017-12-20\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/pseudo-localization-netflix-12fff76fbcbe\"\ntitle = \"Pseudo Localization @ Netflix\"\npublishedAt = \"2018-08-06\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/delivering-meaning-with-previews-on-web-3cedc0341b9e\"\ntitle = \"Delivering Meaning with Previews on Web\"\npublishedAt = \"2018-11-12\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/enhancing-the-netflix-ui-experience-with-hdr-1e7506ad3e8\"\ntitle = \"Enhancing the Netflix UI Experience with HDR\"\npublishedAt = \"2018-09-24\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/our-learnings-from-adopting-graphql-f099de39ae5f\"\ntitle = \"Our learnings from adopting GraphQL\"\npublishedAt = \"2018-12-10\"\n\n[[netflix]]\nid = \"https://medium.com/netflix-techblog/modernizing-the-web-playback-ui-1ad2f184a5a0\"\ntitle = \"Modernizing the Web Playback UI\"\npublishedAt = \"2018-12-12\"\n\n[[netflix]]\nid = \"https://youtu.be/LtrXwX81CPE\"\ntitle = \"Architecting UI for Netflix Studio Technology\"\npublishedAt = \"2019-11-14\"\n\n[[netflix]]\nid = \"https://netflixtechblog.medium.com/delightful-user-interfaces-easter-eggs-ae5e8107d09b\"\ntitle = \"Delightful User Interfaces: Easter Eggs\"\npublishedAt = \"2019-06-24\"\n\n[[netflix]]\nid = \"https://netflixtechblog.com/bringing-rich-experiences-to-memory-constrained-tv-devices-6de771eabb16\"\ntitle = \"Bringing Rich Experiences to Memory-Constrained TV Devices\"\npublishedAt = \"2019-07-02\"\n\n[[netflix]]\nid = \"https://youtu.be/WLqc0EX8Bmg\"\ntitle = \"Making Bandersnatch\"\npublishedAt = \"2019-02-01\"\n\n[[netflix]]\nid = \"https://youtu.be/5sETJs2_jwo\"\ntitle = \"React.js for TV UIs\"\npublishedAt = \"2016-03-17\"\n\n[[netflix]]\nid = \"https://netflixtechblog.com/hawkins-diving-into-the-reasoning-behind-our-design-system-964a7357547\"\ntitle = \"Hawkins: Diving into the Reasoning Behind our Design System\"\npublishedAt = \"2021-02-10\"\n\n[[netflix]]\nid = \"https://netflixtechblog.com/how-we-build-micro-frontends-with-lattice-22b8635f77ea\"\ntitle = \"How We Build Micro Frontends With Lattice\"\npublishedAt = \"2021-09-27\"\n\n[[netflix]]\nid = \"https://netflixtechblog.com/building-the-new-netflix-experience-for-tv-920d71d875de\"\ntitle = \"Building the New Netflix Experience for TV\"\npublishedAt = \"2013-11-18\"\n\n[[netflix]]\nid = \"https://netflixtechblog.com/introducing-safetest-a-novel-approach-to-front-end-testing-37f9f88c152d\"\ntitle = \"Introducing SafeTest: A Novel Approach to Front End Testing\"\npublishedAt = \"2024-02-13\"\n\n[[netflix]]\nid = \"https://medium.com/dev-channel/a-netflix-web-performance-case-study-c0bcde26a9d9\"\ntitle = \"A Netflix Web Performance Case Study\"\npublishedAt = \"2018-11-05\"\n\n[[notion]]\nid = \"https://www.notion.so/blog/migrating-notion-marketing-to-next-js\"\ntitle = \"Migrating Notion's marketing site to Next.js\"\npublishedAt = \"2021-08-12\"\n\n[[notion]]\nid = \"https://www.notion.com/blog/how-we-sped-up-notion-in-the-browser-with-wasm-sqlite\"\ntitle = \"How we sped up Notion in the browser with WASM SQLite\"\npublishedAt = \"2024-07-10\"\n\n[[npm]]\nid = \"http://blog.npmjs.org/post/172567815935/re-inventing-npmjscom\"\ntitle = \"Re-inventing npmjs.com\"\npublishedAt = \"2018-04-03\"\n\n[[npm]]\nid = \"https://blog.npmjs.org/post/175311966445/javascript-usage-by-industry\"\ntitle = \"JavaScript Usage by Industry\"\npublishedAt = \"2018-06-27\"\n\n[[okgrow]]\nid = \"https://web.archive.org/web/20191002194257/https://www.okgrow.com/posts/flow-router-migration-guide\"\ntitle = \"Migrating from Iron Router to FlowRouter (with Blaze)\"\npublishedAt = \"2015-09-17\"\n\n[[okgrow]]\nid = \"https://web.archive.org/web/20191003010638/https://www.okgrow.com/posts/where-does-redux-fit-in-meteor\"\ntitle = \"Where does Redux fit in Meteor?\"\npublishedAt = \"2016-07-15\"\n\n[[okgrow]]\nid = \"https://blog.meteor.com/real-world-unit-tests-with-meteor-and-jest-3d557e84e84a\"\ntitle = \"Real-world Unit Testing with Meteor and Jest\"\npublishedAt = \"2017-10-17\"\n\n[[oyo]]\nid = \"https://medium.com/oyotech/oyo-on-a-user-experience-quest-with-amp-cff515cf849e\"\ntitle = \"OYO on a User Experience Quest with AMP ⚡\"\npublishedAt = \"2018-01-11\"\n\n[[oyo]]\nid = \"https://medium.com/oyotech/how-brotli-compression-gave-us-37-latency-improvement-14d41e50fee4\"\ntitle = \"Brotli vs Gzip Compression. How we improved our latency by 37%\"\npublishedAt = \"2018-06-29\"\n\n[[oyo]]\nid = \"https://medium.com/oyotech/amp-for-email-making-interactive-and-dynamic-email-experiences-at-oyo-ed7a6d8754b3\"\ntitle = \"AMP for Email - Interactive and Dynamic Email Experiences at OYO\"\npublishedAt = \"2019-03-26\"\n\n[[oyo]]\nid = \"https://medium.com/oyotech/shipping-es6-in-browsers-without-polyfill-90d1fb440a55\"\ntitle = \"Shipping ES6 in browsers without Polyfill\"\npublishedAt = \"2019-04-17\"\n\n[[oyo]]\nid = \"https://medium.com/oyotech/implementing-signed-exchange-for-better-amp-urls-38abd64c6766\"\ntitle = \"Signed-Exchange: Solving the AMP URLs Display Problem\"\npublishedAt = \"2019-05-07\"\n\n[[oyo]]\nid = \"https://medium.com/oyotech/building-chrome-extension-with-reactjs-beginners-guide-ca44acdf9ffc\"\ntitle = \"Building Chrome Extension with ReactJs: Beginner’s Guide\"\npublishedAt = \"2019-05-13\"\n\n[[oyo]]\nid = \"https://medium.com/oyotech/a-complete-guide-to-trusted-web-activity-twa-oyo-case-study-3dd327d7afc5\"\ntitle = \"A complete implementation guide to Trusted Web Activity(TWA)- OYO Lite\"\npublishedAt = \"2019-11-07\"\n\n[[oyo]]\nid = \"https://tech.oyorooms.com/migrating-to-webpack-5-to-improve-build-time-and-reduce-chunk-sizes-50486918d348\"\ntitle = \"Migrating to webpack 5 to improve build time and reduce chunk sizes\"\npublishedAt = \"2021-06-30\"\n\n[[oyster]]\nid = \"https://web.archive.org/web/20230927214246/http://tech.oyster.com/oyster-shots-on-the-front-end/\"\ntitle = \"Oyster Shots on the Front End\"\npublishedAt = \"2011-07-29\"\n\n[[oyster]]\nid = \"https://web.archive.org/web/20230131055805/http://tech.oyster.com/using-react-and-jquery-together/\"\ntitle = \"Using React and jQuery Together\"\npublishedAt = \"2016-03-22\"\n\n[[palantir]]\nid = \"https://medium.com/palantir/scaling-product-design-with-blueprint-25492827bb4a\"\ntitle = \"Scaling product design with Blueprint\"\npublishedAt = \"2017-01-06\"\n\n[[palantir]]\nid = \"https://medium.com/palantir/tslint-in-2019-1a144c2317a9\"\ntitle = \"TSLint in 2019\"\npublishedAt = \"2019-02-19\"\n\n[[paypal]]\nid = \"https://medium.com/@bluepnume/sane-scalable-angular-apps-are-tricky-but-not-impossible-lessons-learned-from-paypal-checkout-c5320558d4ef\"\ntitle = \"Sane, scalable Angular apps are tricky, but not impossible. Lessons learned from PayPal Checkout\"\npublishedAt = \"2015-09-26\"\n\n[[paypal]]\nid = \"https://medium.com/@bluepnume/how-we-manage-sane-tagging-releasing-and-shrink-wrapping-for-paypal-checkout-d1e37f20533a\"\ntitle = \"Auto-shrink-wrapping in PayPal Checkout, and how it’s saved us more than once\"\npublishedAt = \"2016-02-10\"\n\n[[paypal]]\nid = \"https://medium.com/@bluepnume/dependency-injection-in-angular-isn-t-worth-it-more-lessons-learned-from-scaling-paypal-checkout-2189ec9c21a0\"\ntitle = \"Dependency injection in Angular isn’t worth it. More lessons learned from scaling PayPal Checkout\"\npublishedAt = \"2016-04-03\"\n\n[[paypal]]\nid = \"https://medium.com/@bluepnume/less-is-more-reducing-thousands-of-paypal-buttons-into-a-single-iframe-using-xcomponent-d902d71d8875\"\ntitle = \"Less is more: reducing thousands of PayPal buttons into a single iframe, using zoid\"\npublishedAt = \"2017-03-17\"\n\n[[paypal]]\nid = \"https://medium.com/@bluepnume/safaris-new-tracking-rules-and-enabling-cross-domain-data-storage-85241eea7483\"\ntitle = \"Safari’s new third party tracking rules, and enabling cross-domain data storage\"\npublishedAt = \"2017-08-30\"\n\n[[paypal]]\nid = \"https://medium.com/@bluepnume/reinventing-cross-origin-requests-without-cors-b9c4cb645376\"\ntitle = \"Reinventing cross-origin requests, without CORS\"\npublishedAt = \"2017-09-06\"\n\n[[paypal]]\nid = \"https://medium.com/@bluepnume/introducing-paypals-open-source-cross-domain-javascript-suite-95f991b2731d\"\ntitle = \"Introducing PayPal’s open-source cross-domain javascript suite\"\npublishedAt = \"2017-10-16\"\n\n[[paypal]]\nid = \"https://medium.com/paypal-engineering/graphql-a-success-story-for-paypal-checkout-3482f724fb53\"\ntitle = \"GraphQL: A success story for PayPal Checkout\"\npublishedAt = \"2018-10-17\"\n\n[[paypal]]\nid = \"https://medium.com/paypal-engineering/why-every-new-web-app-at-paypal-starts-with-typescript-9d1acc07c839\"\ntitle = \"Why every new web app at PayPal starts with TypeScript\"\npublishedAt = \"2019-01-21\"\n\n[[paypal]]\nid = \"https://medium.com/paypal-engineering/scaling-graphql-at-paypal-b5b5ac098810\"\ntitle = \"Scaling GraphQL at PayPal\"\npublishedAt = \"2019-10-30\"\n\n[[paypal]]\nid = \"https://medium.com/paypal-tech/reusing-ui-components-at-enterprise-level-a7df1ea1f8dd\"\ntitle = \"Sharing UI Components at an Enterprise Level\"\npublishedAt = \"2020-06-02\"\n\n[[paypal]]\nid = \"https://medium.com/paypal-engineering/how-micro-frontend-has-changed-our-team-dynamic-ba2f01597f48\"\ntitle = \"How Micro Frontend Has Changed Our Team Dynamic\"\npublishedAt = \"2020-08-10\"\n\n[[paypal]]\nid = \"https://medium.com/paypal-tech/graphql-at-paypal-an-adoption-story-b7e01175f2b7\"\ntitle = \"GraphQL at PayPal: An Adoption Story\"\npublishedAt = \"2021-09-01\"\n\n[[pinafore]]\nid = \"https://nolanlawson.com/2018/04/09/introducing-pinafore-for-mastodon\"\ntitle = \"Introducing Pinafore for Mastodon\"\npublishedAt = \"2018-04-09\"\n\n[[pinafore]]\nid = \"https://nolanlawson.com/2018/11/18/scrolling-the-main-document-is-better-for-performance-accessibility-and-usability\"\ntitle = \"Scrolling the main document is better for performance, accessibility, and usability\"\npublishedAt = \"2018-11-18\"\n\n[[pinafore]]\nid = \"https://nolanlawson.com/2019/02/10/building-a-modern-carousel-with-css-scroll-snap-smooth-scrolling-and-pinch-zoom\"\ntitle = \"Building a modern carousel with CSS scroll snap, smooth scrolling, and pinch-zoom\"\npublishedAt = \"2019-02-10\"\n\n[[pinafore]]\nid = \"https://nolanlawson.com/2019/06/02/one-year-of-pinafore\"\ntitle = \"One year of Pinafore\"\npublishedAt = \"2019-06-02\"\n\n[[pinafore]]\nid = \"https://nolanlawson.com/2019/09/22/the-joy-and-challenge-of-developing-for-kaios\"\ntitle = \"The joy and challenge of developing for KaiOS\"\npublishedAt = \"2019-09-22\"\n\n[[pinafore]]\nid = \"https://nolanlawson.com/2019/11/05/what-ive-learned-about-accessibility-in-spas\"\ntitle = \"What I’ve learned about accessibility in SPAs\"\npublishedAt = \"2019-11-05\"\n\n[[pinterest]]\nid = \"https://www.smashingmagazine.com/2013/06/pinterest-paint-performance-case-study/\"\ntitle = \"Gone In 60 Frames Per Second: A Pinterest Paint Performance Case Study\"\npublishedAt = \"2013-06-10\"\n\n[[pinterest]]\nid = \"https://medium.com/@Pinterest_Engineering/demystifying-seo-with-experiments-a183b325cf4c\"\ntitle = \"Demystifying SEO with experiments\"\npublishedAt = \"2015-01-27\"\n\n[[pinterest]]\nid = \"https://medium.com/@Pinterest_Engineering/how-we-made-javascript-testing-15x-faster-5ba35b5d3947\"\ntitle = \"How we made JavaScript testing 15x faster\"\npublishedAt = \"2015-02-03\"\n\n[[pinterest]]\nid = \"https://medium.com/@Pinterest_Engineering/making-pinterest-https-637ec925a8ad\"\ntitle = \"Making Pinterest HTTPS\"\npublishedAt = \"2015-03-13\"\n\n[[pinterest]]\nid = \"https://medium.com/@Pinterest_Engineering/how-we-switched-our-template-rendering-engine-to-react-a799a3d540b0\"\ntitle = \"How we switched our template rendering engine to React\"\npublishedAt = \"2016-11-18\"\n\n[[pinterest]]\nid = \"https://medium.com/@Pinterest_Engineering/introducing-bonsai-an-open-source-webpack-analyzer-6bdfe22f8984\"\ntitle = \"Introducing Bonsai: an open source Webpack analyzer\"\npublishedAt = \"2017-06-02\"\n\n[[pinterest]]\nid = \"https://medium.com/@Pinterest_Engineering/migrating-pinterest-profiles-to-react-479f4f7306aa\"\ntitle = \"Migrating Pinterest profiles to React\"\npublishedAt = \"2016-09-23\"\n\n[[pinterest]]\nid = \"https://medium.com/dev-channel/a-pinterest-progressive-web-app-performance-case-study-3bd6ed2e6154\"\ntitle = \"A Pinterest Progressive Web App Performance Case Study\"\npublishedAt = \"2017-11-30\"\n\n[[pinterest]]\nid = \"https://medium.com/@Pinterest_Engineering/supporting-react-native-at-pinterest-f8c2233f90e6\"\ntitle = \"Supporting React Native at Pinterest\"\npublishedAt = \"2018-05-10\"\n\n[[pinterest]]\nid = \"https://medium.com/@Pinterest_Engineering/a-one-year-pwa-retrospective-f4a2f4129e05\"\ntitle = \"A one year PWA retrospective\"\npublishedAt = \"2018-07-20\"\n\n[[pivotaltracker]]\nid = \"https://www.pivotaltracker.com/blog/Elm-pivotal-tracker/\"\ntitle = \"Using Elm in Production at Pivotal Tracker\"\npublishedAt = \"2017-01-31\"\n\n[[pivotaltracker]]\nid = \"https://www.pivotaltracker.com/blog/improving-accessibility-in-pivotal-tracker\"\ntitle = \"Improving Accessibility in Pivotal Tracker\"\npublishedAt = \"2018-02-01\"\n\n[[plaid]]\nid = \"https://blog.plaid.com/securing-webviews-with-chrome-custom-tabs\"\ntitle = \"Securing WebViews with Chrome Custom Tabs\"\npublishedAt = \"2020-04-09\"\n\n[[producthunt]]\nid = \"https://youtu.be/F38nRMktS9Q\"\ntitle = \"React @ Product Hunt\"\npublishedAt = \"2017-05-30\"\n\n[[producthunt]]\nid = \"https://www.youtube.com/watch?v=H0YCeHeHbr0\"\ntitle = \"GraphQL @ Product Hunt\"\npublishedAt = \"2017-11-02\"\n\n[[proton]]\nid = \"https://www.smashingmagazine.com/2022/12/deploying-css-logical-properties-on-web-apps/\"\ntitle = \"Deploying CSS Logical Properties On Web Apps\"\npublishedAt = \"2022-12-23\"\n\n[[quizlet]]\nid = \"https://medium.com/tech-quizlet/smooth-game-animations-in-react-df43ece916c8\"\ntitle = \"Smooth Game Animations in React\"\npublishedAt = \"2016-02-18\"\n\n[[quizlet]]\nid = \"https://medium.com/tech-quizlet/launching-a-successful-redesign-for-20-million-students-2f4c4b518b6e\"\ntitle = \"Launching A Successful Redesign For 20 Million Students\"\npublishedAt = \"2017-06-13\"\n\n[[quizlet]]\nid = \"https://medium.com/tech-quizlet/cypress-the-future-of-end-to-end-testing-for-web-applications-8ee108c5b255\"\ntitle = \"Cypress: The future of end-to-end testing for web applications\"\npublishedAt = \"2018-02-08\"\n\n[[quizlet]]\nid = \"https://medium.com/tech-quizlet/now-or-never-migrating-300k-loc-from-flow-to-typescript-at-quizlet-d3bae5830a1\"\ntitle = \"Now or Never: Migrating 300k LOC from Flow to TypeScript at Quizlet\"\npublishedAt = \"2019-06-18\"\n\n[[quora]]\nid = \"https://www.quora.com/q/quoraengineering/Faster-Paint-Times\"\ntitle = \"Faster Paint Times\"\npublishedAt = \"2016-08-18\"\n\n[[quora]]\nid = \"https://www.quora.com/q/quoraengineering/Choosing-Quora-s-GraphQL-client\"\ntitle = \"Choosing Quora’s GraphQL client\"\npublishedAt = \"2020-07-22\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/loading-google-maps-with-requirejs/\"\ntitle = \"Loading Google Maps with RequireJS\"\npublishedAt = \"2012-10-15\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/are-you-responsive-to-your-users/\"\ntitle = \"Are you responsive to your users?\"\npublishedAt = \"2013-07-30\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/playing-with-flux/\"\ntitle = \"Playing with Flux\"\npublishedAt = \"2015-07-03\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/painless-javascript-testing-surely-you-jest/\"\ntitle = \"Painless JavaScript testing? Surely you Jest!\"\npublishedAt = \"2015-10-30\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/checking-deployments-visually-with-imagemagick/\"\ntitle = \"Automated visual checking of deployments with ImageMagick\"\npublishedAt = \"2016-01-22\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/reactjs-real-world-examples-of-higher-order-components/\"\ntitle = \"ReactJS – Real World Examples of Higher-Order Components\"\npublishedAt = \"2016-05-06\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/singletons-suck-aka-flux-to-redux/\"\ntitle = \"Singletons Suck (aka Flux to Redux)\"\npublishedAt = \"2016-08-17\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/reactjs-performance-debugging-aka-the-magic-of-reselect-selectors/\"\ntitle = \"ReactJS Performance Debugging (aka The Magic of Reselect Selectors)\"\npublishedAt = \"2016-09-09\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/functions-as-child-components-and-higher-order-components/\"\ntitle = \"Functions as Child Components and Higher Order Components\"\npublishedAt = \"2016-10-07\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/my-journey-in-a-ui-project-aka-front-end-is-the-new-back-end/\"\ntitle = \"My Journey in a UI Project (aka front-end is the new back-end)\"\npublishedAt = \"2017-06-23\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/static-assets-in-an-eventually-consistent-webapp-deployment/\"\ntitle = \"Static assets in an eventually consistent webapp deployment\"\npublishedAt = \"2017-08-11\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/measure-core-web-vitals-score-during-development/\"\ntitle = \"Measure Core Web Vitals Score During Development\"\npublishedAt = \"2021-04-23\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/the-value-of-reas-design-system/\"\ntitle = \"Saving 300k hours for teams with REA’s design system\"\npublishedAt = \"2023-01-23\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introduction-to-fp-ts-part-1/\"\ntitle = \"Introduction to fp-ts – Part 1\"\npublishedAt = \"2023-04-05\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introduction-to-fp-ts-part-2/\"\ntitle = \"Introduction to fp-ts – Part 2\"\npublishedAt = \"2023-04-26\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introducing-argonaut-part-one/\"\ntitle = \"Introducing Argonaut – Part One. The micro-frontend platform for building web experiences at REA Group\"\npublishedAt = \"2023-09-05T00:00:00.000Z\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introducing-argonaut-part-two/\"\ntitle = \"Introducing Argonaut – Part Two. A technical overview\"\npublishedAt = \"2023-09-05T00:00:01.000Z\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introducing-argonaut-part-three/\"\ntitle = \"Introducing Argonaut – Part Three. A deep dive into rendering a micro-frontend\"\npublishedAt = \"2023-09-05T00:00:02.000Z\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introducing-argonaut-part-four/\"\ntitle = \"Introducing Argonaut – Part Four. The developer experience\"\npublishedAt = \"2024-07-11T00:00:00.000Z\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introducing-argonaut-part-five/\"\ntitle = \"Introducing Argonaut – Part Five. Resilience\"\npublishedAt = \"2024-07-11T00:00:01.000Z\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introducing-argonaut-part-six/\"\ntitle = \"Introducing Argonaut: Part Six. Reflections\"\npublishedAt = \"2024-07-11T00:00:02.000Z\"\n\n[[reagroup]]\nid = \"https://www.rea-group.com/about-us/news-and-insights/blog/introducing-argonaut-part-seven/\"\ntitle = \"Introducing Argonaut: Part Seven. The future\"\npublishedAt = \"2024-07-11T00:00:03.000Z\"\n\n[[reaktor]]\nid = \"https://www.reaktor.com/blog/refactoring-30000-lines-js-types/\"\ntitle = \"Refactoring 30000 lines of JS with types\"\npublishedAt = \"2017-01-24\"\n\n[[reddit]]\nid = \"https://redditinc.com/blog/how-we-built-rplace\"\ntitle = \"How We Built r/Place\"\npublishedAt = \"2017-04-13\"\n\n[[reddit]]\nid = \"https://web.archive.org/web/20210303213659/https://redditblog.com/2017/06/30/why-we-chose-typescript//\"\ntitle = \"Why We Chose Typescript\"\npublishedAt = \"2017-06-30\"\n\n[[redmart]]\nid = \"https://web.archive.org/web/20200117171244/http://geeks.redmart.com/2015/04/22/angular-the-hard-way-1/\"\ntitle = \"Angular The Hard Way #1 Organise and manage domain data\"\npublishedAt = \"2015-04-22\"\n\n[[redmart]]\nid = \"https://medium.com/redmart-engineering/redmarts-experience-with-pwa-6dfbbb482912\"\ntitle = \"RedMart's experience with PWA\"\npublishedAt = \"2018-10-25\"\n\n[[redmart]]\nid = \"https://medium.com/redmart-engineering/how-we-use-storybook-for-documentation-and-code-reviews-550a522543f1\"\ntitle = \"How we use Storybook for documentation and code reviews\"\npublishedAt = \"2018-11-14\"\n\n[[replit]]\nid = \"https://repl.it/site/blog/infinite-loops\"\ntitle = \"Infinite Loops\"\npublishedAt = \"2017-01-23\"\n\n[[replit]]\nid = \"https://repl.it/site/blog/ide\"\ntitle = \"Modular, fast, small: how we built a server-rendered IDE\"\npublishedAt = \"2018-02-14\"\n\n[[revolut]]\nid = \"https://medium.com/revolut/how-we-learned-to-stop-worrying-and-love-graphql-80a5f83f36d9\"\ntitle = \"How we learned to stop worrying and love GraphQL\"\npublishedAt = \"2019-08-08\"\n\n[[revolut]]\nid = \"https://medium.com/revolut/the-fundamentals-of-web-development-at-revolut-bb5e2888e84f\"\ntitle = \"The fundamentals of web development at Revolut\"\npublishedAt = \"2021-01-04\"\n\n[[revolut]]\nid = \"https://medium.com/revolut/canvas-based-javascript-blur-detection-b92ab1075acf\"\ntitle = \"Canvas-based JavaScript Blur detection\"\npublishedAt = \"2024-01-22\"\n\n[[revolut]]\nid = \"https://medium.com/revolut/building-the-web-that-moves-money-inside-web-engineering-at-revolut-3dd4fb78fbfa\"\ntitle = \"Building the Web that Moves Money: inside Web engineering at Revolut\"\npublishedAt = \"2025-10-16\"\n\n[[roompact]]\nid = \"https://charukiewi.cz/posts/elm/\"\ntitle = \"Elm In Production: 25,000 Lines Later\"\npublishedAt = \"2017-07-30\"\n\n[[safetyculture]]\nid = \"https://medium.com/safetycultureengineering/why-we-moved-our-graphql-server-from-node-js-to-golang-645b00571535\"\ntitle = \"Why we moved our graphQL server from Node.js to Golang\"\npublishedAt = \"2018-06-27\"\n\n[[scratch]]\nid = \"https://bocoup.com/blog/porting-scratch-from-flash-to-javascript-performance-interoperability-and-extensions\"\ntitle = \"Porting Scratch from Flash to JavaScript: Performance, Interoperability and Extensions\"\npublishedAt = \"2019-02-28\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/building-sentry-source-maps-and-their-problems\"\ntitle = \"Building Sentry: Source maps and their problems\"\npublishedAt = \"2019-07-16\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/slow-and-steady-converting-sentrys-entire-frontend-to-typescript\"\ntitle = \"Slow and Steady: Converting Sentry’s Entire Frontend to TypeScript\"\npublishedAt = \"2021-04-12\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/js-browser-sdk-bundle-size-matters\"\ntitle = \"How we trimmed the Sentry JavaScript SDK file size by 20%\"\npublishedAt = \"2022-02-28\"\n\n[[sentry]]\nid = \"https://blog.sentry.io/2022/07/19/javascript-sdk-package-reduced\"\ntitle = \"JavaScript SDK “Package Size is Massive” - So we reduced it by 29%\"\npublishedAt = \"2022-07-19\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/understanding-the-performance-impact-of-generated-javascript\"\ntitle = \"Understanding the Performance Impact of Generated JavaScript\"\npublishedAt = \"2022-07-22\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/how-we-made-javascript-stack-traces-awesome\"\ntitle = \"How We Made JavaScript Stack Traces Awesome\"\npublishedAt = \"2022-11-30\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/sentrys-frontend-tests-migrating-from-enzyme-to-react-testing-library\"\ntitle = \"Sentry’s Frontend Tests: Migrating from Enzyme to React Testing Library\"\npublishedAt = \"2023-02-23\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/reduce-ci-time-with-nx-caching\"\ntitle = \"How we reduced CI time by 35% with Nx Caching\"\npublishedAt = \"2023-03-31\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/measuring-session-replay-overhead\"\ntitle = \"Measuring Session Replay Overhead\"\npublishedAt = \"2023-07-05\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/session-replay-sdk-bundle-size-optimizations\"\ntitle = \"How We Reduced Replay SDK Bundle Size by 35%\"\npublishedAt = \"2023-11-14\"\n\n[[shopify]]\nid = \"https://shopify.engineering/how-17-lines-of-code-improved-shopify-com-loading-by-50\"\ntitle = \"How 17 lines of code improved shopify.com loading by 50%\"\npublishedAt = \"2017-05-24\"\n\n[[shopify]]\nid = \"https://shopify.engineering/building-shopify-mobile-with-native-and-web-technology\"\ntitle = \"Building Shopify mobile with native and web technology\"\npublishedAt = \"2017-09-29\"\n\n[[shopify]]\nid = \"https://gist.github.com/swalkinshaw/3a33e2d292b60e68fcebe12b62bbb3e2\"\ntitle = \"Designing a GraphQL API\"\npublishedAt = \"2018-06-18\"\n\n[[shopify]]\nid = \"https://shopify.engineering/improve-ui-performance-understanding-your-user\"\ntitle = \"Want to Improve UI Performance? Start by Understanding Your User\"\npublishedAt = \"2019-10-20\"\n\n[[shopify]]\nid = \"https://shopify.engineering/how-we-built-hydrogen\"\ntitle = \"How We Built Hydrogen: A React Framework for Building Custom Storefronts\"\npublishedAt = \"2022-06-22\"\n\n[[shopify]]\nid = \"https://shopify.engineering/internationalization-i18n-best-practices-front-end-developers\"\ntitle = \"Lessons From Linguistics: i18n Best Practices for Front-End Developers\"\npublishedAt = \"2023-03-16\"\n\n[[shopify]]\nid = \"https://shopify.engineering/supporting-passkeys-in-shop-authentication-flows\"\ntitle = \"Supporting Passkeys in Shop's Authentication Flows\"\npublishedAt = \"2023-03-24\"\n\n[[shopify]]\nid = \"https://shopify.engineering/react-redux-toolkit-migration\"\ntitle = \"How Migrating from Vanilla Redux to Redux Toolkit Improved State Management in Shopify POS\"\npublishedAt = \"2023-03-31\"\n\n[[shopify]]\nid = \"https://shopify.engineering/building-a-shopifyql-code-editor\"\ntitle = \"Building a ShopifyQL Code Editor\"\npublishedAt = \"2023-09-11\"\n\n[[shopify]]\nid = \"https://shopify.engineering/shipping-support-for-module-script-integrity-in-chrome-safari\"\ntitle = \"Shipping support for module script integrity in Chrome & Safari\"\npublishedAt = \"2024-08-02\"\n\n[[shopify]]\nid = \"https://shopify.engineering/mobilebridge-native-webviews\"\ntitle = \"Mobile Bridge: Making WebViews Feel Native\"\npublishedAt = \"2025-04-25\"\n\n[[shopify]]\nid = \"https://shopify.engineering/resilient-import-maps\"\ntitle = \"Resilient Import Maps - Better Theme Development and Beyond\"\npublishedAt = \"2025-05-28\"\n\n[[shopify]]\nid = \"https://shopify.engineering/remixing-admin\"\ntitle = \"Remixing Shopify's Admin: How We Made It 30% Faster and AI-Ready\"\npublishedAt = \"2025-06-30\"\n\n[[skillshare]]\nid = \"https://medium.com/skillshare-team/how-we-ditched-redux-for-mobx-a05442279a2b\"\ntitle = \"How We Ditched Redux for MobX\"\npublishedAt = \"2018-07-02\"\n\n[[slack]]\nid = \"https://slack.engineering/build-better-software-to-build-software-better/\"\ntitle = \"Build better software to build software better\"\npublishedAt = \"2025-11-06\"\n\n[[slack]]\nid = \"https://slack.engineering/speedup-e2e-testing/\"\ntitle = \"Optimizing Our E2E Pipeline\"\npublishedAt = \"2025-04-14\"\n\n[[slack]]\nid = \"https://slack.engineering/reducing-slacks-memory-footprint-4480fec7e8eb\"\ntitle = \"Reducing Slack's memory footprint\"\npublishedAt = \"2017-03-03\"\n\n[[slack]]\nid = \"https://slack.engineering/typescript-at-slack-a81307fa288d\"\ntitle = \"TypeScript at Slack\"\npublishedAt = \"2017-04-11\"\n\n[[slack]]\nid = \"https://slack.engineering/rebuilding-slacks-emoji-picker-in-react-bfbd8ce6fbfe\"\ntitle = \"Rebuilding Slack’s Emoji Picker in React\"\npublishedAt = \"2017-05-23\"\n\n[[slack]]\nid = \"https://slack.engineering/getting-to-slack-faster-with-incremental-boot-ff063c9222e4\"\ntitle = \"Getting to Slack faster with incremental boot\"\npublishedAt = \"2016-07-05\"\n\n[[slack]]\nid = \"https://slack.engineering/localizing-slack-680c4bc7f45a\"\ntitle = \"Localizing Slack\"\npublishedAt = \"2017-09-12\"\n\n[[slack]]\nid = \"https://slack.engineering/rebuilding-slack-com-b124c405c193\"\ntitle = \"Rebuilding slack.com\"\npublishedAt = \"2017-10-11\"\n\n[[slack]]\nid = \"https://slack.engineering/keep-webpack-fast-a-field-guide-for-better-build-performance-f56a5995e8f1\"\ntitle = \"Keep webpack Fast: A Field Guide for Better Build Performance\"\npublishedAt = \"2018-01-17\"\n\n[[slack]]\nid = \"https://slack.engineering/rebuilding-slack-on-the-desktop-308d6fe94ae4\"\ntitle = \"When a rewrite isn’t: rebuilding Slack on the desktop\"\npublishedAt = \"2019-07-22\"\n\n[[slack]]\nid = \"https://slack.engineering/service-workers-at-slack-our-quest-for-faster-boot-times-and-offline-support-3492cf79c88\"\ntitle = \"Service Workers at Slack: Our Quest for Faster Boot Times and Offline Support\"\npublishedAt = \"2019-08-29\"\n\n[[slack]]\nid = \"https://slack.engineering/the-gradual-design-system-how-we-built-slack-kit-8a2830484259\"\ntitle = \"The Gradual Design System: How We Built Slack Kit\"\npublishedAt = \"2019-09-12\"\n\n[[slack]]\nid = \"https://slack.engineering/building-dark-mode-on-desktop-811508b5d15f\"\ntitle = \"Building Dark Mode on Desktop\"\npublishedAt = \"2019-09-24\"\n\n[[slack]]\nid = \"https://slack.engineering/gantry-slacks-fast-booting-frontend-framework-fb70c8eed2fd\"\ntitle = \"Gantry: Slack’s Fast-booting Frontend Framework\"\npublishedAt = \"2019-10-23\"\n\n[[slack]]\nid = \"https://slack.engineering/a-day-in-the-life-of-a-frontend-product-engineer-at-slack-27375455cfaa\"\ntitle = \"A Day in the Life of a Frontend Product Engineer at Slack\"\npublishedAt = \"2020-02-05\"\n\n[[slack]]\nid = \"https://increment.com/frontend/case-study-web-components-for-screen-readers/\"\ntitle = \"How Slack changed the way it designs accessible frontend components\"\npublishedAt = \"May 2020\"\n\n[[slack]]\nid = \"https://slack.engineering/the-unsuspecting-beauty-complexity-of-web-forms/\"\ntitle = \"The Unsuspecting Beauty & Complexity of Web Forms\"\npublishedAt = \"2020-09-15\"\n\n[[slack]]\nid = \"https://slack.engineering/creating-a-react-analytics-logging-library/\"\ntitle = \"Creating a React Analytics Logging Library: Part 1\"\npublishedAt = \"2020-11-07\"\n\n[[slack]]\nid = \"https://slack.engineering/creating-a-react-analytics-logging-library-2/\"\ntitle = \"Creating a React Analytics Logging Library: Part 2\"\npublishedAt = \"2020-12-16\"\n\n[[slack]]\nid = \"https://slack.engineering/managing-focus-transitions-in-slack\"\ntitle = \"Managing Focus Transitions in Slack\"\npublishedAt = \"2021-07-13\"\n\n[[slack]]\nid = \"https://slack.engineering/balancing-old-tricks-with-new-feats-ai-powered-conversion-from-enzyme-to-react-testing-library-at-slack/\"\ntitle = \"Balancing Old Tricks with New Feats: AI-Powered Conversion From Enzyme to React Testing Library at Slack\"\npublishedAt = \"2024-10-03\"\n\n[[slack]]\nid = \"https://slack.engineering/building-custom-animations-in-the-workflow-builder/\"\ntitle = \"Building Custom Animations in the Workflow Builder\"\npublishedAt = \"2023-12-05\"\n\n[[slack]]\nid = \"https://slack.engineering/building-background-effects-for-clips/\"\ntitle = \"Building Background Effects for Clips\"\npublishedAt = \"2022-06-07\"\n\n[[slack]]\nid = \"https://slack.engineering/automated-accessibility-testing-at-slack/\"\ntitle = \"Automated Accessibility Testing at Slack\"\npublishedAt = \"2025-01-08\"\n\n[[snipcart]]\nid = \"https://snipcart.com/blog/progressive-migration-backbone-vuejs-refactoring\"\ntitle = \"The Story of our Progressive Migration from Backbone to Vue.js\"\npublishedAt = \"2017-07-20\"\n\n[[soundcloud]]\nid = \"https://developers.soundcloud.com/blog/front-end-javascript-bug-tracking\"\ntitle = \"Front-end JavaScript bug tracking\"\npublishedAt = \"2011-11-21\"\n\n[[soundcloud]]\nid = \"https://developers.soundcloud.com/blog/building-the-next-soundcloud\"\ntitle = \"Building The Next SoundCloud\"\npublishedAt = \"2012-06-14\"\n\n[[soundcloud]]\nid = \"https://developers.soundcloud.com/blog/smooth-image-loading-by-upscaling\"\ntitle = \"Smooth image loading by upscaling\"\npublishedAt = \"2014-02-20\"\n\n[[soundcloud]]\nid = \"https://developers.soundcloud.com/blog/react-native-at-soundcloud\"\ntitle = \"React Native at SoundCloud\"\npublishedAt = \"2016-08-03\"\n\n[[soundcloud]]\nid = \"https://developers.soundcloud.com/blog/garbage-collection-in-redux-applications\"\ntitle = \"Garbage Collection in Redux Applications\"\npublishedAt = \"2019-01-24\"\n\n[[soundcloud]]\nid = \"https://developers.soundcloud.com/blog/playback-on-web-at-soundcloud\"\ntitle = \"Playback on Web at SoundCloud\"\npublishedAt = \"2019-05-03\"\n\n[[soundcloud]]\nid = \"https://developers.soundcloud.com/blog/open-sourcing-intervene\"\ntitle = \"Open Sourcing Intervene\"\npublishedAt = \"2020-05-05\"\n\n[[spectrum]]\nid = \"https://mxstbr.com/thoughts/tech-choice-regrets-at-spectrum/\"\ntitle = \"Tech Choices I Regret at Spectrum\"\npublishedAt = \"2019-01-16\"\n\n[[spotify]]\nid = \"https://medium.com/@activetheory/spotify-wrapped-2018-technical-case-study-5b7cfb7e9d3a\"\ntitle = \"Spotify Wrapped 2018 — Technical Case Study\"\npublishedAt = \"2018-12-18\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2019/03/building-spotifys-new-web-player/\"\ntitle = \"Building Spotify’s New Web Player\"\npublishedAt = \"2019-03-25\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2019/04/right-to-left-the-mirror-world/\"\ntitle = \"(Right to Left (The Mirror World\"\npublishedAt = \"2019-04-15\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2019/07/web-scripts-creating-npm-libraries-in-a-snap-at-spotify/\"\ntitle = \"web-scripts – creating NPM libraries in a snap at Spotify\"\npublishedAt = \"2019-07-03\"\n\n[[spotify]]\nid = \"https://spotify.design/article/reimagining-design-systems-at-spotify\"\ntitle = \"Reimagining Design Systems at Spotify\"\npublishedAt = \"2019-12-16\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2019/09/techbytes-typescript-from-assess-to-use/\"\ntitle = \"Techbytes: TypeScript – from “Assess” to “Use”\"\npublishedAt = \"2019-09-26\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2021/04/building-the-future-of-our-desktop-apps/\"\ntitle = \"Building the Future of Our Desktop Apps\"\npublishedAt = \"2021-04-07\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2021/04/customization-vs-configuration-in-evolving-design-systems/\"\ntitle = \"Customization vs. Configuration in Evolving Design Systems\"\npublishedAt = \"2021-04-28\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2022/09/from-development-to-real-users-how-to-create-a-web-performance-story/\"\ntitle = \"From Development to Real Users: How to Create a Web Performance Story\"\npublishedAt = \"2022-09-29\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2023/03/encore-x-accessibility-a-balancing-act/\"\ntitle = \"Encore x Accessibility: A Balancing Act\"\npublishedAt = \"2023-03-15\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2023/05/tv-spatial-navigation/\"\ntitle = \"TV Spatial Navigation\"\npublishedAt = \"2023-05-10\"\n\n[[spotify]]\nid = \"https://engineering.atspotify.com/2023/05/multiple-layers-of-abstraction-in-design-systems/\"\ntitle = \"Multiple Layers of Abstraction in Design Systems\"\npublishedAt = \"2023-05-25\"\n\n[[stackoverflow]]\nid = \"https://nickcraver.com/blog/2017/05/22/https-on-stack-overflow\"\ntitle = \"HTTPS on Stack Overflow: The End of a Long Road\"\npublishedAt = \"2017-05-22\"\n\n[[stackoverflow]]\nid = \"https://stackoverflow.blog/2020/03/31/building-dark-mode-on-stack-overflow/\"\ntitle = \"Building dark mode on Stack Overflow\"\npublishedAt = \"2020-03-31\"\n\n[[stripe]]\nid = \"https://stripe.com/blog/connect-front-end-experience\"\ntitle = \"Connect: behind the front-end experience\"\npublishedAt = \"2017-06-19\"\n\n[[stripe]]\nid = \"https://medium.freecodecamp.org/a-new-approach-to-mocking-graphql-data-1ef49de3d491\"\ntitle = \"A new approach to mocking GraphQL data: how we power React component tests and examples at Stripe\"\npublishedAt = \"2018-12-11\"\n\n[[stripe]]\nid = \"https://stripe.com/en-pt/blog/accessible-color-systems\"\ntitle = \"Designing accessible color systems\"\npublishedAt = \"2019-10-15\"\n\n[[stripe]]\nid = \"https://stripe.com/blog/globe\"\ntitle = \"To design and develop an interactive globe\"\npublishedAt = \"2020-09-01\"\n\n[[stripe]]\nid = \"https://stripe.com/blog/migrating-to-typescript\"\ntitle = \"Migrating millions of lines of code to TypeScript\"\npublishedAt = \"2022-05-20\"\n\n[[stripe]]\nid = \"https://stripe.com/blog/markdoc\"\ntitle = \"How Stripe builds interactive docs with Markdoc\"\npublishedAt = \"2022-09-13\"\n\n[[sumup]]\nid = \"https://medium.com/sumup-engineering/10-lessons-learned-building-sumups-design-system-577af292ae56\"\ntitle = \"10 lessons learned building SumUp’s design system\"\npublishedAt = \"2019-08-15\"\n\n[[superhuman]]\nid = \"https://blog.superhuman.com/how-to-build-a-remarkable-command-palette/\"\ntitle = \"How to build a remarkable command palette\"\npublishedAt = \"2021-10-12\"\n\n[[superhuman]]\nid = \"https://blog.superhuman.com/how-to-eliminate-regular-expression-denial-of-service/\"\ntitle = \"How to eliminate regular expression denial of service\"\npublishedAt = \"2020-02-19\"\n\n[[superhuman]]\nid = \"https://blog.superhuman.com/performance-metrics-for-blazingly-fast-web-apps/\"\ntitle = \"Performance metrics for blazingly fast web apps\"\npublishedAt = \"2019-09-24\"\n\n[[superhuman]]\nid = \"https://blog.superhuman.com/delightful-search-more-than-meets-the-eye-d3fa2e3ef3b6\"\ntitle = \"Delightful search: more than meets the eye\"\npublishedAt = \"2017-05-05\"\n\n[[takeshape]]\nid = \"https://www.takeshape.io/articles/why-we-switched-from-yarn-to-pnpm/\"\ntitle = \"Why we switched from Yarn to pnpm\"\npublishedAt = \"2020-06-09\"\n\n[[tailscale]]\nid = \"https://tailscale.com/blog/heart-of-dark-mode\"\ntitle = \"Heart of dark mode: done, and still in progress\"\npublishedAt = \"2024-08-29\"\n\n[[theguardian]]\nid = \"https://www.theguardian.com/info/developer-blog/2016/dec/18/what-we-learnt-from-our-mistakes-in-2016\"\ntitle = \"What we learnt from our mistakes in 2016\"\npublishedAt = \"2016-12-18\"\n\n[[theguardian]]\nid = \"https://www.theguardian.com/info/2019/apr/04/revisiting-the-rendering-tier\"\ntitle = \"Revisiting the rendering tier\"\npublishedAt = \"2019-04-04\"\n\n[[theguardian]]\nid = \"https://www.theguardian.com/info/2019/dec/08/migrating-the-guardian-website-to-react\"\ntitle = \"Migrating the Guardian website to React\"\npublishedAt = \"2019-12-08\"\n\n[[theguardian]]\nid = \"https://theguardian.engineering/blog/info-2019-dec-22-async-failure-handling-in-typescript.html\"\ntitle = \"Async Failure handling in Typescript\"\npublishedAt = \"2019-12-22\"\n\n[[theguardian]]\nid = \"https://theguardian.engineering/blog/info-2021-jan-26-how-we-made-typerighter-the-guardians-style-guide-checker.html\"\ntitle = \"How we made Typerighter, the Guardian's style guide checker\"\npublishedAt = \"2021-01-26\"\n\n[[theguardian]]\nid = \"https://theguardian.engineering/blog/info-2022-mar-25-react-islands-on-theguardiancom.html\"\ntitle = \"React islands on theguardian.com\"\npublishedAt = \"2022-03-25\"\n\n[[theguardian]]\nid = \"https://theguardian.engineering/blog/info-2022-oct-06-how-we-built-the-guardians-tor-onion-service.html\"\ntitle = \"How we built the Guardian's Tor Onion service\"\npublishedAt = \"2022-10-06\"\n\n[[theguardian]]\nid = \"https://theguardian.engineering/blog/info-2023-dec-11-making-typerighter-work-harder-engineering-blog.html\"\ntitle = \"Making Typerighter work harder\"\npublishedAt = \"2023-12-11\"\n\n[[theguardian]]\nid = \"https://theguardian.engineering/blog/info-article-2024-jul-26-parsing-the-merit-of-strictly-typed-json.html\"\ntitle = \"Parsing: the merit of strictly typed JSON\"\npublishedAt = \"2024-07-26\"\n\n[[theknotww]]\nid = \"https://tech.xogrp.com/rebuilding-the-guest-list-manager-with-react-mobx-at-the-knot-e34e32920571\"\ntitle = \"Rebuilding the Guest List Manager with React + MobX at The Knot\"\npublishedAt = \"2017-06-19\"\n\n[[theknotww]]\nid = \"https://tech.xogrp.com/react-native-the-knot-ca255494da79\"\ntitle = \"React Native @ The Knot\"\npublishedAt = \"2019-02-08\"\n\n[[theknotww]]\nid = \"https://tech.xogrp.com/react-native-at-the-knot-a-designers-perspective-d3d3fe41ada1\"\ntitle = \"React Native @ The Knot: A Designer’s Perspective\"\npublishedAt = \"2019-02-13\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/how-the-new-york-times-is-scaling-unit-test-coverage-using-ai-tools-fa796bf9b8d2\"\ntitle = \"How The New York Times is scaling Unit Test Coverage using AI Tools\"\npublishedAt = \"2026-01-13\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/the-technology-behind-the-nytimes-com-redesign-3d3d3da70b9c\"\ntitle = \"The Technology Behind the NYTimes.com Redesign\"\npublishedAt = \"2014-01-08\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/improving-article-accessibility-7bca8cf02b34\"\ntitle = \"Improving Article Accessibility\"\npublishedAt = \"2014-06-24\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/building-a-cross-platform-360-degree-video-experience-at-the-new-york-times-c35afa92a2e8\"\ntitle = \"Building a Cross Platform 360-degree Video Experience at nytimes\"\npublishedAt = \"2016-11-11\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/react-relay-and-graphql-under-the-hood-of-the-times-website-redesign-22fb62ea9764\"\ntitle = \"React, Relay and GraphQL: Under the Hood of The Times Website Redesign\"\npublishedAt = \"2017-06-30\"\n\n[[nytimes]]\nid = \"https://youtu.be/HlZ3ZecECOU\"\ntitle = \"GraphQL in real life\"\npublishedAt = \"2019-04-19\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/how-we-implemented-a-baseline-grid-using-css-cb13cac45201\"\ntitle = \"How We Implemented a Baseline Grid Using CSS\"\npublishedAt = \"2019-11-21\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/a-more-accessible-web-fa87592da6d2\"\ntitle = \"A More Accessible Web\"\npublishedAt = \"2021-02-25\"\n\n[[telegraph]]\nid = \"https://medium.com/the-telegraph-engineering/a-server-side-rendered-react-project-2fc7e75f4c57\"\ntitle = \"React Serverside rendering : build slicker apps with better SEO ranking\"\npublishedAt = \"2018-09-10\"\n\n[[telegraph]]\nid = \"https://medium.com/the-telegraph-engineering/improving-third-party-web-performance-at-the-telegraph-a0a1000be5\"\ntitle = \"Improving third-party web performance at The Telegraph\"\npublishedAt = \"2019-04-30\"\n\n[[telegraph]]\nid = \"https://web.dev/telegraph\"\ntitle = \"Improving Cumulative Layout Shift at Telegraph Media Group\"\npublishedAt = \"2021-06-14\"\n\n[[thetimescouk]]\nid = \"https://medium.com/swlh/building-the-ui-for-the-new-the-times-website-26dc4e6569e\"\ntitle = \"Building the UI for the new The Times website\"\npublishedAt = \"2016-03-30\"\n\n[[usdsgov]]\nid = \"https://medium.com/the-u-s-digital-service/building-forms-faster-on-vets-gov-d8619f4e9db\"\ntitle = \"Building Forms Faster on Vets.gov\"\npublishedAt = \"2017-06-02\"\n\n[[wsj]]\nid = \"https://matthewstrom.com/writing/wsj-accessibility.html\"\ntitle = \"Making WSJ.com more accessible\"\npublishedAt = \"2016-08-03\"\n\n[[thisalso]]\nid = \"https://medium.com/this-also/whitewater-9b47f1e32ffe\"\ntitle = \"Fixing HTML Video on Mobile\"\npublishedAt = \"2016-07-14\"\n\n[[thomasnet]]\nid = \"https://julian.is/article/css-grid-at-scale/\"\ntitle = \"How We Adopted CSS Grid at Scale\"\npublishedAt = \"2018-03-01\"\n\n[[thread]]\nid = \"https://medium.com/thread-engineering/dealing-with-legacy-code-in-react-18bc0c039e8b\"\ntitle = \"Dealing with legacy code in React\"\npublishedAt = \"2018-05-10\"\n\n[[thread]]\nid = \"https://medium.com/thread-engineering/searching-and-sorting-text-with-diacritical-marks-in-javascript-45afef20e7f2\"\ntitle = \"Searching and sorting text with diacritical marks in JavaScript\"\npublishedAt = \"2018-08-29\"\n\n[[tinder]]\nid = \"https://medium.com/@addyosmani/a-tinder-progressive-web-app-performance-case-study-78919d98ece0\"\ntitle = \"A Tinder Progressive Web App Performance Case Study\"\npublishedAt = \"2017-12-24\"\n\n[[tinder]]\nid = \"https://medium.com/@roderickhsiao/building-tinder-online-a447e6c0265e\"\ntitle = \"Building Tinder Online\"\npublishedAt = \"2018-02-09\"\n\n[[tines]]\nid = \"https://www.tines.com/blog/our-approach-to-css-and-how-we-chose-it\"\ntitle = \"Our approach to CSS and how we chose it\"\npublishedAt = \"2020-04-20\"\n\n[[tines]]\nid = \"https://www.tines.com/blog/understanding-why-our-build-got-15x-slower-with-webpack-5\"\ntitle = \"Understanding why our build got 15x slower with Webpack 5\"\npublishedAt = \"2021-11-17\"\n\n[[tines]]\nid = \"https://www.tines.com/blog/relay-fetching-data-in-parallel-with-multiple-queries/\"\ntitle = \"Relay: Fetching data in parallel with multiple queries\"\npublishedAt = \"2021-07-29\"\n\n[[tines]]\nid = \"https://www.tines.com/blog/using-backend-factories-during-frontend-testing/\"\ntitle = \"Using backend factories during frontend testing\"\npublishedAt = \"2021-04-21\"\n\n[[tiny]]\nid = \"https://www.tiny.cloud/blog/benefits-of-gradual-strong-typing-in-javascript/\"\ntitle = \"Benefits of gradual strong typing in JavaScript\"\npublishedAt = \"2019-01-25\"\n\n[[tiny]]\nid = \"https://www.tiny.cloud/blog/real-time-collaboration-ot-vs-crdt/\"\ntitle = \"To OT or CRDT, that is the question\"\npublishedAt = \"2020-01-13\"\n\n[[tiny]]\ntitle = \"Collaboration needs a clean Slate\"\nid = \"https://www.tiny.cloud/blog/real-time-collaborative-editing-slate-js/\"\npublishedAt = \"2020-02-20\"\n\n[[tiny]]\ntitle = \"A Tiny road to Reason\"\nid = \"https://www.tiny.cloud/blog/tinymce-reasonml/\"\npublishedAt = \"2020-09-21\"\n\n[[tiny]]\ntitle = \"Continuously refactoring 100000 lines of code\"\nid = \"https://www.tiny.cloud/blog/modern-javascript-refactoring-tinymce/\"\npublishedAt = \"2020-04-28\"\n\n[[tokopedia]]\nid = \"https://medium.com/tokopedia-engineering/a-tokopedia-mobile-web-performance-case-study-48ee5c6e4d5c\"\ntitle = \"A Tokopedia Mobile Web Performance Case Study\"\npublishedAt = \"2020-05-22\"\n\n[[tokopedia]]\nid = \"https://web.dev/tokopedia/\"\ntitle = \"How focusing on web performance improved Tokopedia's click-through rate by 35%\"\npublishedAt = \"2020-10-13\"\n\n[[treebo]]\nid = \"https://tech.treebo.com/a-react-and-preact-progressive-web-app-performance-case-study-treebo-c09ef145bc2e\"\ntitle = \"A React And Preact Progressive Web App Performance Case Study: Treebo\"\npublishedAt = \"2017-09-13\"\n\n[[treebo]]\nid = \"https://tech.treebo.com/redux-middlewares-an-approach-to-cancel-redux-actions-7e08b51b83ce\"\ntitle = \"Redux Middlewares — An approach to cancel redux actions\"\npublishedAt = \"2018-05-04\"\n\n[[treebo]]\nid = \"https://tech.treebo.com/how-do-we-design-for-an-operations-heavy-product-84c10713d3ab\"\ntitle = \"How do we design for an operations heavy product?\"\npublishedAt = \"2018-05-31\"\n\n[[treebo]]\nid = \"https://tech.treebo.com/iconography-for-treebo-c379bc910da1\"\ntitle = \"Iconography for Treebo\"\npublishedAt = \"2018-08-13\"\n\n[[treebo]]\nid = \"https://tech.treebo.com/improving-user-experience-with-amp-treebos-case-study-9d382c53cba5\"\ntitle = \"Improving User Experience with AMP⚡- A Treebo Case Study\"\npublishedAt = \"2019-03-16\"\n\n[[treebo]]\nid = \"https://tech.treebo.com/a-tale-of-brotli-compression-bcb071d9780a\"\ntitle = \"A Tale of Brotli Compression\"\npublishedAt = \"2020-01-20\"\n\n[[treebo]]\nid = \"https://tech.treebo.com/graphql-at-treebo-f5b41c22c06f\"\ntitle = \"GraphQL at Treebo\"\npublishedAt = \"2020-10-23\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2015/04/27/right-to-left/\"\ntitle = \"Designing for RTL platforms - A flipped layout\"\npublishedAt = \"2015-04-27\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2015/05/28/introduce-webpack/\"\ntitle = \"Risk-free Migration From Assetic to Webpack\"\npublishedAt = \"2015-05-28\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2015/12/15/parallel-webpack/\"\ntitle = \"Speeding up webpack performance with parallel builds\"\npublishedAt = \"2015-12-15\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2016/02/02/large-scale-css-refactoring-at-trivago/\"\ntitle = \"Large Scale CSS Refactoring at trivago\"\npublishedAt = \"2016-02-02\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2016/06/01/dropping-ie8-support-consequences-for-javascript/\"\ntitle = \"Dropping IE8 Support: Consequences for JavaScript\"\npublishedAt = \"2016-06-01\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2016/06/16/thoughts-on-atom-building-in-the-pattern-library/\"\ntitle = \"Thoughts on Atom Building in the Pattern Library\"\npublishedAt = \"2016-06-16\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2016/09/05/inline-svg-icon-system/\"\ntitle = \"An Inline SVG Icon System For Our Hotel Search Application\"\npublishedAt = \"2016-09-05\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2017/07/07/css-done-right-post-rtlcss/\"\ntitle = \"CSS done right - Post RTLCSS\"\npublishedAt = \"2017-07-07\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2017/09/26/accessibility-at-trivago/\"\ntitle = \"Accessibility at trivago\"\npublishedAt = \"2017-09-26\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2017/12/22/trivago-just-made-filtering-faster-and-more-accessible-but-why-and-how/\"\ntitle = \"trivago just made filtering faster and more accessible, but why and how?\"\npublishedAt = \"2017-12-22\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2018/06/28/melody-the-sound-of-javascript-for-our-hotel-search/\"\ntitle = \"Melody - the sound of JavaScript for our Hotel Search\"\npublishedAt = \"2018-06-28\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2018/10/12/building-fast-and-reliable-web-applications/\"\ntitle = \"Building fast and reliable web applications\"\npublishedAt = \"2018-10-12\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2019/04/02/presenting-babel-plugin-cloudinary/\"\ntitle = \"Presenting babel-plugin-cloudinary\"\npublishedAt = \"2019-04-02\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2020/01/29/trivago-magazines-journey-to-server-side-rendering/\"\ntitle = \"trivago Magazine's Journey to Server-Side Rendering\"\npublishedAt = \"2020-01-29\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2020/03/10/the-first-prettier-plugin-for-twig-is-here/\"\ntitle = \"The First Prettier Plugin For Twig is Here\"\npublishedAt = \"2020-03-10\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2020/11/17/exploring-the-page-visibility-api-for-detecting-page-background-state/\"\ntitle = \"Exploring the Page Visibility API for Detecting Page Background State\"\npublishedAt = \"2020-11-17\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/2021/02/09/rethinking-the-next-gen-analytics-web-app-at-trivago/\"\ntitle = \"Rethinking the Next-gen Analytics Web App at trivago\"\npublishedAt = \"2021-02-09\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/post/2021-04-19-designingmarketingemailsviapredefinedmod\"\ntitle = \"Designing Marketing Emails via predefined Modules in Salesforce Email Studio\"\npublishedAt = \"2021-04-19\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/post/2022-05-16-warp-a-web-application-rewrite-project\"\ntitle = \"WARP - A Web Application Rewrite Project\"\npublishedAt = \"2022-05-16\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/post/2022-08-01-three-learnings-switching-to-typescript\"\ntitle = \"3 Things We Learned When Switching to TypeScript\"\npublishedAt = \"2022-08-01\"\n\n[[trivago]]\nid = \"https://tech.trivago.com/post/2023-09-27-end-to-end-tests-retry-strategies\"\ntitle = \"End-to-end tests retry strategies\"\npublishedAt = \"2023-09-27\"\n\n[[tumblr]]\nid = \"https://javascript.tumblr.com/post/139610473242/moving-things-out-of-critical-rendering-path\"\ntitle = \"Moving things out of critical rendering path\"\npublishedAt = \"2016-02-19\"\n\n[[tumblr]]\nid = \"https://javascript.tumblr.com/post/143583264647/here-at-tumblr-we-use-a-js-bundler-to-compile-our#notes\"\ntitle = \"The Road to Webpack\"\npublishedAt = \"2016-04-29\"\n\n[[tumblr]]\nid = \"https://javascript.tumblr.com/post/165082071937/flow-and-typescript\"\ntitle = \"Flow and TypeScript\"\npublishedAt = \"2017-09-07\"\n\n[[tumblr]]\nid = \"https://javascript.tumblr.com/post/171557569007/responsive-images\"\ntitle = \"Using srcset and sizes to make responsive HTML5 images\"\npublishedAt = \"2018-03-05\"\n\n[[tumblr]]\nid = \"https://javascript.tumblr.com/post/172624931022/a-big-new-beautiful-future-for-the-web-at-tumblr\"\ntitle = \"A Big New Beautiful Future for the Web at Tumblr\"\npublishedAt = \"2018-04-05\"\n\n[[tumblr]]\nid = \"https://javascript.tumblr.com/post/182476050141/how-we-wrote-our-own-service-worker-as-we\"\ntitle = \"How we wrote our own Service Worker\"\npublishedAt = \"2019-02-01\"\n\n[[tumblr]]\nid = \"https://javascript.tumblr.com/post/182090529587/were-making-tumblr-more-accessible\"\ntitle = \"We’re making Tumblr more accessible!\"\npublishedAt = \"2019-01-17\"\n\n[[twitch]]\nid = \"https://blog.twitch.tv/en/2016/08/08/improving-chat-rendering-performance-1c0945b82764/\"\ntitle = \"Improving Chat Rendering Performance\"\npublishedAt = \"2016-08-08\"\n\n[[twitch]]\nid = \"https://blog.twitch.tv/en/2017/04/25/investigating-react-native-6032ecced610/\"\ntitle = \"Investigating React Native\"\npublishedAt = \"2017-04-25\"\n\n[[twitch]]\nid = \"https://blog.twitch.tv/en/2019/12/03/beyond-purple/\"\ntitle = \"Beyond Purple\"\npublishedAt = \"2019-12-03\"\n\n[[twitch]]\nid = \"https://blog.twitch.tv/en/2021/09/07/guiding-a-monolith-with-a-gentle-touch-the-power-of-pairing-codeowners-and-lint-rules/\"\ntitle = \"Guiding a monolith with a gentle touch: pairing codeowners and lint rules\"\npublishedAt = \"2021-09-07\"\n\n[[twitch]]\nid = \"https://blog.twitch.tv/en/2021/11/30/using-algorithms-to-meet-accessibility-requirements-for-color-contrast/\"\ntitle = \"Using Algorithms to Meet Accessibility Requirements for Color Contrast\"\npublishedAt = \"2021-11-30\"\n\n[[twitch]]\nid = \"https://blog.twitch.tv/en/2022/01/10/automated-chaos-testing-on-the-front-end/\"\ntitle = \"Automated Chaos Testing on the Front-end\"\npublishedAt = \"2022-01-10\"\n\n[[twitter]]\nid = \"https://pusher.com/sessions/meetup/viennajs/view-source-twittercom\"\ntitle = \"View Source: Twitter.com\"\npublishedAt = \"2017-01-01\"\n\n[[twitter]]\nid = \"https://blog.twitter.com/engineering/en_us/topics/open-source/2017/how-we-built-twitter-lite.html\"\ntitle = \"How we built Twitter Lite\"\npublishedAt = \"2017-04-06\"\n\n[[twitter]]\nid = \"https://itsze.ro/posts/infinite-list-and-react\"\ntitle = \"Infinite List and React\"\npublishedAt = \"2017-04-09\"\n\n[[twitter]]\nid = \"https://medium.com/@paularmstrong/twitter-lite-and-high-performance-react-progressive-web-apps-at-scale-d28a00e780a3\"\ntitle = \"Twitter Lite and High Performance React Progressive Web Apps at Scale\"\npublishedAt = \"2017-04-11\"\n\n[[twitter]]\nid = \"https://youtu.be/iWXC5VCfQHI\"\ntitle = \"The Twitter Lite team about their use of Node.js\"\npublishedAt = \"2017-04-12\"\n\n[[twitter]]\nid = \"http://nicolasgallagher.com/redux-modules-and-code-splitting/\"\ntitle = \"Redux modules and code-splitting\"\npublishedAt = \"2018-02-02\"\n\n[[twitter]]\nid = \"https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/buildingfasterwithcomponents.html\"\ntitle = \"How using component-based design helps us build faster\"\npublishedAt = \"2019-07-16\"\n\n[[uber]]\nid = \"https://eng.uber.com/ubereats-react-native/\"\ntitle = \"Powering UberEATS with React Native and Uber Engineering\"\npublishedAt = \"2017-03-28\"\n\n[[uber]]\nid = \"https://eng.uber.com/m-uber\"\ntitle = \"Building m.uber: Engineering a High-Performance Web App for the Global Market\"\npublishedAt = \"2017-06-27\"\n\n[[uber]]\nid = \"https://youtu.be/JWFyH13_I3o\"\ntitle = \"Javascript @ Uber\"\npublishedAt = \"2017-07-10\"\n\n[[uber]]\nid = \"https://eng.uber.com/web-booking-flow/\"\ntitle = \"Building a More Seamless Web Booking Flow for Uber\"\npublishedAt = \"2019-07-25\"\n\n[[uber]]\nid = \"https://eng.uber.com/best-practices-for-react-v16/\"\ntitle = \"Best Practices for Unit Testing in React Version 16\"\npublishedAt = \"2019-08-29\"\n\n[[uber]]\nid = \"https://eng.uber.com/uber-eats-com-web-app-rewrite/\"\ntitle = \"Counting Calories: How We Improved the Performance and Developer Experience of UberEats.com\"\npublishedAt = \"2020-02-12\"\n\n[[udacity]]\nid = \"https://engineering.udacity.com/how-a-fixed-width-button-can-get-your-company-trending-on-reddit-for-all-the-wrong-reasons-a-front-6214280888ab\"\ntitle = \"How a Fixed-Width Button Can Get Your Company Trending on Reddit for All the Wrong Reasons: A Front-End Developer Tale\"\npublishedAt = \"2016-04-11\"\n\n[[udacity]]\nid = \"https://engineering.udacity.com/react-native-a-retrospective-from-the-mobile-engineering-team-at-udacity-89975d6a8102\"\ntitle = \"React Native: A retrospective from the mobile-engineering team at Udacity\"\npublishedAt = \"2018-07-03\"\n\n[[udacity]]\nid = \"https://engineering.udacity.com/udacitys-front-end-tech-stack-b19dae07f0ac\"\ntitle = \"Udacity’s Front-End Tech Stack\"\npublishedAt = \"2016-07-18\"\n\n[[unity]]\nid = \"https://blogs.unity3d.com/2018/08/15/webassembly-is-here/\"\ntitle = \"WebAssembly is here!\"\npublishedAt = \"2018-08-15\"\n\n[[unity]]\nid = \"https://blogs.unity3d.com/2018/09/17/webassembly-load-times-and-performance/\"\ntitle = \"WebAssembly Load Times and Performance\"\npublishedAt = \"2018-09-17\"\n\n[[unsplash]]\nid = \"https://medium.com/unsplash/how-we-gradually-migrated-to-typescript-at-unsplash-7a34caa24ef1\"\ntitle = \"How we gradually migrated to TypeScript at Unsplash\"\npublishedAt = \"2018-03-14\"\n\n[[vercel]]\nid = \"https://vercel.com/blog/how-we-made-the-vercel-dashboard-twice-as-fast\"\ntitle = \"How we made the Vercel Dashboard twice as fast\"\npublishedAt = \"2022-08-09\"\n\n[[vercel]]\nid = \"https://vercel.com/blog/designing-the-vercel-virtual-product-tour\"\ntitle = \"Designing the Vercel virtual product tour\"\npublishedAt = \"2023-06-02\"\n\n[[vercel]]\nid = \"https://vercel.com/blog/design-engineering-at-vercel\"\ntitle = \"Design Engineering at Vercel\"\npublishedAt = \"2024-03-29\"\n\n[[vercel]]\nid = \"https://vercel.com/blog/how-vercel-adopted-microfrontends\"\ntitle = \"How Vercel adopted microfrontends\"\npublishedAt = \"2024-10-22\"\n\n[[vercel]]\nid = \"https://vercel.com/blog/migrating-grep-from-create-react-app-to-next-js\"\ntitle = \"Migrating Grep from Create React App to Next.js\"\npublishedAt = \"2025-04-14\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/react-native-at-walmartlabs-cdd140589560\"\ntitle = \"React Native at WalmartLabs\"\npublishedAt = \"2016-12-19\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/cutting-dev-time-in-half-with-invalid-user-input-prevention-bea29ea315c\"\ntitle = \"Cutting Dev Time in Half With Invalid User Input Prevention\"\npublishedAt = \"2017-10-25\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/migrating-angular-1-x-apps-to-react-the-hybrid-way-3267ccf33755\"\ntitle = \"Migrating Angular 1.x apps to React — The Hybrid Way!\"\npublishedAt = \"2017-11-15\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/migrating-large-enterprise-to-nodejs-6c38523d2b33\"\ntitle = \"Migrating Large Enterprise to NodeJS\"\npublishedAt = \"2017-12-09\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/primer-on-front-end-automation-a9eee2c6bc1\"\ntitle = \"Primer on Front End Automation\"\npublishedAt = \"2018-07-27\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/lazy-loading-images-intersectionobserver-8c5bff730920\"\ntitle = \"Lazy Loading Images with IntersectionObserver\"\npublishedAt = \"2018-09-10\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/midway-walmarts-mocking-journey-84c34fcc4593\"\ntitle = \"Midway: Walmart’s mocking journey…\"\npublishedAt = \"2018-10-05\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/infinite-scrolling-the-right-way-11b098a08815\"\ntitle = \"Infinite Scroll’ing the right way\"\npublishedAt = \"2019-04-02\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/delivering-reactjs-applications-at-scale-5cb8a363f99\"\ntitle = \"Delivering ReactJS applications at scale\"\npublishedAt = \"2019-08-26\"\n\n[[walmartlabs]]\nid = \"https://youtu.be/vB8JUx9Dp08\"\ntitle = \"Turbocharging Walmart.com\"\npublishedAt = \"2020-04-09\"\n\n[[walmartlabs]]\nid = \"https://medium.com/walmartlabs/differential-serving-food-for-latest-browsers-ba96192eb0ad\"\ntitle = \"Differential Serving — Food for latest browsers\"\npublishedAt = \"2020-06-23\"\n\n[[wikimedia]]\nid = \"https://upload.wikimedia.org/wikipedia/commons/7/7f/ResourceLoader_OSCON_2011.pdf\"\ntitle = \"Creative Techniques for Loading Web Pages Faster\"\npublishedAt = \"2012-01-17\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/15/investigating_a_performance_improvement/\"\ntitle = \"Investigating a performance improvement\"\npublishedAt = \"2017-06-02\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/19/improving_time-to-logo_performance_with_preload_links/\"\ntitle = \"Improving time-to-logo performance with preload links\"\npublishedAt = \"2017-06-07\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/61/beacons/\"\ntitle = \"Beacons\"\npublishedAt = \"2017-08-16\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/83/measuring_wikipedia_page_load_times/\"\ntitle = \"Measuring Wikipedia page load times\"\npublishedAt = \"2018-01-09\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/90/mustache.js_replaced_with_javascript_template_literals_in_extension_popups/\"\ntitle = \"mustache.js replaced with JavaScript template literals in Extension:Popups\"\npublishedAt = \"2018-04-03\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/93/extension_popups_page_previews_front-end_tooling/\"\ntitle = \"Extension:Popups (Page Previews) front-end tooling\"\npublishedAt = \"2018-04-19\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/109/mobile_web_performance_the_importance_of_the_device/\"\ntitle = \"Mobile web performance: the importance of the device\"\npublishedAt = \"2018-06-22\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/131/why_performance_matters/\"\ntitle = \"Why performance matters\"\npublishedAt = \"2018-12-12\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/146/migrating_code_from_mediawiki_s_resourceloader_to_webpack/\"\ntitle = \"Migrating code from MediaWiki's ResourceLoader to Webpack\"\npublishedAt = \"March 13 2019\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/157/evaluating_element_timing_for_images/\"\ntitle = \"Evaluating Element Timing for Images\"\npublishedAt = \"2019-04-10\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/161/performance_perception_how_satisfied_are_wikipedia_users/\"\ntitle = \"Performance perception: how satisfied are Wikipedia users?\"\npublishedAt = \"2019-05-29\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/165/performance_perception_the_effect_of_late-loading_banners/\"\ntitle = \"Performance perception: the effect of late-loading banners\"\npublishedAt = \"2019-06-13\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/167/performance_perception_correlation_to_rum_metrics/\"\ntitle = \"Performance perception: correlation to RUM metrics\"\npublishedAt = \"2019-06-17\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/168/tracking_down_slow_event_handlers_with_event_timing/\"\ntitle = \"Tracking down slow event handlers with Event Timing\"\npublishedAt = \"2019-06-19\"\n\n[[wikimedia]]\nid = \"https://phabricator.wikimedia.org/phame/post/view/175/wikipedia_s_javascript_initialisation_on_a_budget/\"\ntitle = \"Wikipedia's JavaScript initialisation on a budget\"\npublishedAt = \"2019-09-18\"\n\n[[wikimedia]]\nid = \"https://calendar.perfplanet.com/2019/measuring-long-tasks-and-first-input-delay/\"\ntitle = \"Measuring Long Tasks and First Input Delay\"\npublishedAt = \"2019-12-21\"\n\n[[wikimedia]]\nid = \"https://www.nray.dev/blog/analyzing-search-performance/\"\ntitle = \"Analyzing Wikipedia's Search Performance\"\npublishedAt = \"2021-04-05\"\n\n[[wikimedia]]\nid = \"https://www.nray.dev/blog/300ms-faster-reducing-wikipedias-total-blocking-time/\"\ntitle = \"300ms Faster: Reducing Wikipedia's Total Blocking Time\"\npublishedAt = \"2023-05-21\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/jquery-promises-with-postmessage/\"\ntitle = \"jQuery Promises: The answer to PostMessage's asynchrony\"\npublishedAt = \"2013-06-17\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/making-of-abtesting-scrollmation/\"\ntitle = \"How We Made The Animated A/B Testing Guide\"\npublishedAt = \"2013-07-08\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/getting-60fps-using-devtools/\"\ntitle = \"Getting 60 FPS using Chrome devtools\"\npublishedAt = \"2013-07-29\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/performance-testing/\"\ntitle = \"Overcoming the Challenges of Performance Testing Single-page Apps\"\npublishedAt = \"2015-01-29\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/angularapp-e2e-testing-with-protractor/\"\ntitle = \"Testing AngularJS Apps End to End Using Protractor\"\npublishedAt = \"2015-02-13\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/layout-trick/\"\ntitle = \"A layout trick\"\npublishedAt = \"2016-04-04\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/speeding-up-vwo/\"\ntitle = \"Speeding Up VWO\"\npublishedAt = \"2016-09-17\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/migrating-towards-yarn-webpack/\"\ntitle = \"Migrating towards Yarn and Webpack\"\npublishedAt = \"2017-10-04\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/sass-inheritance-removal/\"\ntitle = \"Why we've removed Inheritance/Extend from SASS & you should do the same!\"\npublishedAt = \"2017-11-30\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/automated-heatmap-verification/\"\ntitle = \"Automated Heatmap Verification E2E using Selenium and Canvas\"\npublishedAt = \"2018-04-03\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/how-we-writing-modern-javascript-with-angularjs-1-x/\"\ntitle = \"How we are writing modern Javascript with AngularJs\"\npublishedAt = \"2023-03-22\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/playwright-the-rightful-heir/\"\ntitle = \"Playwright – The Rightful Heir\"\npublishedAt = \"2022-09-21\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/Cypress-a-worthy-replacement-for-protractor/\"\ntitle = \"Cypress - A worthy replacement for Protractor?\"\npublishedAt = \"2022-03-24\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/handling-shadow-dom-in-protractor/\"\ntitle = \"Handling Shadow DOM in Protractor Tests\"\npublishedAt = \"2021-09-17\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/performance-improvements-in-vwo-smart-code/\"\ntitle = \"Performance improvements in VWO SmartCode\"\npublishedAt = \"2020-01-08\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/shift-to-atomic-css/\"\ntitle = \"Shift to Atomic CSS\"\npublishedAt = \"2018-08-31\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/demystifying-split-chunks-plugin/\"\ntitle = \"Demystifying Webpack 4 Split Chunks Plugin\"\npublishedAt = \"2018-08-10\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/dom-manipulation-for-react-sites/\"\ntitle = \"VWO Editor: Seamless DOM Manipulations for React-based Websites\"\npublishedAt = \"2025-07-03\"\n\n[[wingify]]\nid = \"https://engineering.wingify.com/posts/ai-powered-translation-workflow/\"\ntitle = \"Breaking the Translation Bottleneck: How AI-Powered i18n Transformed Our Development Workflow\"\npublishedAt = \"2025-08-12\"\n\n[[wix]]\nid = \"https://www.wix.engineering/blog/taking-css-to-scale-a-pragmatic-approach\"\ntitle = \"Taking CSS To Scale: A Pragmatic Approach\"\npublishedAt = \"2016-07-13\"\n\n[[wix]]\nid = \"https://youtu.be/abSNo2P9mMM\"\ntitle = \"Building a React Native App for 80 Million Users\"\npublishedAt = \"2016-10-01\"\n\n[[wix]]\nid = \"https://www.wix.engineering/blog/the-story-of-making-wix-accessible\"\ntitle = \"The Story of Making Wix Accessible\"\npublishedAt = \"2017-12-14\"\n\n[[wix]]\nid = \"https://youtu.be/FKpShne3I4E\"\ntitle = \"Improving load time for 100 million websites\"\npublishedAt = \"2018-06-26\"\n\n[[wix]]\nid = \"https://www.wix.engineering/post/trim-the-fat-from-your-bundles-using-webpack-analyzer-react-lazy-suspense\"\ntitle = \"Trim the Fat From Your Bundles Using Webpack Analyzer & React Lazy/Suspense\"\npublishedAt = \"2019-09-02\"\n\n[[wix]]\nid = \"https://web.dev/wix/\"\ntitle = \"How Wix improved website performance by evolving their infrastructure\"\npublishedAt = \"2021-03-10\"\n\n[[wix]]\nid = \"https://medium.com/wix-ux/when-life-gives-you-lemons-write-better-error-messages-46c5223e1a2f\"\ntitle = \"When life gives you lemons, write better error messages\"\npublishedAt = \"2022-09-12\"\n\n[[wix]]\nid = \"https://www.wix.engineering/post/how-wix-applied-multi-threading-to-node-js-and-cut-thousands-of-ssr-pods-and-money\"\ntitle = \"How Wix Applied Multi-threading to Node.js and Cut Thousands of SSR Pods and Money\"\npublishedAt = \"2022-09-21\"\n\n[[yelp]]\nid = \"https://engineeringblog.yelp.com/2013/11/whoa-that-embedded-web-view-looks-hot-in-your-ios-app.html\"\ntitle = \"Whoa! That Embedded Web View Looks Hot in Your iOS App!\"\npublishedAt = \"2013-11-07\"\n\n[[yelp]]\nid = \"https://engineeringblog.yelp.com/2018/03/css-in-the-age-of-react.html\"\ntitle = \"CSS in the Age of React: How We Traded the Cascade for Consistency\"\npublishedAt = \"2018-03-05\"\n\n[[yelp]]\nid = \"https://engineeringblog.yelp.com/2019/11/organizing-and-securing-third-party-cdn-assets-at-yelp.html\"\ntitle = \"Organizing and Securing Third-Party CDN Assets at Yelp\"\npublishedAt = \"2019-11-20\"\n\n[[yelp]]\nid = \"https://engineeringblog.yelp.com/2022/02/server-side-rendering-at-scale.html\"\ntitle = \"Server Side Rendering at Scale\"\npublishedAt = \"2022-02-22\"\n\n[[yelp]]\nid = \"https://engineeringblog.yelp.com/2022/07/migrating-from-styleguidist-to-storybook.html\"\ntitle = \"Migrating from Styleguidist to Storybook\"\npublishedAt = \"2022-07-06\"\n\n[[yelp]]\nid = \"https://engineeringblog.yelp.com/2022/07/writing-emails-using-react.html\"\ntitle = \"Writing Emails Using React\"\npublishedAt = \"2022-07-20\"\n\n[[yelp]]\nid = \"https://engineeringblog.yelp.com/2023/03/gondola-an-internal-paas-architecture-for-frontend-app-deployment.html\"\ntitle = \"Gondola: an internal PaaS architecture for frontend app deployment\"\npublishedAt = \"2023-03-03\"\n\n[[yelp]]\nid = \"https://engineeringblog.yelp.com/2024/03/chaos-yelps-unified-framework-for-server-driven-ui.html\"\ntitle = \"CHAOS: Yelp's Unified Framework for Server-Driven UI\"\npublishedAt = \"2024-03-14\"\n\n[[ynab]]\nid = \"https://dev.to/ynab/progressive-conversion-of-typescript-namespaces-to-modules-3f1j\"\ntitle = \"Progressive Conversion of TypeScript Namespaces to Modules\"\npublishedAt = \"2019-09-23\"\n\n[[ynab]]\nid = \"https://dev.to/ynab/a-semantic-color-system-the-theory-hk7\"\ntitle = \"Semantic Colors for Designers and Developers. The Theory: A Semantic Color System\"\npublishedAt = \"2020-02-12\"\n\n[[ynab]]\nid = \"https://dev.to/ynab/semantic-colors-for-designers-2lf2\"\ntitle = \"Semantic Colors for Designers and Developers. The Practice: Semantic Colors for Designers\"\npublishedAt = \"2020-02-12\"\n\n[[ynab]]\nid = \"https://dev.to/ynab/the-practice-semantic-colors-for-developers-1o6g\"\ntitle = \"Semantic Colors for Designers and Developers. The Practice: Semantic Colors for Developers\"\npublishedAt = \"2020-02-12\"\n\n[[ynab]]\nid = \"https://dev.to/ynab/how-we-use-openapi-swagger-for-the-ynab-api-5453\"\ntitle = \"How we use OpenAPI / Swagger for the YNAB API\"\npublishedAt = \"2020-03-16\"\n\n[[youtube]]\nid = \"https://blog.chriszacharias.com/page-weight-matters\"\ntitle = \"Page Weight Matters\"\npublishedAt = \"2012-12-21\"\n\n[[youtube]]\nid = \"https://youtu.be/tNulrEbTQf8\"\ntitle = \"Polymer @ YouTube\"\npublishedAt = \"2017-08-22\"\n\n[[youtube]]\nid = \"https://blog.chriszacharias.com/a-conspiracy-to-kill-ie6\"\ntitle = \"A Conspiracy To Kill IE6\"\npublishedAt = \"2019-05-01\"\n\n[[youtube]]\nid = \"https://web.dev/better-youtube-web-part1/\"\ntitle = \"Building a Better Web - Part 1: A faster YouTube on web\"\npublishedAt = \"2022-10-20\"\n\n[[zajno]]\nid = \"https://medium.com/zajnocrew/visualizing-money-how-we-explained-a-complex-financial-product-using-animation-3ee8b3e4277e\"\ntitle = \"Visualizing money: how we explained a complex financial product using animation\"\npublishedAt = \"2018-09-25\"\n\n[[zynga]]\nid = \"https://medium.com/zynga-engineering/why-how-words-with-friends-is-adopting-react-native-b24a405f421c\"\ntitle = \"Why & How Words With Friends Is Adopting React Native\"\npublishedAt = \"2018-09-17\"\n\n[[zynga]]\nid = \"https://medium.com/zynga-engineering/react-native-stability-monitoring-fbf425eb71ac\"\ntitle = \"React Native Stability Monitoring\"\npublishedAt = \"2019-05-14\"\n\n[[18f]]\nid = \"https://18f.gsa.gov/2016/04/01/developing-the-draft-us-web-design-standards-ui-components/\"\ntitle = \"Developing the Draft U.S. Web Design Standards’ UI components\"\npublishedAt = \"2016-04-01\"\n\n[[18f]]\nid = \"https://18f.gsa.gov/2017/10/03/building-a-large-scale-design-system/\"\ntitle = \"Building a large-scale design system: How we created a design system for the U.S. government\"\npublishedAt = \"2017-10-03\"\n\n[[18f]]\nid = \"https://18f.gsa.gov/2020/04/21/a-token-of-our-affection-uswds-2/\"\ntitle = \"A token of our affection - A field guide to USWDS 2\"\npublishedAt = \"2020-04-21\"\n\n[[1password]]\nid = \"https://blog.1password.com/from-dark-to-light-and-back-again/\"\ntitle = \"From dark to light and back again\"\npublishedAt = \"2018-11-08\"\n\n[[1password]]\nid = \"https://blog.1password.com/new-extension-build-system/\"\ntitle = \"How we used esbuild to reduce our browser extension build times by 90%\"\npublishedAt = \"2024-05-30\"\n\n[[godaddy]]\nid = \"https://www.godaddy.com/resources/news/higher-order-reducers\"\ntitle = \"Eliminating Boilerplate and Increasing Reusability with Higher-Order Reducers\"\npublishedAt = \"2018-08-24\"\n\n[[godaddy]]\nid = \"https://www.godaddy.com/resources/news/reduxful-manage-restful-data-with-redux\"\ntitle = \"Reduxful: Manage RESTful data with Redux\"\npublishedAt = \"2018-11-05\"\n\n[[godaddy]]\nid = \"https://www.godaddy.com/resources/news/announcing-exemplar\"\ntitle = \"Creating better examples with @exemplar/storybook\"\npublishedAt = \"2019-04-09\"\n\n[[godaddy]]\nid = \"https://web.dev/case-studies/godaddy\"\ntitle = \"How GoDaddy's Websites + Marketing service improved customer Core Web Vitals by 75%\"\npublishedAt = \"2022-07-14\"\n\n[[godaddy]]\nid = \"https://www.godaddy.com/resources/news/mobile-to-webview-bridge-with-rxjs-and-redux\"\ntitle = \"Building a robust mobile to webview bridge with RxJS and Redux\"\npublishedAt = \"2023-03-02\"\n\n[[booking]]\nid = \"https://medium.com/booking-com-development/custom-browser-extensions-for-front-end-developers-4e273a2722d8\"\ntitle = \"Custom Browser Extensions for Front End Developers\"\npublishedAt = \"2014-01-30\"\n\n[[booking]]\nid = \"https://booking.design/responsive-email-fdf63d001d00\"\ntitle = \"Responsive email\"\npublishedAt = \"2015-09-21\"\n\n[[booking]]\nid = \"https://booking.design/automating-css-sprites-for-large-organisations-538c3f2cbda0\"\ntitle = \"Automating CSS Sprites for Large Organisations\"\npublishedAt = \"2013-08-01\"\n\n[[booking]]\nid = \"https://booking.design/automating-css-sprites-for-large-organisations-538c3f2cbda0\"\ntitle = \"Automating CSS Sprites for Large Organisations\"\npublishedAt = \"2014-05-01\"\n\n[[booking]]\nid = \"https://medium.com/booking-com-development/progressive-web-apps-with-service-workers-887e80abf9ef\"\ntitle = \"Progressive Web Apps with Service Workers\"\npublishedAt = \"2016-04-21\"\n\n[[booking]]\nid = \"https://booking.design/implementing-system-fonts-on-booking-com-a-lesson-learned-bdc984df627f\"\ntitle = \"Implementing system fonts on Booking.com — A lesson learned.\"\npublishedAt = \"2017-03-29\"\n\n[[booking]]\nid = \"https://booking.design/how-we-adapted-the-booking-com-mobile-site-for-the-iphone-x-notch-e880fa00e989\"\ntitle = \"How we adapted the Booking.com mobile site for the iPhone X notch.\"\npublishedAt = \"2017-11-07\"\n\n[[booking]]\nid = \"https://booking.design/how-we-built-our-multi-platform-design-system-at-booking-com-d7b895399d40\"\ntitle = \"How we built our multi-platform design system at Booking.com\"\npublishedAt = \"2023-03-01\"\n\n[[salesforce]]\nid = \"https://engineering.salesforce.com/optimizing-performance-with-web-workers-612b48621d8d/\"\ntitle = \"Optimizing Performance with Web Workers\"\npublishedAt = \"2017-09-19\"\n\n[[salesforce]]\nid = \"https://engineering.salesforce.com/debugging-embedded-javascript-in-an-android-app-using-chrome-devtools-8553864ee09c/\"\ntitle = \"Debugging embedded JavaScript in an Android app using Chrome DevTools\"\npublishedAt = \"2020-05-19\"\n\n[[salesforce]]\nid = \"https://engineering.salesforce.com/debugging-webkit-in-hybrid-mobile-apps-2eee63a4c922/\"\ntitle = \"Debugging WebKit in Hybrid Mobile Apps\"\npublishedAt = \"2020-07-14\"\n\n[[salesforce]]\nid = \"https://engineering.salesforce.com/native-scrolling-in-salesforce-mobile-app-4f334b6ad96e/\"\ntitle = \"Native Scrolling in Salesforce mobile app\"\npublishedAt = \"2021-02-16\"\n\n[[salesforce]]\nid = \"https://engineering.salesforce.com/why-we-open-sourced-our-javascript-framework-4c706bd2e68a/\"\ntitle = \"Why We Open Sourced Our JavaScript Framework\"\npublishedAt = \"2019-07-17\"\n\n[[botify]]\nid = \"https://medium.com/botify-labs/lessons-learned-in-2-years-with-a-javascript-react-monorepo-526e2154d5f1\"\ntitle = \"Lessons learned in 2 years with a JavaScript/React Monorepo\"\npublishedAt = \"2018-06-07\"\n\n[[botify]]\nid = \"https://medium.com/botify-labs/my-chart-will-go-on-4439101b5e2b\"\ntitle = \"My Chart Will Go On: How we built our in-house Visualization library at Botify\"\npublishedAt = \"2020-04-23\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/functional-testing-with-casperjs-e2d121c09ad6\"\ntitle = \"Functional testing with CasperJS\"\npublishedAt = \"2013-08-21\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/why-using-requirejs-as-is-could-hurt-your-web-performance-eeed781f897f\"\ntitle = \"Why Using RequireJS As-Is Could Hurt Your Web Performance\"\npublishedAt = \"2014-03-25\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/gridlist-building-responsive-dashboards-with-resizable-widgets-79612772af63\"\ntitle = \"GridList — building responsive dashboards with resizable widgets\"\npublishedAt = \"2014-07-06\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/css-at-hootsuite-94968ff7f3c1\"\ntitle = \"CSS at Hootsuite\"\npublishedAt = \"2014-08-05\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/mobile-photo-uploads-with-html5-f7ea174ef128\"\ntitle = \"Mobile Photo Uploads with HTML5\"\npublishedAt = \"2015-04-14\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/enhancing-hootsuite-with-react-and-flux-7636ab9289f7\"\ntitle = \"Enhancing Hootsuite with React and Flux\"\npublishedAt = \"2015-10-01\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/designing-global-application-state-for-functional-frontends-e179e5dbe8f2\"\ntitle = \"Designing Global Application State for Functional Frontends\"\npublishedAt = \"2016-06-23\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/resizing-react-components-6f911ba39b59\"\ntitle = \"Resizing React Components\"\npublishedAt = \"2016-08-25\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/designing-react-components-is-easier-with-cosmos-6a90f15f3242\"\ntitle = \"Designing React components is easier with Cosmos\"\npublishedAt = \"2016-09-29\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/step-by-step-vrt-with-mugshot-e761ef01ca46\"\ntitle = \"Step-by-Step VRT with Mugshot\"\npublishedAt = \"2016-10-06\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/the-coffee-threshold-for-javascript-compilation-7dce8d6744c3\"\ntitle = \"The Coffee Threshold for Javascript Compilation\"\npublishedAt = \"2017-04-04\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/react-theme-management-in-less-with-javascript-4b64cbd5eb15\"\ntitle = \"React Theme Management in Less with Javascript\"\npublishedAt = \"2017-04-25\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/javascript-modules-circular-dependencies-and-react-648c83584eb5\"\ntitle = \"Javascript Modules, Circular Dependencies and React\"\npublishedAt = \"2017-08-16\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/thoughts-on-migrating-to-typescript-5e1a04288202\"\ntitle = \"Thoughts on migrating to TypeScript\"\npublishedAt = \"2018-12-27\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/migrating-a-codebase-to-react-16-some-takeaways-d187018db8ca\"\ntitle = \"Migrating a codebase to React 16: some takeaways\"\npublishedAt = \"2019-12-17\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/react-re-render-optimization-7d369e0bf701\"\ntitle = \"React Re-render Optimization\"\npublishedAt = \"2020-04-24\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/inbox-powering-our-front-end-through-a-data-driven-model-716d3f636109\"\ntitle = \"Inbox: Powering our Front-End through a Data-Driven Model\"\npublishedAt = \"2020-04-24\"\n\n[[hootsuite]]\nid = \"https://medium.com/hootsuite-engineering/performance-regression-in-a-react-app-investigation-and-remediation-strategies-24d9cbe6fdb3\"\ntitle = \"Performance Regression in a React App: Investigation and Remediation Strategies\"\npublishedAt = \"2024-03-20\"\n\n[[preply]]\nid = \"https://medium.com/preply-engineering/migrating-from-backbone-js-to-react-js-without-losing-it-a8b383a102fe\"\ntitle = \"Migrating from Backbone.js to React.js without losing it\"\npublishedAt = \"2018-09-19\"\n\n[[preply]]\nid = \"https://medium.com/preply-engineering/how-to-debug-cumulative-layout-shift-by-adding-secret-visuals-to-hotjar-recordings-8de15b6308db\"\ntitle = \"How to debug cumulative layout shift by adding secret visuals to HotJar recordings\"\npublishedAt = \"2020-11-09\"\n\n[[preply]]\nid = \"https://medium.com/preply-engineering/visual-coverage-why-and-how-preply-measures-the-impact-of-the-design-system-1057115f4aff\"\ntitle = \"Visual coverage: Why and How Preply Measures the Impact of the Design System (part I)\"\npublishedAt = \"2024-09-19\"\n\n[[preply]]\nid = \"https://medium.com/preply-engineering/the-implementation-details-of-preplys-design-system-visual-coverage-86b4a78ad2bb\"\ntitle = \"The Implementation Details of Preply’s Design System Visual Coverage (part II)\"\npublishedAt = \"2024-09-30\"\n\n[[preply]]\nid = \"https://medium.com/preply-engineering/how-preply-improved-inp-on-a-next-js-application-without-react-server-components-and-app-router-491713149875\"\ntitle = \"How Preply improved INP on a Next.js application (without React Server Components and App Router)\"\npublishedAt = \"2025-02-20\"\n\n[[notion]]\nid = \"https://www.notion.com/blog/how-we-evolved-our-code-notions-ratcheting-system-using-custom-eslint-rules\"\ntitle = \"How we evolve code: Notion’s “ratcheting” system using custom ESLint rules\"\npublishedAt = \"2025-03-03\"\n\n[[carousell]]\nid = \"https://medium.com/carousell-insider/assembling-robust-web-chat-applications-with-javascript-an-in-depth-guide-9f36685fc1bc\"\ntitle = \"Assembling Robust Web Chat Applications with JavaScript: An In-depth Guide\"\npublishedAt = \"2019-12-03\"\n\n[[carousell]]\nid = \"https://medium.com/carousell-insider/optimising-core-web-vitals-at-carousell-6adad284b9ff\"\ntitle = \"Optimising Core Web Vitals at Carousell\"\npublishedAt = \"2022-02-08\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/js-mutation-testing-our-sdks\"\ntitle = \"Mutation-testing our JavaScript SDKs\"\npublishedAt = \"2024-08-23\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/preact-or-svelte-an-embedded-widget-use-case\"\ntitle = \"Preact or Svelte? An Embedded Widget Use Case\"\npublishedAt = \"2024-09-06\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/perfectly-fitting-text-to-container-in-react\"\ntitle = \"Perfectly Fitting Text to Container in React\"\npublishedAt = \"2024-10-18\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/better-code-rendering-through-virtualization\"\ntitle = \"Better Code Rendering Through Virtualization\"\npublishedAt = \"2024-12-03\"\n\n[[intercom]]\nid = \"https://www.intercom.com/blog/bringing-visibility-to-technical-performance/\"\ntitle = \"How we convinced everyone to care about technical performance\"\npublishedAt = \"2017-05-09\"\n\n[[intercom]]\nid = \"https://www.intercom.com/blog/messenger-accessibility/\"\ntitle = \"Building for everyone: How we made the Intercom Messenger accessible\"\npublishedAt = \"2018-12-05\"\n\n[[intercom]]\nid = \"https://www.intercom.com/blog/intercom-homepage-cms/\"\ntitle = \"Rebuilding Intercom’s homepage with a new CMS\"\npublishedAt = \"2019-06-07\"\n\n[[intercom]]\nid = \"https://www.intercom.com/blog/accessibility-buttons-messenger/\"\ntitle = \"Hot button issue: Improving accessibility in the Messenger\"\npublishedAt = \"2019-06-25\"\n\n[[intercom]]\nid = \"https://www.intercom.com/blog/reducing-intercom-messenger-bundle-size/\"\ntitle = \"Reducing the Intercom Messenger bundle size by 65%\"\npublishedAt = \"2019-07-08\"\n\n[[intercom]]\nid = \"https://www.intercom.com/blog/building-interactive-data-visualizations-with-ember/\"\ntitle = \"How we built a component API for interactive data visualizations with Ember\"\npublishedAt = \"2019-09-03\"\n\n[[intercom]]\nid = \"https://www.intercom.com/blog/evolution-of-ember-at-intercom/\"\ntitle = \"The evolution of Ember at Intercom\"\npublishedAt = \"2020-02-18\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/improving-site-performance-with-tree-shaking-491b6a7e0708\"\ntitle = \"Improving Site Performance With Webpack Tree Shaking\"\npublishedAt = \"2020-01-10\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/efficient-front-end-development-at-coursera-3ed8c376f277\"\ntitle = \"Efficient Front-end Development at Coursera\"\npublishedAt = \"2014-11-07\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/source-maps-are-great-when-you-get-it-right-b65644685a82\"\ntitle = \"Source Maps are Great … When You Get It Right\"\npublishedAt = \"2015-03-30\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/rapidash-faster-frontend-development-7dc0635be944\"\ntitle = \"Rapidash: Faster frontend development\"\npublishedAt = \"2015-05-12\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/improving-coursera-global-site-performance-a-head-to-head-cdn-battle-with-production-traffic-7bbc87b3445c\"\ntitle = \"Improving Coursera Global Site Performance: A Head to Head CDN Battle with Production Traffic\"\npublishedAt = \"2015-07-09\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/why-and-how-coursera-does-isomorphic-javascript-a-fast-and-snappy-quiz-a42acdd59ef8\"\ntitle = \"Why and How Coursera Does Isomorphic Javascript: A Fast and Snappy Quiz\"\npublishedAt = \"2015-08-18\"\n\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/how-to-migrate-react-to-isomorphic-rendering-ecb9df06deab\"\ntitle = \"How to Migrate React to Isomorphic Rendering\"\npublishedAt = \"2015-10-01\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/6-steps-to-i18n-success-for-your-web-app-b5702a221860\"\ntitle = \"6 Steps to i18n Success for Your Web App\"\npublishedAt = \"2016-01-20\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/breaking-up-our-javascript-monolith-with-rapidos-86d94e5e9040\"\ntitle = \"Breaking Up Our JavaScript Monolith with Rapidos\"\npublishedAt = \"2016-12-15\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/best-practices-for-flow-typing-react-components-5af62a82b4df\"\ntitle = \"Best Practices for Flow Typing React Components\"\npublishedAt = \"2017-06-01\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/webpack-3-to-4-facing-the-known-unknowns-and-unknown-unknowns-cdfeb817faf8\"\ntitle = \"Webpack 3 to 4: Facing the known unknowns and unknown unknowns\"\npublishedAt = \"2018-10-11\"\n\n[[coursera]]\nid = \"https://medium.com/coursera-engineering/improving-end-to-end-testing-at-coursera-using-puppeteer-and-jest-5f1bac9cd176\"\ntitle = \"Improving End-to-End Testing at Coursera using Puppeteer and Jest\"\npublishedAt = \"2019-06-26\"\n\n[[airbnb]]\nid = \"https://medium.com/airbnb-engineering/accelerating-large-scale-test-migration-with-llms-9565c208023b\"\ntitle = \"Accelerating Large-Scale Test Migration with LLMs\"\npublishedAt = \"2025-03-13\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/expanding-our-front-end-testing-frameworks-dad1265e98db\"\ntitle = \"Expanding our Front End Testing Frameworks\"\npublishedAt = \"2022-12-13\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/enhancing-the-new-york-times-web-performance-with-react-18-d6f91a7c5af8\"\ntitle = \"Enhancing The New York Times Web Performance with React 18\"\npublishedAt = \"2024-06-26\"\n\n[[nytimes]]\nid = \"https://open.nytimes.com/how-the-new-york-times-systematically-migrated-from-enzyme-into-react-testing-library-b3ea538d001c\"\ntitle = \"How The New York Times systematically migrated from Enzyme into React Testing Library\"\npublishedAt = \"2025-03-03\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/formatting-sql-on-the-frontend\"\ntitle = \"Formatting SQL in the Browser Using PEG\"\npublishedAt = \"2025-04-08\"\n\n[[hubspot]]\nid = \"https://product.hubspot.com/blog/frontend-development-at-scale-1\"\ntitle = \"HubSpot's Approach to Front-End Development at Scale\"\npublishedAt = \"2013-03-19\"\n\n[[hubspot]]\nid = \"https://product.hubspot.com/blog/front-end-development-2\"\ntitle = \"HubSpot's approach to front-end development: Part 2\"\npublishedAt = \"2013-04-15\"\n\n[[hubspot]]\nid = \"https://product.hubspot.com/blog/frontend-platform\"\ntitle = \"Making Hundreds of Developers More Efficient by Creating a Frontend Platform Team\"\npublishedAt = \"2019-12-16\"\n\n[[hubspot]]\nid = \"https://product.hubspot.com/blog/ci-cd-deliver-value-customers\"\ntitle = \"How Our Frontend Teams Use CI/CD to Deliver Value to Customers\"\npublishedAt = \"2022-12-19\"\n\n[[hubspot]]\nid = \"https://product.hubspot.com/blog/immutability-and-performance\"\ntitle = \"Immutability and Its (Potential) Impact on Performance\"\npublishedAt = \"2023-04-07\"\n\n[[hubspot]]\nid = \"https://product.hubspot.com/blog/treating-frontend-performance-as-a-feature\"\ntitle = \"How We Started Treating Frontend Performance as a Feature\"\npublishedAt = \"2020-01-22\"\n\n[[hubspot]]\nid = \"https://product.hubspot.com/blog/migrated-from-enzyme-to-react-testing-library\"\ntitle = \"Moving Mountains: How We Migrated from Enzyme to React Testing Library\"\npublishedAt = \"2025-11-23\"\n\n[[carousell]]\nid = \"https://medium.com/carousell-insider/automated-ui-testing-for-carousell-web-a01e6f5b8faf\"\ntitle = \"Automated UI testing for Carousell Web\"\npublishedAt = \"2022-04-07\"\n\n[[discord]]\nid = \"https://discord.com/blog/modern-image-formats-at-discord-supporting-webp-and-avif\"\ntitle = \"Modern Image Formats at Discord: Supporting WebP and AVIF\"\npublishedAt = \"2025-03-12\"\n\n[[sentry]]\nid = \"https://sentry.engineering/blog/building-a-product-tour-in-react\"\ntitle = \"Building a Product Tour in React\"\npublishedAt = \"2025-04-11\"\n\n[[mercedes-benz]]\nid = \"https://www.mercedes-benz.io/blog/2022-02-15-running-multiple-versions-of-a-stencil-design-system-without-conflicts\"\ntitle = \"Running multiple versions of a stencil design system without conflicts\"\npublishedAt = \"2022-02-15\"\n\n[[mercedes-benz]]\nid = \"https://www.mercedes-benz.io/blog/2023-01-05-you-might-not-need-module-federation-orchestrate-your-microfrontends-at-runtime-with-import-maps\"\ntitle = \"You might not need module federation: orchestrate your microfrontends at runtime with import maps\"\npublishedAt = \"2023-01-05\"\n\n[[mercedes-benz]]\nid = \"https://www.mercedes-benz.io/blog/2025-05-16-how-can-modern-tooling-save-mercedes-benz-io-engineering-time\"\ntitle = \"How can modern tooling save mercedes-benz.io engineering time?\"\npublishedAt = \"2025-05-16\"\n\n[[patreon]]\nid = \"https://www.patreon.com/posts/migrating-to-js-112269201\"\ntitle = \"Migrating to Next.js: Inside a No-Downtime Architecture Overhaul (Part 1)\"\npublishedAt = \"2024-09-23\"\n\n[[patreon]]\nid = \"https://www.patreon.com/posts/133137028\"\ntitle = \"4 Untranslatable Words Behind Patreon’s Internationalization Overhaul\"\npublishedAt = \"2025-07-03\"\n\n[[calm]]\nid = \"https://www.calm.com/blog/engineering/d49ac5cpg96haxlxlw8zmzzz2y98lc\"\ntitle = \"Internationalization With React-Intl\"\npublishedAt = \"2018-10-18\"\n\n[[calm]]\nid = \"https://www.calm.com/blog/engineering/using-ai-to-script-code-modifications\"\ntitle = \"Using AI to Script Code Modifications\"\npublishedAt = \"2025-01-22\"\n\n[[calm]]\nid = \"https://blog.calm.com/engineering/how-we-migrated-our-rushjs-monorepo-to-node-type-stripping\"\ntitle = \"How we migrated our Rush.js monorepo to Node type stripping\"\npublishedAt = \"2025-08-21\"\n\n[[framer]]\nid = \"https://www.framer.com/blog/fit-text-feature/\"\ntitle = \"Advanced responsive typography: technical implementation of Fit Text\"\npublishedAt = \"2023-05-30\"\n\n[[framer]]\nid = \"https://www.framer.com/blog/introducing-avif-support/\"\ntitle = \"How Framer does AVIF\"\npublishedAt = \"2024-05-30\"\n\n[[framer]]\nid = \"https://www.framer.com/blog/sites-interactive-faster/\"\ntitle = \"Sites now become interactive 50% faster\"\npublishedAt = \"2024-11-08\"\n\n[[framer]]\nid = \"https://www.framer.com/blog/react-code-boundaries/\"\ntitle = \"Rabbit hole of React error handling\"\npublishedAt = \"2025-03-18\"\n\n[[framer]]\nid = \"https://www.framer.com/blog/framer-rolldown/\"\ntitle = \"Bundling at Framer: Rolldown for faster sites\"\npublishedAt = \"2025-11-20\"\n"
  },
  {
    "path": "website/src/domain/caseStudy/lib/index.ts",
    "content": "import { getCollection, type CollectionEntry } from \"astro:content\";\nimport type { CaseStudy } from \"../schema\";\nimport { parse } from \"smol-toml\";\n\nexport function getAllCaseStudies(): Promise<CollectionEntry<\"caseStudies\">[]> {\n  return getCollection(\"caseStudies\");\n}\n\nexport async function getAllCaseStudiesByCompany(): Promise<\n  Partial<Record<string, CollectionEntry<\"caseStudies\">[]>>\n> {\n  const all = await getCollection(\"caseStudies\");\n\n  return Object.groupBy(all, (entry) => entry.data.company);\n}\n\nexport function parseCaseStudiesFromTomlUnsafe(\n  sourceToml: string\n): CaseStudy[] {\n  return Object.entries(parse(sourceToml)).flatMap(([company, entries]) =>\n    // @ts-expect-error\n    entries.map((entry) => ({\n      ...entry,\n      company,\n    }))\n  );\n}\n\nexport function getYearsRange(\n  entries: CollectionEntry<\"caseStudies\">[]\n): [number, number] {\n  const yearsSet = new Set<number>();\n\n  for (const entry of entries) {\n    yearsSet.add(entry.data.publishedAt.getFullYear());\n  }\n\n  const yearsList = Array.from(yearsSet);\n\n  return [Math.min(...yearsList), Math.max(...yearsList)];\n}\n"
  },
  {
    "path": "website/src/domain/caseStudy/schema.ts",
    "content": "import { z } from \"astro:content\";\n\nexport const caseStudySchema = z.object({\n  id: z.string().url(),\n  title: z.string(),\n  publishedAt: z.coerce.date(),\n  company: z.string(),\n});\n\nexport type CaseStudy = z.infer<typeof caseStudySchema>;\n"
  },
  {
    "path": "website/src/domain/company/data.ru.toml",
    "content": "[amplifr]\nname = \"Amplifr\"\nwebsiteUrl = \"https://amplifr.com\"\n\n[aviasales]\nname = \"Aviasales\"\nwebsiteUrl = \"https://www.aviasales.ru\"\n\n[avito]\nname = \"Avito\"\nwebsiteUrl = \"https://www.avito.ru/\"\n\n[autoru]\nname = \"auto.ru\"\nwebsiteUrl = \"https://auto.ru/\"\n\n[deliveryclub]\nname = \"Delivery Club\"\nwebsiteUrl = \"https://www.delivery-club.ru/\"\n\n[directum]\nname = \"DIRECTUM\"\nwebsiteUrl = \"https://www.directum.ru/\"\n\n[headhunter]\nname = \"HeadHunter\"\nwebsiteUrl = \"https://hh.ru/\"\n\n[ispsystem]\nname = \"ISPSystem\"\nwebsiteUrl = \"https://www.ispsystem.ru\"\n\n[joom]\nname = \"Joom\"\nwebsiteUrl = \"https://www.joom.com\"\n\n[miro]\nname = \"Miro\"\nwebsiteUrl = \"https://miro.com/\"\n\n[netcracker]\nname = \"Netcracker\"\nwebsiteUrl = \"https://www.netcracker.com/\"\n\n[onetwotrip]\nname = \"OneTwoTrip\"\nwebsiteUrl = \"https://www.onetwotrip.com/\"\n\n[ramblergroup]\nname = \"Rambler Group\"\nwebsiteUrl = \"https://rambler-co.ru/\"\n\n[setka]\nname = \"Setka\"\nwebsiteUrl = \"https://setka.io/\"\n\n[skyeng]\nname = \"Skyeng\"\nwebsiteUrl = \"https://skyeng.ru\"\n\n[sportsru]\nname = \"Sports.ru\"\nwebsiteUrl = \"https://www.sports.ru\"\n\n[tinkoff]\nname = \"Tinkoff\"\nwebsiteUrl = \"https://www.tinkoff.ru/\"\n\n[wrike]\nname = \"Wrike\"\nwebsiteUrl = \"https://www.wrike.com\"\n\n[alfabank]\nname = \"Альфа-Банк\"\nwebsiteUrl = \"https://alfabank.ru\"\n\n[bureau]\nname = \"Бюро Горбунова\"\nwebsiteUrl = \"https://bureau.ru\"\n\n[vk]\nname = \"ВКонтакте\"\nwebsiteUrl = \"https://vk.com\"\n\n[dodobrands]\nname = \"Додо Пицца\"\nwebsiteUrl = \"https://dodois.com\"\n\n[leroymerlin]\nname = \"Леруа Мерлен\"\nwebsiteUrl = \"https://leroymerlin.ru\"\n\n[meduza]\nname = \"Медуза\"\nwebsiteUrl = \"https://meduza.io/\"\n\n[okru]\nname = \"Одноклассники\"\nwebsiteUrl = \"https://ok.ru/\"\n\n[sber]\nname = \"Сбербанк\"\nwebsiteUrl = \"http://sberbank.ru/\"\n\n[citymobil]\nname = \"Ситимобил\"\nwebsiteUrl = \"https://city-mobil.ru\"\n\n[sportmaster]\nname = \"Спортмастер\"\nwebsiteUrl = \"https://www.sportmaster.ru\"\n\n[uchiru]\nname = \"Учи.ру\"\nwebsiteUrl = \"https://uchi.ru\"\n\n[habr]\nname = \"Хабр\"\nwebsiteUrl = \"https://habr.com/ru\"\n\n[cian]\nname = \"ЦИАН\"\nwebsiteUrl = \"https://cian.ru\"\n\n[yoomoney]\nname = \"ЮMoney (Яндекс.Деньги)\"\nwebsiteUrl = \"https://yoomoney.ru\"\n\n[yandex]\nname = \"Яндекс\"\nwebsiteUrl = \"https://www.yandex.ru/\"\n\n[2gis]\nname = \"2ГИС\"\nwebsiteUrl = \"https://2gis.ru\"\n"
  },
  {
    "path": "website/src/domain/company/data.toml",
    "content": "[datadog]\nname = \"Datadog\"\nwebsiteUrl = \"https://www.datadoghq.com\"\nblogUrl = \"https://www.datadoghq.com/blog/engineering/\"\nrssUrl = \"https://www.datadoghq.com/blog/engineering/index.xml\"\n\n[aha]\nname = \"Aha!\"\nwebsiteUrl = \"https://www.aha.io\"\nblogUrl = \"https://www.aha.io/engineering\"\nrssUrl = \"https://www.aha.io/engineering/rss.xml\"\n\n[airbnb]\nname = \"Airbnb\"\nwebsiteUrl = \"https://www.airbnb.com\"\nblogUrl = \"https://medium.com/airbnb-engineering\"\nrssUrl = \"https://medium.com/feed/airbnb-engineering\"\n\n[aldo]\nname = \"ALDO Group\"\nwebsiteUrl = \"https://www.aldogroup.com\"\n\n[algolia]\nname = \"Algolia\"\nwebsiteUrl = \"https://www.algolia.com\"\nblogUrl = \"https://www.algolia.com/blog/engineering\"\n\n[allegro]\nname = \"Allegro\"\nwebsiteUrl = \"https://about.allegro.eu\"\nblogUrl = \"https://blog.allegro.tech\"\nrssUrl = \"https://blog.allegro.tech/feed.xml\"\n\n[amazon]\nname = \"Amazon\"\nwebsiteUrl = \"https://www.amazon.com\"\n\n[artsy]\nname = \"Artsy\"\nwebsiteUrl = \"https://www.artsy.net\"\nblogUrl = \"https://artsy.github.io/blog/archives\"\nrssUrl = \"https://artsy.github.io/feed\"\n\n[nextroll]\nname = \"NextRoll\"\nwebsiteUrl = \"https://www.nextroll.com\"\nblogUrl = \"https://tech.nextroll.com/blog\"\nrssUrl = \"https://tech.nextroll.com/feed.xml\"\n\n[atlassian]\nname = \"Atlassian\"\nwebsiteUrl = \"https://www.atlassian.com\"\nblogUrl = \"https://www.atlassian.com/blog/atlassian-engineering\"\nrssUrl = \"https://www.atlassian.com/blog/atlassian-engineering/feed\"\n\n[abc]\nname = \"Australian Broadcasting Corporation\"\nwebsiteUrl = \"http://abc.net.au\"\nblogUrl = \"https://www.abc.net.au/digital-product\"\n\n[bumble]\nname = \"Bumble\"\nwebsiteUrl = \"https://bumble.com\"\nblogUrl = \"https://medium.com/bumble-tech\"\nrssUrl = \"https://medium.com/feed/bumble-tech\"\n\n[bbc]\nname = \"BBC\"\nwebsiteUrl = \"http://www.bbc.com\"\n\n[bettycrocker]\nname = \"Betty Crocker\"\nwebsiteUrl = \"https://www.bettycrocker.com\"\n\n[bitmovin]\nname = \"Bitmovin\"\nwebsiteUrl = \"https://bitmovin.com\"\n\n[bloomberg]\nname = \"Bloomberg\"\nwebsiteUrl = \"https://www.bloomberg.com/\"\n\n[buzzfeed]\nname = \"BuzzFeed\"\nwebsiteUrl = \"https://www.buzzfeed.com\"\n\n[campaignmonitor]\nname = \"Campaign Monitor\"\nwebsiteUrl = \"https://www.campaignmonitor.com/\"\n\n[carousell]\nname = \"Carousell\"\nwebsiteUrl = \"https://carousell.com\"\nblogUrl = \"https://medium.com/carousell-insider\"\nrssUrl = \"https://medium.com/feed/carousell-insider\"\n\n[carscom]\nname = \"cars.com\"\nwebsiteUrl = \"https://www.cars.com\"\n\n[checkbot]\nname = \"Checkbot\"\nwebsiteUrl = \"https://www.checkbot.io/\"\n\n[clearleft]\nname = \"Clearleft\"\nwebsiteUrl = \"https://clearleft.com\"\n\n[cloudflare]\nname = \"Cloudflare\"\nwebsiteUrl = \"https://www.cloudflare.com/\"\n\n[cloudfour]\nname = \"Cloud Four\"\nwebsiteUrl = \"https://cloudfour.com/\"\n\n[codesandbox]\nname = \"CodeSandbox\"\nwebsiteUrl = \"https://codesandbox.io/\"\n\n[condenast]\nname = \"Condé Nast\"\nwebsiteUrl = \"http://www.condenast.com\"\n\n[conductor]\nname = \"Conductor\"\nwebsiteUrl = \"https://www.conductor.com/\"\n\n[dazn]\nname = \"DAZN\"\nwebsiteUrl = \"https://dazn.com/\"\n\n[voorhoede]\nname = \"De Voorhoede\"\nwebsiteUrl = \"https://www.voorhoede.nl\"\n\n[dev]\nname = \"DEV\"\nwebsiteUrl = \"https://dev.to\"\n\n[discord]\nname = \"Discord\"\nwebsiteUrl = \"https://discordapp.com/\"\n\n[divriots]\nname = \"<div>RIOTS\"\nwebsiteUrl = \"https://divriots.com\"\n\n[doordash]\nname = \"DoorDash\"\nwebsiteUrl = \"https://www.doordash.com\"\n\n[dropbox]\nname = \"Dropbox\"\nwebsiteUrl = \"https://www.dropbox.com\"\n\n[ebay]\nname = \"eBay\"\nwebsiteUrl = \"https://www.ebay.com\"\n\n[edgedb]\nname = \"EdgeDB\"\nwebsiteUrl = \"https://www.edgedb.com\"\n\n[ea]\nname = \"Electronic Arts\"\nwebsiteUrl = \"https://www.ea.com\"\n\n[eleme]\nname = \"Ele.me\"\nwebsiteUrl = \"https://www.ele.me\"\n\n[etsy]\nname = \"Etsy\"\nwebsiteUrl = \"https://www.etsy.com\"\n\n[excalidraw]\nname = \"Excalidraw\"\nwebsiteUrl = \"https://excalidraw.com\"\nblogUrl = \"https://plus.excalidraw.com/blog\"\n\n[evilmartians]\nname = \"Evil Martians\"\nwebsiteUrl = \"https://evilmartians.com/\"\n\n[expediagroup]\nname = \"Expedia Group\"\nwebsiteUrl = \"https://www.expediagroup.com\"\n\n[ezcater]\nname = \"ezCater\"\nwebsiteUrl = \"https://www.ezcater.com/\"\n\n[meta]\nname = \"Meta\"\nwebsiteUrl = \"https://www.meta.com\"\nblogUrl = \"https://engineering.fb.com/category/web/\"\n\n[farfetch]\nname = \"FARFETCH\"\nwebsiteUrl = \"https://www.farfetch.com\"\n\n[fastqbio]\nname = \"fastq.bio\"\nwebsiteUrl = \"http://www.fastq.bio/\"\n\n[figma]\nname = \"Figma\"\nwebsiteUrl = \"https://www.figma.com\"\n\n[ft]\nname = \"Financial Times\"\nwebsiteUrl = \"https://www.ft.com\"\n\n[flickr]\nname = \"Flickr\"\nwebsiteUrl = \"https://www.flickr.com/\"\n\n[flipboard]\nname = \"Flipboard\"\nwebsiteUrl = \"https://flipboard.com\"\n\n[flipkart]\nname = \"Flipkart\"\nwebsiteUrl = \"https://www.flipkart.com\"\n\n[flocktory]\nname = \"Flocktory\"\nwebsiteUrl = \"https://www.flocktory.com\"\n\n[futurice]\nname = \"Futurice\"\nwebsiteUrl = \"https://futurice.com\"\n\n[garbarino]\nname = \"Garbarino\"\nwebsiteUrl = \"https://www.garbarino.com/\"\n\n[github]\nname = \"GitHub\"\nwebsiteUrl = \"https://github.com\"\n\n[gitlab]\nname = \"GitLab\"\nwebsiteUrl = \"https://gitlab.com\"\n\n[goibibo]\nname = \"Goibibo\"\nwebsiteUrl = \"https://www.goibibo.com\"\n\n[google]\nname = \"Google\"\nwebsiteUrl = \"https://google.com\"\n\n[govuk]\nname = \"GOV.UK\"\nwebsiteUrl = \"https://www.gov.uk\"\n\n[grammarly]\nname = \"grammarly\"\nwebsiteUrl = \"https://www.grammarly.com\"\n\n[gusto]\nname = \"Gusto\"\nwebsiteUrl = \"https://gusto.com/\"\n\n[healthcaregov]\nname = \"HealthCare.gov\"\nwebsiteUrl = \"https://www.healthcare.gov/\"\n\n[heap]\nname = \"Heap\"\nwebsiteUrl = \"https://heap.io\"\n\n[inderapotheke]\nname = \"in der Apotheke\"\nwebsiteUrl = \"https://www.inderapotheke.de/\"\n\n[infinitered]\nname = \"Infinite Red\"\nwebsiteUrl = \"https://infinite.red/\"\n\n[insider-inc]\nname = \"Insider Inc.\"\nwebsiteUrl = \"https://www.insider-inc.com/\"\n\n[instagram]\nname = \"Instagram\"\nwebsiteUrl = \"https://www.instagram.com/\"\n\n[internetarchive]\nname = \"Internet Archive\"\nwebsiteUrl = \"https://archive.org/\"\n\n[intuit]\nname = \"Intuit\"\nwebsiteUrl = \"https://www.intuit.com\"\n\n[invision]\nname = \"InVision\"\nwebsiteUrl = \"https://www.invisionapp.com\"\n\n[khanacademy]\nname = \"Khan Academy\"\nwebsiteUrl = \"http://khanacademy.org/\"\n\n[kickstarter]\nname = \"Kickstarter\"\nwebsiteUrl = \"https://www.kickstarter.com/\"\n\n[klarna]\nname = \"Klarna\"\nwebsiteUrl = \"https://www.klarna.com\"\nblogUrl = \"https://engineering.klarna.com\"\nrssUrl = \"https://engineering.klarna.com/feed\"\n\n[line]\nname = \"Line\"\nwebsiteUrl = \"https://linecorp.com/en\"\n\n[linkedin]\nname = \"LinkedIn\"\nwebsiteUrl = \"https://www.linkedin.com\"\nblogUrl = \"https://www.linkedin.com/blog/engineering\"\n\n[lucidchart]\nname = \"Lucidchart\"\nwebsiteUrl = \"https://www.lucidchart.com/\"\n\n[lyft]\nname = \"Lyft\"\nwebsiteUrl = \"https://lyft.com\"\n\n[mailru]\nname = \"Mail.ru\"\nwebsiteUrl = \"https://mail.ru\"\n\n[mailchimp]\nname = \"Mailchimp\"\nwebsiteUrl = \"https://mailchimp.com\"\n\n[mdn]\nname = \"MDN\"\nwebsiteUrl = \"https://developer.mozilla.org\"\n\n[medium]\nname = \"Medium\"\nwebsiteUrl = \"https://medium.com/\"\n\n[memsql]\nname = \"MemSQL\"\nwebsiteUrl = \"https://www.memsql.com\"\n\n[mercadolibre]\nname = \"Mercado Libre\"\nwebsiteUrl = \"http://www.mercadolibre.com\"\n\n[microsoft]\nname = \"Microsoft\"\nwebsiteUrl = \"https://www.microsoft.com\"\nblogUrl = \"https://medium.com/web-on-the-edge\"\nrssUrl = \"https://medium.com/feed/web-on-the-edge\"\n\n[mixmax]\nname = \"Mixmax\"\nwebsiteUrl = \"https://mixmax.com/\"\n\n[mixpanel]\nname = \"Mixpanel\"\nwebsiteUrl = \"https://mixpanel.com/\"\n\n[monzo]\nname = \"Monzo\"\nwebsiteUrl = \"https://monzo.com\"\n\n[mozilla]\nname = \"Mozilla\"\nwebsiteUrl = \"https://www.mozilla.org\"\n\n[mud]\nname = \"Mud\"\nwebsiteUrl = \"https://ournameismud.co.uk\"\n\n[myntra]\nname = \"Myntra\"\nwebsiteUrl = \"https://www.myntra.com\"\n\n[netflix]\nname = \"Netflix\"\nwebsiteUrl = \"https://netflix.com\"\nblogUrl = \"https://netflixtechblog.medium.com\"\nrssUrl = \"https://netflixtechblog.medium.com/feed\"\n\n[notion]\nname = \"Notion\"\nwebsiteUrl = \"https://www.notion.so\"\n\n[npm]\nname = \"npm\"\nwebsiteUrl = \"https://www.npmjs.com\"\n\n[okgrow]\nname = \"OK GROW!\"\nwebsiteUrl = \"https://www.pauldowman.com/posts/shutting-down-okgrow\"\n\n[oyo]\nname = \"OYO\"\nwebsiteUrl = \"https://www.oyorooms.com\"\n\n[oyster]\nname = \"Oyster\"\nwebsiteUrl = \"https://www.oyster.com/\"\n\n[palantir]\nname = \"Palantir\"\nwebsiteUrl = \"https://www.palantir.com/\"\n\n[paypal]\nname = \"PayPal\"\nwebsiteUrl = \"https://www.paypal.com\"\n\n[pinafore]\nname = \"Pinafore\"\nwebsiteUrl = \"https://pinafore.social\"\n\n[pinterest]\nname = \"Pinterest\"\nwebsiteUrl = \"https://pinterest.com\"\n\n[pivotaltracker]\nname = \"Pivotal Tracker\"\nwebsiteUrl = \"https://www.pivotaltracker.com\"\n\n[plaid]\nname = \"Plaid\"\nwebsiteUrl = \"https://plaid.com\"\n\n[producthunt]\nname = \"Product Hunt\"\nwebsiteUrl = \"https://www.producthunt.com\"\n\n[proton]\nname = \"Proton\"\nwebsiteUrl = \"https://proton.me\"\n\n[quizlet]\nname = \"Quizlet\"\nwebsiteUrl = \"https://quizlet.com/\"\n\n[quora]\nname = \"Quora\"\nwebsiteUrl = \"https://www.quora.com/\"\n\n[reagroup]\nname = \"REA Group\"\nwebsiteUrl = \"https://www.rea-group.com/\"\n\n[reaktor]\nname = \"Reaktor\"\nwebsiteUrl = \"https://reaktor.com/\"\n\n[reddit]\nname = \"Reddit\"\nwebsiteUrl = \"https://about.reddit.com\"\n\n[redmart]\nname = \"Redmart\"\nwebsiteUrl = \"https://redmart.com/\"\n\n[replit]\nname = \"repl.it\"\nwebsiteUrl = \"https://repl.it\"\n\n[revolut]\nname = \"Revolut\"\nwebsiteUrl = \"https://www.revolut.com\"\n\n[roompact]\nname = \"Roompact\"\nwebsiteUrl = \"https://roompact.com\"\n\n[safetyculture]\nname = \"Safety Culture\"\nwebsiteUrl = \"https://safetyculture.com/\"\n\n[scratch]\nname = \"Scratch\"\nwebsiteUrl = \"https://scratch.mit.edu\"\n\n[sentry]\nname = \"Sentry\"\nwebsiteUrl = \"https://sentry.io\"\n\n[shopify]\nname = \"Shopify\"\nwebsiteUrl = \"https://shopify.com\"\nblogUrl = \"https://shopify.engineering\"\n\n[skillshare]\nname = \"Skillshare\"\nwebsiteUrl = \"https://skillshare.com/\"\n\n[slack]\nname = \"Slack\"\nwebsiteUrl = \"https://slack.com\"\nblogUrl = \"https://slack.engineering\"\n\n[snipcart]\nname = \"Snipcart\"\nwebsiteUrl = \"https://snipcart.com\"\n\n[soundcloud]\nname = \"SoundCloud\"\nwebsiteUrl = \"https://soundcloud.com/\"\n\n[spectrum]\nname = \"Spectrum\"\nwebsiteUrl = \"https://spectrum.chat/\"\n\n[spotify]\nname = \"Spotify\"\nwebsiteUrl = \"https://www.spotify.com\"\n\n[stackoverflow]\nname = \"Stack Overflow\"\nwebsiteUrl = \"https://stackoverflow.com\"\n\n[stripe]\nname = \"stripe\"\nwebsiteUrl = \"https://stripe.com\"\n\n[sumup]\nname = \"SumUp\"\nwebsiteUrl = \"https://sumup.com\"\n\n[superhuman]\nname = \"Superhuman\"\nwebsiteUrl = \"https://superhuman.com\"\n\n[takeshape]\nname = \"TakeShape\"\nwebsiteUrl = \"https://www.takeshape.io\"\n\n[tailscale]\nname = \"Tailscale\"\nwebsiteUrl = \"https://tailscale.com\"\nblogUrl = \"https://tailscale.com/blog\"\nrssUrl = \"https://tailscale.com/blog/index.xml\"\n\n[theguardian]\nname = \"The Guardian\"\nwebsiteUrl = \"https://www.theguardian.com/\"\n\n[theknotww]\nname = \"The Knot Worldwide\"\nwebsiteUrl = \"https://www.theknotww.com/\"\n\n[nytimes]\nname = \"The New York Times\"\nwebsiteUrl = \"https://www.nytimes.com\"\n\n[telegraph]\nname = \"The Telegraph\"\nwebsiteUrl = \"https://www.telegraph.co.uk\"\n\n[thetimescouk]\nname = \"The Times & The Sunday Times\"\nwebsiteUrl = \"https://www.thetimes.co.uk\"\n\n[usdsgov]\nname = \"The U.S. Digital Service\"\nwebsiteUrl = \"https://www.usds.gov/\"\n\n[wsj]\nname = \"The Wall Street Journal\"\nwebsiteUrl = \"https://www.wsj.com\"\n\n[thisalso]\nname = \"This Also\"\nwebsiteUrl = \"http://thisalso.com\"\n\n[thomasnet]\nname = \"ThomasNet\"\nwebsiteUrl = \"https://www.thomasnet.com/\"\n\n[thread]\nname = \"Thread\"\nwebsiteUrl = \"https://www.thread.com/\"\n\n[tinder]\nname = \"Tinder\"\nwebsiteUrl = \"https://tinder.com\"\n\n[tines]\nname = \"Tines\"\nwebsiteUrl = \"https://www.tines.com\"\nblogUrl = \"https://www.tines.com/blog/engineering\"\n\n[tiny]\nname = \"Tiny\"\nwebsiteUrl = \"https://www.tiny.cloud\"\n\n[tokopedia]\nname = \"Tokopedia\"\nwebsiteUrl = \"hthttps://www.tokopedia.com\"\n\n[treebo]\nname = \"Treebo\"\nwebsiteUrl = \"https://www.treebo.com/\"\n\n[trivago]\nname = \"Trivago\"\nwebsiteUrl = \"https://www.trivago.com\"\n\n[tumblr]\nname = \"Tumblr\"\nwebsiteUrl = \"https://www.tumblr.com/\"\n\n[twitch]\nname = \"Twitch\"\nwebsiteUrl = \"https://www.twitch.tv\"\n\n[twitter]\nname = \"Twitter\"\nwebsiteUrl = \"https://twitter.com\"\n\n[uber]\nname = \"Uber\"\nwebsiteUrl = \"https://www.uber.com\"\n\n[udacity]\nname = \"Udacity\"\nwebsiteUrl = \"https://www.udacity.com/\"\n\n[unity]\nname = \"Unity\"\nwebsiteUrl = \"https://unity.com/\"\n\n[unsplash]\nname = \"Unsplash\"\nwebsiteUrl = \"https://unsplash.com\"\n\n[vercel]\nname = \"Vercel\"\nwebsiteUrl = \"https://vercel.com\"\n\n[walmartlabs]\nname = \"Walmart Labs\"\nwebsiteUrl = \"https://www.walmartlabs.com/\"\n\n[wikimedia]\nname = \"Wikimedia\"\nwebsiteUrl = \"https://www.wikimedia.org\"\n\n[wingify]\nname = \"Wingify\"\nwebsiteUrl = \"https://wingify.com/\"\n\n[wix]\nname = \"Wix\"\nwebsiteUrl = \"https://www.wix.com/\"\n\n[yelp]\nname = \"Yelp\"\nwebsiteUrl = \"https://www.yelp.com\"\n\n[ynab]\nname = \"YNAB\"\nwebsiteUrl = \"https://www.youneedabudget.com\"\n\n[youtube]\nname = \"YouTube\"\nwebsiteUrl = \"https://www.youtube.com\"\n\n[zajno]\nname = \"Zajno\"\nwebsiteUrl = \"https://zajno.com/\"\n\n[zynga]\nname = \"Zynga\"\nwebsiteUrl = \"https://www.zynga.com/\"\n\n[18f]\nname = \"18F\"\nwebsiteUrl = \"https://18f.gsa.gov/\"\n\n[1password]\nname = \"1Password\"\nwebsiteUrl = \"https://1password.com/\"\n\n[godaddy]\nname = \"GoDaddy\"\nwebsiteUrl = \"https://www.godaddy.com\"\nblogUrl = \"https://www.godaddy.com/resources/category/engineering\"\n\n[booking]\nname = \"Booking.com\"\nwebsiteUrl = \"https://www.booking.com\"\nblogUrl = \"https://blog.booking.com\"\n\n[salesforce]\nname = \"Salesforce\"\nwebsiteUrl = \"https://www.salesforce.com\"\nblogUrl = \"https://engineering.salesforce.com\"\nrssUrl = \"https://engineering.salesforce.com/feed/\"\n\n[botify]\nname = \"Botify\"\nwebsiteUrl = \"https://www.botify.com\"\nblogUrl = \"https://medium.com/botify-labs\"\nrssUrl = \"https://medium.com/feed/botify-labs\"\n\n[hootsuite]\nname = \"Hootsuite\"\nwebsiteUrl = \"https://hootsuite.com\"\nblogUrl = \"https://medium.com/hootsuite-engineering\"\nrssUrl = \"https://medium.com/feed/hootsuite-engineering\"\n\n[preply]\nname = \"Preply\"\nwebsiteUrl = \"https://preply.com\"\nblogUrl = \"https://medium.com/preply-engineering\"\nrssUrl = \"https://medium.com/feed/preply-engineering\"\n\n[intercom]\nname = \"Intercom\"\nwebsiteUrl = \"https://www.intercom.com\"\nblogUrl = \"https://www.intercom.com/blog/engineering\"\nrssUrl = \"https://www.intercom.com/blog/engineering/feed/\"\n\n[coursera]\nname = \"Coursera\"\nwebsiteUrl = \"https://www.coursera.org\"\nblogUrl = \"https://medium.com/coursera-engineering\"\nrssUrl = \"https://medium.com/feed/coursera-engineering\"\n\n[hubspot]\nname = \"Hubspot\"\nwebsiteUrl = \"https://www.hubspot.com\"\nblogUrl = \"https://product.hubspot.com/blog/\"\nrssUrl = \"https://product.hubspot.com/blog/rss.xml\"\n\n[mercedes-benz]\nname = \"Mercedes-Benz\"\nwebsiteUrl = \"https://www.mercedes-benz.com\"\nblogUrl = \"https://www.mercedes-benz.io/blog\"\n\n[patreon]\nname = \"Patreon\"\nwebsiteUrl = \"https://www.patreon.com\"\nblogUrl = \"https://www.patreon.com/cw/engineering/posts\"\n\n[calm]\nname = \"Calm\"\nwebsiteUrl = \"https://www.calm.com\"\nblogUrl = \"https://blog.calm.com/engineering\"\nrssUrl = \"https://blog.calm.com/engineering?format=rss\"\n\n[framer]\nname = \"Framer\"\nwebsiteUrl = \"https://www.framer.com\"\nblogUrl = \"https://www.framer.com/blog/engineering\"\n"
  },
  {
    "path": "website/src/domain/company/lib/index.ts",
    "content": "import { getCollection, getEntry, type CollectionEntry } from \"astro:content\";\nimport { parse } from \"smol-toml\";\nimport type { Company } from \"../schema\";\n\nexport function getAllCompanies(): Promise<CollectionEntry<\"companies\">[]> {\n  return getCollection(\"companies\");\n}\n\nexport async function getCompany(\n  id: string\n): Promise<CollectionEntry<\"companies\">> {\n  const entry = await getEntry(\"companies\", id);\n\n  if (!entry) {\n    throw new Error(`Company ${id} not found`);\n  }\n\n  return entry;\n}\n\nexport function parseCompaniesFromTomlUnsafe(sourceToml: string): Company[] {\n  return Object.entries(parse(sourceToml)).map(([id, company]) => ({\n    // @ts-expect-error\n    ...company,\n    id,\n  }));\n}\n"
  },
  {
    "path": "website/src/domain/company/schema.ts",
    "content": "import { z } from \"astro:content\";\n\nexport const companySchema = z.object({\n  id: z.string(),\n  name: z.string(),\n  websiteUrl: z.string().url(),\n  blogUrl: z.optional(z.string().url()),\n  rssUrl: z.optional(z.string().url()),\n});\n\nexport type Company = z.infer<typeof companySchema>;\n"
  },
  {
    "path": "website/src/layouts/BaseLayout.astro",
    "content": "---\nimport \"@/styles/reset.css\";\nimport \"@/styles/base.css\";\nimport \"@/styles/links.css\";\nimport \"@/styles/utility.css\";\nimport { SITE_NAME, SITE_URL } from \"@/config\";\nimport Header from \"@/components/Header.astro\";\nimport Footer from \"@/components/Footer.astro\";\n\ninterface Props {\n  title: string;\n  description: string;\n}\n\nconst { title, description } = Astro.props;\n---\n\n<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width\" />\n\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/s/images/favicon.svg\" />\n    <link\n      rel=\"icon\"\n      type=\"image/png\"\n      href=\"/s/images/favicon-96x96.png\"\n      sizes=\"96x96\"\n    />\n    <link rel=\"shortcut icon\" href=\"/s/images/favicon.ico\" />\n    <link\n      rel=\"apple-touch-icon\"\n      sizes=\"180x180\"\n      href=\"/s/images/apple-touch-icon.png\"\n    />\n    <meta name=\"apple-mobile-web-app-title\" content={title} />\n\n    <title>{title}</title>\n    <meta name=\"description\" content={description} />\n\n    <meta property=\"og:type\" content=\"website\" />\n    <meta property=\"og:title\" content={title} />\n    <meta property=\"og:description\" content={description} />\n    <meta property=\"og:url\" content={new URL(Astro.originPathname, SITE_URL)} />\n    <meta property=\"og:image\" content=\"/s/images/social.png\" />\n    <meta property=\"og:site_name\" content={SITE_NAME} />\n\n    <meta property=\"twitter:card\" content=\"summary_large_image\" />\n    <meta property=\"twitter:title\" content={title} />\n    <meta property=\"twitter:description\" content={description} />\n    <meta property=\"twitter:image\" content=\"/s/images/social.png\" />\n\n    <slot name=\"rss\" />\n    <link rel=\"sitemap\" href=\"/sitemap-index.xml\" />\n  </head>\n\n  <body>\n    <Header />\n    <main>\n      <slot />\n    </main>\n    <Footer />\n  </body>\n</html>\n\n<style>\n  body {\n    display: grid;\n    grid-template-rows: min-content 1fr min-content;\n    grid-template-columns: 1fr;\n    gap: 1rem;\n    border-top: none;\n    border-bottom: none;\n    margin: auto;\n    padding: 1rem;\n  }\n\n  @media (min-width: 66rem) {\n    body {\n      display: grid;\n      grid-template-columns:\n        [full-start] minmax(min-content, 1fr)\n        [main-start] minmax(0, 60rem)\n        [main-end] minmax(min-content, 1fr)\n        [full-end];\n    }\n\n    main {\n      align-items: start;\n      grid-column: full;\n      display: grid;\n      grid-template-columns: subgrid;\n      grid-auto-rows: max-content;\n    }\n  }\n</style>\n\n<script\n  defer\n  data-domain=\"frontendcs.com\"\n  src=\"https://analytics.andrew-r.ru/js/script.js\"\n  integrity=\"sha384-tPOxpLA2/UQKnIkz9xzbWtR4zQVKGeV8UuJKit0l3PQToVtMKtGT9iybQfhxLo+J\"\n  crossorigin=\"anonymous\"></script>\n"
  },
  {
    "path": "website/src/pages/companies/[company]/index.astro",
    "content": "---\nimport BaseLayout from \"@/layouts/BaseLayout.astro\";\nimport { getAllCompanies, getCompany } from \"@/domain/company/lib\";\nimport { getAllCaseStudiesByCompany } from \"@/domain/caseStudy/lib\";\nimport CaseStudiesList from \"@/components/CaseStudiesList.astro\";\nimport { SITE_DESCRIPTION, SITE_NAME } from \"@/config\";\nimport RssLink from \"@/components/RssLink.astro\";\nimport RssMetaLink from \"@/components/RssMetaLink.astro\";\n\nexport async function getStaticPaths() {\n  const pages = await getAllCompanies();\n\n  return pages.map((page) => ({\n    params: {\n      company: page.id,\n    },\n  }));\n}\n\nconst company = await getCompany(Astro.params.company);\nconst caseStudiesByCompany = await getAllCaseStudiesByCompany();\nconst caseStudies = caseStudiesByCompany[company.id] ?? [];\n\nconst websiteUrlPreview = new URL(company.data.websiteUrl).host.replace(\n  /^www\\./,\n  \"\"\n);\n\nconst title = `${company.data.name} Case Studies`;\nconst rssFeedLink = `${Astro.originPathname}/rss.xml`;\n---\n\n<BaseLayout title={title} description={SITE_DESCRIPTION}>\n  <RssMetaLink\n    slot=\"rss\"\n    title={`${company.data.name} case studies RSS feed`}\n    href={rssFeedLink}\n  />\n\n  <div class=\"company\">\n    <h2>{company?.data.name}</h2>\n    <p class=\"subtitle\">\n      {\n        [\n          <a href={company.data.websiteUrl}>{websiteUrlPreview}</a>,\n          company.data.blogUrl ? (\n            <a href={company.data.blogUrl}>Engineering blog</a>\n          ) : null,\n          <>\n            {caseStudies.length} case{\" \"}\n            <span class=\"nobr\">\n              {caseStudies.length > 1 ? \"studies\" : \"study\"}\n              <RssLink href={rssFeedLink} />\n            </span>\n          </>,\n        ]\n          .filter(Boolean)\n          .reduce(\n            (result, item) =>\n              result === null ? (\n                item\n              ) : (\n                <>\n                  {result} • {item}\n                </>\n              ),\n            null\n          )\n      }\n    </p>\n  </div>\n\n  <CaseStudiesList items={caseStudies} />\n</BaseLayout>\n\n<style>\n  h2 {\n    font-size: 3.5rem;\n  }\n\n  .subtitle {\n    color: var(--color-muted);\n    font-size: 1.5rem;\n  }\n\n  @media (min-width: 66rem) {\n    .company {\n      grid-column: main;\n    }\n\n    h2 {\n      margin-block: 0.5rem;\n    }\n  }\n</style>\n"
  },
  {
    "path": "website/src/pages/companies/[company]/rss.xml.ts",
    "content": "import rss, { rssSchema } from \"@astrojs/rss\";\nimport { z } from \"astro:content\";\nimport { SITE_DESCRIPTION, SITE_NAME, SITE_URL } from \"../../../config\";\nimport { getAllCompanies, getCompany } from \"../../../domain/company/lib\";\nimport type {\n  APIRoute,\n  InferGetStaticParamsType,\n  InferGetStaticPropsType,\n} from \"astro\";\nimport { getAllCaseStudiesByCompany } from \"../../../domain/caseStudy/lib\";\n\ntype RssItem = z.infer<typeof rssSchema>;\n\nexport async function getStaticPaths() {\n  const pages = await getAllCompanies();\n\n  return pages.map((page) => ({\n    params: {\n      company: page.id,\n    },\n  }));\n}\n\ntype Params = InferGetStaticParamsType<typeof getStaticPaths>;\ntype Props = InferGetStaticPropsType<typeof getStaticPaths>;\n\nexport const GET: APIRoute<Props, Params> = async ({ params }) => {\n  const company = await getCompany(params.company);\n  const caseStudiesByCompany = await getAllCaseStudiesByCompany();\n\n  return rss({\n    title: `${company.data.name} — ${SITE_NAME}`,\n    description: SITE_DESCRIPTION,\n    site: SITE_URL,\n    customData: getCustomData(),\n    items:\n      caseStudiesByCompany[company.id]?.map(\n        (item): RssItem => ({\n          title: item.data.title,\n          pubDate: item.data.publishedAt,\n          description: `Case study by ${company.data.name}`,\n          link: item.data.id,\n        })\n      ) ?? [],\n  });\n};\n\nfunction getCustomData() {\n  return `\n  <language>en-us</language>\n  <image><url>${SITE_URL}/s/images/favicon-96x96.png</url><title>${SITE_NAME}</title><link>${SITE_URL}</link></image>\n  `.trim();\n}\n"
  },
  {
    "path": "website/src/pages/companies/index.astro",
    "content": "---\nimport BaseLayout from \"@/layouts/BaseLayout.astro\";\nimport Navigation from \"@/components/Navigation.astro\";\nimport { getAllCompanies } from \"@/domain/company/lib\";\nimport { getAllCaseStudiesByCompany } from \"@/domain/caseStudy/lib\";\nimport CaseStudiesList from \"@/components/CaseStudiesList.astro\";\nimport { SITE_DESCRIPTION, SITE_NAME } from \"@/config\";\nimport BackToTop from \"@/components/BackToTop.astro\";\n\nconst companies = (await getAllCompanies()).sort((a, b) =>\n  a.data.name.localeCompare(b.data.name)\n);\nconst caseStudiesByCompany = await getAllCaseStudiesByCompany();\n---\n\n<BaseLayout\n  title={`All Companies — ${SITE_NAME}`}\n  description={SITE_DESCRIPTION}\n>\n  <div class=\"content\">\n    <h2>All Companies</h2>\n    <Navigation\n      layout=\"column\"\n      items={companies.map((item) => ({ id: item.id, name: item.data.name }))}\n    />\n  </div>\n\n  <BackToTop />\n\n  {\n    companies.map((company) => {\n      const caseStudies = caseStudiesByCompany[company.id];\n\n      if (!caseStudies) {\n        return null;\n      }\n\n      return (\n        <section>\n          <h3 id={company.id}>\n            <a href={`/companies/${company.id}`}>{company.data.name}</a>\n            <sup class=\"muted\">{caseStudies.length}</sup>\n          </h3>\n\n          <CaseStudiesList items={caseStudies} showCompany />\n        </section>\n      );\n    })\n  }\n</BaseLayout>\n\n<style>\n  h2 {\n    margin-block-end: 2rem;\n    font-size: 3.5rem;\n  }\n\n  h3 {\n    margin-block-start: 3rem;\n  }\n\n  h3 > a {\n    text-decoration: none;\n  }\n\n  section {\n    display: contents;\n  }\n\n  @media (min-width: 66rem) {\n    .content,\n    h3 {\n      grid-column: main;\n    }\n  }\n</style>\n"
  },
  {
    "path": "website/src/pages/index.astro",
    "content": "---\nimport BaseLayout from \"@/layouts/BaseLayout.astro\";\nimport { getAllCaseStudiesByCompany } from \"@/domain/caseStudy/lib\";\nimport CaseStudiesList from \"@/components/CaseStudiesList.astro\";\nimport { SITE_DESCRIPTION, SITE_NAME, SITE_URL } from \"@/config\";\nimport BackToTop from \"@/components/BackToTop.astro\";\nimport RssMetaLink from \"@/components/RssMetaLink.astro\";\nimport Navigation from \"@/components/Navigation.astro\";\n\nconst caseStudiesByCompany = await getAllCaseStudiesByCompany();\nconst allCaseStudies = Object.values(caseStudiesByCompany).flatMap(\n  (item) => item ?? []\n);\nconst allCaseStudiesByYear = Object.groupBy(allCaseStudies, (item) =>\n  item.data.publishedAt.getFullYear()\n);\n---\n\n<BaseLayout title={SITE_NAME} description={SITE_DESCRIPTION}>\n  <RssMetaLink slot=\"rss\" title=\"RSS Feed\" href=\"/rss.xml\" />\n\n  <BackToTop />\n\n  <div class=\"content\">\n    <span class=\"muted\">By year /</span>\n    <a href=\"/companies\" class=\"novisited\">By company</a>\n    <h2>Latest Entries</h2>\n\n    <Navigation\n      layout=\"inline\"\n      items={Object.keys(allCaseStudiesByYear)\n        .toSorted((a, b) => parseInt(b, 10) - parseInt(a, 10))\n        .map((year) => ({\n          id: year,\n          name: year,\n        }))}\n    />\n  </div>\n\n  {\n    Object.entries(allCaseStudiesByYear)\n      .toSorted((a, b) => parseInt(b[0], 10) - parseInt(a[0], 10))\n      .map(([year, caseStudies]) => {\n        if (!caseStudies) {\n          return null;\n        }\n\n        return (\n          <section>\n            <h3 id={year}>\n              {year}\n              <small>\n                {caseStudies.length} case{\" \"}\n                {caseStudies.length > 1 ? \"studies\" : \"study\"}\n              </small>\n            </h3>\n\n            <CaseStudiesList items={caseStudies} showCompany />\n          </section>\n        );\n      })\n  }\n</BaseLayout>\n\n<style>\n  h2 {\n    margin-block: 0.25rem 1rem;\n  }\n\n  h3 {\n    margin-block-start: 2rem;\n  }\n\n  h3 > small {\n    display: block;\n    font-weight: normal;\n    margin-top: 0.5em;\n    color: var(--color-muted);\n    font-size: 1.25rem;\n  }\n\n  section {\n    display: contents;\n  }\n\n  @media (min-width: 66rem) {\n    .content,\n    h3 {\n      grid-column: main;\n    }\n\n    .companies {\n      grid-column: full;\n      display: grid;\n      grid-template-columns: subgrid;\n      grid-template-columns: minmax(40px, max-content) 1fr;\n      gap: 1rem;\n    }\n  }\n</style>\n"
  },
  {
    "path": "website/src/pages/rss.xml.ts",
    "content": "import rss, { rssSchema } from \"@astrojs/rss\";\nimport { getCollection, z } from \"astro:content\";\nimport { SITE_DESCRIPTION, SITE_NAME, SITE_URL } from \"@/config\";\n\ntype RssItem = z.infer<typeof rssSchema>;\n\nexport async function GET() {\n  const companies = await getCollection(\"companies\");\n  const companiesById = Object.fromEntries(\n    companies.map((company) => [company.data.id, company.data])\n  );\n  const caseStudies = await getCollection(\"caseStudies\");\n\n  return rss({\n    title: SITE_NAME,\n    description: SITE_DESCRIPTION,\n    site: SITE_URL,\n    customData: getCustomData(),\n    items: caseStudies.map(\n      (item): RssItem => ({\n        title: item.data.title,\n        pubDate: item.data.publishedAt,\n        description: `Case study by ${companiesById[item.data.company].name}`,\n        link: item.data.id,\n      })\n    ),\n  });\n}\n\nfunction getCustomData() {\n  return `\n  <language>en-us</language>\n  <image><url>${SITE_URL}/s/images/favicon-96x96.png</url><title>${SITE_NAME}</title><link>${SITE_URL}</link></image>\n  `.trim();\n}\n"
  },
  {
    "path": "website/src/styles/base.css",
    "content": ":root {\n  --color-bg: #f9f7ee;\n  --color-border: #e1e4e8;\n  --color-muted: #59636e;\n  --color-link: #0969da;\n  --color-link-hover: #cd192e;\n  --color-link-visited: purple;\n  --color-highlight: #ebe5cc;\n\n  --back-to-top-height: 3.5rem;\n\n  font-family: system-ui, sans-serif;\n  font-weight: normal;\n  background-color: var(--color-bg);\n  margin: 0;\n  width: 100%;\n  height: 100%;\n}\n\n/* Anything that has been anchored to should have extra scroll margin */\n:target {\n  scroll-margin-block: calc(var(--back-to-top-height) + 1.5rem);\n}\n\n@keyframes highlight {\n  0% {\n    background-color: var(--color-highlight);\n  }\n  100% {\n    background-color: transparent;\n  }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n\n  :target {\n    animation: highlight 4s;\n  }\n}\n\n/* Headings */\nh2 {\n  font-size: 2.5rem;\n}\n\nh3 {\n  font-size: 2rem;\n}\n"
  },
  {
    "path": "website/src/styles/links.css",
    "content": ".raw {\n  text-decoration: none;\n  color: inherit;\n}\n\na:not([class~=\"raw\"]) {\n  color: var(--color-link);\n  text-decoration: underline;\n  text-decoration-skip-ink: auto;\n  text-decoration-thickness: from-font;\n}\n\na:not([href^=\"#\"]):not([class~=\"raw\"]):not([class~=\"novisited\"]):visited {\n  color: var(--color-link-visited);\n}\n\n:is(a, a:visited):not([class~=\"raw\"]):is(:hover, :focus-visible) {\n  color: var(--color-link-hover);\n}\n\na[href^=\"#\"] {\n  text-decoration-style: dotted;\n}\n"
  },
  {
    "path": "website/src/styles/reset.css",
    "content": "/**\n * Based on https://piccalil.li/blog/a-more-modern-css-reset/\n */\n\n/* Box sizing rules */\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n  margin: 0;\n}\n\n/* Prevent font size inflation */\nhtml {\n  -moz-text-size-adjust: none;\n  -webkit-text-size-adjust: none;\n  text-size-adjust: none;\n}\n\nhtml,\nbody {\n  margin: 0;\n  padding: 0;\n}\n\n/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */\nul,\nol {\n  list-style: none;\n  padding: 0;\n}\n\n/* Set core body defaults */\nbody {\n  min-height: 100vh;\n  line-height: 1.5;\n}\n\n/* Set shorter line heights on headings and interactive elements */\nh1,\nh2,\nh3,\nh4,\nbutton,\ninput,\nlabel {\n  line-height: 1.1;\n}\n\n/* Make images easier to work with */\nimg,\npicture {\n  max-width: 100%;\n  display: block;\n}\n\n/* Inherit fonts for inputs and buttons */\ninput,\nbutton,\ntextarea,\nselect {\n  font-family: inherit;\n  font-size: inherit;\n}\n\n/* Make sure textareas without a rows attribute are not tiny */\ntextarea:not([rows]) {\n  min-height: 10em;\n}\n"
  },
  {
    "path": "website/src/styles/utility.css",
    "content": ".muted {\n  color: var(--color-muted);\n}\n\n.nobr {\n  white-space: nowrap;\n}\n"
  },
  {
    "path": "website/tsconfig.json",
    "content": "{\n  \"extends\": \"astro/tsconfigs/strict\",\n  \"include\": [\".astro/types.d.ts\", \"**/*\"],\n  \"exclude\": [\"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"src/*\"]\n    },\n    \"target\": \"ESNext\"\n  }\n}\n"
  }
]