master 4936235d7f69 cached
38 files
414.4 KB
128.7k tokens
20 symbols
1 requests
Download .txt
Showing preview only (431K chars total). Download the full file or copy to clipboard to get everything.
Repository: andrew--r/frontend-case-studies
Branch: master
Commit: 4936235d7f69
Files: 38
Total size: 414.4 KB

Directory structure:
gitextract_fzmf2njk/

├── .editorconfig
├── .nvmrc
├── readme.md
└── website/
    ├── .gitignore
    ├── CLAUDE.md
    ├── README.md
    ├── astro.config.mjs
    ├── package.json
    ├── public/
    │   └── robots.txt
    ├── src/
    │   ├── components/
    │   │   ├── BackToTop.astro
    │   │   ├── CaseStudiesList.astro
    │   │   ├── Factoids.astro
    │   │   ├── Footer.astro
    │   │   ├── Header.astro
    │   │   ├── Navigation.astro
    │   │   ├── RssLink.astro
    │   │   └── RssMetaLink.astro
    │   ├── config.ts
    │   ├── content.config.ts
    │   ├── domain/
    │   │   ├── caseStudy/
    │   │   │   ├── data.ru.toml
    │   │   │   ├── data.toml
    │   │   │   ├── lib/
    │   │   │   │   └── index.ts
    │   │   │   └── schema.ts
    │   │   └── company/
    │   │       ├── data.ru.toml
    │   │       ├── data.toml
    │   │       ├── lib/
    │   │       │   └── index.ts
    │   │       └── schema.ts
    │   ├── layouts/
    │   │   └── BaseLayout.astro
    │   ├── pages/
    │   │   ├── companies/
    │   │   │   ├── [company]/
    │   │   │   │   ├── index.astro
    │   │   │   │   └── rss.xml.ts
    │   │   │   └── index.astro
    │   │   ├── index.astro
    │   │   └── rss.xml.ts
    │   └── styles/
    │       ├── base.css
    │       ├── links.css
    │       ├── reset.css
    │       └── utility.css
    └── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
; top-most EditorConfig file
root = true

[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8
indent_style = space
indent_size = 2


================================================
FILE: .nvmrc
================================================
lts/jod


================================================
FILE: readme.md
================================================
![Frontend case studies logo](assets/logo.png)

Articles 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.

> [!IMPORTANT]
> 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.

## Table of contents

- [English](#english)
  - [AdRoll](#adroll)
  - [Aha!](#aha)
  - [Airbnb](#airbnb)
  - [ALDO](#aldo)
  - [Algolia](#algolia)
  - [Allegro](#allegro)
  - [Amazon](#amazon)
  - [Artsy](#artsy)
  - [Atlassian](#atlassian)
  - [Australian Broadcasting Corporation](#australian-broadcasting-corporation)
  - [Badoo](#badoo)
  - [BBC](#bbc)
  - [Betty Crocker](#betty-crocker)
  - [Bitmovin](#bitmovin)
  - [blogfoster](#blogfoster)
  - [Bloomberg](#bloomberg)
  - [BuzzFeed](#buzzfeed)
  - [Campaign Monitor](#campaign-monitor)
  - [Carbon Five](#carbon-five)
  - [Carousell](#carousell)
  - [cars.com](#carscom)
  - [Checkbot](#checkbot)
  - [Clearleft](#clearleft)
  - [Cloudflare](#cloudflare)
  - [Cloud Four](#cloud-four)
  - [CodeSandbox](#codesandbox)
  - [Condé Nast](#condé-nast)
  - [Conductor](#conductor)
  - [Datadog](#datadog)
  - [DAZN](#dazn)
  - [De Voorhoede](#de-voorhoede)
  - [DEV](#dev)
  - [Discord](#discord)
  - [<div>RIOTS](#divriots)
  - [DoorDash](#doordash)
  - [Dropbox](#dropbox)
  - [eBay](#ebay)
  - [EdgeDB](#edgedb)
  - [Electronic Arts](#electronic-arts)
  - [Ele.me](#eleme)
  - [Etsy](#etsy)
  - [Evil Martians](#evil-martians)
  - [Expedia Group](#expedia-group)
  - [ezCater](#ezcater)
  - [Facebook](#facebook)
  - [FARFETCH](#farfetch)
  - [fastq.bio](#fastqbio)
  - [Figma](#figma)
  - [Financial Times](#financial-times)
  - [Flickr](#flickr)
  - [Flipboard](#flipboard)
  - [Flipkart](#flipkart)
  - [Flocktory](#flocktory)
  - [Futurice](#futurice)
  - [Garbarino](#garbarino)
  - [GitHub](#github)
  - [GitLab](#gitlab)
  - [Goibibo](#goibibo)
  - [Google](#google)
  - [GOV.UK](#govuk)
  - [grammarly](#grammarly)
  - [Gusto](#gusto)
  - [HealthCare.gov](#healthcaregov)
  - [Heap](#heap)
  - [in der Apotheke](#in-der-apotheke)
  - [Infinite Red](#infinite-red)
  - [Insider Inc.](#insider-inc)
  - [Instagram](#instagram)
  - [Internet Archive](#internet-archive)
  - [Intuit](#intuit)
  - [InVision](#invision)
  - [Khan Academy](#khan-academy)
  - [Kickstarter](#kickstarter)
  - [Klarna](#klarna)
  - [Line](#line)
  - [LinkedIn](#linkedin)
  - [Lucidchart](#lucidchart)
  - [Lyft](#lyft)
  - [Mail.ru](#mailru)
  - [Mailchimp](#mailchimp)
  - [MDN](#mdn)
  - [Medium](#medium)
  - [MemSQL](#memsql)
  - [Mercado Libre](#mercado-libre)
  - [Microsoft Bing](#microsoft-bing)
  - [Microsoft To-Do](#microsoft-to-do)
  - [Mixmax](#mixmax)
  - [Mixpanel](#mixpanel)
  - [Monzo](#monzo)
  - [Mozilla](#mozilla)
  - [Mud](#mud)
  - [Myntra](#myntra)
  - [Netflix](#netflix)
  - [New Relic](#new-relic)
  - [Notion](#notion)
  - [npm](#npm)
  - [OK GROW!](#ok-grow)
  - [OYO](#oyo)
  - [Oyster](#oyster)
  - [Palantir](#palantir)
  - [PayPal](#paypal)
  - [Pinafore](#pinafore)
  - [Pinterest](#pinterest)
  - [Pivotal Tracker](#pivotal-tracker)
  - [Plaid](#plaid)
  - [Plotly](#plotly)
  - [Product Hunt](#product-hunt)
  - [Proton](#proton)
  - [Quizlet](#quizlet)
  - [Quora](#quora)
  - [REA Group](#rea-group)
  - [Reaktor](#reaktor)
  - [Reddit](#reddit)
  - [Redmart](#redmart)
  - [repl.it](#replit)
  - [Revolut](#revolut)
  - [Roompact](#roompact)
  - [Safety Culture](#safety-culture)
  - [Scratch](#scratch)
  - [Sentry](#sentry)
  - [Shopify](#shopify)
  - [Skillshare](#skillshare)
  - [Slack](#slack)
  - [Snipcart](#snipcart)
  - [SoundCloud](#soundcloud)
  - [Spectrum](#spectrum)
  - [Spotify](#spotify)
  - [Stack Overflow](#stack-overflow)
  - [stripe](#stripe)
  - [SumUp](#sumup)
  - [Superhuman](#superhuman)
  - [TakeShape](#takeshape)
  - [The Guardian](#the-guardian)
  - [The Knot Worldwide](#the-knot-worldwide)
  - [The New York Times](#the-new-york-times)
  - [The Telegraph](#the-telegraph)
  - [The Times & The Sunday Times](#the-times--the-sunday-times)
  - [The U.S. Digital Service](#the-us-digital-service)
  - [The Wall Street Journal](#the-wall-street-journal)
  - [This Also](#this-also)
  - [ThomasNet](#thomasnet)
  - [Thread](#thread)
  - [Tinder](#tinder)
  - [Tines](#tines)
  - [TinyMCE](#tinymce)
  - [Tokopedia](#tokopedia)
  - [Treebo](#treebo)
  - [Trivago](#trivago)
  - [Tumblr](#tumblr)
  - [Twitch](#twitch)
  - [Twitter](#twitter)
  - [Uber](#uber)
  - [Udacity](#udacity)
  - [Unity](#unity)
  - [Unsplash](#unsplash)
  - [Vercel](#vercel)
  - [Verve](#verve)
  - [Walmart Labs](#walmart-labs)
  - [Wikimedia](#wikimedia)
  - [Wingify](#wingify)
  - [Wix](#wix)
  - [Yelp](#yelp)
  - [YNAB](#ynab)
  - [YouTube](#youtube)
  - [Zajno](#zajno)
  - [Zynga](#zynga)
  - [18F](#18f)
  - [1Password](#1password)
  - [Miscellaneous](#miscellaneous)
- [Russian](#russian)
  - [Amplifr](#amplifr)
  - [Aviasales](#aviasales)
  - [Avito](#avito)
  - [auto.ru](#autoru)
  - [Badoo](#badoo-1)
  - [Delivery Club](#delivery-club)
  - [DIRECTUM](#directum)
  - [Flocktory](#flocktory-1)
  - [GitLab](#gitlab-1)
  - [HeadHunter](#headhunter)
  - [ISPsystem](#ispsystem)
  - [Joom](#joom)
  - [Mail.Ru](#mailru-1)
  - [Microsoft To-Do](#microsoft-to-do-1)
  - [Miro](#miro)
  - [Netcracker](#netcracker)
  - [OneTwoTrip](#onetwotrip)
  - [Rambler Group](#rambler-group)
  - [Setka](#setka)
  - [Skyeng](#skyeng)
  - [Sports.ru](#sportsru)
  - [Tinkoff](#tinkoff)
  - [Wrike](#wrike)
  - [Альфа-Банк](#Альфа-Банк)
  - [Бюро Горбунова](#Бюро-Горбунова)
  - [ВКонтакте](#ВКонтакте)
  - [Додо Пицца](#Додо-Пицца)
  - [Леруа Мерлен](#леруа-мерлен)
  - [Медуза](#Медуза)
  - [Одноклассники](#Одноклассники)
  - [Сбербанк](#Сбербанк)
  - [Ситимобил](#Ситимобил)
  - [Спортмастер](#Спортмастер)
  - [Учи.ру](#учиру)
  - [Хабр](#хабр)
  - [ЦИАН](#циан)
  - [ЮMoney (Яндекс.Деньги)](#юmoney-яндексденьги)
  - [Яндекс](#Яндекс)
  - [2ГИС](#2ГИС)
  - [Прочее](#прочее)
- [License](#license)

## English

### [AdRoll](https://www.adroll.com)

- [Lazy loading Backbone collections with Promises](http://tech.adroll.com/blog/web/2013/11/12/lazyloading-backbone-collection-with-promises.html) (November 12, 2013)
- [Rollup: Shared UI components at AdRoll](http://tech.adroll.com/blog/frontend/2015/11/05/rollup-shared-ui-components.html) (November 05, 2015)
- [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)
- [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)
- [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)
- [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)
- [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)

### [Aha!](https://www.aha.io)

- [How I Convinced Our CTO to Switch From CoffeeScript to ES6](https://blog.aha.io/coffescript-to-es6) (September 7, 2017)

### [Airbnb](https://www.airbnb.com)

- [Turbocharged JavaScript Refactoring with Codemods](https://medium.com/airbnb-engineering/turbocharged-javascript-refactoring-with-codemods-b0cae8b326b9) (April 27, 2016)
- [Rearchitecting Airbnb’s Frontend](https://medium.com/airbnb-engineering/rearchitecting-airbnbs-frontend-5e213efc24d2) (May 15, 2017)
- [Migrating from Mocha to Jest](https://medium.com/airbnb-engineering/unlocking-test-performance-migrating-from-mocha-to-jest-2796c508ec50) (June 15, 2017)
- [React Performance Fixes on Airbnb Listing Pages](https://medium.com/airbnb-engineering/recent-web-performance-fixes-on-airbnb-listing-pages-6cd8d93df6f4) (December 5, 2017)
- [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)
- [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)
- [Operationalizing Node.js for Server Side Rendering](https://medium.com/airbnb-engineering/operationalizing-node-js-for-server-side-rendering-c5ba718acfc9) (July 18, 2018)
- [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)
- [Building (And Re-Building) the Airbnb Design System](https://youtu.be/fHQ1WSx41CA) (October 30, 2019)
- [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)
- [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)
- [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)
- [Measuring Web Performance at Airbnb](https://medium.com/airbnb-engineering/measuring-web-performance-at-airbnb-122da8d3ea3f) (December 7, 2021)
- [Faster JavaScript Builds with Metro](https://medium.com/airbnb-engineering/faster-javascript-builds-with-metro-cfc46d617a1f) (May 24, 2022)
- [Airbnb’s Trip to Linaria](https://medium.com/airbnb-engineering/airbnbs-trip-to-linaria-dc169230bd12) (June 16, 2022)
- [Improving Performance with HTTP Streaming](https://medium.com/airbnb-engineering/improving-performance-with-http-streaming-ba9e72c66408) (May 17, 2023)
- [Rethinking Text Resizing on Web](https://medium.com/airbnb-engineering/rethinking-text-resizing-on-web-1047b12d2881) (May 16, 2024)
- [How Airbnb Smoothly Upgrades React](https://medium.com/airbnb-engineering/how-airbnb-smoothly-upgrades-react-b1d772a565fd) (July 23, 2024)
- [Adopting Bazel for Web at Scale](https://medium.com/airbnb-engineering/adopting-bazel-for-web-at-scale-a784b2dbe325) (Nov 12, 2024)

### [ALDO](https://www.aldogroup.com)

- [The Impact of Web Performance](https://simplified.dev/performance/impact-of-web-performance) (February 6, 2020)

### [Algolia](https://www.algolia.com)

- [Improving Web Performance to Mirror Engine Speed](https://blog.algolia.com/improving-web-performance-to-mirror-engine-speed) (July 26, 2017)
- [Using NetInfo API to Improve Algolia’s JavaScript Client](https://blog.algolia.com/netinfo-api-algolia-javascript-client/) (July 30, 2019)

### [Allegro](https://allegro.pl)

- [Managing Frontend in the Microservices Architecture](https://blog.allegro.tech/2016/03/Managing-Frontend-in-the-microservices-architecture.html) (March 12, 2016)
- [Why Allegro Ads chose TypeScript](https://blog.allegro.tech/2019/04/why-allegro-ads-chose-typescript.html) (April 9, 2019)
- [Page visibility and performance metrics](https://blog.allegro.tech/2019/09/page-visibility-and-performance-metrics.html) (September 2, 2019)
- [Performance of JavaScript optional chaining](https://blog.allegro.tech/2019/11/performance-of-javascript-optional-chaining.html) (November 8, 2019)
- [Using ESLint to improve your app’s performance](https://blog.allegro.tech/2020/08/using-eslint.html) (August 11, 2020)
- [Measuring Web Performance](https://blog.allegro.tech/2021/06/measuring-web-performance.html) (June 8, 2021)
- [Making API calls a seamless user experience](https://blog.allegro.tech/2021/07/making-api-calls-seamless-ux.html) (July 21, 2021)
- [CSS Architecture and Performance in Micro Frontends](https://blog.allegro.tech/2021/07/css-architecture-and-performance-of-micro-frontends.html) (July 29, 2021)
- [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)
- [Evolution of web performance culture](https://blog.allegro.tech/2021/09/evolution-of-web-performance-culture.html) (September 23, 2021)
- [How we refactored the search form UI component](https://blog.allegro.tech/2021/10/refactoring-opbox-search.html) (October 26, 2021)

### [Amazon](https://www.amazon.com)

- [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)
- [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)

### [Artsy](https://www.artsy.net/)

- [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)
- [The Tech Behind Live Auction Integration](http://artsy.github.io/blog/2016/08/09/the-tech-behind-live-auction-integration/) (August 9, 2016)
- [React Native at Artsy](http://artsy.github.io/blog/2016/08/15/React-Native-at-Artsy/) (August 15, 2016)
- [Making Artsy Editorial Accessible](http://artsy.github.io/blog/2017/08/29/Making-Artsy-Editorial-Accessible/) (August 29, 2017)
- [Helping the Web Towards OSS by Default](http://artsy.github.io/blog/2016/09/06/Milestone-on-OSS-by-Default/) (September 6, 2016)
- [JSON Web Tokens: Artsy's Journey](http://artsy.github.io/blog/2016/10/26/jwt-artsy-journey/) (October 26, 2016)
- [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)
- [Modernizing Force](http://artsy.github.io/blog/2017/09/05/Modernizing-Force/) (September 5, 2017)
- [React Native, 2 years later](http://artsy.github.io/blog/2018/03/17/two-years-of-react-native/) (March 17, 2018)
- [Keeping Artsy's dependencies up to date](http://artsy.github.io/blog/2018/11/26/keeping-dependencies-updated/) (November 26, 2018)
- [Switch from Capybara Webkit to Chrome](http://artsy.github.io/blog/2018/11/27/switch-from-capybara-webkit-to-chrome/) (November 27, 2018)
- [GraphQL Stitching 101](http://artsy.github.io/blog/2018/12/11/GraphQL-Stitching/) (December 11, 2018)
- [GraphQL: Union vs. Interface](http://artsy.github.io/blog/2019/01/14/graphql-union-vs-interface/) (January 14, 2019)
- [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)

### [Atlassian](https://www.atlassian.com/)

- [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)
- [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)
- [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)
- [Scaling React server-side rendering in Jira Cloud](https://www.atlassian.com/engineering/scaling-react-server-side-rendering-in-jira-cloud) (February 04, 2020)
- [Improving performance through better architecture](https://www.atlassian.com/engineering/react-resource-router-deep-dive) (June 23, 2020)
- [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)
- [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)
- [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)

### [Australian Broadcasting Corporation](http://abc.net.au/)

- [Composing Components](https://developers.digital.abc.net.au/2018/09/28/composing-components/) (September 28, 2018)
- [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)
- [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)

### [Badoo](https://badoo.com)

- [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)
- [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)
- [Translating interfaces into almost fifty languages: Sketch](https://badootech.badoo.com/translating-interfaces-into-almost-fifty-languages-sketch-dc196cf23ee5) (October 17, 2017)
- 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)
- 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)
- [Translating Dust templates to JSX](https://badootech.badoo.com/translating-dust-templates-to-jsx-bed273ef41de) (May 16, 2018)
- [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)
- 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)
- 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)
- [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)
- [Design Tokens beyond colors, typography, and spacing](https://badootech.badoo.com/design-tokens-beyond-colors-typography-and-spacing-ad7c98f4f228) (November 12, 2019)

### [BBC](http://www.bbc.com)

- [Redefining the BBC News core experience](https://wildlyinaccurate.com/redefining-the-bcc-news-core-experience/) (July 22, 2016)
- [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)
- [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)

### [Betty Crocker](https://www.bettycrocker.com)

- [Wake Lock API case study: 300% increase in purchase intent indicators on BettyCrocker.com](https://web.dev/betty-crocker/) (May 19, 2020)

### [Bitmovin](https://bitmovin.com)

- [How Bitmovin Used React/Redux to Develop Its New Dashboard](https://bitmovin.com/bitmovin-used-reactredux-to-develop-new-dashboard/) (September 7, 2017)
- [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)
- [To Play, or Not to Play #2 – Firefox blocks audible autoplay by default!](https://bitmovin.com/firefox-blocks-audible-autoplay/) (February 20, 2019)

### [blogfoster](http://www.blogfoster.com/)

- [Jumpstart to React+Redux Development](http://engineering.blogfoster.com/jumpstart-to-react-redux-development/)
- [Centralized ESLint Configuration](http://engineering.blogfoster.com/centralized-eslint-configuration/)
- [Redux For Better in-App Analytics](http://engineering.blogfoster.com/redux-for-better-in-app-analytics/)
- [Managing Complexity in Redux: Higher-Order Reducers and Async State](http://engineering.blogfoster.com/managing-complexity-in-redux-higher-order-reducers-and-async-state/)
- [How We Simplified our Tooling Setup for Node.js Projects](http://engineering.blogfoster.com/how-we-simplified-our-tooling-setup-for-node-js-projects/)
- [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/)

### [Bloomberg](https://www.bloomberg.com/)

- [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)
- [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)
- [10 Insights from Adopting TypeScript at Scale](https://www.techatbloomberg.com/blog/10-insights-adopting-typescript-at-scale/) (November 9, 2020)

### [BuzzFeed](https://www.buzzfeed.com)

- [Micro Frontends at BuzzFeed](https://tech.buzzfeed.com/micro-frontends-at-buzzfeed-b8754b31d178) (September 17, 2019)
- [Accessible BuzzFeed](https://tech.buzzfeed.com/accessible-buzzfeed-2e1f3f94f352) (August 27, 2020)
- [CLS at BuzzFeed — Part 1: Raising The Floor](https://tech.buzzfeed.com/improving-cumulative-layout-shift-at-buzzfeed-part-1-8b7ead2381dd) (November 6, 2021)
- [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)
- [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)

### [Campaign Monitor](https://www.campaignmonitor.com/)

- [Fixing bugs with Outlook specific CSS](https://cm.engineering/fixing-bugs-with-outlook-specific-css-f4b8ae5be4f4) (November 9, 2016)
- [Better video previews for email](https://cm.engineering/better-video-previews-for-email-12432ce71846) (December 20, 2016)
- [How to test accessibility of emails](https://cm.engineering/how-to-test-accessibility-of-emails-b68fed03f5f4) (June 5, 2018)

### [Carousell](https://carousell.com)

- [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)
- 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)
- [An Experiment with JSON Schema](https://medium.com/carousell-insider/an-experiment-with-json-schema-133344ebbf82) (April 18, 2019)

### [cars.com](https://www.cars.com)

- [How Cars.com Developer Mac Heller-Ogden Convinced His Bosses to Adopt Node.js](https://modernweb.com/cars-nodejs) (July 17, 2017)

### [Checkbot](https://www.checkbot.io/)

- [Scalable & lightweight web screenshots with SVG](https://www.checkbot.io/article/web-page-screenshots-with-svg/) (November 30, 2018)

### [Clearleft](https://clearleft.com)

- [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)
- [A framework for web performance](https://clearleft.com/posts/a-framework-for-web-performance) (September 20, 2018)

### [Cloudflare](https://www.cloudflare.com/)

- [How we built Origin CA: Web Crypto](https://blog.cloudflare.com/how-we-built-origin-ca-web-crypto/) (May 10, 2016)
- [Open Sourcing CloudFlare’s UI Framework](https://blog.cloudflare.com/cf-ui/) (June 8, 2016)
- [Going Global - a Localization Case Study at Cloudflare](https://blog.cloudflare.com/going-global-a-localization-case-study-at-cloudflare/) (August 23, 2017)
- [How we made our page-load optimisations even faster](https://blog.cloudflare.com/making-page-load-even-faster/) (February 2, 2018)
- [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)
- [Fast Google Fonts with Cloudflare Workers](https://blog.cloudflare.com/fast-google-fonts-with-cloudflare-workers/) (November 22, 2018)
- [Migrating to React land: Gatsby](https://blog.cloudflare.com/migrating-to-react-land-gatsby/) (March 26, 2020)
- [Moving from reCAPTCHA to hCaptcha](https://blog.cloudflare.com/moving-from-recaptcha-to-hcaptcha/) (April 8, 2020)
- [Dark Mode for the Cloudflare Dashboard](https://blog.cloudflare.com/dark-mode/) (September 29, 2021)

### [Cloud Four](https://cloudfour.com/)

- [All Mixed Up: Isomorphic Sorting Gone Wrong](https://cloudfour.com/thinks/all-mixed-up-isomorphic-sorting-gone-wrong/) (October 17, 2019)

### [CodeSandbox](https://codesandbox.io/)

- [Lessons learned refactoring Codesandbox.io from Redux to Cerebral](https://medium.com/p/40e9a5646281) (February 7, 2018)

### [Condé Nast](http://www.condenast.com)

- [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)

### [Conductor](https://www.conductor.com/)

- [Painless Migration From Backbone to React/Redux](https://www.youtube.com/watch?v=d8oBIzIgVMA) (February 16, 2018)

### [Datadog](https://www.datadoghq.com)

- [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)
- [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)
- [DRUIDS, the Design System that Powers Datadog](https://www.datadoghq.com/blog/engineering/druids-the-design-system-that-powers-datadog/) (September 29, 2022)
- [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)
- [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)

### [DAZN](https://dazn.com/)

- [Testing MobX State Tree](https://medium.com/dazn-tech/testing-mobx-state-tree-c588f4bfc430) (December 7, 2018)
- [Handling complexity in lambda functions](https://medium.com/dazn-tech/handling-complexity-in-lambda-functions-e7acfbeb920a) (February 8, 2019)
- [Micro-frontends, the future of Frontend architectures](https://medium.com/dazn-tech/micro-frontends-the-future-of-frontend-architectures-5867ceded39a) (April 2, 2019)
- [Adopting a Micro-frontends architecture](https://medium.com/dazn-tech/adopting-a-micro-frontends-architecture-e283e6a3c4f3) (April 8, 2019)
- [Orchestrating micro-frontends](https://medium.com/dazn-tech/orchestrating-micro-frontends-a5d2674cbf33) (April 12, 2019)
- [Jest: Our journey into performant unit tests](https://medium.com/dazn-tech/jest-our-journey-into-performant-unit-tests-a6efcb4bd9b) (April 15, 2019)
- [Identifying micro-frontends in our applications](https://medium.com/dazn-tech/identifying-micro-frontends-in-our-applications-4b4995f39257) (May 21, 2019)

### [De Voorhoede](https://www.voorhoede.nl)

- [Why our website is faster than yours](https://www.voorhoede.nl/en/blog/why-our-website-is-faster-than-yours) (July 16, 2016)

### [DEV](https://dev.to)

- [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)

### [Discord](https://discordapp.com/)

- [Using React Native: One Year Later](https://blog.discordapp.com/using-react-native-one-year-later-91fd5e949933) (June 7, 2016)
- [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)
- [Why Discord is Sticking with React Native](https://blog.discordapp.com/why-discord-is-sticking-with-react-native-ccc34be0d427) (July 26, 2018)
- [How Discord Maintains Performance While Adding Features](https://blog.discordapp.com/how-discord-maintains-performance-while-adding-features-28ddaf044333) (August 2, 2018)
- [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)
- [Investigating Discord’s React Memory Leak](https://blog.discordapp.com/discord-react-memory-leak-565c89763e8) (August 8, 2019)
- [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)
- [How Discord Implemented App-Wide Keyboard Navigation](https://blog.discord.com/how-discord-implemented-app-wide-keyboard-navigation-abf073fd71de) (December 17, 2020)

### [<div>RIOTS](https://divriots.com)

- [A story of how we migrated to pnpm](https://divriots.com/blog/switching-to-pnpm) (January 18, 2022)

### [DoorDash](https://www.doordash.com)

- [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)
- [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)
- [Implementing Theming in DoorDash’s Design Language System](https://doordash.engineering/2020/12/17/design-language-system-theming/) (December 17, 2020)
- [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)
- [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)
- [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)
- [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)
- [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)
- [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)

### [Dropbox](https://www.dropbox.com)

- [Translating Dropbox](https://blogs.dropbox.com/tech/2011/04/hello-world/) (April 18, 2011)
- [Some love for JavaScript applications](https://blogs.dropbox.com/tech/2012/08/some-love-for-javascript-applications-2/) (August 31, 2012)
- [Dropbox dives into CoffeeScript](https://blogs.dropbox.com/tech/2012/09/dropbox-dives-into-coffeescript/) (September 13, 2012)
- 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/)
- [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)
- [Annotations on Document Previews](https://blogs.dropbox.com/tech/2016/11/annotations-on-document-previews/) (November 30, 2016)
- [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)
- [Deploying Brotli for static content](https://blogs.dropbox.com/tech/2017/04/deploying-brotli-for-static-content/) (April 6, 2017)
- [Dropbox Paper: Emojis and Exformation](https://blogs.dropbox.com/tech/2017/11/dropbox-paper-emojis-and-exformation/) (November 15, 2017)
- [Improving Document Preview Performance](https://blogs.dropbox.com/tech/2017/12/improving-document-preview-performance/) (December 1, 2017)
- [Migrating from Underscore to Lodash](https://blogs.dropbox.com/tech/2018/09/migrating-from-underscore-to-lodash/) (September 5, 2018)
- [Redux with Code-Splitting and Type Checking](https://blogs.dropbox.com/tech/2019/07/redux-with-code-splitting-and-type-checking/) (July 16, 2019)
- [Design Tooling at Scale](https://dropbox.design/article/design-tooling-at-scale) (October 12, 2019)
- [The Great CoffeeScript to Typescript Migration of 2017](https://dropbox.tech/frontend/the-great-coffeescript-to-typescript-migration-of-2017) (May 13, 2020)
- [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)

### [eBay](https://www.ebay.com)

- [Data URI Sprites](https://tech.ebayinc.com/engineering/data-uri-sprites/) (July 12, 2011)
- [The New eBay Motors Homepage is 2X Faster](https://tech.ebayinc.com/engineering/the-new-ebay-motors-homepage-is-2x-faster/) (October 14, 2011)
- [Five JavaScript Tips for a Sleek User Experience](https://tech.ebayinc.com/engineering/five-javascript-tips-for-a-sleek-user-experience/) (April 16, 2012)
- [Page Loading and Rendering Optimizations](https://tech.ebayinc.com/engineering/page-loading-and-rendering-optimizations/) (June 22, 2012)
- [Bandwidth-based Experience](https://tech.ebayinc.com/engineering/bandwidth-based-experience/) (October 10, 2012)
- [Early Detection of Frontend Single Points of Failure](https://tech.ebayinc.com/engineering/early-detection-of-frontend-single-points-of-failure/) (January 22, 2013)
- [Front-end Renaissance at eBay](https://tech.ebayinc.com/engineering/front-end-renaissance-at-ebay/) (January 13, 2014)
- [Yet Another Responsive vs. Adaptive Story](https://tech.ebayinc.com/engineering/yet-another-responsive-vs-adaptive-story/) (March 5, 2014)
- [Don't Build Pages, Build Modules](https://tech.ebayinc.com/engineering/dont-build-pages-build-modules/) (October 2, 2014)
- [Async Fragments: Rediscovering Progressive HTML Rendering with Marko](https://tech.ebayinc.com/engineering/async-fragments-rediscovering-progressive-html-rendering-with-marko/) (December 8, 2014)
- [The Power of Perceived Performance](https://tech.ebayinc.com/engineering/the-power-of-perceived-performance/) (January 5, 2015)
- [Mobile First - A Retrospective](https://www.ebayinc.com/stories/blogs/tech/mobile-first-a-retrospective/) (May 13, 2015)
- [How Our CSS Framework Helps Enforce Accessibility](https://www.ebayinc.com/stories/blogs/tech/how-our-css-framework-helps-enforce-accessibility/) (November 4, 2015)
- [Packaging for Performance](https://tech.ebayinc.com/engineering/packaging-for-performance/) (January 4, 2016)
- [The Path to JavaScript Next](https://www.ebayinc.com/stories/blogs/tech/the-path-to-javascript-next/) (March 15, 2016)
- [Browse eBay with Style and Speed](https://tech.ebayinc.com/engineering/browse-ebay-with-style-and-speed/) (June 30, 2016)
- [Experience the Lightning Bolt](https://tech.ebayinc.com/engineering/experience-the-lightning-bolt/) (September 21, 2016)
- [Effective Front-End Code Review](https://tech.ebayinc.com/engineering/effective-front-end-code-review/) (March 2, 2017)
- [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)
- [eBay’s Font Loading Strategy](https://www.ebayinc.com/stories/blogs/tech/ebays-font-loading-strategy) (September 21, 2017)
- [The Future of Marko](https://www.ebayinc.com/stories/blogs/tech/the-future-of-marko/) (October 26, 2017)
- [Beyond HTTPS](https://www.ebayinc.com/stories/blogs/tech/beyond-https/) (December 13, 2017)
- [Integration Testing with React and Enzyme](https://tech.ebayinc.com/engineering/integration-testing-with-react-and-enzyme/) (June 26, 2018)
- [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)
- [Autofill on Browsers: A Deep Dive](https://tech.ebayinc.com/engineering/autofill-deep-dive/) (December 3, 2019)
- [Speed By A Thousand Cuts](https://tech.ebayinc.com/engineering/speed-by-a-thousand-cuts/) (January 23, 2020)
- [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)
- [Auto Effect Pattern with Redux and React Hooks](https://tech.ebayinc.com/engineering/auto-effect-pattern-with-redux-and-react-hooks/) (April 15, 2020)

### [EdgeDB](https://www.edgedb.com)

- [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)

### [Electronic Arts](https://www.ea.com)

- [Building UI at Enterprise Scale with Web Components](https://youtu.be/FJ2KEvzlyo4) (August 22, 2017)

### [Ele.me](https://www.ele.me)

- [Upgrading Ele.me to Progressive Web App](https://medium.com/elemefe/upgrading-ele-me-to-progressive-web-app-2a446832e509) (May 6, 2017)

### [Etsy](https://www.etsy.com)

- [Localizing Logically for a Global Marketplace](https://codeascraft.com/2011/10/21/localizing-logically-for-a-global-marketplace/) (October 21, 2011)
- [Multilingual User Generated Content and SEO](https://codeascraft.com/2011/12/02/multilingual-user-generated-content-and-seo/) (December 2, 2011)
- [Measuring Front-end Performance With Real Users](https://codeascraft.com/2012/11/29/measuring-front-end-performance-with-real-users/) (November 29, 2012)
- [Responsive emails that really work](https://codeascraft.com/2014/03/13/responsive-emails-that-really-work/) (March 13, 2014)
- [Transitioning to SCSS at Scale](https://codeascraft.com/2015/02/02/transitioning-to-scss-at-scale/) (February 2, 2015)
- [Rebuilding the Foundation of Etsy’s Seller Tools](https://codeascraft.com/2015/02/05/rebuilding-the-foundation-of-etsy-seller-tools/) (February 5, 2015)
- [How Etsy Formats Currency](https://codeascraft.com/2016/04/19/how-etsy-formats-currency/) (April 19, 2016)
- [SEO Title Tag Optimization at Etsy: Experimental Design and Causal Inference](https://codeascraft.com/2016/10/25/seo-title-tag-optimization/) (October 25, 2016)
- [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)
- [Reducing Image File Size at Etsy](https://codeascraft.com/2017/05/30/reducing-image-file-size-at-etsy/) (May 30, 2017)
- [How Etsy Localizes Addresses](https://codeascraft.com/2018/09/26/how-etsy-localizes-addresses/) (September 26, 2018)
- [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)
- [The journey to fast production asset builds with Webpack](https://codeascraft.com/2020/02/03/production-webpack-builds/) (February 3, 2020)
- [Etsy’s Journey to TypeScript](https://codeascraft.com/2021/11/08/etsys-journey-to-typescript) (November 8, 2021)

### [Evil Martians](https://evilmartians.com/)

- [Is React Native podium-ready?](https://evilmartians.com/chronicles/is-react-native-podium-ready) (May 14, 2018)

### [Expedia Group](https://www.expediagroup.com)

- [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)
- [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)
- [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)
- [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)
- [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)
- [Minimizing DOM Nodes for Performance](https://medium.com/expedia-group-tech/minimizing-dom-nodes-for-performance-57f347df4c72) (September 24, 2019)
- [Web Performance vs. User Engagement](https://medium.com/expedia-group-tech/web-performance-vs-user-engagement-7eda84f6436b) (October 31, 2019)
- [Migrating to WKWebView](https://medium.com/expedia-group-tech/migrating-to-wkwebview-d5b6d0e52c4f) (December 11, 2019)
- [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)
- [Measuring Interaction Performance with FPS Data](https://medium.com/expedia-group-tech/measuring-interaction-performance-with-fps-data-b0eee1d102c4) (December 16, 2019)
- [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)
- [Web Applications: Analyzing Client-Side Performance](https://medium.com/expedia-group-tech/web-applications-analyzing-client-side-performance-37e9cc4ad86b) (January 7, 2020)
- [Schema Driven UIs](https://medium.com/expedia-group-tech/schema-driven-uis-dd8fdb516120) (January 23, 2020)
- [Responsive Accessibility Guidelines at Expedia.com](https://medium.com/expedia-group-tech/responsive-accessibility-guidelines-at-expedia-com-cc1184c4f271) (February 27, 2020)
- [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)
- [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)
- [CSS-in-JS: An Investigation](https://medium.com/expedia-group-tech/css-in-js-an-investigation-39338a1057db) (July 7, 2020)
- [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)
- [How Expedia.com Uses Accessibility Automation](https://medium.com/expedia-group-tech/how-expedia-com-uses-accessibility-automation-d3de3e3ff775) (October 1, 2020)
- [Sizing Android WebView iframes with JavaScript](https://medium.com/expedia-group-tech/sizing-android-webview-iframes-with-javascript-abae73fe6602) (April 27, 2021)

### [ezCater](https://www.ezcater.com/)

- [The case against React snapshot testing](https://engineering.ezcater.com/the-case-against-react-snapshot-testing) (June 27, 2019)
- [Saying goodbye to emotion](https://engineering.ezcater.com/saying-goodbye-to-emotion) (June 1, 2021)

### [Facebook](https://facebook.com)

- [Building the F8 App with React Native](http://makeitopen.com)
- [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)
- [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)
- [The technology behind preview photos](https://code.facebook.com/posts/991252547593574/the-technology-behind-preview-photos/) (August 6, 2015)
- [Improving CSS quality at Facebook and beyond](https://code.fb.com/open-source/improving-css-quality-at-facebook-and-beyond/) (June 13, 2016)
- [This browser tweak saved 60% of requests to Facebook](https://code.facebook.com/posts/557147474482256) (January 26, 2017)
- [Building High-Quality JavaScript Tools](https://youtu.be/PvabBs_utr8) (June 2, 2017)
- [React 16: A look inside an API-compatible rewrite of our frontend UI library](https://code.facebook.com/posts/1716776591680069) (September 26, 2017)
- [Design Systems & Tools at Facebook](https://vimeo.com/242899818) (November 15, 2017)
- [Behind the Scenes: Improving the React Repository Infrastructure](https://reactjs.org/blog/2017/12/15/improving-the-repository-infrastructure.html) (December 15, 2017)
- [Faster input events with Facebook’s first browser API contribution](https://code.fb.com/developer-tools/isinputpending-api/) (April 22, 2019)
- [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)
- [Rebuilding our tech stack for the new Facebook.com](https://engineering.fb.com/web/facebook-redesign/) (May 8, 2020)
- [Making Facebook.com accessible to as many people as possible](https://engineering.fb.com/web/facebook-com-accessibility/) (July 30, 2020)

### [FARFETCH](https://www.farfetch.com)

- [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)
- [The need for speed — 2: call for metrics](https://www.linkedin.com/pulse/need-speed-2-call-metrics-manuel-garcia/) (February 19, 2019)
- [How to build a performance culture at scale](https://www.linkedin.com/pulse/how-build-performance-culture-scale-manuel-garcia/) (September 11, 2019)
- [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)
- [GraphQL sessions: powering farfetch.com](https://farfetchtech.medium.com/graphql-sessions-powering-farfetch-com-305e7c0901e7) (May 6, 2022)

### [fastq.bio](http://www.fastq.bio/)

- [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)

### [Figma](https://www.figma.com)

- [Building a professional design tool on the web](https://www.figma.com/blog/building-a-professional-design-tool-on-the-web/) (December 7, 2015)
- [Debugging Data Corruption with Emscripten](https://www.figma.com/blog/debugging-data-corruption-with-emscripten/) (November 7, 2016)
- [WebAssembly cut Figma’s load time by 3x](https://blog.figma.com/webassembly-cut-figmas-load-time-by-3x-76f3f2395164) (June 8, 2017)
- [Introducing BrowserView for Electron](https://www.figma.com/blog/introducing-browserview-for-electron/) (June 29, 2017)
- [Introducing: Figma to React](https://www.figma.com/blog/introducing-figma-to-react/) (April 26, 2018)
- [Figma, faster 🏎](https://www.figma.com/blog/figma-faster/) (August 13, 2018)
- [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)
- [React at 60fps: improving scrolling comments in Figma](https://www.figma.com/blog/improving-scrolling-comments-in-figma/) (August 19, 2020)
- [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)
- [Illuminating dark mode](https://www.figma.com/blog/illuminating-dark-mode) (July 21, 2022)
- [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)

### [Financial Times](https://www.ft.com)

- [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)
- [Free-market software development](http://matt.chadburn.co.uk/notes/teams-as-services.html) (August 21, 2015)
- [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)
- [A faster FT.com](https://medium.com/ft-product-technology/a-faster-ft-com-10e7c077dc1c) (April 4, 2016)
- [YES, your site too can (and should) be accessible](https://www.youtube.com/watch?v=H4FzW9oFObs) (May 23, 2017)
- [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)
- [Can't You Just Make It More like Bootstrap?](https://vimeo.com/226575101) (July 22, 2017)
- [Speeding up without slowing down](https://ldnwebperf.org/sessions/speeding-up-without-slowing-down/) (November 7, 2017)
- [What happens when you visit ft.com?](https://medium.com/ft-product-technology/making-a-request-to-the-financial-times-b2119a2f422d) (November 24, 2017)
- [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)
- [An outbreak of Accessibility anti-patterns](https://medium.com/ft-product-technology/an-outbreak-of-accessibility-anti-patterns-e73577242ee8) (May 18, 2018)
- [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)
- [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)
- [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)
- [Animating list reordering with React Hooks](https://medium.com/ft-product-technology/animating-list-reordering-with-react-hooks-1aa0d78a24dc) (August 26, 2020)
- [Taming Webpackʼs content hashes](https://www.matthinchliffe.dev/2020/06/03/taming-webpacks-content-hashes.html) (June 3, 2020)

### [Flickr](https://www.flickr.com/)

- [Lessons Learned from the Flickr Touch Lightbox](http://code.flickr.net/2011/07/20/lessons-learned-from-the-flickr-touch-lightbox/) (July 20, 2011)
- [Creating an interface for geofences](http://code.flickr.net/2011/09/06/creating-an-interface-for-geofences/) (September 6, 2011)
- [Raising the bar on web uploads](http://code.flickr.net/2012/04/25/raising-the-bar-on-web-uploads/) (April 25, 2012)
- [Building an HTML5 Photo Editor](http://code.flickr.net/2012/04/18/building-an-html5-photo-editor/) (April 18, 2012)
- [Building The Flickr Web Uploadr: The Grid](http://code.flickr.net/2012/05/11/building-the-flickr-web-uploadr-the-grid/) (May 11, 2012)
- [Parsing Exif client-side using JavaScript](http://code.flickr.net/2012/06/01/parsing-exif-client-side-using-javascript-2/) (June 1, 2012)
- [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)
- [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)
- [Perceptual Image Compression at Flickr](http://code.flickr.net/2015/09/25/perceptual-image-compression-at-flickr/) (September 25, 2015)
- [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)

### [Flipboard](https://flipboard.com)

- [Layout in Flipboard for Web and Windows](https://engineering.flipboard.com/2014/03/web-layouts) (March 24, 2014)
- [60 FPS on the mobile web](https://engineering.flipboard.com/2015/02/mobile-web) (February 10, 2015)

### [Flipkart](https://www.flipkart.com)

- [Building Flipkart Lite: A Progressive Web App](https://medium.com/progressive-web-apps/building-flipkart-lite-a-progressive-web-app-2c211e641883) (November 11, 2015)

### [Flocktory](https://www.flocktory.com)

- [Third party libraries](http://slonoed.net/third-party-js) (May 22, 2017)

### [Futurice](https://futurice.com)

- [How Elm made our work better](https://futurice.com/blog/elm-in-the-real-world) (November 1, 2016)

### [Garbarino](https://www.garbarino.com/)

- [Building a PWA in Argentina](https://medium.com/@leopittelli/building-a-pwa-in-argentina-3ac669eabbeb) (July 24, 2017)

### [GitHub](https://github.com)

- [GitHub's CSS](https://markdotto.com/blog/githubs-css/) (July 23, 2014)
- [How GitHub is using Web Components in production](https://www.webcomponents.org/community/articles/interview-with-joshua-peek) (September 30, 2014)
- [Browser Monitoring for GitHub.com](https://githubengineering.com/browser-monitoring-for-github-com/) (May 19, 2015)
- [GitHub's CSP journey](https://githubengineering.com/githubs-csp-journey/) (April 12, 2016)
- [GitHub's post-CSP journey](https://githubengineering.com/githubs-post-csp-journey/) (January 19, 2017)
- [Shipping system fonts to GitHub.com](https://markdotto.com/blog/github-system-fonts/) (February 7, 2018)
- [Design Systems at GitHub](https://medium.com/@broccolini/design-systems-at-github-c8e5378d2542) (July 6, 2018)
- [Removing jQuery from GitHub.com frontend](https://githubengineering.com/removing-jquery-from-github-frontend/) (September 6, 2018)
- [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)
- [How we built the GitHub globe](https://github.blog/2020-12-21-how-we-built-the-github-globe/) (December 21, 2020)
- [How GitHub Actions renders large-scale logs](https://github.blog/2021-03-25-how-github-actions-renders-large-scale-logs/) (March 25, 2021)

### [GitLab](https://gitlab.com)

- [Why We Chose Vue.js](https://youtu.be/ioogrvs2Ejc) (December 1, 2016)
- [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
- [How we do Vue: one year later](https://about.gitlab.com/2017/11/09/gitlab-vue-one-year-later/) (November 9, 2017)
- [How GitLab switched to Headless Chrome for testing](https://about.gitlab.com/2017/12/19/moving-to-headless-chrome) (December 19, 2017)
- [Our journey in switching to native Unicode emoji](https://about.gitlab.com/blog/2018/05/30/journey-in-native-unicode-emoji/) (May 30, 2018)
- [How we iterated and improved our frontend team culture](https://about.gitlab.com/2018/06/26/iterating-improving-frontend-culture/) (June 26, 2018)
- [Why we chose ECharts for data visualizations](https://about.gitlab.com/2019/09/30/why-we-chose-echarts/) (September 30, 2019)
- [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)
- [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)

### [Goibibo](https://www.goibibo.com)

- [How Goibibo's PWA improved conversions by 60%](https://web.dev/goibibo/) (September 29, 2020)

### [Google](https://google.com)

- [Designing very large (JavaScript) applications](https://medium.com/@cramforce/designing-very-large-javascript-applications-6e013a3291a3) (April 15, 2018)
- [Building the Google Photos Web UI](https://medium.com/google-design/google-photos-45b714dfbed1) (July 10, 2018)
- [TypeScript at Google](http://neugierig.org/software/blog/2018/09/typescript-at-google.html) (September 1, 2018)
- [The Chrome Dev Summit site: case study](https://dev.to/chromiumdev/the-chrome-dev-summit-site-case-study-15ng) (March 12,2019)
- [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)
- [A Recipe for Designing Animations — Without Sacrificing Performance](https://medium.com/google-design/a-streamlined-workflow-for-performative-animations-be0a6ff3df7a) (June 4, 2019)
- [Bringing service workers to Google Search](https://web.dev/google-search-sw/) (June 20, 2019)
- [How we built the Chrome DevTools WebAuthn tab](https://developer.chrome.com/blog/webauthn-tab/) (October 22, 2020)
- [Migrating Puppeteer to TypeScript](https://developers.google.com/web/updates/2021/01/puppeteer-typescript) (January 21, 2021)
- [DevTools architecture refresh: migrating DevTools to TypeScript](https://developer.chrome.com/blog/migrating-to-typescript/) (April 8, 2021)
- [Implementing CSP and Trusted Types debugging in Chrome DevTools](https://developer.chrome.com/en/blog/csp-issues/) (November 1, 2021)
- [Why Google Sheets ported its calculation worker from JavaScript to WasmGC](https://web.dev/case-studies/google-sheets-wasmgc) (June 26, 2024)

### [GOV.UK](https://www.gov.uk)

- [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)
- [Patterns for accessible webchats](https://accessibility.blog.gov.uk/2016/12/09/patterns-for-accessible-webchats) (December 9, 2016)
- [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)
- [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)
- [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)
- [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)
- [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)
- [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)
- [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)

### [grammarly](https://www.grammarly.com)

- [Building Browser Extensions At Scale](https://web.archive.org/web/20190304201001/https://tech.grammarly.com/blog/building-browser-extensions-at-scale) (October 6, 2017)
- [Introducing Embrace: A Framework for Building Declarative UIs](https://www.grammarly.com/blog/engineering/introducing-embrace/) (September 3, 2021)
- 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)
- [Making Grammarly Feel Native On Every Website](https://www.grammarly.com/blog/engineering/making-grammarly-feel-native-on-every-website/) (March 7, 2022)
- 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)
- [Signals With @grammarly/focal](https://www.grammarly.com/blog/engineering/signals-with-focal-library/) (August 21, 2023)

### [Gusto](https://gusto.com/)

- [Scaling Front-end Architecture](https://engineering.gusto.com/gusto-tech-talk-scaling-front-end-architecture/) (June 10, 2016)
- [Evolving JavaScript Part 1: Goodbye Backbone](https://engineering.gusto.com/evolving-javascript-part-1-goodbye-backbone/) (July 12, 2016)
- [Evolving JavaScript Part 2: Hello React](https://engineering.gusto.com/evolving-javascript-part-2-hello-react/) (July 12, 2016)
- [Evolving JavaScript Part 3: Building a React Application](https://engineering.gusto.com/evolving-javascript-part-3-building-a-react-application/) (July 12, 2016)
- [Taking off with Apollo](https://engineering.gusto.com/taking-off-with-apollo/) (September 12, 2018)
- [How I fell out of love with HOCs](https://engineering.gusto.com/how-i-fell-out-of-love-with-hocs/) (December 9, 2018)

### [HealthCare.gov](https://www.healthcare.gov/)

- [Building a design system for HealthCare.gov](https://blog.navapbc.com/building-a-design-system-for-healthcare-gov-20dc1a833ab3) (August 29, 2017)

### [Heap](https://heap.io)

- [Goodbye CoffeeScript, Hello TypeScript](https://heap.io/blog/engineering/goodbye-coffeescript-hello-typescript) (October 7, 2015)
- [Migrating To React + MobX While Shipping New Features](https://heap.io/blog/engineering/migrating-react-mobx-while-shipping-new-features) (August 16, 2017)
- [How We Write Front-end Code](https://heap.io/blog/engineering/how-we-write-front-end-code) (February 20, 2018)
- [Redesigning Heap Without a Feature Branch](https://heap.io/blog/engineering/redesigning-heap-without-a-feature-branch) (April 10, 2019)
- [How we failed, then succeeded, at migrating to TypeScript](https://heap.io/blog/engineering/migrating-to-typescript) (October 10, 2019)
- [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)

### [in der Apotheke](https://www.inderapotheke.de/)

- [Farewell, Google Maps](https://www.inderapotheke.de/blog/farewell-google-maps) (July 18, 2018)

### [Infinite Red](https://infinite.red/)

- [Switching from Ava to Jest for TypeScript](https://shift.infinite.red/switching-from-ava-to-jest-for-typescript-a6dac7d1712f) (November 6, 2017)
- [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)
- [Yarn 1 vs Yarn 2 vs NPM](https://shift.infinite.red/yarn-1-vs-yarn-2-vs-npm-a69ccf0229cd) (February 6, 2020)
- [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)

### [Insider Inc.](https://www.insider-inc.com/)

- [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)
- [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)
- [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)

### [Instagram](https://www.instagram.com/)

- [React Native at Instagram](https://instagram-engineering.com/react-native-at-instagram-dd828a9a90c7) (February 7, 2017)
- 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)

### [Internet Archive](https://archive.org/)

- [Pixels vs. Ems: Users DO Change Font Size](https://medium.com/@vamptvo/pixels-vs-ems-users-do-change-font-size-5cfb20831773) (June 13, 2018)

### [Intuit](https://www.intuit.com)

- [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)
- [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)
- [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)
- [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)

### [InVision](https://www.invisionapp.com)

- [Sharing ESLint Across Teams](https://engineering.invisionapp.com/post/sharing-eslint-across-teams/) (April 5, 2016)
- [Optimizing Webpack for Faster React Builds](https://engineering.invisionapp.com/post/optimizing-webpack/) (April 12, 2016)
- [Persist Redux State by Using Sagas](https://engineering.invisionapp.com/post/persist-redux-state-by-using-sagas/) (April 26, 2016)
- [Testing Our Shared ESLint Configs](https://engineering.invisionapp.com/post/testing-eslint/) (May 12, 2016)
- [How ESLint Saved Our Soul](https://engineering.invisionapp.com/post/how-eslint-saved-our-soul/) (August 12, 2016)
- [React Performance Tune-Up](https://engineering.invisionapp.com/post/react-performance-tune-up/) (September 23, 2016)
- [Building the inspect measurement engine](https://engineering.invisionapp.com/post/building-the-inspect-measurement-engine) (July 17, 2019)

### [Khan Academy](http://khanacademy.org/)

- [Babel in Khan Academy's i18n Toolchain](http://engineering.khanacademy.org/posts/i18n-babel-plugin.htm) (June 22, 2015)
- [Fun with slope fields, css and react](http://engineering.khanacademy.org/posts/fun-with-slopfields.htm) (August 5, 2015)
- [Copy-pasting more than just text](http://engineering.khanacademy.org/posts/copy-pasting-more-than-just-text.htm) (August 31, 2015)
- [i18nize-templates: Internationalization After the Fact](http://engineering.khanacademy.org/posts/i18nize-templates.htm) (September 28, 2015)
- [Schrödinger's deploys no more: how we update translations](http://engineering.khanacademy.org/posts/translation-server.htm) (October 12, 2015)
- [Forgo JS packaging? Not so fast](http://engineering.khanacademy.org/posts/js-packaging-http2.htm) (November 23, 2015)
- [Inline CSS at Khan Academy: Aphrodite](http://engineering.khanacademy.org/posts/aphrodite-inline-css.htm) (March 29, 2016)
- [Migrating to a Mobile Monorepo for React Native](http://engineering.khanacademy.org/posts/react-native-monorepo.htm) (May 29, 2017)
- [Creating Query Components with Apollo](http://engineering.khanacademy.org/posts/creating-query-components-with-apollo.htm) (June 12, 2017)
- [tota11y - an accessibility visualization toolkit](http://engineering.khanacademy.org/posts/tota11y.htm) (April 15, 2018)

### [Kickstarter](https://www.kickstarter.com/)

- [Namespacing Actions for Redux](https://kickstarter.engineering/namespacing-actions-for-redux-d9b55a88b1b1) (November 20, 2017)

### [Klarna](https://www.klarna.com)

- [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)
- [How removing caching improved mobile performance by 25%](https://engineering.klarna.com/how-removing-caching-improved-mobile-performance-by-25-52a17cc339a2) (January 10, 2017)
- [Improving Communication and Confidence with Visual Snapshot Testing](https://engineering.klarna.com/improving-communication-and-confidence-with-visual-snapshot-testing-b04154c3aaf0) (March 14, 2017)
- [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)

### [Line](https://line.me)

- [LINE MANGA: Smooth page transition with Page Stack](https://engineering.linecorp.com/en/blog/detail/200) (January 18, 2018)
- [Easy code-splitting with grow-loader](https://engineering.linecorp.com/en/blog/detail/235) (January 24, 2018)

### [LinkedIn](https://www.linkedin.com)

- [Bringing a Modern Javascript Build Pipeline to LinkedIn](https://engineering.linkedin.com/blog/2016/01/smashing-the-monolith) (January 20, 2016)
- [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)
- [The Glimmer Binary Experience](https://engineering.linkedin.com/blog/2017/12/the-glimmer-binary-experience) (December 7, 2017)
- [Ember Timer Leaks: The Bad Apples in Your Test Infrastructure](https://engineering.linkedin.com/blog/2018/01/ember-timer-leaks) (January 3, 2018)
- [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)
- [LinkedIn’s approach to automated accessibility (A11y) testing](https://engineering.linkedin.com/blog/2020/automated-accessibility-testing) (May 21, 2020)

### [Lucidchart](https://www.lucidchart.com/)

- [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)
- [Atomic CSS as a tool set](https://www.lucidchart.com/techblog/2014/01/31/atomic-css-tool-set/) (January 31, 2014)
- [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)
- [Big content in a little canvas](https://www.lucidchart.com/techblog/2015/05/19/big-content-in-a-little-canvas/) (May 19, 2015)
- [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)
- [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)
- [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)
- [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)
- [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)
- [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)
- [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)
- [ZoneTracker: Tracking JavaScript Performance with Zone.js](https://www.lucidchart.com/techblog/2018/11/09/tracking-javascript-performance-zone-js/) (November 9, 2018)
- [JavaScriptCore—10 Months Later](https://www.lucidchart.com/techblog/2019/01/03/javascriptcore-10-months-later/) (January 3, 2019)

### [Lyft](https://lyft.com)

- [TypeScript at Lyft](https://eng.lyft.com/typescript-at-lyft-64f0702346ea) (September 27, 2017)
- [Re-approaching Color](https://design.lyft.com/re-approaching-color-9e604ba22c88) (September 21, 2018)
- [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)
- [Frontend at Lyft: An Overview](https://eng.lyft.com/frontend-at-lyft-an-overview-f934c1524370) (March 9, 2021)

### [Mail.ru](https://mail.ru)

- [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)

### [Mailchimp](https://mailchimp.com)

- [Designing automated tests for React](https://increment.com/testing/designing-automated-tests-for-react/) (August 10, 2019)

### [MDN](https://developer.mozilla.org)

- [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)

### [Medium](https://medium.com/)

- [Why ContentEditable is Terrible](https://medium.engineering/why-contenteditable-is-terrible-122d8a40e480) (May 14, 2014)
- [Wait, Don’t Touch That! Mutual Exclusion Locks & JavaScript](https://medium.engineering/wait-dont-touch-that-a211832adc3a) (January 17, 2015)
- [The curious case of the disappearing Polish S](https://medium.engineering/the-curious-case-of-disappearing-polish-s-fa398313d4df) (February 2, 2015)
- [Five Goofy Things Medium Did That Break Accessibility](https://medium.engineering/five-goofy-things-medium-did-that-break-accessibility-3bc804ae818d) (June 29, 2015)
- [The Unluckiest Paragraphs: A Tale of CSS and Why Parts of Medium Sometimes Disappear](https://medium.engineering/the-unluckiest-paragraphs-751dd36d2d30) (December 5, 2015)
- [Simple Style Sheets, Or How to Improve Your Sleep by Dropping the Cascade](https://medium.engineering/simple-style-sheets-c3b588867899) (September 28, 2016)
- [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)
- [The case of the eternal blur: a bug hunt horror novella](https://medium.engineering/the-case-of-the-eternal-blur-ab350b9653ea) (May 2, 2018)
- [GraphQL Server Design @ Medium](https://medium.engineering/graphql-server-design-medium-34862677b4b8) (November 2, 2018)

### [MemSQL](https://www.memsql.com)

- [Porting 30K lines of code from Flow to TypeScript](http://davidgom.es/porting-30k-lines-of-code-from-flow-to-typescript/) (January 13, 2019)

### [Mercado Libre](http://www.mercadolibre.com)

- [How Mercado Libre optimized for Web Vitals (TBT/FID)](https://web.dev/how-mercadolibre-optimized-web-vitals/) (September 21, 2020)

### [Microsoft Bing](https://bing.com)

- [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)

### [Microsoft To-Do](https://to-do.microsoft.com/)

- [How We React at Microsoft To-Do](https://youtu.be/CWxc3AYja1I) (January 5, 2018)

### [Mixmax](https://mixmax.com/)

- [Scaling Mixmax: Front-end performance](https://mixmax.com/blog/scaling-mixmax-front-end) (May 5, 2015)
- [How we built ‘instant’ autocomplete for Mixmax](https://mixmax.com/blog/autocomplete-search-performance) (November 5, 2015)
- [Yarn-ifying Mixmax: why and how we moved from npm to Yarn](https://mixmax.com/blog/yarn-ifying-mixmax) (April 24, 2017)
- [Using CORS policies to implement CSRF protection](https://mixmax.com/blog/modern-csrf) (June 13, 2017)
- [React without Redux: how we moved from Backbone to React without rewriting](https://mixmax.com/blog/backbone-to-react-without-rewriting) (July 26, 2017)
- [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)
- [Precisely observing structural page changes](https://mixmax.com/blog/precisely-observing-structural-page-changes) (December 7, 2017)
- [Choosing (and using) Javascript static typing: how Mixmax Engineering adopted Flow](https://mixmax.com/blog/flow-vs-typescript) (May 15, 2018)
- [To Yarn and Back (to npm) Again](https://mixmax.com/blog/to-yarn-and-back-again-npm) (May 29, 2018)

### [Mixpanel](https://mixpanel.com/)

- [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)
- [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)

### [Monzo](https://monzo.com)

- [Building a Bank with Next.js: How We Use Next.js at Monzo](https://youtu.be/UXpY3-DlZ9c) (December 2, 2020)

### [Mozilla](https://www.mozilla.org)

- [The Art of UI Skeletons](http://farmdev.com/thoughts/108/the-art-of-ui-skeletons) (April 23, 2019)
- [To Eleventy and Beyond](https://hacks.mozilla.org/2020/10/to-eleventy-and-beyond/) (October 1, 2020)

### [Mud](https://ournameismud.co.uk)

- [A Year of Utility Classes](https://css-irl.info/a-year-of-utility-classes/) (January 28, 2019)

### [Myntra](https://www.myntra.com)

- [Myntra’s Web UI Journey — AMP and PWA](https://medium.com/@nvkudva/myntras-web-ui-journey-amp-and-pwa-77b87523ee7d) (January 31, 2018)

### [Netflix](https://netflix.com)

- [HTML5 Video Playback UI](https://medium.com/netflix-techblog/html5-video-playback-ui-62cfdd9b5d19) (October 21, 2013)
- [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)
- [Node.js in Flames](https://medium.com/netflix-techblog/node-js-in-flames-ddd073803aa4) (November 19, 2014)
- [JSON Graph: Reactive REST at Netflix](https://youtu.be/hOE6nVVr14c) (April 1, 2015)
- [Localization Technologies at Netflix](https://medium.com/netflix-techblog/localization-technologies-at-netflix-d033e7b13cf) (June 4, 2015)
- [Making Netflix.com Faster](https://medium.com/netflix-techblog/making-netflix-com-faster-f95d15f2e972) (August 5, 2015)
- [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)
- [Netflix's approach to ES6 feature detection](https://gist.github.com/DaBs/89ccc2ffd1d435efdacff05248514f38) (January 20, 2017)
- [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)
- [Shop Talk podcast #264: React with Netflix](https://shoptalkshow.com/episodes/264-react-netflix) (May 22, 2017)
- [Performance Signup in React & Transactional Apps with Redux](https://youtu.be/V8oTJ8OZ5S0) (October 25, 2017)
- [Implementing Japanese Subtitles on Netflix](https://medium.com/netflix-techblog/implementing-japanese-subtitles-on-netflix-c165fbe61989) (December 11, 2017)
- [Integrating imperative APIs into a React application](https://medium.com/netflix-techblog/integrating-imperative-apis-into-a-react-application-1257e1b45ac6) (December 20, 2017)
- [Pseudo Localization @ Netflix](https://medium.com/netflix-techblog/pseudo-localization-netflix-12fff76fbcbe) (August 6, 2018)
- [A Netflix Web Performance Case Study](https://medium.com/dev-channel/a-netflix-web-performance-case-study-c0bcde26a9d9) (November 5, 2018)
- [Delivering Meaning with Previews on Web](https://medium.com/netflix-techblog/delivering-meaning-with-previews-on-web-3cedc0341b9e) (November 12, 2018)
- [Enhancing the Netflix UI Experience with HDR](https://medium.com/netflix-techblog/enhancing-the-netflix-ui-experience-with-hdr-1e7506ad3e8) (September 24, 2018)
- [Our learnings from adopting GraphQL](https://medium.com/netflix-techblog/our-learnings-from-adopting-graphql-f099de39ae5f) (December 10, 2018)
- [Modernizing the Web Playback UI](https://medium.com/netflix-techblog/modernizing-the-web-playback-ui-1ad2f184a5a0) (December 12, 2018)
- [Architecting UI for Netflix Studio Technology](https://youtu.be/LtrXwX81CPE) (November 14, 2019)

### [New Relic](https://newrelic.com/)

- [Real-World JavaScript Performance Tips](https://blog.newrelic.com/engineering/javascript-perf-tips/) (November 14, 2014)
- [How We Architected the New Relic Mobile Web UI in React](https://blog.newrelic.com/engineering/mobile-ui-react/) (January 3, 2018)

### [Notion](https://www.notion.so)

- [Migrating Notion's marketing site to Next.js](https://www.notion.so/blog/migrating-notion-marketing-to-next-js) (August 12, 2021)

### [npm](https://www.npmjs.com)

- [Re-inventing npmjs.com](http://blog.npmjs.org/post/172567815935/re-inventing-npmjscom) (April 3, 2018)
- [JavaScript Usage by Industry](https://blog.npmjs.org/post/175311966445/javascript-usage-by-industry) (June 27, 2018)

### [OK GROW!](https://www.okgrow.com/)

- [Migrating from Iron Router to FlowRouter (with Blaze)](https://www.okgrow.com/posts/flow-router-migration-guide) (September 17, 2015)
- [Where does Redux fit in Meteor?](https://www.okgrow.com/posts/where-does-redux-fit-in-meteor) (July 15, 2016)
- [Real-world Unit Testing with Meteor and Jest](https://www.okgrow.com/posts/real-world-unit-testing-with-meteor-and-jest) (October 17, 2017)
- [Optimizing a GraphQL app using Apollo Engine](https://www.okgrow.com/posts/optimizing-graphql-apollo-engine) (February 12, 2019)

### [OYO](https://www.oyorooms.com)

- [OYO on a User Experience Quest with AMP ⚡](https://medium.com/oyotech/oyo-on-a-user-experience-quest-with-amp-cff515cf849e) (January 11, 2018)
- [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)
- [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)
- [Shipping ES6 in browsers without Polyfill](https://medium.com/oyotech/shipping-es6-in-browsers-without-polyfill-90d1fb440a55) (April 17, 2019)
- [Signed-Exchange: Solving the AMP URLs Display Problem](https://medium.com/oyotech/implementing-signed-exchange-for-better-amp-urls-38abd64c6766) (May 7, 2019)
- [Building Chrome Extension with ReactJs: Beginner’s Guide](https://medium.com/oyotech/building-chrome-extension-with-reactjs-beginners-guide-ca44acdf9ffc) (May 13, 2019)
- [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)
- [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)

### [Oyster](https://www.oyster.com/)

- [Oyster Shots on the Front End](http://tech.oyster.com/oyster-shots-on-the-front-end/) (July 29, 2011)
- [Using React and jQuery Together](http://tech.oyster.com/using-react-and-jquery-together/) (March 22, 2016)

### [Palantir](https://www.palantir.com/)

- [Scaling product design with Blueprint](https://medium.com/palantir/scaling-product-design-with-blueprint-25492827bb4a) (January 6, 2017)
- [TSLint in 2019](https://medium.com/palantir/tslint-in-2019-1a144c2317a9) (February 19, 2019)

### [PayPal](https://www.paypal.com)

- [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)
- [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)
- [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)
- [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)
- [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 )
- [Reinventing cross-origin requests, without CORS](https://medium.com/@bluepnume/reinventing-cross-origin-requests-without-cors-b9c4cb645376) (September 6, 2017)
- [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)
- [GraphQL: A success story for PayPal Checkout](https://medium.com/paypal-engineering/graphql-a-success-story-for-paypal-checkout-3482f724fb53) (October 17, 2018)
- [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)
- [Scaling GraphQL at PayPal](https://medium.com/paypal-engineering/scaling-graphql-at-paypal-b5b5ac098810) (October 30, 2019)
- [Sharing UI Components at an Enterprise Level](https://medium.com/paypal-tech/reusing-ui-components-at-enterprise-level-a7df1ea1f8dd) (June 2, 2020)
- [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)
- [GraphQL at PayPal: An Adoption Story](https://medium.com/paypal-tech/graphql-at-paypal-an-adoption-story-b7e01175f2b7) (September 1, 2021)

### [Pinafore](https://pinafore.social)

- [Introducing Pinafore for Mastodon](https://nolanlawson.com/2018/04/09/introducing-pinafore-for-mastodon) (April 9, 2018)
- [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)
- [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)
- [One year of Pinafore](https://nolanlawson.com/2019/06/02/one-year-of-pinafore) (June 2, 2019)
- [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)
- [What I’ve learned about accessibility in SPAs](https://nolanlawson.com/2019/11/05/what-ive-learned-about-accessibility-in-spas) (November 5, 2019)

### [Pinterest](https://pinterest.com)

- [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)
- [Demystifying SEO with experiments](https://medium.com/@Pinterest_Engineering/demystifying-seo-with-experiments-a183b325cf4c) (January 27, 2015)
- [How we made JavaScript testing 15x faster](https://medium.com/@Pinterest_Engineering/how-we-made-javascript-testing-15x-faster-5ba35b5d3947) (February 3, 2015)
- [Making Pinterest HTTPS](https://medium.com/@Pinterest_Engineering/making-pinterest-https-637ec925a8ad) (March 13, 2015)
- [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)
- [Introducing Bonsai: an open source Webpack analyzer](https://medium.com/@Pinterest_Engineering/introducing-bonsai-an-open-source-webpack-analyzer-6bdfe22f8984) (June 2, 2017)
- [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)
- [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)
- [Supporting React Native at Pinterest](https://medium.com/@Pinterest_Engineering/supporting-react-native-at-pinterest-f8c2233f90e6) (May 10, 2018)
- [A one year PWA retrospective](https://medium.com/@Pinterest_Engineering/a-one-year-pwa-retrospective-f4a2f4129e05) (July 20, 2018)

### [Pivotal Tracker](https://www.pivotaltracker.com)

- [Using Elm in Production at Pivotal Tracker](https://www.pivotaltracker.com/blog/Elm-pivotal-tracker/) (January 31, 2017)
- [Improving Accessibility in Pivotal Tracker](https://www.pivotaltracker.com/blog/improving-accessibility-in-pivotal-tracker) (February 1, 2018)

### [Plaid](https://plaid.com)

- [Securing WebViews with Chrome Custom Tabs](https://blog.plaid.com/securing-webviews-with-chrome-custom-tabs) (April 9, 2020)

### [Plotly](https://plot.ly/)

- [Modularizing monolithic javascript projects in plotly.js](https://plot.ly/javascript/modularizing-monolithic-javascript-projects/) (January 28, 2016)

### [Product Hunt](https://www.producthunt.com)

- [React @ Product Hunt](https://youtu.be/F38nRMktS9Q) (May 30, 2017)
- [GraphQL @ Product Hunt](https://www.youtube.com/watch?v=H0YCeHeHbr0) (November 2, 2017)

### [Proton](https://proton.me)

- [Deploying CSS Logical Properties On Web Apps](https://www.smashingmagazine.com/2022/12/deploying-css-logical-properties-on-web-apps/) (December 23, 2022)

### [Quizlet](https://quizlet.com/)

- [Smooth Game Animations in React](https://medium.com/tech-quizlet/smooth-game-animations-in-react-df43ece916c8) (February 18, 2016)
- [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)
- [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)
- [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)

### [Quora](https://www.quora.com/)

- [Faster Paint Times](https://www.quora.com/q/quoraengineering/Faster-Paint-Times) (August 18, 2016)
- [Choosing Quora’s GraphQL client](https://www.quora.com/q/quoraengineering/Choosing-Quora-s-GraphQL-client) (July 22, 2020)

### [REA Group](https://www.rea-group.com/)

- [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)
- [Singletons Suck (aka Flux to Redux)](https://www.rea-group.com/blog/singletons-suck-aka-flux-to-redux/) (August 17, 2016)
- [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)
- [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)

### [Reaktor](https://reaktor.com/)

- [Refactoring 30000 lines of JS with types](https://www.reaktor.com/blog/refactoring-30000-lines-js-types/) (January 24, 2017)

### [Reddit](https://about.reddit.com)

- [How We Built r/Place](https://redditblog.com/2017/04/13/how-we-built-rplace/) (April 13, 2017)
- [Why We Chose Typescript](https://redditblog.com/2017/06/30/why-we-chose-typescript/) (June 30, 2017)

### [Redmart](https://redmart.com/)

- [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)
- [RedMart's experience with PWA](http://geeks.redmart.com/2018/10/25/redmarts-experience-with-pwa/) (October 25, 2018)
- [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)

### [repl.it](https://repl.it)

- [Infinite Loops](https://repl.it/site/blog/infinite-loops) (January 23, 2017)
- [Modular, fast, small: how we built a server-rendered IDE](https://repl.it/site/blog/ide) (February 14, 2018)

### [Revolut](https://www.revolut.com)

- [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)
- [The fundamentals of web development at Revolut](https://medium.com/revolut/the-fundamentals-of-web-development-at-revolut-bb5e2888e84f) (January 4, 2021)

### [Roompact](https://roompact.com)

- [Elm In Production: 25,000 Lines Later](https://charukiewi.cz/posts/elm/) (July 30, 2017)

### [Safety Culture](https://safetyculture.com/)

- [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)

### [Scratch](https://scratch.mit.edu)

- [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)

### [Sentry](https://sentry.io)

- [Building Sentry: Source maps and their problems](https://sentry.engineering/blog/building-sentry-source-maps-and-their-problems) (July 16, 2019)
- [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)
- [How we trimmed the Sentry JavaScript SDK file size by 20%](https://sentry.engineering/blog/js-browser-sdk-bundle-size-matters) (February 28, 2022)
- [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)
- [Understanding the Performance Impact of Generated JavaScript](https://sentry.engineering/blog/understanding-the-performance-impact-of-generated-javascript) (July 22, 2022)
- [How We Made JavaScript Stack Traces Awesome](https://sentry.engineering/blog/how-we-made-javascript-stack-traces-awesome) (November 30, 2022)
- [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)
- [How we reduced CI time by 35% with Nx Caching](https://sentry.engineering/blog/reduce-ci-time-with-nx-caching) (March 31, 2023)
- [Measuring Session Replay Overhead](https://sentry.engineering/blog/measuring-session-replay-overhead) (July 5, 2023)
- [How We Reduced Replay SDK Bundle Size by 35%](https://sentry.engineering/blog/session-replay-sdk-bundle-size-optimizations) (November 14, 2023)

### [Shopify](https://shopify.com)

- [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)
- [Building Shopify mobile with native and web technology](https://shopify.engineering/building-shopify-mobile-with-native-and-web-technology) (September 29, 2017)
- [Designing a GraphQL API](https://gist.github.com/swalkinshaw/3a33e2d292b60e68fcebe12b62bbb3e2) (June 18, 2018)
- [Want to Improve UI Performance? Start by Understanding Your User](https://shopify.engineering/improve-ui-performance-understanding-your-user) (October 20, 2019)
- [How We Built Hydrogen: A React Framework for Building Custom Storefronts](https://shopify.engineering/how-we-built-hydrogen) (June 22, 2022)

### [Skillshare](https://skillshare.com/)

- [How We Ditched Redux for MobX](https://medium.com/skillshare-team/how-we-ditched-redux-for-mobx-a05442279a2b) (July 2, 2018)

### [Slack](https://slack.com)

- [Reducing Slack’s memory footprint](https://slack.engineering/reducing-slacks-memory-footprint-4480fec7e8eb) (March 3, 2017)
- [TypeScript at Slack](https://slack.engineering/typescript-at-slack-a81307fa288d) (April 11, 2017)
- [Rebuilding Slack’s Emoji Picker in React](https://slack.engineering/rebuilding-slacks-emoji-picker-in-react-bfbd8ce6fbfe) (May 23, 2017)
- [Getting to Slack faster with incremental boot](https://slack.engineering/getting-to-slack-faster-with-incremental-boot-ff063c9222e4) (July 5, 2016)
- [Localizing Slack](https://slack.engineering/localizing-slack-680c4bc7f45a) (September 12, 2017)
- [Rebuilding slack.com](https://slack.engineering/rebuilding-slack-com-b124c405c193) (October 11, 2017)
- [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)
- [When a rewrite isn’t: rebuilding Slack on the desktop](https://slack.engineering/rebuilding-slack-on-the-desktop-308d6fe94ae4) (July 22, 2019)
- [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)
- [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)
- [Building Dark Mode on Desktop](https://slack.engineering/building-dark-mode-on-desktop-811508b5d15f) (September 24, 2019)
- [Gantry: Slack’s Fast-booting Frontend Framework](https://slack.engineering/gantry-slacks-fast-booting-frontend-framework-fb70c8eed2fd) (October 23, 2019)
- [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)
- [How Slack changed the way it designs accessible frontend components](https://increment.com/frontend/case-study-web-components-for-screen-readers/) (May 2020)
- [The Unsuspecting Beauty & Complexity of Web Forms](https://slack.engineering/the-unsuspecting-beauty-complexity-of-web-forms/) (September 15, 2020)
- 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)
- [Managing Focus Transitions in Slack](https://slack.engineering/managing-focus-transitions-in-slack) (July 13, 2021)

### [Snipcart](https://snipcart.com)

- [The Story of our Progressive Migration from Backbone to Vue.js](https://snipcart.com/blog/progressive-migration-backbone-vuejs-refactoring) (July 20, 2017)

### [SoundCloud](https://soundcloud.com/)

- [Front-end JavaScript bug tracking](https://developers.soundcloud.com/blog/front-end-javascript-bug-tracking) (November 21, 2011)
- [Building The Next SoundCloud](https://developers.soundcloud.com/blog/building-the-next-soundcloud) (June 14, 2012)
- [Smooth image loading by upscaling](https://developers.soundcloud.com/blog/smooth-image-loading-by-upscaling) (February 20, 2014)
- [React Native at SoundCloud](https://developers.soundcloud.com/blog/react-native-at-soundcloud) (August 3, 2016)
- [Garbage Collection in Redux Applications](https://developers.soundcloud.com/blog/garbage-collection-in-redux-applications) (January 24, 2019)
- [Playback on Web at SoundCloud](https://developers.soundcloud.com/blog/playback-on-web-at-soundcloud) (May 3, 2019)

### [Spectrum](https://spectrum.chat/)

- [Tech Choices I Regret at Spectrum](https://mxstbr.com/thoughts/tech-choice-regrets-at-spectrum/) (January 16, 2019)

### [Spotify](https://www.spotify.com)

- [Spotify Wrapped 2018 — Technical Case Study](https://medium.com/@activetheory/spotify-wrapped-2018-technical-case-study-5b7cfb7e9d3a) (December 18, 2018)
- [Building Spotify’s New Web Player](https://labs.spotify.com/2019/03/25/building-spotifys-new-web-player/) (March 25, 2019)
- [(Right to Left (The Mirror World](https://labs.spotify.com/2019/04/15/right-to-left-the-mirror-world/) (April 15, 2019)
- [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)
- [Reimagining Design Systems at Spotify](https://spotify.design/articles/2019-12-16/reimagining-design-systems-at-spotify/) (December 16, 2019)

### [Stack Overflow](https://stackoverflow.com)

- [HTTPS on Stack Overflow: The End of a Long Road](https://nickcraver.com/blog/2017/05/22/https-on-stack-overflow) (May 22, 2017)
- [Building dark mode on Stack Overflow](https://stackoverflow.blog/2020/03/31/building-dark-mode-on-stack-overflow/) (March 31, 2020)

### [stripe](https://stripe.com)

- [Connect: behind the front-end experience](https://stripe.com/blog/connect-front-end-experience) (June 19, 2017)
- [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)
- [Designing accessible color systems](https://stripe.com/en-pt/blog/accessible-color-systems) (October 15, 2019)
- [To design and develop an interactive globe](https://stripe.com/blog/globe) (September 1, 2020)
- [Migrating millions of lines of code to TypeScript](https://stripe.com/blog/migrating-to-typescript) (May 20, 2022)

### [SumUp](https://sumup.com)

- [10 lessons learned building SumUp’s design system](https://medium.com/sumup-engineering/10-lessons-learned-building-sumups-design-system-577af292ae56) (August 15, 2019)

### [Superhuman](https://superhuman.com)

- [Delightful search: more than meets the eye](https://blog.superhuman.com/delightful-search-more-than-meets-the-eye-d3fa2e3ef3b6) (May 5, 2017)

### [TakeShape](https://www.takeshape.io)

- [Why we switched from Yarn to pnpm](https://www.takeshape.io/articles/why-we-switched-from-yarn-to-pnpm/) (June 9, 2020)

### [The Guardian](https://www.theguardian.com/)

- [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)
- [Revisiting the rendering tier](https://www.theguardian.com/info/2019/apr/04/revisiting-the-rendering-tier) (April 4, 2019)
- [Migrating the Guardian website to React](https://www.theguardian.com/info/2019/dec/08/migrating-the-guardian-website-to-react) (December 8, 2019)

### [The Knot Worldwide](https://www.theknotww.com/)

- [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)
- [React Native @ The Knot](https://tech.xogrp.com/react-native-the-knot-ca255494da79) (February 8, 2019)
- [React Native @ The Knot: A Designer’s Perspective](https://tech.xogrp.com/react-native-at-the-knot-a-designers-perspective-d3d3fe41ada1) (February 13, 2019)

### [The New York Times](https://www.nytimes.com)

- [The Technology Behind the NYTimes.com Redesign](https://open.nytimes.com/the-technology-behind-the-nytimes-com-redesign-3d3d3da70b9c) (January 8, 2014)
- [Improving Article Accessibility](https://open.nytimes.com/improving-article-accessibility-7bca8cf02b34) (June 24, 2014)
- [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)
- [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)
- [GraphQL in real life](https://youtu.be/HlZ3ZecECOU) (April 19, 2019)
- [How We Implemented a Baseline Grid Using CSS](https://open.nytimes.com/how-we-implemented-a-baseline-grid-using-css-cb13cac45201) (November 21, 2019)
- [A More Accessible Web](https://open.nytimes.com/a-more-accessible-web-fa87592da6d2) (February 25, 2021)

### [The Telegraph](https://www.telegraph.co.uk)

- [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)
- [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)
- [Improving Cumulative Layout Shift at Telegraph Media Group](https://web.dev/telegraph) (June 14, 2021)

### [The Times & The Sunday Times](https://www.thetimes.co.uk)

- [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)

### [The U.S. Digital Service](https://www.usds.gov/)

- [Building Forms Faster on Vets.gov](https://medium.com/the-u-s-digital-service/building-forms-faster-on-vets-gov-d8619f4e9db) (June 2, 2017)

### [The Wall Street Journal](https://www.wsj.com)

- [Making WSJ.com more accessible](https://matthewstrom.com/writing/wsj-accessibility.html) (August 3, 2016)

### [This Also](http://thisalso.com)

- [Fixing HTML Video on Mobile](https://medium.com/this-also/whitewater-9b47f1e32ffe) (July 14, 2016)

### [ThomasNet](https://www.thomasnet.com/)

- [How We Adopted CSS Grid at Scale](https://julian.is/article/css-grid-at-scale/) (March 1, 2018)

### [Thread](https://www.thread.com/)

- [Dealing with legacy code in React](https://thread.engineering/dealing-with-legacy-code-in-react-18bc0c039e8b) (May 10, 2018)
- [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)

### [Tinder](https://tinder.com)

- [A Tinder Progressive Web App Performance Case Study](https://medium.com/@addyosmani/a-tinder-progressive-web-app-performance-case-study-78919d98ece0) (December 24, 2017)
- [Building Tinder Online](https://medium.com/@roderickhsiao/building-tinder-online-a447e6c0265e) (February 9, 2018)

### [Tines](https://www.tines.com)

- [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)
- [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)

### [TinyMCE](https://www.tinymce.com/)

- [TinyMCE is going mobile](https://go.tinymce.com/blog/tinymce-is-going-mobile/) (March 31, 2017)
- [Benefits of gradual strong typing in JavaScript](https://go.tinymce.com/blog/benefits-of-gradual-strong-typing-in-javascript/) (January 25, 2019)

### [Tokopedia](hthttps://www.tokopedia.com)

- [A Tokopedia Mobile Web Performance Case Study](https://medium.com/tokopedia-engineering/a-tokopedia-mobile-web-performance-case-study-48ee5c6e4d5c) (May 22, 2020)
- [How focusing on web performance improved Tokopedia's click-through rate by 35%](https://web.dev/tokopedia/) (October 13, 2020)

### [Treebo](https://www.treebo.com/)

- [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)
- [Redux Middlewares — An approach to cancel redux actions](https://tech.treebo.com/redux-middlewares-an-approach-to-cancel-redux-actions-7e08b51b83ce) (May 4, 2018)
- [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)
- [Iconography for Treebo](https://tech.treebo.com/iconography-for-treebo-c379bc910da1) (August 13, 2018)
- [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)
- [A Tale of Brotli Compression](https://tech.treebo.com/a-tale-of-brotli-compression-bcb071d9780a) (January 20, 2020)
- [GraphQL at Treebo](https://tech.treebo.com/graphql-at-treebo-f5b41c22c06f) (October 23, 2020)

### [Trivago](https://www.trivago.com)

- [Designing for RTL platforms - A flipped layout](https://tech.trivago.com/2015/04/27/right-to-left/) (April 27, 2015)
- [Risk-free Migration From Assetic to Webpack](https://tech.trivago.com/2015/05/28/introduce-webpack/) (May 28, 2015)
- [Speeding up webpack performance with parallel builds](https://tech.trivago.com/2015/12/15/parallel-webpack/) (December 15, 2015)
- [Large Scale CSS Refactoring at trivago](https://tech.trivago.com/2016/02/02/large-scale-css-refactoring-at-trivago/) (February 2, 2016)
- [Dropping IE8 Support: Consequences for JavaScript](https://tech.trivago.com/2016/06/01/dropping-ie8-support-consequences-for-javascript/) (June 1, 2016)
- [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)
- [An Inline SVG Icon System For Our Hotel Search Application](https://tech.trivago.com/2016/09/05/inline-svg-icon-system/) (September 5, 2016)
- [CSS done right - Post RTLCSS](https://tech.trivago.com/2017/07/07/css-done-right-post-rtlcss/) (July 7, 2017)
- [Accessibility at trivago](https://tech.trivago.com/2017/09/26/accessibility-at-trivago/) (September 26, 2017)
- [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)
- [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)
- [Building fast and reliable web applications](https://tech.trivago.com/2018/10/12/building-fast-and-reliable-web-applications/) (October 12, 2018)
- [Presenting babel-plugin-cloudinary](https://tech.trivago.com/2019/04/02/presenting-babel-plugin-cloudinary/) (April 2, 2019)
- [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)
- [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)
- [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)
- [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)
- [Designing Marketing Emails via predefined Modules in Salesforce Email Studio](https://tech.trivago.com/post/2021-04-19-designingmarketingemailsviapredefinedmod) (April 19, 2021)
- [WARP - A Web Application Rewrite Project](https://tech.trivago.com/post/2022-05-16-warp-a-web-application-rewrite-project) (May 16, 2022)
- [3 Things We Learned When Switching to TypeScript](https://tech.trivago.com/post/2022-08-01-three-learnings-switching-to-typescript) (August 1, 2022)
- [End-to-end tests retry strategies](https://tech.trivago.com/post/2023-09-27-end-to-end-tests-retry-strategies) (September 27, 2023)

### [Tumblr](https://www.tumblr.com/)

- [Moving things out of critical rendering path](https://javascript.tumblr.com/post/139610473242/moving-things-out-of-critical-rendering-path) (February 19, 2016)
- [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)
- [Flow and TypeScript](https://javascript.tumblr.com/post/165082071937/flow-and-typescript) (September 7, 2017)
- [Using srcset and sizes to make responsive HTML5 images](https://javascript.tumblr.com/post/171557569007/responsive-images) (March 5, 2018)
- [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)
- [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)
- [We’re making Tumblr more accessible!](https://javascript.tumblr.com/post/182090529587/were-making-tumblr-more-accessible) (January 17, 2019)

### [Twitch](https://www.twitch.tv)

- [Improving Chat Rendering Performance](https://blog.twitch.tv/en/2016/08/08/improving-chat-rendering-performance-1c0945b82764/) (August 8, 2016)
- [Investigating React Native](https://blog.twitch.tv/en/2017/04/25/investigating-react-native-6032ecced610/) (April 25, 2017)
- [Beyond Purple](https://blog.twitch.tv/en/2019/12/03/beyond-purple/) (December 3, 2019)

### [Twitter](https://twitter.com)

- [View Source: Twitter.com](https://pusher.com/sessions/meetup/viennajs/view-source-twittercom) (January 1, 2017)
- [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)
- [Infinite List and React](http://itsze.ro/blog/2017/04/09/infinite-list-and-react.html) (April 9, 2017)
- [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)
- [The Twitter Lite team about their use of Node.js](https://youtu.be/iWXC5VCfQHI) (April 12, 2017)
- [Redux modules and code-splitting](http://nicolasgallagher.com/redux-modules-and-code-splitting/) (February 02, 2018)
- [How using component-based design helps us build faster](https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/buildingfasterwithcomponents.html) (July 16, 2019)

### [Uber](https://www.uber.com)

- [Powering UberEATS with React Native and Uber Engineering](https://eng.uber.com/ubereats-react-native/) (March 28, 2017)
- [Building m.uber: Engineering a High-Performance Web App for the Global Market](https://eng.uber.com/m-uber) (June 27, 2017)
- [Javascript @ Uber](https://youtu.be/JWFyH13_I3o) (July 10, 2017)
- [Building a More Seamless Web Booking Flow for Uber](https://eng.uber.com/web-booking-flow/) (July 25, 2019)
- [Best Practices for Unit Testing in React Version 16](https://eng.uber.com/best-practices-for-react-v16/) (August 29, 2019)
- [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)

### [Udacity](https://www.udacity.com/)

- [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)
- [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)
- [Udacity’s Front-End Tech Stack](https://engineering.udacity.com/udacitys-front-end-tech-stack-b19dae07f0ac) (July 18, 2016)

### [Unity](https://unity.com/)

- [WebAssembly is here!](https://blogs.unity3d.com/2018/08/15/webassembly-is-here/) (August 15, 2018)
- [WebAssembly Load Times and Performance](https://blogs.unity3d.com/2018/09/17/webassembly-load-times-and-performance/) (September 17, 2018)

### [Unsplash](https://unsplash.com)

- [How we gradually migrated to TypeScript at Unsplash](https://medium.com/unsplash/how-we-gradually-migrated-to-typescript-at-unsplash-7a34caa24ef1) (March 14, 2018)

### [Vercel](https://vercel.com)

- [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)
- [Designing the Vercel virtual product tour](https://vercel.com/blog/designing-the-vercel-virtual-product-tour) (June 2, 2023)
- [Design Engineering at Vercel](https://vercel.com/blog/design-engineering-at-vercel) (March 29, 2024)
- [How Vercel adopted microfrontends](https://vercel.com/blog/how-vercel-adopted-microfrontends) (October 22, 2024)

### [Verve](https://verve.co)

- [GraphQL: A Retrospective](https://verve.co/engineering/graphql-a-retrospective/) (November 28, 2018)

### [Walmart Labs](https://www.walmartlabs.com/)

- [React Native at WalmartLabs](https://medium.com/walmartlabs/react-native-at-walmartlabs-cdd140589560) (December 19, 2016)
- [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)
- [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)
- [Migrating Large Enterprise to NodeJS](https://medium.com/walmartlabs/migrating-large-enterprise-to-nodejs-6c38523d2b33) (December 9, 2017)
- [Primer on Front End Automation](https://medium.com/walmartlabs/primer-on-front-end-automation-a9eee2c6bc1) (July 27, 2018)
- [Lazy Loading Images with IntersectionObserver](https://medium.com/walmartlabs/lazy-loading-images-intersectionobserver-8c5bff730920) (September 10, 2018)
- [Midway: Walmart’s mocking journey…](https://medium.com/walmartlabs/midway-walmarts-mocking-journey-84c34fcc4593) (October 5, 2018)
- [Infinite Scroll’ing the right way](https://medium.com/walmartlabs/infinite-scrolling-the-right-way-11b098a08815) (April 2, 2019)
- [Delivering ReactJS applications at scale](https://medium.com/walmartlabs/delivering-reactjs-applications-at-scale-5cb8a363f99) (August 26, 2019)
- [Turbocharging Walmart.com](https://youtu.be/vB8JUx9Dp08) (April 9, 2020)
- [Differential Serving — Food for latest browsers](https://medium.com/walmartlabs/differential-serving-food-for-latest-browsers-ba96192eb0ad) (June 23, 2020)

### [Wikimedia](https://www.wikimedia.org)

- [Creative Techniques for Loading Web Pages Faster](https://vimeo.com/59916225) (January 17, 2012)
- [Investigating a performance improvement](https://phabricator.wikimedia.org/phame/post/view/15/investigating_a_performance_improvement/) (June 2, 2017)
- [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)
- [Beacons](https://phabricator.wikimedia.org/phame/post/view/61/beacons/) (August 16, 2017)
- [Measuring Wikipedia page load times](https://phabricator.wikimedia.org/phame/post/view/83/measuring_wikipedia_page_load_times/) (January 9, 2018)
- [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)
- [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)
- [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)
- [Why performance matters](https://phabricator.wikimedia.org/phame/post/view/131/why_performance_matters/) (December 12, 2018)
- [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)
- [Evaluating Element Timing for Images](https://phabricator.wikimedia.org/phame/post/view/157/evaluating_element_timing_for_images/) (April 10, 2019)
- [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)
- [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)
- [Performance perception: correlation to RUM metrics](https://phabricator.wikimedia.org/phame/post/view/167/performance_perception_correlation_to_rum_metrics/) (June 17, 2019)
- [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)
- [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)
- [Measuring Long Tasks and First Input Delay](https://calendar.perfplanet.com/2019/measuring-long-tasks-and-first-input-delay/) (December 21, 2019)
- [Analyzing Wikipedia's Search Performance](https://www.nray.dev/blog/analyzing-search-performance/) (April 5, 2021)
- [300ms Faster: Reducing Wikipedia's Total Blocking Time](https://www.nray.dev/blog/300ms-faster-reducing-wikipedias-total-blocking-time/) (May 21, 2023)

### [Wingify](https://wingify.com/)

- [jQuery Promises: The answer to PostMessage's asynchrony](https://engineering.wingify.com/posts/jquery-promises-with-postmessage/) (June 17, 2013)
- [How We Made The Animated A/B Testing Guide](https://engineering.wingify.com/posts/making-of-abtesting-scrollmation/) (July 8, 2013)
- [Getting 60 FPS using Chrome devtools](https://engineering.wingify.com/posts/getting-60fps-using-devtools/) (July 29, 2013)
- [Overcoming the Challenges of Performance Testing Single-page Apps](https://engineering.wingify.com/posts/performance-testing/) (January 29, 2015)
- [Testing AngularJS Apps End to End Using Protractor](https://engineering.wingify.com/posts/angularapp-e2e-testing-with-protractor/) (February 13, 2015)
- [A layout trick](https://engineering.wingify.com/posts/layout-trick/) (April 4, 2016)
- [Speeding Up VWO](https://engineering.wingify.com/posts/speeding-up-vwo/) (September 17, 2016)
- [Migrating towards Yarn and Webpack](https://engineering.wingify.com/posts/migrating-towards-yarn-webpack/) (October 4, 2017)
- [Why we've removed Inheritance/Extend from SASS & you should do the same!](https://engineering.wingify.com/posts/sass-inheritance-removal/) (November 30, 2017)
- [Automated Heatmap Verification E2E using Selenium and Canvas](https://engineering.wingify.com/posts/automated-heatmap-verification/) (April 3, 2018)

### [Wix](https://www.wix.com/)

- [Taking CSS To Scale: A Pragmatic Approach](https://www.wix.engineering/blog/taking-css-to-scale-a-pragmatic-approach) (July 13, 2016)
- [Building a React Native App for 80 Million Users](https://youtu.be/abSNo2P9mMM) (October 1, 2016)
- [The Story of Making Wix Accessible](https://www.wix.engineering/blog/the-story-of-making-wix-accessible) (December 14, 2017)
- [Improving load time for 100 million websites](https://youtu.be/FKpShne3I4E) (June 26, 2018)
- [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)
- [How Wix improved website performance by evolving their infrastructure](https://web.dev/wix/) (March 10, 2021)
- [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)

### [Yelp](https://www.yelp.com)

- [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)
- [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)
- [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)
- [Server Side Rendering at Scale](https://engineeringblog.yelp.com/2022/02/server-side-rendering-at-scale.html) (February 22, 2022)
- [Migrating from Styleguidist to Storybook](https://engineeringblog.yelp.com/2022/07/migrating-from-styleguidist-to-storybook.html) (July 6, 2022)
- [Writing Emails Using React](https://engineeringblog.yelp.com/2022/07/writing-emails-using-react.html) (July 20, 2022)
- [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)

### [YNAB](https://www.youneedabudget.com)

- [Progressive Conversion of TypeScript Namespaces to Modules](https://dev.to/ynab/progressive-conversion-of-typescript-namespaces-to-modules-3f1j) (September 23, 2019)
- 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)
- [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)

### [YouTube](https://www.youtube.com)

- [Page Weight Matters](https://blog.chriszacharias.com/page-weight-matters) (December 21, 2012)
- [Polymer @ YouTube](https://youtu.be/tNulrEbTQf8) (August 22, 2017)
- [A Conspiracy To Kill IE6](https://blog.chriszacharias.com/a-conspiracy-to-kill-ie6) (May 1, 2019)
- [Building a Better Web - Part 1: A faster YouTube on web](https://web.dev/better-youtube-web-part1/) (October 20, 2022)

### [Zajno](https://zajno.com/)

- [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)

### [Zynga](https://www.zynga.com/)

- [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)
- [React Native Stability Monitoring](https://medium.com/zynga-engineering/react-native-stability-monitoring-fbf425eb71ac) (May 14, 2019)

### [18F](https://18f.gsa.gov/)

- [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)

### [1Password](https://1password.com/)

- [From dark to light and back again](https://blog.1password.com/from-dark-to-light-and-back-again/) (November 8, 2018)
- [How we used esbuild to reduce our browser extension build times by 90%](https://blog.1password.com/new-extension-build-system/) (May 30, 2024)

### Miscellaneous

- [PWA Stats](https://www.pwastats.com)
- [Web Performance Optimization Stats](https://wpostats.com/)
- [Production Web Apps Performance Study Q4/16 - Q1/17](https://github.com/GoogleChromeLabs/discovery/issues/1) (January 21, 2017)
- [Case study: improving a popular library’s size for webpack users](https://iamakulov.com/notes/polished-webpack) (June 23, 2017)
- [Case study: analyzing the Walmart site performance](https://iamakulov.com/notes/walmart/) (April 27, 2018)
- 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)
- [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)
- [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)
- [Building an accessible emoji picker](https://nolanlawson.com/2020/07/01/building-an-accessible-emoji-picker/) (July 1, 2020)
- [How ZDF created a video PWA with offline and dark mode](https://web.dev/zdf/) (October 7, 2020)
- [NDTV achieved a 55% improvement in LCP by optimizing for Core Web Vitals](https://web.dev/ndtv/) (October 27, 2020)
- [Rakuten 24’s investment in PWA increases user retention by 450%](https://web.dev/rakuten-24/) (November 17, 2020)
- [JD.ID improves their mobile conversion rate by 53% with caching strategies, installation, and push notifications](https://web.dev/jdid/) (November 24, 2020)
- [PWA users are 2.5x more likely to purchase Gravit Designer PRO](https://web.dev/gravit-designer/) (December 8, 2020)
- [Clipchamp's video editor PWA installs see a 97% monthly growth](https://web.dev/clipchamp/) (December 8, 2020)
- [How Zalando reduced performance feedback time from 1 day to 15 minutes with Lighthouse CI](https://web.dev/zalando/) (April 13, 2021)
- [Mainline Menswear implements PWA and sees a 55% conversion rate uplift](https://web.dev/mainline-mensware/) (April 20, 2021)
- [How Swappie increased mobile revenue by 42% by focusing on Core Web Vitals](https://web.dev/swappie/) (September 15, 2021)
- [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)

## Russian

### [Amplifr](https://amplifr.com)

- [Принципы разработки Амплифера](https://gist.github.com/ai/473dd603baa92d5c8590f3573514c7a1) (2019)
- [Как Амплифер использует Logux — инструмент для связи клиента и сервера](https://habr.com/ru/post/491170/) (5 марта 2020)

### [Aviasales](https://www.aviasales.ru)

- [Как мы строим веб-платформу в Авиасейлс](https://blog.kamyshev.me/salo-selene/) (4 ноября 2021)

### [Avito](https://www.avito.ru/)

- [Фронтенд в Avito](https://youtu.be/OFKbwNc8AIw) (13 декабря 2015)
- [Фронтенд для миллионов](https://youtu.be/hwQVbyKcRnA) (24 июня 2017)
- [Дизайн-платформа в Avito](https://youtu.be/7vY3_vPipW8) (8 апреля 2017)
- [Скриншоты как сервис](https://youtu.be/B_gLzbgJo98) (7 марта 2018)
- [Unit-тестирование скриншотами: преодолеваем звуковой барьер](https://habr.com/ru/company/avito/blog/350604/) (14 марта 2018)
- [Масштабируемая архитектура фронтенда](https://youtu.be/z9y6PNC2FL0) (7 апреля 2018)
- [Каталог компонентов: переосмысление](https://youtu.be/zZUbXAVV-HA) (19 мая 2018)
- [Avito Online Frontend: Infrastructure](https://youtu.be/3r3IYaaEcS8) (11 декабря 2018)
- [Avito Online Frontend: Performance](https://youtu.be/CnsrImdBYz8) (18 декабря 2018)
- [Жесть для Jest](https://youtu.be/8_6Kuo5jFpU) (17 августа 2019)
- [Как мы нарисовали на карте несколько тысяч интерактивных объектов без вреда для перформанса](https://habr.com/ru/company/avito/blog/512146/) (29 июля 2020)
- [Webpack в дикой природе](https://youtu.be/qKz9YAeKYMs) (20 ноября 2020)

### [auto.ru](https://auto.ru/)

- [Полный цикл тестирования React-приложений](https://habr.com/ru/company/yandex/blog/459924/) (14 июля 2019)

### [Badoo](https://badoo.com)

- [Многоязычный Badoo: «трудности перевода»](https://habrahabr.ru/company/badoo/blog/223767) (22 мая 2014)
- [Специфика верстки мультиязычных веб-приложений](https://tech.badoo.com/ru/presentation/23/speczifika-verstki-multiyazychnyx-veb-prilozhenij) (26 марта 2015)
- [Как собрать статистику с веб-сайта и не набить себе шишек](https://habrahabr.ru/company/badoo/blog/325062/) (29 марта 2017)
- [Работаем с API по-взрослому](https://youtu.be/ErhWb-iTRmc) (14 апреля 2017)
- [Покрываем A/B-тесты UI-тестами. Как не запутаться в собственном коде](https://habr.com/company/badoo/blog/434448/) (26 декабря 2018)
- 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)
- [Локализация приложений: как мы подружили перевод и разработку](https://habr.com/ru/company/badoo/blog/485138/) (23 января 2020)
- [Дизайн-токены способны на большее: создаем единый источник информации о компонентах UI](https://habr.com/ru/company/badoo/blog/491948/) (12 марта 2020)
- [Как перенести на TypeScript большую кодовую базу React UI-компонентов](https://habr.com/ru/company/badoo/blog/518246/) (9 сентября 2020)

### [Delivery Club](https://www.delivery-club.ru/)

- [Микрофронтенды: разделяй и властвуй](https://habr.com/ru/company/deliveryclub/blog/552240/) (14 апреля 2021)

### [DIRECTUM](https://www.directum.ru/)

- [Опыт перевода большого проекта с Flow на TypeScript](https://habr.com/ru/company/directum/blog/462055/) (1 августа 2019)

### [Flocktory](https://www.flocktory.com)

- [Разработка сторонних библиотек](https://slonoed.net/ru/third-party-js/) (22 мая 2017)

### [GitLab](https://gitlab.com)

- [Методы борьбы с legacy-кодом на примере GitLab](https://youtu.be/3tdfBMRq34o) (10 декабря 2019)

### [HeadHunter](https://hh.ru/)

- [Нянчим проект на React-redux с пелёнок](https://habr.com/ru/company/hh/blog/310524/) (21 сентября 2016)
- [Качество кода фронтенда в HH](https://habr.com/ru/company/hh/blog/438812/) (4 февраля 2019)
- [Как мы пилили серверный рендеринг и что из этого вышло](https://habr.com/ru/company/hh/blog/445816/) (28 марта 2019)
- [Перфоманс фронтенда как современное искусство: графики, код, кулстори](https://habr.com/ru/company/hh/blog/519474/) (17 сентября 2020)
- [«Продам гараж»: фронт и реклама в hh.ru](https://habr.com/ru/company/hh/blog/552288/) (14 апреля 2021)

### [ISPSystem](https://www.ispsystem.ru)

- [Обновляем Angular до 6-ой версии в проекте без использования CLI](https://habr.com/ru/company/ispsystem/blog/358696/) (16 мая 2018)
- [Как организовать собственный репозиторий модулей Node.js с блэкджеком и версионностью](https://habr.com/ru/company/ispsystem/blog/418135/) (25 июля 2018)
- [Как разделить фронтенд и бэкенд, сохранив взаимопонимание](https://habr.com/ru/company/ispsystem/blog/447650/) (11 апреля 2019)
- [От библиотеки компонентов к дизайн-системе](https://habr.com/ru/company/ispsystem/blog/507826/) (23 июня 2020)
- [Ленивая подгрузка переводов с Angular](https://habr.com/ru/company/ispsystem/blog/512008/) (22 июля 2020)

### [Joom](https://www.joom.com)

- [Автоматизируем локализацию макетов в Figma](https://habr.com/ru/company/joom/blog/535188/) (29 декабря 2020)
- [Пошаговая инструкция: как с Node.js организовать иконки из Figma в проекте](https://habr.com/ru/company/joom/blog/708286/) (30 декабря 2022)

### [Mail.Ru](https://mail.ru)

- [Разработка собственного решения: риски и ответственность](https://habr.com/ru/company/mailru/blog/271689/) (26 ноября 2015)
- [Frontend: Разработка и поддержка](https://habr.com/ru/company/mailru/blog/309212/) (6 сентября 2016)
- [Архитектура фронтенда крупного проекта, как она есть](https://youtu.be/J08UOAJdjWc) (19 апреля 2018)
- WebAuthn в реальной жизни: [запись доклада](https://youtu.be/yx_eHBsXyIo) (27 ноября 2019), [статья](https://habr.com/ru/company/mailru/blog/489270/) (20 февраля 2020)
- [Кастомизация компонентов Ant Design и оптимизация бандла](https://habr.com/ru/company/mailru/blog/530798/) (11 декабря 2020)
- [Адаптивный layout — как переверстать весь проект, не перевёрстывая его](https://habr.com/ru/company/mailru/blog/579798/) (24 сентября 2021)

### [Microsoft To-Do](https://to-do.microsoft.com/)

- [Как Microsoft To-Do использует React](https://youtu.be/ZdrnIUgeDAs) (18 июня 2018)

### [Miro](https://miro.com/)

- [Как мы учились рисовать тексты на Canvas](https://habr.com/ru/company/miro/blog/458624/) (3 июля 2019)
- [Как мы боролись за байты на фронтенде. Усмиряем прожорливый виджет рисования и помогаем iPad его переварить](https://habr.com/ru/company/miro/blog/566426/) (6 июля 2021)

### [Netcracker](https://www.netcracker.com/)

- [Выбранный UI-фреймворк – вред. Архитектурные требования – профит](https://habr.com/company/netcracker/blog/333734/) (20 июля 2017)
- [Микросервисный фронтенд — современный подход к разделению фронта](https://habr.com/company/netcracker/blog/420753/) (21 августа 2018)

### [OneTwoTrip](https://www.onetwotrip.com/)

- [9 лет в монолите на Node.JS](https://habr.com/ru/post/459206/) (9 июля 2019)
- [Как мигрировать с mocha на jest в 14 простых шагов — и зачем](https://habr.com/ru/post/486360/) (31 января 2020)

### [Rambler Group](https://rambler-co.ru/)

- [Как мы разогнали мобильную Lenta.ru до скорости света](https://habr.com/company/rambler-co/blog/280602/) (31 марта 2016)
- [Проектирование дизайн-системы Рамблера](https://youtu.be/ZxmcIpmenoY) (18 июня 2018)
- [Опыт Rambler Group: как мы начали полностью контролировать формирование и поведение фронтовых React компонентов](https://habr.com/company/rambler-co/blog/417023/) (12 июля 2018)
- [Apollo: 9 месяцев — полет нормальный](https://habr.com/company/rambler-co/blog/418417/) (27 июля 2018)
- [Способы синхронизации вкладок браузера](https://habr.com/ru/company/rambler-co/blog/422545/) (7 сентября 2018)
- [Маршрутизация в большом приложении на React](https://habr.com/company/rambler-co/blog/424025/) (27 сентября 2018)

### [Setka](https://setka.io/)

- [Разработка Rich Text Editor: проблемы и решения](https://habrahabr.ru/company/oleg-bunin/blog/350252/) (5 марта 2018)

### [Skyeng](https://skyeng.ru)

- [Как масштабировать сложный Single Page Application](https://youtu.be/a6mGNqubTcg) (5 июня 2017)
- Переход с 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/)
- [От Skype до WebRTC: как мы организовали видеосвязь через веб](https://habr.com/ru/company/skyeng/blog/446444/) (3 апреля 2019)
- [Как мы подружили SCSS с CSS Variables на примере c темизацией UI Kit](https://habr.com/ru/company/skyeng/blog/459194/) (9 июля 2019)

### [Sports.ru](https://www.sports.ru)

- [Как в Sports.ru писали свой WYSIWYG-редактор](https://habr.com/ru/company/sports_ru/blog/492228/) (13 марта 2020)

### [Tinkoff](https://www.tinkoff.ru/)

- [Как мы разрабатываем новый фронтенд Tinkoff.ru](https://habrahabr.ru/company/tinkoff/blog/303580/) (23 июня 2016)
- [Создание Tinkoff Design System. Первые шаги](https://habrahabr.ru/company/tinkoff/blog/326782/) (18 апреля 2017)
- [Создание Tinkoff Design System. UI Kit, версионирование и витрина компонентов](https://habrahabr.ru/company/tinkoff/blog/339660/) (9 октября 2017)
- [Как организовать работу над библиотекой общих компонентов](https://habr.com/ru/company/tinkoff/blog/468589/) (25 сентября 2019)
- [WARNING: sanitizing HTML stripped some content и как с ним правильно бороться](https://m.habr.com/ru/company/tinkoff/blog/459396/) (27 сентября 2019)
- [Как заопенсорсить npm-пакет с нормальным деплоем, CI и демо (без потери радости к жизни)](https://m.habr.com/ru/company/tinkoff/blog/467227/) (30 сентября 2019)
- [Компоненты-агностики в Angular](https://m.habr.com/ru/company/tinkoff/blog/473108/) (25 октября 2019)
- [«Шакал»: сжимаем фронтенд](https://habr.com/ru/company/tinkoff/blog/474632/) (7 ноября 2019)
- Как мы распилили монолит: [часть 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)

### [Wrike](https://www.wrike.com)

- [Чем плох JavaScript в большом проекте? С какими проблемами мы столкнулись и как их решали](https://habrahabr.ru/company/wrike/blog/277255/) (16 февраля 2016)
- [Как отрефакторить 2 500 000 строк кода и не сойти с ума](https://habr.com/ru/company/wrike/blog/334590/) (5 июня 2017)
- [Два года с Dart: о том, как мы пишем на языке, который ежегодно «хоронят»](https://habrahabr.ru/company/wrike/blog/330832/) (15 июня 2017)
- [DIY: Как мы делали «живое» расписание для Codefest X](https://habr.com/ru/company/wrike/blog/448610/) (18 апреля 2019)
- [10 верстальщиков на 30 команд. Вы рехнулись?](https://habr.com/ru/company/wrike/blog/452820/) (21 мая 2019)
- [Как настроить веб-аналитику на AMP страницах](https://habr.com/ru/company/wrike/blog/451928/) (26 июня 2019)

### [Альфа-Банк](https://alfabank.ru)

- [Предъявите паспорт](https://habrahabr.ru/company/alfa/blog/335892/) (18 августа 2017)
- [БЭМ + React: гибкая архитектура дизайн-системы](https://habrahabr.ru/company/alfa/blog/340522/) (23 октября 2017)
- [Изоморфное приложение React JS + Spring Boot](https://habrahabr.ru/company/alfa/blog/340776/) (27 октября 2017)
- [Атомарные SPA](https://youtu.be/pkHWttaktWk) (7 апреля 2018)
- [Тёмная сторона дизайн-системы и что с ней делать](https://habr.com/ru/company/alfa/blog/492010/) (16 марта 2020)

### [Бюро Горбунова](https://bureau.ru)

- [Как в книгах Бюро тяжёлые картинки выгружаются из памяти, чтобы браузер не тормозил](https://bureau.ru/bb/soviet/20170629) (29 июня 2017)

### [ВКонтакте](https://vk.com)

- [React со скоростью света: не совсем обычный серверный рендеринг](https://www.youtube.com/watch?v=3rXueXJeGlw) (2 июня 2017)
- [Как оседлать радугу: история создания тёмной темы](https://habr.com/ru/company/vk/blog/449720/) (29 апреля 2019)
- [Баги, которые вы никогда не встретите](https://ok.ru/video/2423311305323) (26 ноября 2019)
- [Бенчмарки VKUI и других ребят из UI-библиотек](https://habr.com/ru/company/vk/blog/558996/) (26 мая 2021)

### [Додо Пицца](https://dodois.com)

- [Додо Пицца: собственная касса на веб-технологиях](https://youtu.be/G_3qp1HbhR4) (14 октября 2019)
- [Лошадь сдохла – слезь: переход с tslint на eslint](https://habr.com/ru/company/dodopizzaio/blog/473648/) (29 октября 2019)

### [Леруа Мерлен](https://leroymerlin.ru)

- [Опыт интеграции веб-компонентов на сайт Леруа Мерлен](https://habr.com/ru/company/leroy_merlin/blog/488648/) (18 февраля 2020)

### [Медуза](https://meduza.io/)

- [Веб-пуш уведомления в Медузе](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)
- [AMP, Instant Articles, Instant View, whut?](http://telegra.ph/AMP-Instant-Articles-Instant-View-whut-11-23) (23 ноября 2016)
- [Как использовать кастомные шрифты в вебе и не сойти с ума](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)
- [Подкасты «Медузы»](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)
- [Как техотдел «Медузы» решил оптимизировать картинки — а в процессе переделал сайт, админку и подход к интерфейсу](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)

### [Одноклассники](https://ok.ru/)

- [Архитектура и платформа проекта Одноклассники](https://habr.com/ru/company/odnoklassniki/blog/115881/) (21 марта 2011)
- [Как мы оптимизировали социальную кнопку](https://habr.com/ru/company/mailru/blog/191154/) (26 августа 2013)
- Новый фронтенд Одноклассников: запуск React в Java. [Часть 1](https://habr.com/ru/company/odnoklassniki/blog/480808/) и [часть 2](https://habr.com/ru/company/odnoklassniki/blog/486810/) (январь–февраль 2020)

### [Сбербанк](http://sberbank.ru/)

- [За закрытой дверью фронтенда Единой фронтальной системы (ЕФС)](https://habrahabr.ru/company/efs/blog/325916/) (7 апреля 2017)
- [Redux как сердце архитектуры фронтенда Единой фронтальной системы](https://habrahabr.ru/company/efs/blog/328012/) (4 мая 2017)
- [Работа с периферией из JavaScript: от теории к практике](https://habrahabr.ru/company/efs/blog/330374/) (15 июня 2017)
- [Как работают приложения Сбербанк Онлайн: Workflow API и фрэймворки](https://habr.com/company/sberbank/blog/353746/) (18 апреля 2018)

### [Ситимобил](https://city-mobil.ru)

- [Хороший ли выбор Svelte для реализации виджета?](https://habr.com/ru/company/citymobil/blog/504270/) (28 мая 2020)

### [Спортмастер](https://www.sportmaster.ru)

- [Frontend в Sportmaster Lab](https://habr.com/ru/company/sportmaster_lab/blog/531342/) (4 декабря 2020)

### [Учи.ру](https://uchi.ru)

- [Интерфейсы для тех, кто еще не читает. Принципы проектирования детского UX-UI](https://habr.com/ru/company/uchi_ru/blog/516356/) (24 августа 2020)
- [Единый UI-кит и синхронизация дизайна в Учи.ру. Часть 1](https://habr.com/ru/company/uchi_ru/blog/543308/) (20 февраля 2021)

### [Хабр](https://habr.com/ru)

- [Как мы ускоряли комментарии Хабра](https://habr.com/ru/company/habr/blog/590111/) (25 ноября 2021)

### [ЦИАН](https://cian.ru)

- [Микросервисный фронтенд](https://youtu.be/YANolrn4PYc) (7 ноября 2018)
- Как разрабатывать сотни A/B-экспериментов: [доклад](https://youtu.be/uQh5_a2tx64), [текстовая версия](https://habr.com/ru/company/oleg-bunin/blog/528350/) (28 мая 2019)
- [Внедряем Sign in with Apple — систему авторизации от Apple](https://habr.com/ru/company/cian/blog/475062/) (8 ноября 2019)
- [Micro-frontends. Асинхронный подход к мультикомандной разработке](https://habr.com/ru/company/cian/blog/516958/) (28 августа 2020)
- [Время менять шапки: ускорение мобильной поисковой выдачи Циан](https://habr.com/ru/company/cian/blog/598799/) (11 января 2021)

### [ЮMoney (Яндекс.Деньги)](http://money.yandex.ru/)

- [Прототипирование на продакшн-технологиях](https://habrahabr.ru/company/yamoney/blog/341028/) (26 октября 2017)
- [Почему Node.js в качестве основы фронтенда – это круто](https://habrahabr.ru/company/yamoney/blog/334500/) (31 июля 2017)
- [Создание NPM-модуля Яндекс.Кассы под Node.js — опыт Lodoss Team](https://habrahabr.ru/company/yamoney/blog/348070/) (1 февраля 2018)
- [Фронтенд как у сына маминой подруги](https://habr.com/company/yamoney/blog/354416/) (26 апреля 2018)
- [Реактивный фронтенд. История о том, как мы снова всё переписали](https://habr.com/company/yamoney/blog/414183/) (15 июня 2018)
- [Jenkins на службе фронтенд-разработки](https://youtu.be/DA_R8mIaRJg) (22 февраля 2018)
- [Обзор архитектуры фронтенда ЮMoney](https://youtu.be/7wGYxT1UZl4) (15 декабря 2020)

### [Яндекс](https://www.yandex.ru/)

- [Как инкрементальные обновления влияют на скорость загрузки. Опыт Яндекс.Почты](https://habrahabr.ru/company/yandex/blog/242503/) (6 ноября 2014)
- [Accessibility. Как мы делаем Яндекс доступным людям с ограниченными возможностями и почему считаем это важным](https://habrahabr.ru/company/yandex/blog/258477/) (21 мая 2015)
- [Лекция Виталия Харисова «10k» про лёгкую версию поиска для медленных соединений и способы оптимизации кода, позволяющие уложиться в 10 килобайт](https://youtu.be/RoO0Fcyf0FE?t=2443/) (22 апреля 2017)
- [Как создавалась карта с голосами болельщиков для Олимпиады](https://habrahabr.ru/company/yandex/blog/335982/) (20 августа 2017)
- [Как мы делали «нарратив» – новый формат публикаций в Яндекс.Дзене](https://habrahabr.ru/company/yandex/blog/349220/) (16 февраля 2018)
- [React в Яндекс Поиске. Новая архитектура фронтенда СЕРПа](https://youtu.be/5T7mP-FpHN4) (27 октября 2018)
- [Бэкенд для фронтенда, или как в Яндекс.Маркете создают API без костылей](https://habr.com/company/yandex/blog/428141/) (1 ноября 2018)
- [React & БЭМ – официальная коллаборация. Часть историческая](https://habr.com/en/company/yandex/blog/438598/) (5 февраля 2019)
- [Как создать тёмную тему и не навредить. Опыт команды Яндекс.Почты](https://habr.com/ru/company/yandex/blog/446780/) (9 апреля 2019)
- [«Под капотом» Турбо-страниц: архитектура технологии быстрой загрузки веб-страниц](https://habr.com/ru/company/yandex/blog/460373/) (17 июля 2019)
- [От идеи до релиза. Детальный опыт фронтенда Маркета](https://habr.com/ru/company/yandex/blog/459960/) (22 июля 2019)
- [Разработка в монорепозитории](https://habr.com/ru/company/yandex/blog/469021/) (3 октября 2019)
- [Как мы внедряли WebAssembly в Яндекс.Картах и почему оставили JavaScript](https://habr.com/ru/company/yandex/blog/475382/) (19 ноября 2019)
- [Как устроено тестирование фронтенда в Яндекс.Маркете и почему мы отказываемся от еженедельных релизов](https://habr.com/ru/company/yandex/blog/478862/) (10 декабря 2019)
- [Как переписать фронтенд нагруженного проекта и не потерять главного](https://habr.com/ru/company/yandex/blog/486146/) (3 февраля 2020)
- [Минифицируем приватные поля в TypeScript](https://habr.com/ru/company/yandex/blog/506030/) (13 июня 2020)
- [Технические предпочтения пользователей с нарушениями зрения в 2020 году](https://habr.com/ru/company/yandex/blog/515460/) (18 августа 2020)
- [Как и почему мы переехали с собственного npm-репозитория на Verdaccio](https://habr.com/ru/company/yandex/blog/528386/) (17 ноября 2020)
- [Веб-тренажёр Яндекс.Практикума. Как всё устроено](https://habr.com/ru/company/yandex_praktikum/blog/530268/) (27 ноября 2020)

### [2ГИС](https://2gis.ru)

- [TARS, сделай уровень frontend-рутины 0%](https://habrahabr.ru/company/2gis/blog/254105) (26 марта 2015)
- [Тестируем вёрстку правильно](https://habrahabr.ru/company/2gis/blog/277457) (18 февраля 2016)
- [Этажи: 3D-навигация на WebGL в 2gis.ru](https://habrahabr.ru/company/2gis/blog/282207) (22 апреля 2016)
- [Дели — сокращай, или как мы делали мобильный 2ГИС Онлайн](https://habrahabr.ru/company/2gis/blog/333016) (20 июля 2017)
- [Справа налево. Что такое dir=rtl и как приручить арабский язык](https://habr.com/company/2gis/blog/358148) (10 мая 2018)
- [Справа налево. Как перевернуть интерфейс сайта под RTL](https://habr.com/company/2gis/blog/416635) (10 июля 2018)
- [Быстрая генерализация маркеров на WebGL-карте](https://habr.com/ru/company/2gis/blog/442720/) (6 марта 2019)
- [3D-аркада в браузере: как мы сделали игру на React + Redux](https://habr.com/ru/company/2gis/blog/498638) (23 апреля 2020)

### Прочее

- [Вавилонская башня из миллиона печенек. Как мы делали игру в VK mini app](https://habr.com/ru/company/kts/blog/546388/) (10 марта 2021)

## License

[![License: CC BY 4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](https://creativecommons.org/licenses/by/4.0/)


================================================
FILE: website/.gitignore
================================================
# build output
dist/

# generated types
.astro/

# dependencies
node_modules/

# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# environment variables
.env
.env.production

# macOS-specific files
.DS_Store

# jetbrains setting folder
.idea/

# claude local files
.claude/*.local*


================================================
FILE: website/CLAUDE.md
================================================
# Project Instructions

Frontend Case Studies website built with Astro. Content stored in TOML files.

## Adding a New Company

Edit `src/domain/company/data.toml`:

```toml
[companyid]
name = "Company Name"
websiteUrl = "https://company.com"
blogUrl = "https://company.com/blog"        # Optional
rssUrl = "https://company.com/blog/rss.xml" # Optional
```

**Required**: `name`, `websiteUrl`
**Optional**: `blogUrl`, `rssUrl`

## Adding a New Case Study

Edit `src/domain/caseStudy/data.toml`:

```toml
[[companyid]]
id = "https://full-url-to-article"
title = "Article or Talk Title"
publishedAt = "YYYY-MM-DD"
```

**Notes**:
- Use `[[companyid]]` (double brackets) for multiple case studies per company
- The `companyid` must match an existing company
- Order by date (newest first) within each company section

## Example

```toml
# In src/domain/company/data.toml
[stripe]
name = "Stripe"
websiteUrl = "https://stripe.com"
blogUrl = "https://stripe.com/blog/engineering"

# In src/domain/caseStudy/data.toml
[[stripe]]
id = "https://stripe.com/blog/payment-api-design"
title = "Designing APIs for payments"
publishedAt = "2023-05-15"
```


================================================
FILE: website/README.md
================================================
# Website

Website is built with [pnpm](https://pnpm.io) and [astro](https://astro.build).

## Getting started

```sh
nvm use # Ensure using the expected Node.js version
pnpm install # Install dependencies
pnpm run dev # Run local dev server
```

## Source data

Companies are defined in
[src/domain/company/data.toml](src/domain/company/data.toml). See
[schema](src/domain/company/schema.ts) for reference.

Case studies are defined in
[src/domain/caseStudy/data.toml](src/domain/caseStudy/data.toml). See
[schema](src/domain/caseStudy/schema.ts) for reference.


================================================
FILE: website/astro.config.mjs
================================================
// @ts-check
import sitemap from "@astrojs/sitemap";
import { defineConfig } from "astro/config";
import { SITE_URL } from "./src/config";

// https://astro.build/config
export default defineConfig({
  site: SITE_URL,
  integrations: [sitemap()],
});


================================================
FILE: website/package.json
================================================
{
  "name": "website",
  "type": "module",
  "version": "0.0.1",
  "scripts": {
    "dev": "astro dev",
    "build": "astro build",
    "preview": "astro preview",
    "astro": "astro"
  },
  "dependencies": {
    "@astrojs/sitemap": "^3.2.1",
    "astro": "^5.1.1",
    "smol-toml": "^1.3.1"
  },
  "devDependencies": {
    "@astrojs/rss": "^4.0.10"
  }
}


================================================
FILE: website/public/robots.txt
================================================
User-agent: *
Allow: /

Sitemap: https://frontendcs.com/sitemap-index.xml


================================================
FILE: website/src/components/BackToTop.astro
================================================
<a href="#top">↑ Back to Top</a>
<div data-bt-reference></div>

<style>
  a {
    display: block;
    text-align: center;
    padding: 1rem;
    z-index: 1;
    position: sticky;
    border-block-end: thin solid var(--color-border);
    top: 0;
    background: var(--color-bg);
    visibility: hidden;
    opacity: 0;
  }

  a[data-visible="true"] {
    visibility: visible;
    opacity: 1;
  }

  @keyframes fadein {
    from {
      visibility: hidden;
      opacity: 0;
    }
    to {
      visibility: visible;
      opacity: 1;
    }
  }

  @media (prefers-reduced-motion: no-preference) {
    @supports (animation-range: entry 1cqh) {
      a {
        position: sticky;
        animation: fadein linear both;
        animation-timeline: view();
        animation-range: entry 120cqh entry 125cqh;
      }
    }
  }

  @media (min-width: 66rem) {
    a {
      grid-column: full;
    }
  }
</style>

<script>
  if (!CSS.supports("animation-range: entry 1cqh")) {
    document.addEventListener("DOMContentLoaded", () => {
      const linkNode = document.querySelector("a[href='#top']");
      // Observe a sibling to avoid infinite loop caused by sticky positioning
      const observedNode = document.querySelector("[data-bt-reference]");

      if (!linkNode || !observedNode) {
        return;
      }

      const observer = new IntersectionObserver(
        ([entry]) => {
          linkNode.setAttribute(
            "data-visible",
            !entry.isIntersecting ? "true" : "false"
          );
        },
        { threshold: 0 }
      );

      observer.observe(observedNode);
    });
  }
</script>


================================================
FILE: website/src/components/CaseStudiesList.astro
================================================
---
import { getAllCompanies } from "@/domain/company/lib";
import type { CollectionEntry } from "astro:content";

interface Props {
  items: CollectionEntry<"caseStudies">[];
  showCompany?: boolean;
}

const { showCompany } = Astro.props;

const items = Astro.props.items.sort(
  (a, b) => b.data.publishedAt.getTime() - a.data.publishedAt.getTime()
);

const allCompanies = await getAllCompanies();
const companiesById = Object.fromEntries(
  allCompanies.map((item) => [item.id, item])
);

const dateFormatter = new Intl.DateTimeFormat("en-US", {
  year: "numeric",
  month: "long",
});
---

<ul>
  {
    items.map((caseStudy) => (
      <li>
        <div>
          <a href={caseStudy.id}>{caseStudy.data.title}</a>
          {showCompany ? (
            <a
              class="company novisited muted"
              href={`/companies/${caseStudy.data.company}`}
            >
              {companiesById[caseStudy.data.company].data.name}
            </a>
          ) : null}
        </div>

        <time class="muted" datetime={caseStudy.data.publishedAt.toISOString()}>
          {dateFormatter.format(caseStudy.data.publishedAt)}
        </time>
      </li>
    ))
  }
</ul>

<style>
  ul {
    display: contents;
  }

  li {
    margin-block: 1.5rem;
  }

  .company {
    display: table;
    color: var(--color-muted);
    text-decoration: none;
  }

  @media (min-width: 66rem) {
    li {
      display: grid;
      grid-template-columns: subgrid;
      grid-column: full;
      margin-block: 1.5rem 0;
    }

    li > a {
      grid-column: main;
    }

    time {
      text-align: right;
      grid-column: full-start / main-start;
      grid-row: 1 / 1;
    }
  }
</style>


================================================
FILE: website/src/components/Factoids.astro
================================================
---
import { getAllCaseStudies, getYearsRange } from "@/domain/caseStudy/lib";
import { getAllCompanies } from "@/domain/company/lib";

const companies = await getAllCompanies();
const allCaseStudies = await getAllCaseStudies();
const yearsRange = getYearsRange(allCaseStudies);
---

<dl>
  <div>
    <dt>Companies</dt>
    <dd>{companies.length}</dd>
  </div>
  <div>
    <dt>Case Studies</dt>
    <dd>{allCaseStudies.length}</dd>
  </div>
  <div>
    <dt>Period Covered</dt>
    <dd>{yearsRange[0]}–{yearsRange[1]}</dd>
  </div>
</dl>

<style>
  dl {
    grid-column: main;
    display: flex;
    flex-wrap: wrap;
    gap: 1rem 2rem;
    margin-block-start: 1.5rem;
  }

  div {
    display: inline-flex;
    flex-direction: column-reverse;
    margin-inline-end: 2rem;
  }

  dt {
    font-size: 1.25rem;
    color: var(--color-muted);
  }

  dd {
    line-height: 1;
    font-weight: bold;
    font-size: 2.5rem;
  }
</style>


================================================
FILE: website/src/components/Footer.astro
================================================
<footer>
  Made by <a href="https://andreyromanov.com">Andrey Romanov</a> and <a
    href="https://github.com/andrew--r/frontend-case-studies/graphs/contributors"
    >contributors</a
  > • <a href="https://github.com/andrew--r/frontend-case-studies/issues/new"
    >Add a case study</a
  > • ☆ <a href="https://github.com/andrew--r/frontend-case-studies">
    Star on GitHub</a
  >
</footer>

<style>
  footer {
    border-top: thin solid var(--color-border);
    margin-block-start: 3rem;
    padding-block: 0.75rem 1rem;
  }

  @media (min-width: 66rem) {
    footer {
      grid-column: main;
    }
  }
</style>


================================================
FILE: website/src/components/Header.astro
================================================
---
import Factoids from "./Factoids.astro";
import RssLink from "./RssLink.astro";

const isRoot = Astro.originPathname === "/";
const title = "Frontend Case Studies";
---

<header>
  <h1 id="top" class:list={[{ root: isRoot }]}>
    {
      isRoot ? (
        title
      ) : (
        <a href="/" class="raw">
          ← Frontend Case Studies
        </a>
      )
    }

    {isRoot ? <RssLink href="/rss.xml" /> : null}
  </h1>

  {
    isRoot ? (
      <>
        <p>
          Go beyond basic tutorials. Explore real-world frontend challenges
          and learn industry best practices.
        </p>
        <Factoids />
      </>
    ) : null
  }
</header>

<style>
  header {
    padding-block: 1rem;
  }

  h1:not(.root) {
    font-size: 1.25rem;
    font-weight: normal;
  }

  .root {
    font-size: 3.5rem;
  }

  p {
    margin-block-start: 1rem;
    font-size: 1.5rem;
  }

  a {
    text-decoration: none;
    color: inherit;
  }

  a:is(:hover, :focus-visible) {
    color: var(--color-link-hover);
  }

  @media (min-width: 66rem) {
    header {
      grid-column: main;
    }
  }
</style>


================================================
FILE: website/src/components/Navigation.astro
================================================
---
interface Props {
  items: { id: string; name: string }[];
  layout: "inline" | "column";
}

const { items, layout } = Astro.props;
---

<nav class:list={[layout]}>
  <ul>
    {
      items.map((item) => (
        <li>
          <a href={`#${item.id}`}>{item.name}</a>
        </li>
      ))
    }
  </ul>
</nav>

<style>
  .column {
    columns: 8.75rem auto;
    column-gap: 1rem;
  }

  .inline li {
    display: inline-block;
    margin-inline-end: 1.25rem;
  }

  @keyframes fadeout {
    from {
      opacity: 1;
    }
    to {
      opacity: 0;
    }
  }

  @media (prefers-reduced-motion: no-preference) {
    nav {
      animation: fadeout linear;
      animation-timeline: view();
      animation-range: exit 75% exit 100%;
    }
  }
</style>


================================================
FILE: website/src/components/RssLink.astro
================================================
---
interface Props {
  href: string;
}

const { href } = Astro.props;
---

<a class="raw" href={href} title="RSS Feed" aria-label="RSS Feed">
  <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
    <path
      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"
      fill="currentColor"></path>
  </svg>
</a>

<style>
  a {
    display: inline-block;
    width: 1cap;
    height: 1cap;
    color: #f60;
    vertical-align: baseline;
  }

  a:hover,
  a:focus-visible {
    color: var(--color-link-hover);
  }

  svg {
    display: block;
    width: 100%;
    height: 100%;
  }

  @media (prefers-reduced-motion: no-preference) {
    svg {
      transition-property: color, transform;
      transition-duration: 200ms;
      transform-origin: left bottom;
    }

    a:is(:hover, :focus-visible) svg {
      transform: rotate(4deg) scale(1.05);
    }
  }
</style>


================================================
FILE: website/src/components/RssMetaLink.astro
================================================
---
import { SITE_URL } from "../config";

interface Props {
  title: string;
  href: string;
}

const { title, href } = Astro.props;
---

<link
  rel="alternate"
  type="application/rss+xml"
  title={title}
  href={new URL(href, SITE_URL)}
/>


================================================
FILE: website/src/config.ts
================================================
export const SITE_URL = "https://frontendcs.com";
export const SITE_NAME = "Frontend Case Studies";
export const SITE_DESCRIPTION =
  "A curated list of talks and articles about real-world frontend development";


================================================
FILE: website/src/content.config.ts
================================================
import { file } from "astro/loaders";
import { defineCollection, z } from "astro:content";
import { parseCaseStudiesFromTomlUnsafe } from "./domain/caseStudy/lib";
import { caseStudySchema } from "./domain/caseStudy/schema";
import { parseCompaniesFromTomlUnsafe } from "./domain/company/lib";
import { companySchema } from "./domain/company/schema";

const companies = defineCollection({
  loader: file("src/domain/company/data.toml", {
    parser: parseCompaniesFromTomlUnsafe,
  }),
  schema: companySchema,
});

const caseStudies = defineCollection({
  loader: file("src/domain/caseStudy/data.toml", {
    parser: parseCaseStudiesFromTomlUnsafe,
  }),
  schema: caseStudySchema,
});

export const collections = {
  companies,
  caseStudies,
};


================================================
FILE: website/src/domain/caseStudy/data.ru.toml
================================================
[[amplifr]]
id = "https://gist.github.com/ai/473dd603baa92d5c8590f3573514c7a1"
title = "Принципы разработки Амплифера"
publishedAt = "2019"

[[amplifr]]
id = "https://habr.com/ru/post/491170/"
title = "Как Амплифер использует Logux — инструмент для связи клиента и сервера"
publishedAt = "2020-03-05"

[[aviasales]]
id = "https://blog.kamyshev.me/salo-selene/"
title = "Как мы строим веб-платформу в Авиасейлс"
publishedAt = "2021-11-04"

[[avito]]
id = "https://youtu.be/OFKbwNc8AIw"
title = "Фронтенд в Avito"
publishedAt = "2015-12-13"

[[avito]]
id = "https://youtu.be/hwQVbyKcRnA"
title = "Фронтенд для миллионов"
publishedAt = "2017-06-24"

[[avito]]
id = "https://youtu.be/7vY3_vPipW8"
title = "Дизайн-платформа в Avito"
publishedAt = "2017-04-08"

[[avito]]
id = "https://youtu.be/B_gLzbgJo98"
title = "Скриншоты как сервис"
publishedAt = "2018-03-07"

[[avito]]
id = "https://habr.com/ru/company/avito/blog/350604/"
title = "Unit-тестирование скриншотами: преодолеваем звуковой барьер"
publishedAt = "2018-03-14"

[[avito]]
id = "https://youtu.be/z9y6PNC2FL0"
title = "Масштабируемая архитектура фронтенда"
publishedAt = "2018-04-07"

[[avito]]
id = "https://youtu.be/zZUbXAVV-HA"
title = "Каталог компонентов: переосмысление"
publishedAt = "2018-05-19"

[[avito]]
id = "https://youtu.be/3r3IYaaEcS8"
title = "Avito Online Frontend: Infrastructure"
publishedAt = "2018-12-11"

[[avito]]
id = "https://youtu.be/CnsrImdBYz8"
title = "Avito Online Frontend: Performance"
publishedAt = "2018-12-18"

[[avito]]
id = "https://youtu.be/8_6Kuo5jFpU"
title = "Жесть для Jest"
publishedAt = "2019-08-17"

[[avito]]
id = "https://habr.com/ru/company/avito/blog/512146/"
title = "Как мы нарисовали на карте несколько тысяч интерактивных объектов без вреда для перформанса"
publishedAt = "2020-07-29"

[[avito]]
id = "https://youtu.be/qKz9YAeKYMs"
title = "Webpack в дикой природе"
publishedAt = "2020-11-20"

[[autoru]]
id = "https://habr.com/ru/company/yandex/blog/459924/"
title = "Полный цикл тестирования React-приложений"
publishedAt = "2019-07-14"

[[badoo]]
id = "https://habrahabr.ru/company/badoo/blog/223767"
title = "Многоязычный Badoo: «трудности перевода»"
publishedAt = "2014-05-22"

[[badoo]]
id = "https://tech.badoo.com/ru/presentation/23/speczifika-verstki-multiyazychnyx-veb-prilozhenij"
title = "Специфика верстки мультиязычных веб-приложений"
publishedAt = "2015-03-26"

[[badoo]]
id = "https://habrahabr.ru/company/badoo/blog/325062/"
title = "Как собрать статистику с веб-сайта и не набить себе шишек"
publishedAt = "2017-03-29"

[[badoo]]
id = "https://youtu.be/ErhWb-iTRmc"
title = "Работаем с API по-взрослому"
publishedAt = "2017-04-14"

[[badoo]]
id = "https://habr.com/company/badoo/blog/434448/"
title = "Покрываем A/B-тесты UI-тестами. Как не запутаться в собственном коде"
publishedAt = "2018-12-26"

[[badoo]]
id = "https://habr.com/ru/company/badoo/blog/441898/"
title = "Часть 1"
publishedAt = "2019-02-27"

[[badoo]]
id = "https://habr.com/ru/company/badoo/blog/485138/"
title = "Локализация приложений: как мы подружили перевод и разработку"
publishedAt = "2020-01-23"

[[badoo]]
id = "https://habr.com/ru/company/badoo/blog/491948/"
title = "Дизайн-токены способны на большее: создаем единый источник информации о компонентах UI"
publishedAt = "2020-03-12"

[[badoo]]
id = "https://habr.com/ru/company/badoo/blog/518246/"
title = "Как перенести на TypeScript большую кодовую базу React UI-компонентов"
publishedAt = "2020-09-09"

[[deliveryclub]]
id = "https://habr.com/ru/company/deliveryclub/blog/552240/"
title = "Микрофронтенды: разделяй и властвуй"
publishedAt = "2021-04-14"

[[directum]]
id = "https://habr.com/ru/company/directum/blog/462055/"
title = "Опыт перевода большого проекта с Flow на TypeScript"
publishedAt = "2019-08-01"

[[flocktory]]
id = "https://slonoed.net/ru/third-party-js/"
title = "Разработка сторонних библиотек"
publishedAt = "2017-05-22"

[[gitlab]]
id = "https://youtu.be/3tdfBMRq34o"
title = "Методы борьбы с legacy-кодом на примере GitLab"
publishedAt = "2019-12-10"

[[headhunter]]
id = "https://habr.com/ru/company/hh/blog/310524/"
title = "Нянчим проект на React-redux с пелёнок"
publishedAt = "2016-09-21"

[[headhunter]]
id = "https://habr.com/ru/company/hh/blog/438812/"
title = "Качество кода фронтенда в HH"
publishedAt = "2019-02-04"

[[headhunter]]
id = "https://habr.com/ru/company/hh/blog/445816/"
title = "Как мы пилили серверный рендеринг и что из этого вышло"
publishedAt = "2019-03-28"

[[headhunter]]
id = "https://habr.com/ru/company/hh/blog/519474/"
title = "Перфоманс фронтенда как современное искусство: графики, код, кулстори"
publishedAt = "2020-09-17"

[[headhunter]]
id = "https://habr.com/ru/company/hh/blog/552288/"
title = "«Продам гараж»: фронт и реклама в hh.ru"
publishedAt = "2021-04-14"

[[ispsystem]]
id = "https://habr.com/ru/company/ispsystem/blog/358696/"
title = "Обновляем Angular до 6-ой версии в проекте без использования CLI"
publishedAt = "2018-05-16"

[[ispsystem]]
id = "https://habr.com/ru/company/ispsystem/blog/418135/"
title = "Как организовать собственный репозиторий модулей Node.js с блэкджеком и версионностью"
publishedAt = "2018-07-25"

[[ispsystem]]
id = "https://habr.com/ru/company/ispsystem/blog/447650/"
title = "Как разделить фронтенд и бэкенд, сохранив взаимопонимание"
publishedAt = "2019-04-11"

[[ispsystem]]
id = "https://habr.com/ru/company/ispsystem/blog/507826/"
title = "От библиотеки компонентов к дизайн-системе"
publishedAt = "2020-06-23"

[[ispsystem]]
id = "https://habr.com/ru/company/ispsystem/blog/512008/"
title = "Ленивая подгрузка переводов с Angular"
publishedAt = "2020-07-22"

[[joom]]
id = "https://habr.com/ru/company/joom/blog/535188/"
title = "Автоматизируем локализацию макетов в Figma"
publishedAt = "2020-12-29"

[[joom]]
id = "https://habr.com/ru/company/joom/blog/708286/"
title = "Пошаговая инструкция: как с Node.js организовать иконки из Figma в проекте"
publishedAt = "2022-12-30"

[[mailru]]
id = "https://habr.com/ru/company/mailru/blog/271689/"
title = "Разработка собственного решения: риски и ответственность"
publishedAt = "2015-11-26"

[[mailru]]
id = "https://habr.com/ru/company/mailru/blog/309212/"
title = "Frontend: Разработка и поддержка"
publishedAt = "2016-09-06"

[[mailru]]
id = "https://youtu.be/J08UOAJdjWc"
title = "Архитектура фронтенда крупного проекта, как она есть"
publishedAt = "2018-04-19"

[[mailru]]
id = "https://youtu.be/yx_eHBsXyIo"
title = "запись доклада"
publishedAt = "2019-11-27"

[[mailru]]
id = "https://habr.com/ru/company/mailru/blog/530798/"
title = "Кастомизация компонентов Ant Design и оптимизация бандла"
publishedAt = "2020-12-11"

[[mailru]]
id = "https://habr.com/ru/company/mailru/blog/579798/"
title = "Адаптивный layout — как переверстать весь проект, не перевёрстывая его"
publishedAt = "2021-09-24"

[[microsofttodo]]
id = "https://youtu.be/ZdrnIUgeDAs"
title = "Как Microsoft To-Do использует React"
publishedAt = "2018-06-18"

[[miro]]
id = "https://habr.com/ru/company/miro/blog/458624/"
title = "Как мы учились рисовать тексты на Canvas"
publishedAt = "2019-07-03"

[[miro]]
id = "https://habr.com/ru/company/miro/blog/566426/"
title = "Как мы боролись за байты на фронтенде. Усмиряем прожорливый виджет рисования и помогаем iPad его переварить"
publishedAt = "2021-07-06"

[[netcracker]]
id = "https://habr.com/company/netcracker/blog/333734/"
title = "Выбранный UI-фреймворк – вред. Архитектурные требования – профит"
publishedAt = "2017-07-20"

[[netcracker]]
id = "https://habr.com/company/netcracker/blog/420753/"
title = "Микросервисный фронтенд — современный подход к разделению фронта"
publishedAt = "2018-08-21"

[[onetwotrip]]
id = "https://habr.com/ru/post/459206/"
title = "9 лет в монолите на Node.JS"
publishedAt = "2019-07-09"

[[onetwotrip]]
id = "https://habr.com/ru/post/486360/"
title = "Как мигрировать с mocha на jest в 14 простых шагов — и зачем"
publishedAt = "2020-01-31"

[[ramblergroup]]
id = "https://habr.com/company/rambler-co/blog/280602/"
title = "Как мы разогнали мобильную Lenta.ru до скорости света"
publishedAt = "2016-03-31"

[[ramblergroup]]
id = "https://youtu.be/ZxmcIpmenoY"
title = "Проектирование дизайн-системы Рамблера"
publishedAt = "2018-06-18"

[[ramblergroup]]
id = "https://habr.com/company/rambler-co/blog/417023/"
title = "Опыт Rambler Group: как мы начали полностью контролировать формирование и поведение фронтовых React компонентов"
publishedAt = "2018-07-12"

[[ramblergroup]]
id = "https://habr.com/company/rambler-co/blog/418417/"
title = "Apollo: 9 месяцев — полет нормальный"
publishedAt = "2018-07-27"

[[ramblergroup]]
id = "https://habr.com/ru/company/rambler-co/blog/422545/"
title = "Способы синхронизации вкладок браузера"
publishedAt = "2018-09-07"

[[ramblergroup]]
id = "https://habr.com/company/rambler-co/blog/424025/"
title = "Маршрутизация в большом приложении на React"
publishedAt = "2018-09-27"

[[setka]]
id = "https://habrahabr.ru/company/oleg-bunin/blog/350252/"
title = "Разработка Rich Text Editor: проблемы и решения"
publishedAt = "2018-03-05"

[[skyeng]]
id = "https://youtu.be/a6mGNqubTcg"
title = "Как масштабировать сложный Single Page Application"
publishedAt = "2017-06-05"

# [[skyeng]]
# id = "https://habrahabr.ru/company/skyeng/blog/348356"
# title = "цели, планы и правила переноса элементов"
# 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/"
# language = "ru"

[[skyeng]]
id = "https://habr.com/ru/company/skyeng/blog/446444/"
title = "От Skype до WebRTC: как мы организовали видеосвязь через веб"
publishedAt = "2019-04-03"

[[skyeng]]
id = "https://habr.com/ru/company/skyeng/blog/459194/"
title = "Как мы подружили SCSS с CSS Variables на примере c темизацией UI Kit"
publishedAt = "2019-07-09"

[[sportsru]]
id = "https://habr.com/ru/company/sports_ru/blog/492228/"
title = "Как в Sports.ru писали свой WYSIWYG-редактор"
publishedAt = "2020-03-13"

[[tinkoff]]
id = "https://habrahabr.ru/company/tinkoff/blog/303580/"
title = "Как мы разрабатываем новый фронтенд Tinkoff.ru"
publishedAt = "2016-06-23"

[[tinkoff]]
id = "https://habrahabr.ru/company/tinkoff/blog/326782/"
title = "Создание Tinkoff Design System. Первые шаги"
publishedAt = "2017-04-18"

[[tinkoff]]
id = "https://habrahabr.ru/company/tinkoff/blog/339660/"
title = "Создание Tinkoff Design System. UI Kit, версионирование и витрина компонентов"
publishedAt = "2017-10-09"

[[tinkoff]]
id = "https://habr.com/ru/company/tinkoff/blog/468589/"
title = "Как организовать работу над библиотекой общих компонентов"
publishedAt = "2019-09-25"

[[tinkoff]]
id = "https://m.habr.com/ru/company/tinkoff/blog/459396/"
title = "WARNING: sanitizing HTML stripped some content и как с ним правильно бороться"
publishedAt = "2019-09-27"

[[tinkoff]]
id = "https://m.habr.com/ru/company/tinkoff/blog/467227/"
title = "Как заопенсорсить npm-пакет с нормальным деплоем, CI и демо (без потери радости к жизни)"
publishedAt = "2019-09-30"

[[tinkoff]]
id = "https://m.habr.com/ru/company/tinkoff/blog/473108/"
title = "Компоненты-агностики в Angular"
publishedAt = "2019-10-25"

[[tinkoff]]
id = "https://habr.com/ru/company/tinkoff/blog/474632/"
title = "«Шакал»: сжимаем фронтенд"
publishedAt = "2019-11-07"

[[tinkoff]]
id = "https://habr.com/ru/company/tinkoff/blog/517230/"
title = "часть 1"
publishedAt = "август–декабрь 2020"

[[wrike]]
id = "https://habrahabr.ru/company/wrike/blog/277255/"
title = "Чем плох JavaScript в большом проекте? С какими проблемами мы столкнулись и как их решали"
publishedAt = "2016-02-16"

[[wrike]]
id = "https://habr.com/ru/company/wrike/blog/334590/"
title = "Как отрефакторить 2 500 000 строк кода и не сойти с ума"
publishedAt = "2017-06-05"

[[wrike]]
id = "https://habrahabr.ru/company/wrike/blog/330832/"
title = "Два года с Dart: о том, как мы пишем на языке, который ежегодно «хоронят»"
publishedAt = "2017-06-15"

[[wrike]]
id = "https://habr.com/ru/company/wrike/blog/448610/"
title = "DIY: Как мы делали «живое» расписание для Codefest X"
publishedAt = "2019-04-18"

[[wrike]]
id = "https://habr.com/ru/company/wrike/blog/452820/"
title = "10 верстальщиков на 30 команд. Вы рехнулись?"
publishedAt = "2019-05-21"

[[wrike]]
id = "https://habr.com/ru/company/wrike/blog/451928/"
title = "Как настроить веб-аналитику на AMP страницах"
publishedAt = "2019-06-26"

[[alfabank]]
id = "https://habrahabr.ru/company/alfa/blog/335892/"
title = "Предъявите паспорт"
publishedAt = "2017-08-18"

[[alfabank]]
id = "https://habrahabr.ru/company/alfa/blog/340522/"
title = "БЭМ + React: гибкая архитектура дизайн-системы"
publishedAt = "2017-10-23"

[[alfabank]]
id = "https://habrahabr.ru/company/alfa/blog/340776/"
title = "Изоморфное приложение React JS + Spring Boot"
publishedAt = "2017-10-27"

[[alfabank]]
id = "https://youtu.be/pkHWttaktWk"
title = "Атомарные SPA"
publishedAt = "2018-04-07"

[[alfabank]]
id = "https://habr.com/ru/company/alfa/blog/492010/"
title = "Тёмная сторона дизайн-системы и что с ней делать"
publishedAt = "2020-03-16"

[[bureau]]
id = "https://bureau.ru/bb/soviet/20170629"
title = "Как в книгах Бюро тяжёлые картинки выгружаются из памяти, чтобы браузер не тормозил"
publishedAt = "2017-06-29"

[[vk]]
id = "https://www.youtube.com/watch?v=3rXueXJeGlw"
title = "React со скоростью света: не совсем обычный серверный рендеринг"
publishedAt = "2017-06-02"

[[vk]]
id = "https://habr.com/ru/company/vk/blog/449720/"
title = "Как оседлать радугу: история создания тёмной темы"
publishedAt = "2019-04-29"

[[vk]]
id = "https://ok.ru/video/2423311305323"
title = "Баги, которые вы никогда не встретите"
publishedAt = "2019-11-26"

[[vk]]
id = "https://habr.com/ru/company/vk/blog/558996/"
title = "Бенчмарки VKUI и других ребят из UI-библиотек"
publishedAt = "2021-05-26"

[[dodobrands]]
id = "https://youtu.be/G_3qp1HbhR4"
title = "Додо Пицца: собственная касса на веб-технологиях"
publishedAt = "2019-10-14"

[[dodobrands]]
id = "https://habr.com/ru/company/dodopizzaio/blog/473648/"
title = "Лошадь сдохла – слезь: переход с tslint на eslint"
publishedAt = "2019-10-29"

[[leroymerlin]]
id = "https://habr.com/ru/company/leroy_merlin/blog/488648/"
title = "Опыт интеграции веб-компонентов на сайт Леруа Мерлен"
publishedAt = "2020-02-18"

[[meduza]]
id = "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"
title = "Веб-пуш уведомления в Медузе"
publishedAt = "2015-12-10"

[[meduza]]
id = "http://telegra.ph/AMP-Instant-Articles-Instant-View-whut-11-23"
title = "AMP, Instant Articles, Instant View, whut?"
publishedAt = "2016-11-23"

[[meduza]]
id = "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"
title = "Как использовать кастомные шрифты в вебе и не сойти с ума"
publishedAt = "2016-12-01"

[[meduza]]
id = "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"
title = "Подкасты «Медузы»"
publishedAt = "2017-09-21"

[[meduza]]
id = "https://meduza.io/feature/2020/07/13/kak-tehotdel-meduzy-reshil-optimizirovat-kartinki-a-v-protsesse-peredelal-sayt-adminku-i-podhod-k-interfeysu"
title = "Как техотдел «Медузы» решил оптимизировать картинки — а в процессе переделал сайт, админку и подход к интерфейсу"
publishedAt = "2020-07-13"

[[ok]]
id = "https://habr.com/ru/company/odnoklassniki/blog/115881/"
title = "Архитектура и платформа проекта Одноклассники"
publishedAt = "2011-03-21"

[[ok]]
id = "https://habr.com/ru/company/mailru/blog/191154/"
title = "Как мы оптимизировали социальную кнопку"
publishedAt = "2013-08-26"

[[ok]]
id = "https://habr.com/ru/company/odnoklassniki/blog/480808/"
title = "Часть 1"
publishedAt = "январь–февраль 2020"

[[sber]]
id = "https://habrahabr.ru/company/efs/blog/325916/"
title = "За закрытой дверью фронтенда Единой фронтальной системы (ЕФС)"
publishedAt = "2017-04-07"

[[sber]]
id = "https://habrahabr.ru/company/efs/blog/328012/"
title = "Redux как сердце архитектуры фронтенда Единой фронтальной системы"
publishedAt = "2017-05-04"

[[sber]]
id = "https://habrahabr.ru/company/efs/blog/330374/"
title = "Работа с периферией из JavaScript: от теории к практике"
publishedAt = "2017-06-15"

[[sber]]
id = "https://habr.com/company/sberbank/blog/353746/"
title = "Как работают приложения Сбербанк Онлайн: Workflow API и фрэймворки"
publishedAt = "2018-04-18"

[[citymobil]]
id = "https://habr.com/ru/company/citymobil/blog/504270/"
title = "Хороший ли выбор Svelte для реализации виджета?"
publishedAt = "2020-05-28"

[[sportmaster]]
id = "https://habr.com/ru/company/sportmaster_lab/blog/531342/"
title = "Frontend в Sportmaster Lab"
publishedAt = "2020-12-04"

[[uchiru]]
id = "https://habr.com/ru/company/uchi_ru/blog/516356/"
title = "Интерфейсы для тех, кто еще не читает. Принципы проектирования детского UX-UI"
publishedAt = "2020-08-24"

[[uchiru]]
id = "https://habr.com/ru/company/uchi_ru/blog/543308/"
title = "Единый UI-кит и синхронизация дизайна в Учи.ру. Часть 1"
publishedAt = "2021-02-20"

[[habr]]
id = "https://habr.com/ru/company/habr/blog/590111/"
title = "Как мы ускоряли комментарии Хабра"
publishedAt = "2021-11-25"

[[cian]]
id = "https://youtu.be/YANolrn4PYc"
title = "Микросервисный фронтенд"
publishedAt = "2018-11-07"

[[cian]]
id = "https://youtu.be/uQh5_a2tx64"
title = "доклад"
publishedAt = "2019-05-28"

[[cian]]
id = "https://habr.com/ru/company/cian/blog/475062/"
title = "Внедряем Sign in with Apple — систему авторизации от Apple"
publishedAt = "2019-11-08"

[[cian]]
id = "https://habr.com/ru/company/cian/blog/516958/"
title = "Micro-frontends. Асинхронный подход к мультикомандной разработке"
publishedAt = "2020-08-28"

[[cian]]
id = "https://habr.com/ru/company/cian/blog/598799/"
title = "Время менять шапки: ускорение мобильной поисковой выдачи Циан"
publishedAt = "2021-01-11"

[[yoomoney]]
id = "https://habrahabr.ru/company/yamoney/blog/341028/"
title = "Прототипирование на продакшн-технологиях"
publishedAt = "2017-10-26"

[[yoomoney]]
id = "https://habrahabr.ru/company/yamoney/blog/334500/"
title = "Почему Node.js в качестве основы фронтенда – это круто"
publishedAt = "2017-07-31"

[[yoomoney]]
id = "https://habrahabr.ru/company/yamoney/blog/348070/"
title = "Создание NPM-модуля Яндекс.Кассы под Node.js — опыт Lodoss Team"
publishedAt = "2018-02-01"

[[yoomoney]]
id = "https://habr.com/company/yamoney/blog/354416/"
title = "Фронтенд как у сына маминой подруги"
publishedAt = "2018-04-26"

[[yoomoney]]
id = "https://habr.com/company/yamoney/blog/414183/"
title = "Реактивный фронтенд. История о том, как мы снова всё переписали"
publishedAt = "2018-06-15"

[[yoomoney]]
id = "https://youtu.be/DA_R8mIaRJg"
title = "Jenkins на службе фронтенд-разработки"
publishedAt = "2018-02-22"

[[yoomoney]]
id = "https://youtu.be/7wGYxT1UZl4"
title = "Обзор архитектуры фронтенда ЮMoney"
publishedAt = "2020-12-15"

[[yandex]]
id = "https://habrahabr.ru/company/yandex/blog/242503/"
title = "Как инкрементальные обновления влияют на скорость загрузки. Опыт Яндекс.Почты"
publishedAt = "2014-11-06"

[[yandex]]
id = "https://habrahabr.ru/company/yandex/blog/258477/"
title = "Accessibility. Как мы делаем Яндекс доступным людям с ограниченными возможностями и почему считаем это важным"
publishedAt = "2015-05-21"

[[yandex]]
id = "https://youtu.be/RoO0Fcyf0FE?t=2443/"
title = "Лекция Виталия Харисова «10k» про лёгкую версию поиска для медленных соединений и способы оптимизации кода, позволяющие уложиться в 10 килобайт"
publishedAt = "2017-04-22"

[[yandex]]
id = "https://habrahabr.ru/company/yandex/blog/335982/"
title = "Как создавалась карта с голосами болельщиков для Олимпиады"
publishedAt = "2017-08-20"

[[yandex]]
id = "https://habrahabr.ru/company/yandex/blog/349220/"
title = "Как мы делали «нарратив» – новый формат публикаций в Яндекс.Дзене"
publishedAt = "2018-02-16"

[[yandex]]
id = "https://youtu.be/5T7mP-FpHN4"
title = "React в Яндекс Поиске. Новая архитектура фронтенда СЕРПа"
publishedAt = "2018-10-27"

[[yandex]]
id = "https://habr.com/company/yandex/blog/428141/"
title = "Бэкенд для фронтенда, или как в Яндекс.Маркете создают API без костылей"
publishedAt = "2018-11-01"

[[yandex]]
id = "https://habr.com/en/company/yandex/blog/438598/"
title = "React & БЭМ – официальная коллаборация. Часть историческая"
publishedAt = "2019-02-05"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/446780/"
title = "Как создать тёмную тему и не навредить. Опыт команды Яндекс.Почты"
publishedAt = "2019-04-09"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/460373/"
title = "«Под капотом» Турбо-страниц: архитектура технологии быстрой загрузки веб-страниц"
publishedAt = "2019-07-17"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/459960/"
title = "От идеи до релиза. Детальный опыт фронтенда Маркета"
publishedAt = "2019-07-22"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/469021/"
title = "Разработка в монорепозитории"
publishedAt = "2019-10-03"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/475382/"
title = "Как мы внедряли WebAssembly в Яндекс.Картах и почему оставили JavaScript"
publishedAt = "2019-11-19"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/478862/"
title = "Как устроено тестирование фронтенда в Яндекс.Маркете и почему мы отказываемся от еженедельных релизов"
publishedAt = "2019-12-10"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/486146/"
title = "Как переписать фронтенд нагруженного проекта и не потерять главного"
publishedAt = "2020-02-03"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/506030/"
title = "Минифицируем приватные поля в TypeScript"
publishedAt = "2020-06-13"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/515460/"
title = "Технические предпочтения пользователей с нарушениями зрения в 2020 году"
publishedAt = "2020-08-18"

[[yandex]]
id = "https://habr.com/ru/company/yandex/blog/528386/"
title = "Как и почему мы переехали с собственного npm-репозитория на Verdaccio"
publishedAt = "2020-11-17"

[[yandex]]
id = "https://habr.com/ru/company/yandex_praktikum/blog/530268/"
title = "Веб-тренажёр Яндекс.Практикума. Как всё устроено"
publishedAt = "2020-11-27"

[[2gis]]
id = "https://habrahabr.ru/company/2gis/blog/254105"
title = "TARS, сделай уровень frontend-рутины 0%"
publishedAt = "2015-03-26"

[[2gis]]
id = "https://habrahabr.ru/company/2gis/blog/277457"
title = "Тестируем вёрстку правильно"
publishedAt = "2016-02-18"

[[2gis]]
id = "https://habrahabr.ru/company/2gis/blog/282207"
title = "Этажи: 3D-навигация на WebGL в 2gis.ru"
publishedAt = "2016-04-22"

[[2gis]]
id = "https://habrahabr.ru/company/2gis/blog/333016"
title = "Дели — сокращай, или как мы делали мобильный 2ГИС Онлайн"
publishedAt = "2017-07-20"

[[2gis]]
id = "https://habr.com/company/2gis/blog/358148"
title = "Справа налево. Что такое dir=rtl и как приручить арабский язык"
publishedAt = "2018-05-10"

[[2gis]]
id = "https://habr.com/company/2gis/blog/416635"
title = "Справа налево. Как перевернуть интерфейс сайта под RTL"
publishedAt = "2018-07-10"

[[2gis]]
id = "https://habr.com/ru/company/2gis/blog/442720/"
title = "Быстрая генерализация маркеров на WebGL-карте"
publishedAt = "2019-03-06"

[[2gis]]
id = "https://habr.com/ru/company/2gis/blog/498638"
title = "3D-аркада в браузере: как мы сделали игру на React + Redux"
publishedAt = "2020-04-23"


================================================
FILE: website/src/domain/caseStudy/data.toml
================================================
[[aha]]
id = "https://www.aha.io/blog/coffescript-to-es6"
title = "How I Convinced Our CTO to Switch From CoffeeScript to ES6"
publishedAt = "2017-09-07"

[[datadog]]
id = "https://www.datadoghq.com/blog/engineering/redux-doghouse-reusable-react-redux-components-through-scoping/"
title = "Redux-Doghouse: Creating reusable React-Redux components through scoping"
publishedAt = "2016-11-14"

[[datadog]]
id = "https://www.datadoghq.com/blog/engineering/how-datadog-uses-datadog-to-gain-visibility-into-the-datadog-user-experience/"
title = "How Datadog uses Datadog to gain visibility into the Datadog user experience"
publishedAt = "2022-02-22"

[[datadog]]
id = "https://www.datadoghq.com/blog/engineering/druids-the-design-system-that-powers-datadog/"
title = "DRUIDS, the Design System that Powers Datadog"
publishedAt = "2022-09-29"

[[datadog]]
id = "https://www.datadoghq.com/blog/engineering/making-fetch-happen-building-a-general-purpose-query-and-render-scheduler/"
title = "Making Fetch Happen - Building a General-purpose Query & Render Scheduler"
publishedAt = "2023-04-17"

[[datadog]]
id = "https://www.datadoghq.com/blog/engineering/migrating-acceptance-tests-to-synthetic-monitoring/"
title = "How We Migrated Our Acceptance Tests to Use Synthetic Monitoring"
publishedAt = "2023-06-30"

[[datadog]]
id = "https://dev.to/datadog-frontend-dev/why-scaling-typescript-became-a-necessity-at-datadog-1nmn"
title = "Why Scaling TypeScript Became a Necessity at Datadog"
publishedAt = "2025-07-04"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/turbocharged-javascript-refactoring-with-codemods-b0cae8b326b9"
title = "Turbocharged JavaScript Refactoring with Codemods"
publishedAt = "2016-04-27"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/rearchitecting-airbnbs-frontend-5e213efc24d2"
title = "Rearchitecting Airbnb’s Frontend"
publishedAt = "2017-05-15"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/unlocking-test-performance-migrating-from-mocha-to-jest-2796c508ec50"
title = "Migrating from Mocha to Jest"
publishedAt = "2017-06-15"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/recent-web-performance-fixes-on-airbnb-listing-pages-6cd8d93df6f4"
title = "React Performance Fixes on Airbnb Listing Pages"
publishedAt = "2017-12-05"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/server-rendering-code-splitting-and-lazy-loading-with-react-router-v4-bfe596a6af70"
title = "Server Rendering, Code Splitting, and Lazy Loading with React Router v4"
publishedAt = "2018-01-10"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c"
title = "React Native at Airbnb"
publishedAt = "2018-06-19"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/operationalizing-node-js-for-server-side-rendering-c5ba718acfc9"
title = "Operationalizing Node.js for Server Side Rendering"
publishedAt = "2018-07-18"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/how-airbnb-is-moving-10x-faster-at-scale-with-graphql-and-apollo-aa4ec92d69e2"
title = "How Airbnb is Moving 10x Faster at Scale with GraphQL and Apollo"
publishedAt = "2018-12-05"

[[airbnb]]
id = "https://youtu.be/fHQ1WSx41CA"
title = "Building (And Re-Building) the Airbnb Design System"
publishedAt = "2019-10-30"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/ts-migrate-a-tool-for-migrating-to-typescript-at-scale-cd23bfeb5cc"
title = "ts-migrate: A Tool for Migrating to TypeScript at Scale"
publishedAt = "2020-08-18"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/building-a-faster-web-experience-with-the-posttask-scheduler-276b83454e91"
title = "Building a Faster Web Experience with the postTask Scheduler"
publishedAt = "2021-05-20"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/a-deep-dive-into-airbnbs-server-driven-ui-system-842244c5f5"
title = "A Deep Dive into Airbnb’s Server-Driven UI System"
publishedAt = "2021-06-29"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/measuring-web-performance-at-airbnb-122da8d3ea3f"
title = "Measuring Web Performance at Airbnb"
publishedAt = "2021-12-07"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/faster-javascript-builds-with-metro-cfc46d617a1f"
title = "Faster JavaScript Builds with Metro"
publishedAt = "2022-05-24"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/airbnbs-trip-to-linaria-dc169230bd12"
title = "Airbnb’s Trip to Linaria"
publishedAt = "2022-06-16"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/improving-performance-with-http-streaming-ba9e72c66408"
title = "Improving Performance with HTTP Streaming"
publishedAt = "2023-05-17"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/rethinking-text-resizing-on-web-1047b12d2881"
title = "Rethinking Text Resizing on Web"
publishedAt = "2024-05-16"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/how-airbnb-smoothly-upgrades-react-b1d772a565fd"
title = "How Airbnb Smoothly Upgrades React"
publishedAt = "2024-07-23"

[[airbnb]]
id = "https://medium.com/airbnb-engineering/adopting-bazel-for-web-at-scale-a784b2dbe325"
title = "Adopting Bazel for Web at Scale"
publishedAt = "2024-11-12"

[[airbnb]]
id = "https://youtu.be/P-J9Eg7hJwE"
title = "Adopting Typescript at Scale"
publishedAt = "2019-06-16"

[[aldo]]
id = "https://simplified.dev/performance/impact-of-web-performance"
title = "The Impact of Web Performance"
publishedAt = "2020-02-06"

[[algolia]]
id = "https://www.algolia.com/blog/engineering/improving-web-performance-to-mirror-engine-speed"
title = "Improving Web Performance to Mirror Engine Speed"
publishedAt = "2017-07-26"

[[algolia]]
id = "https://www.algolia.com/blog/engineering/netinfo-api-algolia-javascript-client"
title = "Using NetInfo API to Improve Algolia’s JavaScript Client"
publishedAt = "2019-07-30"

[[allegro]]
id = "https://blog.allegro.tech/2016/03/Managing-Frontend-in-the-microservices-architecture.html"
title = "Managing Frontend in the Microservices Architecture"
publishedAt = "2016-03-12"

[[allegro]]
id = "https://blog.allegro.tech/2019/04/why-allegro-ads-chose-typescript.html"
title = "Why Allegro Ads chose TypeScript"
publishedAt = "2019-04-09"

[[allegro]]
id = "https://blog.allegro.tech/2019/09/page-visibility-and-performance-metrics.html"
title = "Page visibility and performance metrics"
publishedAt = "2019-09-02"

[[allegro]]
id = "https://blog.allegro.tech/2019/11/performance-of-javascript-optional-chaining.html"
title = "Performance of JavaScript optional chaining"
publishedAt = "2019-11-08"

[[allegro]]
id = "https://blog.allegro.tech/2020/08/using-eslint.html"
title = "Using ESLint to improve your app’s performance"
publishedAt = "2020-08-11"

[[allegro]]
id = "https://blog.allegro.tech/2021/06/measuring-web-performance.html"
title = "Measuring Web Performance"
publishedAt = "2021-06-08"

[[allegro]]
id = "https://blog.allegro.tech/2021/07/making-api-calls-seamless-ux.html"
title = "Making API calls a seamless user experience"
publishedAt = "2021-07-21"

[[allegro]]
id = "https://blog.allegro.tech/2021/07/css-architecture-and-performance-of-micro-frontends.html"
title = "CSS Architecture and Performance in Micro Frontends"
publishedAt = "2021-07-29"

[[allegro]]
id = "https://blog.allegro.tech/2021/09/How-to-turn-on-TypeScript-strict-mode-in-specific-files.html"
title = "How to turn on TypeScript strict mode in specific files"
publishedAt = "2021-09-06"

[[allegro]]
id = "https://blog.allegro.tech/2021/09/evolution-of-web-performance-culture.html"
title = "Evolution of web performance culture"
publishedAt = "2021-09-23"

[[allegro]]
id = "https://blog.allegro.tech/2021/10/refactoring-opbox-s
Download .txt
gitextract_fzmf2njk/

├── .editorconfig
├── .nvmrc
├── readme.md
└── website/
    ├── .gitignore
    ├── CLAUDE.md
    ├── README.md
    ├── astro.config.mjs
    ├── package.json
    ├── public/
    │   └── robots.txt
    ├── src/
    │   ├── components/
    │   │   ├── BackToTop.astro
    │   │   ├── CaseStudiesList.astro
    │   │   ├── Factoids.astro
    │   │   ├── Footer.astro
    │   │   ├── Header.astro
    │   │   ├── Navigation.astro
    │   │   ├── RssLink.astro
    │   │   └── RssMetaLink.astro
    │   ├── config.ts
    │   ├── content.config.ts
    │   ├── domain/
    │   │   ├── caseStudy/
    │   │   │   ├── data.ru.toml
    │   │   │   ├── data.toml
    │   │   │   ├── lib/
    │   │   │   │   └── index.ts
    │   │   │   └── schema.ts
    │   │   └── company/
    │   │       ├── data.ru.toml
    │   │       ├── data.toml
    │   │       ├── lib/
    │   │       │   └── index.ts
    │   │       └── schema.ts
    │   ├── layouts/
    │   │   └── BaseLayout.astro
    │   ├── pages/
    │   │   ├── companies/
    │   │   │   ├── [company]/
    │   │   │   │   ├── index.astro
    │   │   │   │   └── rss.xml.ts
    │   │   │   └── index.astro
    │   │   ├── index.astro
    │   │   └── rss.xml.ts
    │   └── styles/
    │       ├── base.css
    │       ├── links.css
    │       ├── reset.css
    │       └── utility.css
    └── tsconfig.json
Download .txt
SYMBOL INDEX (20 symbols across 7 files)

FILE: website/src/config.ts
  constant SITE_URL (line 1) | const SITE_URL = "https://frontendcs.com";
  constant SITE_NAME (line 2) | const SITE_NAME = "Frontend Case Studies";
  constant SITE_DESCRIPTION (line 3) | const SITE_DESCRIPTION =

FILE: website/src/domain/caseStudy/lib/index.ts
  function getAllCaseStudies (line 5) | function getAllCaseStudies(): Promise<CollectionEntry<"caseStudies">[]> {
  function getAllCaseStudiesByCompany (line 9) | async function getAllCaseStudiesByCompany(): Promise<
  function parseCaseStudiesFromTomlUnsafe (line 17) | function parseCaseStudiesFromTomlUnsafe(
  function getYearsRange (line 29) | function getYearsRange(

FILE: website/src/domain/caseStudy/schema.ts
  type CaseStudy (line 10) | type CaseStudy = z.infer<typeof caseStudySchema>;

FILE: website/src/domain/company/lib/index.ts
  function getAllCompanies (line 5) | function getAllCompanies(): Promise<CollectionEntry<"companies">[]> {
  function getCompany (line 9) | async function getCompany(
  function parseCompaniesFromTomlUnsafe (line 21) | function parseCompaniesFromTomlUnsafe(sourceToml: string): Company[] {

FILE: website/src/domain/company/schema.ts
  type Company (line 11) | type Company = z.infer<typeof companySchema>;

FILE: website/src/pages/companies/[company]/rss.xml.ts
  type RssItem (line 12) | type RssItem = z.infer<typeof rssSchema>;
  function getStaticPaths (line 14) | async function getStaticPaths() {
  type Params (line 24) | type Params = InferGetStaticParamsType<typeof getStaticPaths>;
  type Props (line 25) | type Props = InferGetStaticPropsType<typeof getStaticPaths>;
  function getCustomData (line 48) | function getCustomData() {

FILE: website/src/pages/rss.xml.ts
  type RssItem (line 5) | type RssItem = z.infer<typeof rssSchema>;
  function GET (line 7) | async function GET() {
  function getCustomData (line 30) | function getCustomData() {
Condensed preview — 38 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (446K chars).
[
  {
    "path": ".editorconfig",
    "chars": 176,
    "preview": "; top-most EditorConfig file\nroot = true\n\n[*]\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = tr"
  },
  {
    "path": ".nvmrc",
    "chars": 8,
    "preview": "lts/jod\n"
  },
  {
    "path": "readme.md",
    "chars": 153774,
    "preview": "![Frontend case studies logo](assets/logo.png)\n\nArticles like “Building a simple todo list with [framework or technology"
  },
  {
    "path": "website/.gitignore",
    "chars": 303,
    "preview": "# build output\ndist/\n\n# generated types\n.astro/\n\n# dependencies\nnode_modules/\n\n# logs\nnpm-debug.log*\nyarn-debug.log*\nyar"
  },
  {
    "path": "website/CLAUDE.md",
    "chars": 1143,
    "preview": "# Project Instructions\n\nFrontend Case Studies website built with Astro. Content stored in TOML files.\n\n## Adding a New C"
  },
  {
    "path": "website/README.md",
    "chars": 563,
    "preview": "# Website\n\nWebsite is built with [pnpm](https://pnpm.io) and [astro](https://astro.build).\n\n## Getting started\n\n```sh\nnv"
  },
  {
    "path": "website/astro.config.mjs",
    "chars": 251,
    "preview": "// @ts-check\nimport sitemap from \"@astrojs/sitemap\";\nimport { defineConfig } from \"astro/config\";\nimport { SITE_URL } fr"
  },
  {
    "path": "website/package.json",
    "chars": 357,
    "preview": "{\n  \"name\": \"website\",\n  \"type\": \"module\",\n  \"version\": \"0.0.1\",\n  \"scripts\": {\n    \"dev\": \"astro dev\",\n    \"build\": \"as"
  },
  {
    "path": "website/public/robots.txt",
    "chars": 74,
    "preview": "User-agent: *\nAllow: /\n\nSitemap: https://frontendcs.com/sitemap-index.xml\n"
  },
  {
    "path": "website/src/components/BackToTop.astro",
    "chars": 1616,
    "preview": "<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"
  },
  {
    "path": "website/src/components/CaseStudiesList.astro",
    "chars": 1692,
    "preview": "---\nimport { getAllCompanies } from \"@/domain/company/lib\";\nimport type { CollectionEntry } from \"astro:content\";\n\ninter"
  },
  {
    "path": "website/src/components/Factoids.astro",
    "chars": 930,
    "preview": "---\nimport { getAllCaseStudies, getYearsRange } from \"@/domain/caseStudy/lib\";\nimport { getAllCompanies } from \"@/domain"
  },
  {
    "path": "website/src/components/Footer.astro",
    "chars": 616,
    "preview": "<footer>\n  Made by <a href=\"https://andreyromanov.com\">Andrey Romanov</a> and <a\n    href=\"https://github.com/andrew--r/"
  },
  {
    "path": "website/src/components/Header.astro",
    "chars": 1109,
    "preview": "---\nimport Factoids from \"./Factoids.astro\";\nimport RssLink from \"./RssLink.astro\";\n\nconst isRoot = Astro.originPathname"
  },
  {
    "path": "website/src/components/Navigation.astro",
    "chars": 757,
    "preview": "---\ninterface Props {\n  items: { id: string; name: string }[];\n  layout: \"inline\" | \"column\";\n}\n\nconst { items, layout }"
  },
  {
    "path": "website/src/components/RssLink.astro",
    "chars": 1109,
    "preview": "---\ninterface Props {\n  href: string;\n}\n\nconst { href } = Astro.props;\n---\n\n<a class=\"raw\" href={href} title=\"RSS Feed\" "
  },
  {
    "path": "website/src/components/RssMetaLink.astro",
    "chars": 244,
    "preview": "---\nimport { SITE_URL } from \"../config\";\n\ninterface Props {\n  title: string;\n  href: string;\n}\n\nconst { title, href } ="
  },
  {
    "path": "website/src/config.ts",
    "chars": 212,
    "preview": "export const SITE_URL = \"https://frontendcs.com\";\nexport const SITE_NAME = \"Frontend Case Studies\";\nexport const SITE_DE"
  },
  {
    "path": "website/src/content.config.ts",
    "chars": 748,
    "preview": "import { file } from \"astro/loaders\";\nimport { defineCollection, z } from \"astro:content\";\nimport { parseCaseStudiesFrom"
  },
  {
    "path": "website/src/domain/caseStudy/data.ru.toml",
    "chars": 23852,
    "preview": "[[amplifr]]\nid = \"https://gist.github.com/ai/473dd603baa92d5c8590f3573514c7a1\"\ntitle = \"Принципы разработки Амплифера\"\np"
  },
  {
    "path": "website/src/domain/caseStudy/data.toml",
    "chars": 201190,
    "preview": "[[aha]]\nid = \"https://www.aha.io/blog/coffescript-to-es6\"\ntitle = \"How I Convinced Our CTO to Switch From CoffeeScript t"
  },
  {
    "path": "website/src/domain/caseStudy/lib/index.ts",
    "chars": 1108,
    "preview": "import { getCollection, type CollectionEntry } from \"astro:content\";\nimport type { CaseStudy } from \"../schema\";\nimport "
  },
  {
    "path": "website/src/domain/caseStudy/schema.ts",
    "chars": 240,
    "preview": "import { z } from \"astro:content\";\n\nexport const caseStudySchema = z.object({\n  id: z.string().url(),\n  title: z.string("
  },
  {
    "path": "website/src/domain/company/data.ru.toml",
    "chars": 2224,
    "preview": "[amplifr]\nname = \"Amplifr\"\nwebsiteUrl = \"https://amplifr.com\"\n\n[aviasales]\nname = \"Aviasales\"\nwebsiteUrl = \"https://www."
  },
  {
    "path": "website/src/domain/company/data.toml",
    "chars": 14776,
    "preview": "[datadog]\nname = \"Datadog\"\nwebsiteUrl = \"https://www.datadoghq.com\"\nblogUrl = \"https://www.datadoghq.com/blog/engineerin"
  },
  {
    "path": "website/src/domain/company/lib/index.ts",
    "chars": 706,
    "preview": "import { getCollection, getEntry, type CollectionEntry } from \"astro:content\";\nimport { parse } from \"smol-toml\";\nimport"
  },
  {
    "path": "website/src/domain/company/schema.ts",
    "chars": 285,
    "preview": "import { z } from \"astro:content\";\n\nexport const companySchema = z.object({\n  id: z.string(),\n  name: z.string(),\n  webs"
  },
  {
    "path": "website/src/layouts/BaseLayout.astro",
    "chars": 2689,
    "preview": "---\nimport \"@/styles/reset.css\";\nimport \"@/styles/base.css\";\nimport \"@/styles/links.css\";\nimport \"@/styles/utility.css\";"
  },
  {
    "path": "website/src/pages/companies/[company]/index.astro",
    "chars": 2289,
    "preview": "---\nimport BaseLayout from \"@/layouts/BaseLayout.astro\";\nimport { getAllCompanies, getCompany } from \"@/domain/company/l"
  },
  {
    "path": "website/src/pages/companies/[company]/rss.xml.ts",
    "chars": 1571,
    "preview": "import rss, { rssSchema } from \"@astrojs/rss\";\nimport { z } from \"astro:content\";\nimport { SITE_DESCRIPTION, SITE_NAME, "
  },
  {
    "path": "website/src/pages/companies/index.astro",
    "chars": 1653,
    "preview": "---\nimport BaseLayout from \"@/layouts/BaseLayout.astro\";\nimport Navigation from \"@/components/Navigation.astro\";\nimport "
  },
  {
    "path": "website/src/pages/index.astro",
    "chars": 2396,
    "preview": "---\nimport BaseLayout from \"@/layouts/BaseLayout.astro\";\nimport { getAllCaseStudiesByCompany } from \"@/domain/caseStudy/"
  },
  {
    "path": "website/src/pages/rss.xml.ts",
    "chars": 1047,
    "preview": "import rss, { rssSchema } from \"@astrojs/rss\";\nimport { getCollection, z } from \"astro:content\";\nimport { SITE_DESCRIPTI"
  },
  {
    "path": "website/src/styles/base.css",
    "chars": 874,
    "preview": ":root {\n  --color-bg: #f9f7ee;\n  --color-border: #e1e4e8;\n  --color-muted: #59636e;\n  --color-link: #0969da;\n  --color-l"
  },
  {
    "path": "website/src/styles/links.css",
    "chars": 480,
    "preview": ".raw {\n  text-decoration: none;\n  color: inherit;\n}\n\na:not([class~=\"raw\"]) {\n  color: var(--color-link);\n  text-decorati"
  },
  {
    "path": "website/src/styles/reset.css",
    "chars": 1032,
    "preview": "/**\n * Based on https://piccalil.li/blog/a-more-modern-css-reset/\n */\n\n/* Box sizing rules */\n*,\n*::before,\n*::after {\n "
  },
  {
    "path": "website/src/styles/utility.css",
    "chars": 74,
    "preview": ".muted {\n  color: var(--color-muted);\n}\n\n.nobr {\n  white-space: nowrap;\n}\n"
  },
  {
    "path": "website/tsconfig.json",
    "chars": 225,
    "preview": "{\n  \"extends\": \"astro/tsconfigs/strict\",\n  \"include\": [\".astro/types.d.ts\", \"**/*\"],\n  \"exclude\": [\"dist\"],\n  \"compilerO"
  }
]

About this extraction

This page contains the full source code of the andrew--r/frontend-case-studies GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 38 files (414.4 KB), approximately 128.7k tokens, and a symbol index with 20 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!