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.
- English
- AdRoll
- Aha!
- Airbnb
- ALDO
- Algolia
- Allegro
- Amazon
- Artsy
- Atlassian
- Australian Broadcasting Corporation
- Badoo
- BBC
- Betty Crocker
- Bitmovin
- blogfoster
- Bloomberg
- BuzzFeed
- Campaign Monitor
- Carbon Five
- Carousell
- cars.com
- Checkbot
- Clearleft
- Cloudflare
- Cloud Four
- CodeSandbox
- Condé Nast
- Conductor
- Datadog
- DAZN
- De Voorhoede
- DEV
- Discord
- <div>RIOTS
- DoorDash
- Dropbox
- eBay
- EdgeDB
- Electronic Arts
- Ele.me
- Etsy
- Evil Martians
- Expedia Group
- ezCater
- FARFETCH
- fastq.bio
- Figma
- Financial Times
- Flickr
- Flipkart
- Flocktory
- Futurice
- Garbarino
- GitHub
- GitLab
- Goibibo
- GOV.UK
- grammarly
- Gusto
- HealthCare.gov
- Heap
- in der Apotheke
- Infinite Red
- Insider Inc.
- Internet Archive
- Intuit
- InVision
- Khan Academy
- Kickstarter
- Klarna
- Line
- Lucidchart
- Lyft
- Mail.ru
- Mailchimp
- MDN
- Medium
- MemSQL
- Mercado Libre
- Microsoft Bing
- Microsoft To-Do
- Mixmax
- Mixpanel
- Monzo
- Mozilla
- Mud
- Myntra
- Netflix
- New Relic
- Notion
- npm
- OK GROW!
- OYO
- Oyster
- Palantir
- PayPal
- Pinafore
- Pivotal Tracker
- Plaid
- Plotly
- Product Hunt
- Proton
- Quizlet
- Quora
- REA Group
- Reaktor
- Redmart
- repl.it
- Revolut
- Roompact
- Safety Culture
- Scratch
- Sentry
- Shopify
- Skillshare
- Slack
- Snipcart
- SoundCloud
- Spectrum
- Spotify
- Stack Overflow
- stripe
- SumUp
- Superhuman
- TakeShape
- The Guardian
- The Knot Worldwide
- The New York Times
- The Telegraph
- The Times & The Sunday Times
- The U.S. Digital Service
- The Wall Street Journal
- This Also
- ThomasNet
- Thread
- Tinder
- Tines
- TinyMCE
- Tokopedia
- Treebo
- Trivago
- Tumblr
- Twitch
- Uber
- Udacity
- Unity
- Unsplash
- Vercel
- Verve
- Walmart Labs
- Wikimedia
- Wingify
- Wix
- Yelp
- YNAB
- YouTube
- Zajno
- Zynga
- 18F
- 1Password
- Miscellaneous
- Russian
- Amplifr
- Aviasales
- Avito
- auto.ru
- Badoo
- Delivery Club
- DIRECTUM
- Flocktory
- GitLab
- HeadHunter
- ISPsystem
- Joom
- Mail.Ru
- Microsoft To-Do
- Miro
- Netcracker
- OneTwoTrip
- Rambler Group
- Setka
- Skyeng
- Sports.ru
- Tinkoff
- Wrike
- Альфа-Банк
- Бюро Горбунова
- ВКонтакте
- Додо Пицца
- Леруа Мерлен
- Медуза
- Одноклассники
- Сбербанк
- Ситимобил
- Спортмастер
- Учи.ру
- Хабр
- ЦИАН
- ЮMoney (Яндекс.Деньги)
- Яндекс
- 2ГИС
- Прочее
- License
- Lazy loading Backbone collections with Promises (November 12, 2013)
- Rollup: Shared UI components at AdRoll (November 05, 2015)
- Rollup: How we use React.js and npm to share UI code at AdRoll (November 12, 2015)
- Rollup: What we have learned from sharing UI code at AdRoll (November 19, 2015)
- gulp-react-docs: From propTypes to Markdown in 3 seconds (December 21, 2015)
- How to Create a Style Guide: Start with a UI Framework (July 29, 2016)
- How to Run a Front-End Infrastructure Team (August 29, 2017)
- How I Convinced Our CTO to Switch From CoffeeScript to ES6 (September 7, 2017)
- Turbocharged JavaScript Refactoring with Codemods (April 27, 2016)
- Rearchitecting Airbnb’s Frontend (May 15, 2017)
- Migrating from Mocha to Jest (June 15, 2017)
- React Performance Fixes on Airbnb Listing Pages (December 5, 2017)
- Server Rendering, Code Splitting, and Lazy Loading with React Router v4 (January 10, 2018)
- React Native at Airbnb (June 19, 2018): The Technology, Building a Cross-Platform Mobile Team, Sunsetting React Native, What’s Next for Mobile at Airbnb
- Operationalizing Node.js for Server Side Rendering (July 18, 2018)
- How Airbnb is Moving 10x Faster at Scale with GraphQL and Apollo (December 5, 2018)
- Building (And Re-Building) the Airbnb Design System (October 30, 2019)
- ts-migrate: A Tool for Migrating to TypeScript at Scale (August 18, 2020)
- Building a Faster Web Experience with the postTask Scheduler (May 20, 2021)
- A Deep Dive into Airbnb’s Server-Driven UI System (June 29, 2021)
- Measuring Web Performance at Airbnb (December 7, 2021)
- Faster JavaScript Builds with Metro (May 24, 2022)
- Airbnb’s Trip to Linaria (June 16, 2022)
- Improving Performance with HTTP Streaming (May 17, 2023)
- Rethinking Text Resizing on Web (May 16, 2024)
- How Airbnb Smoothly Upgrades React (July 23, 2024)
- Adopting Bazel for Web at Scale (Nov 12, 2024)
- The Impact of Web Performance (February 6, 2020)
- Improving Web Performance to Mirror Engine Speed (July 26, 2017)
- Using NetInfo API to Improve Algolia’s JavaScript Client (July 30, 2019)
- Managing Frontend in the Microservices Architecture (March 12, 2016)
- Why Allegro Ads chose TypeScript (April 9, 2019)
- Page visibility and performance metrics (September 2, 2019)
- Performance of JavaScript optional chaining (November 8, 2019)
- Using ESLint to improve your app’s performance (August 11, 2020)
- Measuring Web Performance (June 8, 2021)
- Making API calls a seamless user experience (July 21, 2021)
- CSS Architecture and Performance in Micro Frontends (July 29, 2021)
- How to turn on TypeScript strict mode in specific files (September 6, 2021)
- Evolution of web performance culture (September 23, 2021)
- How we refactored the search form UI component (October 26, 2021)
- 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 (January 27, 2022)
- Rendering on the Server and Client in Node.js (November 30, 2013)
- The Tech Behind Live Auction Integration (August 9, 2016)
- React Native at Artsy (August 15, 2016)
- Making Artsy Editorial Accessible (August 29, 2017)
- Helping the Web Towards OSS by Default (September 6, 2016)
- JSON Web Tokens: Artsy's Journey (October 26, 2016)
- Exploration: Front-end JavaScript at Artsy in 2017 (February 5, 2017)
- Modernizing Force (September 5, 2017)
- React Native, 2 years later (March 17, 2018)
- Keeping Artsy's dependencies up to date (November 26, 2018)
- Switch from Capybara Webkit to Chrome (November 27, 2018)
- GraphQL Stitching 101 (December 11, 2018)
- GraphQL: Union vs. Interface (January 14, 2019)
- From TSLint to ESLint, or How I Learned to Lint GraphQL Code (January 29, 2019)
- 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 (August 28, 2019)
- Using an event-driven architecture to improve Jira Software responsiveness (November 05, 2019)
- Scaling React server-side rendering in Jira Cloud (February 04, 2020)
- Improving performance through better architecture (June 23, 2020)
- Performance in Jira front-end: the story of a single line of code (November 16, 2020)
- Performance in Jira front-end: using modern bundles to improve load time (December 5, 2020)
- Performance in Jira front-end: solving bundle duplicates with Webpack and yarn (December 22, 2020)
- Composing Components (September 28, 2018)
- From data to DOM: Building a text rendering pipeline for React (October 23, 2019)
- Migrating the platform that powers ABC sites to TypeScript (September 30, 2021)
- How to teach a web app to speak 100 languages: the specifics of localisation (March 8, 2017)
- The painless way to collect statistics from a web-site (May 18, 2017)
- Translating interfaces into almost fifty languages: Sketch (October 17, 2017)
- Hot localisations update: part 1, part 2 (November 2017)
- From zero to Cosmos: part 1, part 2, part 3 (February 2018)
- Translating Dust templates to JSX (May 16, 2018)
- How to manage your Design Tokens with Style Dictionary (September 27, 2018)
- Optical alignment for frontend developers: why is it not the same as it is for designers and how can the process be automated (November 22, 2018)
- Generating multi-brand multi-platform icons with Sketch and a Node.js script: from the idea to the assets Sketch files and the build script and the generation of the assets (December 2018)
- Covering A/B tests with UI tests: how to avoid getting tangled up in your own code (February 22 2019)
- Design Tokens beyond colors, typography, and spacing (November 12, 2019)
- Redefining the BBC News core experience (July 22, 2016)
- HTTP/2 is easy, just turn it on… (November 7, 2017)
- How BBC Interactive Content Works Across AMP, Apps, And The Web (March 15, 2018)
- Wake Lock API case study: 300% increase in purchase intent indicators on BettyCrocker.com (May 19, 2020)
- How Bitmovin Used React/Redux to Develop Its New Dashboard (September 7, 2017)
- To Play, or Not to Play – New AutoPlay Policies for Safari 11 and Chrome 64 (September 28, 2017)
- To Play, or Not to Play #2 – Firefox blocks audible autoplay by default! (February 20, 2019)
- Jumpstart to React+Redux Development
- Centralized ESLint Configuration
- Redux For Better in-App Analytics
- Managing Complexity in Redux: Higher-Order Reducers and Async State
- How We Simplified our Tooling Setup for Node.js Projects
- How to Use the Power of Jest’s Snapshot Testing Without Using Jest
- How Bloomberg Used React Native to Develop its new Consumer App (December 15, 2016)
- wsk: A Straightforward and Maintainable Build System from the Bloomberg Graphics Team (December 12, 2017)
- 10 Insights from Adopting TypeScript at Scale (November 9, 2020)
- Micro Frontends at BuzzFeed (September 17, 2019)
- Accessible BuzzFeed (August 27, 2020)
- CLS at BuzzFeed — Part 1: Raising The Floor (November 6, 2021)
- CLS at BuzzFeed — Part 2: Getting Help From Real Users (November 6, 2021)
- CLS at BuzzFeed — Part 3: Dealing with the unpredictable (November 6, 2021)
- Fixing bugs with Outlook specific CSS (November 9, 2016)
- Better video previews for email (December 20, 2016)
- How to test accessibility of emails (June 5, 2018)
- Cross-Domain Browser Window Messaging with HTML5 and Javascript (August 17, 2012)
- Composing Synchronous and Asynchronous Functions in JavaScript (January 29, 2015)
- An AJAX Auto-Save Implementation (January 24, 2018)
- How we made Carousell’s mobile web experience 3x faster (October 31, 2018)
- Building a Dynamic UI System at Carousell (Feb/Mar 2019): part 1, part 2 and part 3
- An Experiment with JSON Schema (April 18, 2019)
- Scalable & lightweight web screenshots with SVG (November 30, 2018)
- How to use variable fonts in the real world (January 26, 2018)
- A framework for web performance (September 20, 2018)
- How we built Origin CA: Web Crypto (May 10, 2016)
- Open Sourcing CloudFlare’s UI Framework (June 8, 2016)
- Going Global - a Localization Case Study at Cloudflare (August 23, 2017)
- How we made our page-load optimisations even faster (February 2, 2018)
- Real URLs for AMP Cached Content Using Cloudflare Workers (November 13, 2018)
- Fast Google Fonts with Cloudflare Workers (November 22, 2018)
- Migrating to React land: Gatsby (March 26, 2020)
- Moving from reCAPTCHA to hCaptcha (April 8, 2020)
- Dark Mode for the Cloudflare Dashboard (September 29, 2021)
- All Mixed Up: Isomorphic Sorting Gone Wrong (October 17, 2019)
- Lessons learned refactoring Codesandbox.io from Redux to Cerebral (February 7, 2018)
- The Why and How of Google AMP at Condé Nast (August 29, 2017)
- Painless Migration From Backbone to React/Redux (February 16, 2018)
- Redux-Doghouse – Creating Reusable React-Redux Components Through Scoping (November 14, 2016)
- How Datadog uses Datadog to gain visibility into the Datadog user experience (February 22, 2022)
- DRUIDS, the Design System that Powers Datadog (September 29, 2022)
- Making Fetch Happen - Building a General-purpose Query & Render Scheduler (April 17, 2023)
- How We Migrated Our Acceptance Tests to Use Synthetic Monitoring (June 30, 2023)
- Testing MobX State Tree (December 7, 2018)
- Handling complexity in lambda functions (February 8, 2019)
- Micro-frontends, the future of Frontend architectures (April 2, 2019)
- Adopting a Micro-frontends architecture (April 8, 2019)
- Orchestrating micro-frontends (April 12, 2019)
- Jest: Our journey into performant unit tests (April 15, 2019)
- Identifying micro-frontends in our applications (May 21, 2019)
- Why our website is faster than yours (July 16, 2016)
- App shell UX with service workers and streams (June 23, 2020)
- Using React Native: One Year Later (June 7, 2016)
- Lessons from migrating a large codebase to React 16 (October 5, 2017)
- Why Discord is Sticking with React Native (July 26, 2018)
- How Discord Maintains Performance While Adding Features (August 2, 2018)
- How Discord Handles Two and Half Million Concurrent Voice Users using WebRTC (September 10, 2018)
- Investigating Discord’s React Memory Leak (August 8, 2019)
- How Discord achieves native iOS performance with React Native (November 7, 2019)
- How Discord Implemented App-Wide Keyboard Navigation (December 17, 2020)
- A story of how we migrated to pnpm (January 18, 2022)
- Things to Keep in Mind When Integrating a Map Feature to a Web App (Septermber 11, 2020)
- Building the Caviar Web Experience Using Reusable React Components on the DoorDash Platform (September 29, 2020)
- Implementing Theming in DoorDash’s Design Language System (December 17, 2020)
- 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 (April 21, 2021)
- 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 (March 29, 2022)
- 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 (August 30, 2022)
- Translating Dropbox (April 18, 2011)
- Some love for JavaScript applications (August 31, 2012)
- Dropbox dives into CoffeeScript (September 13, 2012)
- Content Security Policy at Dropbox (September 2015): On Reporting and Filtering, Unsafe-inline and nonce deployment, The Unexpected Eval, Third Party Integrations and Privilege Separation
- Enabling HTTP/2 for Dropbox web services: experiences and observations (May 11, 2016)
- Annotations on Document Previews (November 30, 2016)
- Preventing cross-site attacks using same-site cookies (March 16, 2017)
- Deploying Brotli for static content (April 6, 2017)
- Dropbox Paper: Emojis and Exformation (November 15, 2017)
- Improving Document Preview Performance (December 1, 2017)
- Migrating from Underscore to Lodash (September 5, 2018)
- Redux with Code-Splitting and Type Checking (July 16, 2019)
- Design Tooling at Scale (October 12, 2019)
- The Great CoffeeScript to Typescript Migration of 2017 (May 13, 2020)
- JQuery to React: How we rewrote the HelloSign Editor (September 30, 2020)
- Data URI Sprites (July 12, 2011)
- The New eBay Motors Homepage is 2X Faster (October 14, 2011)
- Five JavaScript Tips for a Sleek User Experience (April 16, 2012)
- Page Loading and Rendering Optimizations (June 22, 2012)
- Bandwidth-based Experience (October 10, 2012)
- Early Detection of Frontend Single Points of Failure (January 22, 2013)
- Front-end Renaissance at eBay (January 13, 2014)
- Yet Another Responsive vs. Adaptive Story (March 5, 2014)
- Don't Build Pages, Build Modules (October 2, 2014)
- Async Fragments: Rediscovering Progressive HTML Rendering with Marko (December 8, 2014)
- The Power of Perceived Performance (January 5, 2015)
- Mobile First - A Retrospective (May 13, 2015)
- How Our CSS Framework Helps Enforce Accessibility (November 4, 2015)
- Packaging for Performance (January 4, 2016)
- The Path to JavaScript Next (March 15, 2016)
- Browse eBay with Style and Speed (June 30, 2016)
- Experience the Lightning Bolt (September 21, 2016)
- Effective Front-End Code Review (March 2, 2017)
- Building a UI Component in 2017 and Beyond (May 3, 2017)
- eBay’s Font Loading Strategy (September 21, 2017)
- The Future of Marko (October 26, 2017)
- Beyond HTTPS (December 13, 2017)
- Integration Testing with React and Enzyme (June 26, 2018)
- WebAssembly at eBay: A Real-World Use Case (May 22, 2019)
- Autofill on Browsers: A Deep Dive (December 3, 2019)
- Speed By A Thousand Cuts (January 23, 2020)
- 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 (April 15, 2020)
- An approach to optimizing TypeScript type checking performance (August 8, 2024)
- Building UI at Enterprise Scale with Web Components (August 22, 2017)
- Upgrading Ele.me to Progressive Web App (May 6, 2017)
- Localizing Logically for a Global Marketplace (October 21, 2011)
- Multilingual User Generated Content and SEO (December 2, 2011)
- Measuring Front-end Performance With Real Users (November 29, 2012)
- Responsive emails that really work (March 13, 2014)
- Transitioning to SCSS at Scale (February 2, 2015)
- Rebuilding the Foundation of Etsy’s Seller Tools (February 5, 2015)
- How Etsy Formats Currency (April 19, 2016)
- SEO Title Tag Optimization at Etsy: Experimental Design and Causal Inference (October 25, 2016)
- Optimizing Meta Descriptions, H1s and Title Tags: Lessons from Multivariate SEO Testing at Etsy (January 25, 2017)
- Reducing Image File Size at Etsy (May 30, 2017)
- How Etsy Localizes Addresses (September 26, 2018)
- Developing in a Monorepo While Still Using Webpack (April 6, 2020)
- The journey to fast production asset builds with Webpack (February 3, 2020)
- Etsy’s Journey to TypeScript (November 8, 2021)
- Is React Native podium-ready? (May 14, 2018)
- Scoping A/B Test Code in React (September 4, 2018)
- Profiling React Server-Side Rendering to Free the Node.js Event Loop (February 18, 2019)
- Creating Your Own Apollo Cache for Perf and Profit (February 7, 2019)
- Optimizing a Page: Resource Hints, Critical CSS, and Webpack (March 20, 2019)
- Contextual and Consistent Analytic Events in React (April 22, 2019)
- Minimizing DOM Nodes for Performance (September 24, 2019)
- Web Performance vs. User Engagement (October 31, 2019)
- Migrating to WKWebView (December 11, 2019)
- A (Small) Case for Function-Based React Components (December 10, 2019)
- Measuring Interaction Performance with FPS Data (December 16, 2019)
- File Upload with GraphQL, Apollo Server, Hapi 18+, and React (January 16, 2020)
- Web Applications: Analyzing Client-Side Performance (January 7, 2020)
- Schema Driven UIs (January 23, 2020)
- Responsive Accessibility Guidelines at Expedia.com (February 27, 2020)
- 12 Tips to Improve Client Side Page Performance (April 28, 2020)
- Using Webpack Module Federation to Create an App Shell (June 10, 2020)
- CSS-in-JS: An Investigation (July 7, 2020)
- Multi-Variate Web Optimisation Using Linear Contextual Bandits (September 1, 2020)
- How Expedia.com Uses Accessibility Automation (October 1, 2020)
- Sizing Android WebView iframes with JavaScript (April 27, 2021)
- The case against React snapshot testing (June 27, 2019)
- Saying goodbye to emotion (June 1, 2021)
- Building the F8 App with React Native
- BigPipe: Pipelining web pages for high performance (June 4, 2010)
- Facebook has 30,000 react components. How do you manage large project directories with many components? (December 31, 2013)
- The technology behind preview photos (August 6, 2015)
- Improving CSS quality at Facebook and beyond (June 13, 2016)
- This browser tweak saved 60% of requests to Facebook (January 26, 2017)
- Building High-Quality JavaScript Tools (June 2, 2017)
- React 16: A look inside an API-compatible rewrite of our frontend UI library (September 26, 2017)
- Design Systems & Tools at Facebook (November 15, 2017)
- Behind the Scenes: Improving the React Repository Infrastructure (December 15, 2017)
- Faster input events with Facebook’s first browser API contribution (April 22, 2019)
- Building the New facebook.com with React, GraphQL and Relay (April 30, 2019)
- Rebuilding our tech stack for the new Facebook.com (May 8, 2020)
- Making Facebook.com accessible to as many people as possible (July 30, 2020)
- The need for speed — 1: measuring today’s web performance (February 19, 2019)
- The need for speed — 2: call for metrics (February 19, 2019)
- How to build a performance culture at scale (September 11, 2019)
- One less second for the page, one giant leap for the business (July 2, 2020)
- The art of failure II: graceful degradation (September 20, 2021)
- GraphQL sessions: powering farfetch.com (May 6, 2022)
- How We Used WebAssembly To Speed Up Our Web App By 20X (April 5, 2019)
- Building a professional design tool on the web (December 7, 2015)
- Debugging Data Corruption with Emscripten (November 7, 2016)
- WebAssembly cut Figma’s load time by 3x (June 8, 2017)
- Introducing BrowserView for Electron (June 29, 2017)
- Introducing: Figma to React (April 26, 2018)
- Figma, faster 🏎 (August 13, 2018)
- How to build a plugin system on the web and also sleep well at night (August 22, 2019)
- React at 60fps: improving scrolling comments in Figma (August 19, 2020)
- Inside Figma: a case study on strict null checks (December 17, 2020)
- Illuminating dark mode (July 21, 2022)
- The evolution of Figma’s mobile engine: Compiling away our custom programming language (May 1, 2024)
- Building The New Financial Times Web App (May 23, 2013)
- Free-market software development (August 21, 2015)
- SVG icons are easy but the fallbacks aren't (December 1, 2015)
- A faster FT.com (April 4, 2016)
- YES, your site too can (and should) be accessible (May 23, 2017)
- Improving the cache performance of The Polyfill Service (June 9, 2017)
- Can't You Just Make It More like Bootstrap? (July 22, 2017)
- Speeding up without slowing down (November 7, 2017)
- What happens when you visit ft.com? (November 24, 2017)
- Tips for in-house teams in a free market software culture (January 30, 2018)
- An outbreak of Accessibility anti-patterns (May 18, 2018)
- This one line of Javascript made FT.com 10 times slower (July 16, 2018)
- Improving the cache performance of The Polyfill Service even more (January 21, 2019)
- Designing a sustainable front-end toolset for FT.com (April 27, 2020)
- Animating list reordering with React Hooks (August 26, 2020)
- Taming Webpackʼs content hashes (June 3, 2020)
- Lessons Learned from the Flickr Touch Lightbox (July 20, 2011)
- Creating an interface for geofences (September 6, 2011)
- Raising the bar on web uploads (April 25, 2012)
- Building an HTML5 Photo Editor (April 18, 2012)
- Building The Flickr Web Uploadr: The Grid (May 11, 2012)
- Parsing Exif client-side using JavaScript (June 1, 2012)
- Adventures in Jank Busting: Parallax, performance, and the new Flickr Home Page (June 4, 2013)
- Building Flickr’s new Hybrid Signed-Out Homepage (April 23, 2014)
- Perceptual Image Compression at Flickr (September 25, 2015)
- Introducing yakbak: Record and playback HTTP interactions in NodeJS (April 25, 2016)
- Layout in Flipboard for Web and Windows (March 24, 2014)
- 60 FPS on the mobile web (February 10, 2015)
- Building Flipkart Lite: A Progressive Web App (November 11, 2015)
- Third party libraries (May 22, 2017)
- How Elm made our work better (November 1, 2016)
- Building a PWA in Argentina (July 24, 2017)
- GitHub's CSS (July 23, 2014)
- How GitHub is using Web Components in production (September 30, 2014)
- Browser Monitoring for GitHub.com (May 19, 2015)
- GitHub's CSP journey (April 12, 2016)
- GitHub's post-CSP journey (January 19, 2017)
- Shipping system fonts to GitHub.com (February 7, 2018)
- Design Systems at GitHub (July 6, 2018)
- Removing jQuery from GitHub.com frontend (September 6, 2018)
- From 48k lines of code to 10—the story of GitHub’s JavaScript SDK (April 9, 2020)
- How we built the GitHub globe (December 21, 2020)
- How GitHub Actions renders large-scale logs (March 25, 2021)
- Why We Chose Vue.js (December 1, 2016)
- Our big Frontend plan revealed (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 (November 9, 2017)
- How GitLab switched to Headless Chrome for testing (December 19, 2017)
- Our journey in switching to native Unicode emoji (May 30, 2018)
- How we iterated and improved our frontend team culture (June 26, 2018)
- Why we chose ECharts for data visualizations (September 30, 2019)
- 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 (May 20, 2020)
- How Goibibo's PWA improved conversions by 60% (September 29, 2020)
- Designing very large (JavaScript) applications (April 15, 2018)
- Building the Google Photos Web UI (July 10, 2018)
- TypeScript at Google (September 1, 2018)
- The Chrome Dev Summit site: case study (March 12,2019)
- The new AdWords UI uses Dart — we asked why (March 31, 2016)
- A Recipe for Designing Animations — Without Sacrificing Performance (June 4, 2019)
- Bringing service workers to Google Search (June 20, 2019)
- How we built the Chrome DevTools WebAuthn tab (October 22, 2020)
- Migrating Puppeteer to TypeScript (January 21, 2021)
- DevTools architecture refresh: migrating DevTools to TypeScript (April 8, 2021)
- Implementing CSP and Trusted Types debugging in Chrome DevTools (November 1, 2021)
- Why Google Sheets ported its calculation worker from JavaScript to WasmGC (June 26, 2024)
- Accessibility for developers: building a frontend that everyone can use (October 6, 2016)
- Patterns for accessible webchats (December 9, 2016)
- How to create content that works well with screen readers (February 8, 2017)
- How we’ve made GOV.UK Elements even more accessible (February 28, 2018)
- What we learned from getting our autocomplete tested for accessibility (May 15, 2018)
- 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 (February 24, 2020)
- Why videos on GOV.UK use the YouTube video player (March 16, 2020)
- How we reduced CSS size and improved performance across GOV.UK (December 15, 2023)
- Building Browser Extensions At Scale (October 6, 2017)
- Introducing Embrace: A Framework for Building Declarative UIs (September 3, 2021)
- Under the Hood of the Grammarly Editor: Real-Time Collaborative Text Editing and How Suggestions Work (April 22, 2022)
- Making Grammarly Feel Native On Every Website (March 7, 2022)
- How Grammarly Tackles Hidden Complexity in Front-End Applications: part 1 and part 2 (March 7, 2022)
- Signals With @grammarly/focal (August 21, 2023)
- Scaling Front-end Architecture (June 10, 2016)
- Evolving JavaScript Part 1: Goodbye Backbone (July 12, 2016)
- Evolving JavaScript Part 2: Hello React (July 12, 2016)
- Evolving JavaScript Part 3: Building a React Application (July 12, 2016)
- Taking off with Apollo (September 12, 2018)
- How I fell out of love with HOCs (December 9, 2018)
- Building a design system for HealthCare.gov (August 29, 2017)
- Goodbye CoffeeScript, Hello TypeScript (October 7, 2015)
- Migrating To React + MobX While Shipping New Features (August 16, 2017)
- How We Write Front-end Code (February 20, 2018)
- Redesigning Heap Without a Feature Branch (April 10, 2019)
- How we failed, then succeeded, at migrating to TypeScript (October 10, 2019)
- How we leveraged ASTs and Babel to capture everything on React Native apps (June 23, 2020)
- Farewell, Google Maps (July 18, 2018)
- Switching from Ava to Jest for TypeScript (November 6, 2017)
- Using TypeScript to upgrade Ignite without losing my mind (March 20, 2019)
- Yarn 1 vs Yarn 2 vs NPM (February 6, 2020)
- Why Infinite Red uses MobX-State-Tree instead of Redux (June 16, 2020)
- How to style different sites with one CSS collection (December 17, 2018)
- Why we got rid of all our front-end and back-end engineers (February 13, 2019)
- Delightful ways to write reusable CSS using subclasses (March 1 , 2019)
- React Native at Instagram (February 7, 2017)
- Making Instagram.com faster: part 1 (August 1, 2019), part 2 (September 6, 2019), part 3 (October 11, 2019), part 4 (November 1, 2019)
- Pixels vs. Ems: Users DO Change Font Size (June 13, 2018)
- Making Accessibility an Integral Part of the Creative Workflow (April 15, 2018)
- TurboTax Live’s Approach to a Gender-Neutral Design System (February 21, 2019)
- Delivering Consistent Animations with a Design System Library (April 25, 2019)
- GraphQL: Intuit’s Path to ONE API System (March 13, 2019)
- Sharing ESLint Across Teams (April 5, 2016)
- Optimizing Webpack for Faster React Builds (April 12, 2016)
- Persist Redux State by Using Sagas (April 26, 2016)
- Testing Our Shared ESLint Configs (May 12, 2016)
- How ESLint Saved Our Soul (August 12, 2016)
- React Performance Tune-Up (September 23, 2016)
- Building the inspect measurement engine (July 17, 2019)
- Babel in Khan Academy's i18n Toolchain (June 22, 2015)
- Fun with slope fields, css and react (August 5, 2015)
- Copy-pasting more than just text (August 31, 2015)
- i18nize-templates: Internationalization After the Fact (September 28, 2015)
- Schrödinger's deploys no more: how we update translations (October 12, 2015)
- Forgo JS packaging? Not so fast (November 23, 2015)
- Inline CSS at Khan Academy: Aphrodite (March 29, 2016)
- Migrating to a Mobile Monorepo for React Native (May 29, 2017)
- Creating Query Components with Apollo (June 12, 2017)
- tota11y - an accessibility visualization toolkit (April 15, 2018)
- Namespacing Actions for Redux (November 20, 2017)
- Migrating from Rails’ asset pipeline to Node’s webpack (January 2, 2016)
- How removing caching improved mobile performance by 25% (January 10, 2017)
- Improving Communication and Confidence with Visual Snapshot Testing (March 14, 2017)
- 6 Lessons learned from optimizing the performance of a Node.js service (January 9, 2020)
- LINE MANGA: Smooth page transition with Page Stack (January 18, 2018)
- Easy code-splitting with grow-loader (January 24, 2018)
- Bringing a Modern Javascript Build Pipeline to LinkedIn (January 20, 2016)
- Sleek and Fast: Speeding Up your Fat Web Client (October 19, 2017)
- The Glimmer Binary Experience (December 7, 2017)
- Ember Timer Leaks: The Bad Apples in Your Test Infrastructure (January 3, 2018)
- Lighter than Lightweight: How We Built the Same App Twice with Preact and Glimmer.js (March 12, 2018)
- LinkedIn’s approach to automated accessibility (A11y) testing (May 21, 2020)
- IE10: How does it really stack up? (November 14, 2012)
- Atomic CSS as a tool set (January 31, 2014)
- The Definitive Guide to Copying and Pasting in JavaScript (December 2, 2014)
- Big content in a little canvas (May 19, 2015)
- Improving Angular 2 Load Times and a 29KB Hello World App (September 26, 2016)
- Angular 2 and Observables: Data Sharing in a Multi-View Application (November 8, 2016)
- Using Angular 2 Components In a Non-Angular App (April 10, 2017)
- Converting 600k lines to TypeScript in 72 hours (November 16, 2017)
- How to handle folder uploads in Angular 2+ (January 3, 2018)
- JavaScriptCore – The Holy Grail of Cross Platform (February 14, 2018)
- How to Actually Improve Type Safety with the TypeScript Strict Flags (June 20, 2018)
- ZoneTracker: Tracking JavaScript Performance with Zone.js (November 9, 2018)
- JavaScriptCore—10 Months Later (January 3, 2019)
- TypeScript at Lyft (September 27, 2017)
- Re-approaching Color (September 21, 2018)
- Changing Lanes: How Lyft is Migrating 100+ Frontend Microservices to Next.js (November 30, 2020)
- Frontend at Lyft: An Overview (March 9, 2021)
- Improving Core Web Vitals on the Mail.ru home page resulted in an average 10% increase in conversion rates (November 15, 2021)
- Designing automated tests for React (August 10, 2019)
- Refactoring MDN macros with async, await, and Object.freeze() (February 7, 2019)
- Why ContentEditable is Terrible (May 14, 2014)
- Wait, Don’t Touch That! Mutual Exclusion Locks & JavaScript (January 17, 2015)
- The curious case of the disappearing Polish S (February 2, 2015)
- Five Goofy Things Medium Did That Break Accessibility (June 29, 2015)
- The Unluckiest Paragraphs: A Tale of CSS and Why Parts of Medium Sometimes Disappear (December 5, 2015)
- Simple Style Sheets, Or How to Improve Your Sleep by Dropping the Cascade (September 28, 2016)
- 2 Fast 2 Furious: migrating Medium’s codebase without slowing down (March 22, 2018)
- The case of the eternal blur: a bug hunt horror novella (May 2, 2018)
- GraphQL Server Design @ Medium (November 2, 2018)
- Porting 30K lines of code from Flow to TypeScript (January 13, 2019)
- How Mercado Libre optimized for Web Vitals (TBT/FID) (September 21, 2020)
- Fast Front-End Performance for Microsoft Bing (August 25, 2022)
- How We React at Microsoft To-Do (January 5, 2018)
- Scaling Mixmax: Front-end performance (May 5, 2015)
- How we built ‘instant’ autocomplete for Mixmax (November 5, 2015)
- Yarn-ifying Mixmax: why and how we moved from npm to Yarn (April 24, 2017)
- Using CORS policies to implement CSRF protection (June 13, 2017)
- React without Redux: how we moved from Backbone to React without rewriting (July 26, 2017)
- Handling 3rd-party JavaScript with Rollup: how and when to leave JS out of the bundle (December 3, 2017)
- Precisely observing structural page changes (December 7, 2017)
- Choosing (and using) Javascript static typing: how Mixmax Engineering adopted Flow (May 15, 2018)
- To Yarn and Back (to npm) Again (May 29, 2018)
- 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 (June 12, 2018)
- Building a Bank with Next.js: How We Use Next.js at Monzo (December 2, 2020)
- The Art of UI Skeletons (April 23, 2019)
- To Eleventy and Beyond (October 1, 2020)
- A Year of Utility Classes (January 28, 2019)
- Myntra’s Web UI Journey — AMP and PWA (January 31, 2018)
- HTML5 Video Playback UI (October 21, 2013)
- Improving the performance of our JavaScript inheritance model (May 16, 2014)
- Node.js in Flames (November 19, 2014)
- JSON Graph: Reactive REST at Netflix (April 1, 2015)
- Localization Technologies at Netflix (June 4, 2015)
- Making Netflix.com Faster (August 5, 2015)
- Crafting a high-performance TV user interface using React (January 12, 2017)
- Netflix's approach to ES6 feature detection (January 20, 2017)
- Pass the Remote: User Input on TV Devices (May 17, 2017)
- Shop Talk podcast #264: React with Netflix (May 22, 2017)
- Performance Signup in React & Transactional Apps with Redux (October 25, 2017)
- Implementing Japanese Subtitles on Netflix (December 11, 2017)
- Integrating imperative APIs into a React application (December 20, 2017)
- Pseudo Localization @ Netflix (August 6, 2018)
- Delivering Meaning with Previews on Web (November 12, 2018)
- Enhancing the Netflix UI Experience with HDR (September 24, 2018)
- Our learnings from adopting GraphQL (December 10, 2018)
- Modernizing the Web Playback UI (December 12, 2018)
- Architecting UI for Netflix Studio Technology (November 14, 2019)
- Real-World JavaScript Performance Tips (November 14, 2014)
- How We Architected the New Relic Mobile Web UI in React (January 3, 2018)
- Migrating Notion's marketing site to Next.js (August 12, 2021)
- Re-inventing npmjs.com (April 3, 2018)
- JavaScript Usage by Industry (June 27, 2018)
- Migrating from Iron Router to FlowRouter (with Blaze) (September 17, 2015)
- Where does Redux fit in Meteor? (July 15, 2016)
- Real-world Unit Testing with Meteor and Jest (October 17, 2017)
- Optimizing a GraphQL app using Apollo Engine (February 12, 2019)
- OYO on a User Experience Quest with AMP ⚡ (January 11, 2018)
- Brotli vs Gzip Compression. How we improved our latency by 37% (June 29, 2018)
- AMP for Email - Interactive and Dynamic Email Experiences at OYO (March 26, 2019)
- Shipping ES6 in browsers without Polyfill (April 17, 2019)
- Signed-Exchange: Solving the AMP URLs Display Problem (May 7, 2019)
- Building Chrome Extension with ReactJs: Beginner’s Guide (May 13, 2019)
- A complete implementation guide to Trusted Web Activity(TWA)- OYO Lite (November 7, 2019)
- Migrating to webpack 5 to improve build time and reduce chunk sizes (June 30, 2021)
- Oyster Shots on the Front End (July 29, 2011)
- Using React and jQuery Together (March 22, 2016)
- Scaling product design with Blueprint (January 6, 2017)
- TSLint in 2019 (February 19, 2019)
- Sane, scalable Angular apps are tricky, but not impossible. Lessons learned from PayPal Checkout (September 26, 2015)
- Auto-shrink-wrapping in PayPal Checkout, and how it’s saved us more than once (February 10, 2016)
- Dependency injection in Angular isn’t worth it. More lessons learned from scaling PayPal Checkout (April 3, 2016)
- Less is more: reducing thousands of PayPal buttons into a single iframe, using zoid (March 17, 2017)
- Safari’s new third party tracking rules, and enabling cross-domain data storage (August 30, 2017 )
- Reinventing cross-origin requests, without CORS (September 6, 2017)
- Introducing PayPal’s open-source cross-domain javascript suite (October 16, 2017)
- GraphQL: A success story for PayPal Checkout (October 17, 2018)
- Why every new web app at PayPal starts with TypeScript (January 21, 2019)
- Scaling GraphQL at PayPal (October 30, 2019)
- Sharing UI Components at an Enterprise Level (June 2, 2020)
- How Micro Frontend Has Changed Our Team Dynamic (August 10, 2020)
- GraphQL at PayPal: An Adoption Story (September 1, 2021)
- Introducing Pinafore for Mastodon (April 9, 2018)
- 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 (February 10, 2019)
- One year of Pinafore (June 2, 2019)
- The joy and challenge of developing for KaiOS (September 22, 2019)
- What I’ve learned about accessibility in SPAs (November 5, 2019)
- Gone In 60 Frames Per Second: A Pinterest Paint Performance Case Study (June 10, 2013)
- Demystifying SEO with experiments (January 27, 2015)
- How we made JavaScript testing 15x faster (February 3, 2015)
- Making Pinterest HTTPS (March 13, 2015)
- How we switched our template rendering engine to React (November 18, 2016)
- Introducing Bonsai: an open source Webpack analyzer (June 2, 2017)
- Migrating Pinterest profiles to React (September 23, 2016) (video) (November 22, 2017)
- A Pinterest Progressive Web App Performance Case Study (November 30, 2017)
- Supporting React Native at Pinterest (May 10, 2018)
- A one year PWA retrospective (July 20, 2018)
- Using Elm in Production at Pivotal Tracker (January 31, 2017)
- Improving Accessibility in Pivotal Tracker (February 1, 2018)
- Securing WebViews with Chrome Custom Tabs (April 9, 2020)
- Modularizing monolithic javascript projects in plotly.js (January 28, 2016)
- React @ Product Hunt (May 30, 2017)
- GraphQL @ Product Hunt (November 2, 2017)
- Deploying CSS Logical Properties On Web Apps (December 23, 2022)
- Smooth Game Animations in React (February 18, 2016)
- Launching A Successful Redesign For 20 Million Students (June 13, 2017)
- Cypress: The future of end-to-end testing for web applications (February 8, 2018)
- Now or Never: Migrating 300k LOC from Flow to TypeScript at Quizlet (June 18, 2019)
- Faster Paint Times (August 18, 2016)
- Choosing Quora’s GraphQL client (July 22, 2020)
- ReactJS – Real World Examples of Higher-Order Components (May 6, 2016)
- Singletons Suck (aka Flux to Redux) (August 17, 2016)
- 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) (June 23, 2017)
- Refactoring 30000 lines of JS with types (January 24, 2017)
- How We Built r/Place (April 13, 2017)
- Why We Chose Typescript (June 30, 2017)
- Angular The Hard Way #1 Organise and manage domain data (April 22, 2015)
- RedMart's experience with PWA (October 25, 2018)
- How we use Storybook for documentation and code reviews (November 14, 2018)
- Infinite Loops (January 23, 2017)
- Modular, fast, small: how we built a server-rendered IDE (February 14, 2018)
- How we learned to stop worrying and love GraphQL (August 8, 2019)
- The fundamentals of web development at Revolut (January 4, 2021)
- Elm In Production: 25,000 Lines Later (July 30, 2017)
- Why we moved our graphQL server from Node.js to Golang (June 27, 2018)
- Porting Scratch from Flash to JavaScript: Performance, Interoperability and Extensions (February 28, 2019)
- Building Sentry: Source maps and their problems (July 16, 2019)
- Slow and Steady: Converting Sentry’s Entire Frontend to TypeScript (April 12, 2021)
- How we trimmed the Sentry JavaScript SDK file size by 20% (February 28, 2022)
- JavaScript SDK “Package Size is Massive” - So we reduced it by 29% (July 19, 2022)
- Understanding the Performance Impact of Generated JavaScript (July 22, 2022)
- How We Made JavaScript Stack Traces Awesome (November 30, 2022)
- Sentry’s Frontend Tests: Migrating from Enzyme to React Testing Library (February 23, 2023)
- How we reduced CI time by 35% with Nx Caching (March 31, 2023)
- Measuring Session Replay Overhead (July 5, 2023)
- How We Reduced Replay SDK Bundle Size by 35% (November 14, 2023)
- How 17 lines of code improved shopify.com loading by 50% (May 24, 2017)
- Building Shopify mobile with native and web technology (September 29, 2017)
- Designing a GraphQL API (June 18, 2018)
- Want to Improve UI Performance? Start by Understanding Your User (October 20, 2019)
- How We Built Hydrogen: A React Framework for Building Custom Storefronts (June 22, 2022)
- How We Ditched Redux for MobX (July 2, 2018)
- Reducing Slack’s memory footprint (March 3, 2017)
- TypeScript at Slack (April 11, 2017)
- Rebuilding Slack’s Emoji Picker in React (May 23, 2017)
- Getting to Slack faster with incremental boot (July 5, 2016)
- Localizing Slack (September 12, 2017)
- Rebuilding slack.com (October 11, 2017)
- Keep webpack Fast: A Field Guide for Better Build Performance (January 17, 2018)
- When a rewrite isn’t: rebuilding Slack on the desktop (July 22, 2019)
- Service Workers at Slack: Our Quest for Faster Boot Times and Offline Support (August 29, 2019)
- The Gradual Design System: How We Built Slack Kit (September 12, 2019)
- Building Dark Mode on Desktop (September 24, 2019)
- Gantry: Slack’s Fast-booting Frontend Framework (October 23, 2019)
- A Day in the Life of a Frontend Product Engineer at Slack (February 5, 2020)
- How Slack changed the way it designs accessible frontend components (May 2020)
- The Unsuspecting Beauty & Complexity of Web Forms (September 15, 2020)
- Creating a React Analytics Logging Library: part 1 (November 7, 2020) and part 2 (December 16, 2020)
- Managing Focus Transitions in Slack (July 13, 2021)
- The Story of our Progressive Migration from Backbone to Vue.js (July 20, 2017)
- Front-end JavaScript bug tracking (November 21, 2011)
- Building The Next SoundCloud (June 14, 2012)
- Smooth image loading by upscaling (February 20, 2014)
- React Native at SoundCloud (August 3, 2016)
- Garbage Collection in Redux Applications (January 24, 2019)
- Playback on Web at SoundCloud (May 3, 2019)
- Tech Choices I Regret at Spectrum (January 16, 2019)
- Spotify Wrapped 2018 — Technical Case Study (December 18, 2018)
- Building Spotify’s New Web Player (March 25, 2019)
- (Right to Left (The Mirror World (April 15, 2019)
- web-scripts – creating NPM libraries in a snap at Spotify (July 3, 2019)
- Reimagining Design Systems at Spotify (December 16, 2019)
- HTTPS on Stack Overflow: The End of a Long Road (May 22, 2017)
- Building dark mode on Stack Overflow (March 31, 2020)
- Connect: behind the front-end experience (June 19, 2017)
- A new approach to mocking GraphQL data: how we power React component tests and examples at Stripe (December 11, 2018)
- Designing accessible color systems (October 15, 2019)
- To design and develop an interactive globe (September 1, 2020)
- Migrating millions of lines of code to TypeScript (May 20, 2022)
- 10 lessons learned building SumUp’s design system (August 15, 2019)
- Delightful search: more than meets the eye (May 5, 2017)
- Why we switched from Yarn to pnpm (June 9, 2020)
- What we learnt from our mistakes in 2016 (December 18, 2016)
- Revisiting the rendering tier (April 4, 2019)
- Migrating the Guardian website to React (December 8, 2019)
- Rebuilding the Guest List Manager with React + MobX at The Knot (June 19, 2017)
- React Native @ The Knot (February 8, 2019)
- React Native @ The Knot: A Designer’s Perspective (February 13, 2019)
- The Technology Behind the NYTimes.com Redesign (January 8, 2014)
- Improving Article Accessibility (June 24, 2014)
- Building a Cross Platform 360-degree Video Experience at The New York Times (November 11, 2016)
- React, Relay and GraphQL: Under the Hood of The Times Website Redesign (June 30, 2017)
- GraphQL in real life (April 19, 2019)
- How We Implemented a Baseline Grid Using CSS (November 21, 2019)
- A More Accessible Web (February 25, 2021)
- React Serverside rendering : build slicker apps with better SEO ranking (September 10, 2018)
- Improving third-party web performance at The Telegraph (April 30, 2019)
- Improving Cumulative Layout Shift at Telegraph Media Group (June 14, 2021)
- Building the UI for the new The Times website (March 30, 2016)
- Building Forms Faster on Vets.gov (June 2, 2017)
- Making WSJ.com more accessible (August 3, 2016)
- Fixing HTML Video on Mobile (July 14, 2016)
- How We Adopted CSS Grid at Scale (March 1, 2018)
- Dealing with legacy code in React (May 10, 2018)
- Searching and sorting text with diacritical marks in JavaScript (August 29, 2018)
- A Tinder Progressive Web App Performance Case Study (December 24, 2017)
- Building Tinder Online (February 9, 2018)
- Our approach to CSS and how we chose it (publication date is unknown)
- Understanding why our build got 15x slower with Webpack 5 (publication date is unknown)
- TinyMCE is going mobile (March 31, 2017)
- Benefits of gradual strong typing in JavaScript (January 25, 2019)
- A Tokopedia Mobile Web Performance Case Study (May 22, 2020)
- How focusing on web performance improved Tokopedia's click-through rate by 35% (October 13, 2020)
- A React And Preact Progressive Web App Performance Case Study: Treebo (September 13, 2017)
- Redux Middlewares — An approach to cancel redux actions (May 4, 2018)
- How do we design for an operations heavy product? (May 31, 2018)
- Iconography for Treebo (August 13, 2018)
- Improving User Experience with AMP⚡- A Treebo Case Study (March 16, 2019)
- A Tale of Brotli Compression (January 20, 2020)
- GraphQL at Treebo (October 23, 2020)
- Designing for RTL platforms - A flipped layout (April 27, 2015)
- Risk-free Migration From Assetic to Webpack (May 28, 2015)
- Speeding up webpack performance with parallel builds (December 15, 2015)
- Large Scale CSS Refactoring at trivago (February 2, 2016)
- Dropping IE8 Support: Consequences for JavaScript (June 1, 2016)
- Thoughts on Atom Building in the Pattern Library (June 16, 2016)
- An Inline SVG Icon System For Our Hotel Search Application (September 5, 2016)
- CSS done right - Post RTLCSS (July 7, 2017)
- Accessibility at trivago (September 26, 2017)
- trivago just made filtering faster and more accessible, but why and how? (December 22, 2017)
- Melody - the sound of JavaScript for our Hotel Search (June 28, 2018)
- Building fast and reliable web applications (October 12, 2018)
- Presenting babel-plugin-cloudinary (April 2, 2019)
- trivago Magazine's Journey to Server-Side Rendering (January 29, 2020)
- The First Prettier Plugin For Twig is Here (March 10, 2020)
- Exploring the Page Visibility API for Detecting Page Background State (November 17, 2020)
- Rethinking the Next-gen Analytics Web App at trivago (February 9, 2021)
- Designing Marketing Emails via predefined Modules in Salesforce Email Studio (April 19, 2021)
- WARP - A Web Application Rewrite Project (May 16, 2022)
- 3 Things We Learned When Switching to TypeScript (August 1, 2022)
- End-to-end tests retry strategies (September 27, 2023)
- Moving things out of critical rendering path (February 19, 2016)
- The Road to Webpack (April 29, 2016)
- Flow and TypeScript (September 7, 2017)
- Using srcset and sizes to make responsive HTML5 images (March 5, 2018)
- A Big New Beautiful Future for the Web at Tumblr (April 5, 2018)
- How we wrote our own Service Worker (February 1, 2019)
- We’re making Tumblr more accessible! (January 17, 2019)
- Improving Chat Rendering Performance (August 8, 2016)
- Investigating React Native (April 25, 2017)
- Beyond Purple (December 3, 2019)
- View Source: Twitter.com (January 1, 2017)
- How we built Twitter Lite (April 6, 2017)
- Infinite List and React (April 9, 2017)
- Twitter Lite and High Performance React Progressive Web Apps at Scale (April 11, 2017)
- The Twitter Lite team about their use of Node.js (April 12, 2017)
- Redux modules and code-splitting (February 02, 2018)
- How using component-based design helps us build faster (July 16, 2019)
- Powering UberEATS with React Native and Uber Engineering (March 28, 2017)
- Building m.uber: Engineering a High-Performance Web App for the Global Market (June 27, 2017)
- Javascript @ Uber (July 10, 2017)
- Building a More Seamless Web Booking Flow for Uber (July 25, 2019)
- Best Practices for Unit Testing in React Version 16 (August 29, 2019)
- Counting Calories: How We Improved the Performance and Developer Experience of UberEats.com (February 12, 2020)
- How a Fixed-Width Button Can Get Your Company Trending on Reddit for All the Wrong Reasons: A Front-End Developer Tale (April 11, 2016)
- React Native: A retrospective from the mobile-engineering team at Udacity (July 3, 2018)
- Udacity’s Front-End Tech Stack (July 18, 2016)
- WebAssembly is here! (August 15, 2018)
- WebAssembly Load Times and Performance (September 17, 2018)
- How we gradually migrated to TypeScript at Unsplash (March 14, 2018)
- How we made the Vercel Dashboard twice as fast (August 9, 2022)
- Designing the Vercel virtual product tour (June 2, 2023)
- Design Engineering at Vercel (March 29, 2024)
- How Vercel adopted microfrontends (October 22, 2024)
- GraphQL: A Retrospective (November 28, 2018)
- React Native at WalmartLabs (December 19, 2016)
- Cutting Dev Time in Half With Invalid User Input Prevention (October 25, 2017)
- Migrating Angular 1.x apps to React — The Hybrid Way! (November 15, 2017)
- Migrating Large Enterprise to NodeJS (December 9, 2017)
- Primer on Front End Automation (July 27, 2018)
- Lazy Loading Images with IntersectionObserver (September 10, 2018)
- Midway: Walmart’s mocking journey… (October 5, 2018)
- Infinite Scroll’ing the right way (April 2, 2019)
- Delivering ReactJS applications at scale (August 26, 2019)
- Turbocharging Walmart.com (April 9, 2020)
- Differential Serving — Food for latest browsers (June 23, 2020)
- Creative Techniques for Loading Web Pages Faster (January 17, 2012)
- Investigating a performance improvement (June 2, 2017)
- Improving time-to-logo performance with preload links (June 7, 2017)
- Beacons (August 16, 2017)
- Measuring Wikipedia page load times (January 9, 2018)
- mustache.js replaced with JavaScript template literals in Extension:Popups (April 3, 2018)
- Extension:Popups (Page Previews) front-end tooling (April 19, 2018)
- Mobile web performance: the importance of the device (June 22, 2018)
- Why performance matters (December 12, 2018)
- Migrating code from MediaWiki's ResourceLoader to Webpack (March 13 2019)
- Evaluating Element Timing for Images (April 10, 2019)
- Performance perception: how satisfied are Wikipedia users? (May 29, 2019)
- Performance perception: the effect of late-loading banners (June 13, 2019)
- Performance perception: correlation to RUM metrics (June 17, 2019)
- Tracking down slow event handlers with Event Timing (June 19, 2019)
- Wikipedia's JavaScript initialisation on a budget (Septemper 18, 2019)
- Measuring Long Tasks and First Input Delay (December 21, 2019)
- Analyzing Wikipedia's Search Performance (April 5, 2021)
- 300ms Faster: Reducing Wikipedia's Total Blocking Time (May 21, 2023)
- jQuery Promises: The answer to PostMessage's asynchrony (June 17, 2013)
- How We Made The Animated A/B Testing Guide (July 8, 2013)
- Getting 60 FPS using Chrome devtools (July 29, 2013)
- Overcoming the Challenges of Performance Testing Single-page Apps (January 29, 2015)
- Testing AngularJS Apps End to End Using Protractor (February 13, 2015)
- A layout trick (April 4, 2016)
- Speeding Up VWO (September 17, 2016)
- Migrating towards Yarn and Webpack (October 4, 2017)
- Why we've removed Inheritance/Extend from SASS & you should do the same! (November 30, 2017)
- Automated Heatmap Verification E2E using Selenium and Canvas (April 3, 2018)
- Taking CSS To Scale: A Pragmatic Approach (July 13, 2016)
- Building a React Native App for 80 Million Users (October 1, 2016)
- The Story of Making Wix Accessible (December 14, 2017)
- Improving load time for 100 million websites (June 26, 2018)
- Trim the Fat From Your Bundles Using Webpack Analyzer & React Lazy/Suspense (September 2, 2019)
- How Wix improved website performance by evolving their infrastructure (March 10, 2021)
- When life gives you lemons, write better error messages (September 12, 2022)
- Whoa! That Embedded Web View Looks Hot in Your iOS App! (November 7, 2013)
- CSS in the Age of React: How We Traded the Cascade for Consistency (March 5, 2018)
- Organizing and Securing Third-Party CDN Assets at Yelp (November 20, 2019)
- Server Side Rendering at Scale (February 22, 2022)
- Migrating from Styleguidist to Storybook (July 6, 2022)
- Writing Emails Using React (July 20, 2022)
- Gondola: an internal PaaS architecture for frontend app deployment (March 3, 2023)
- Progressive Conversion of TypeScript Namespaces to Modules (September 23, 2019)
- Semantic Colors for Designers and Developers: part 1, part 2 and part 3 (February 12, 2020)
- How we use OpenAPI / Swagger for the YNAB API (March 16, 2020)
- Page Weight Matters (December 21, 2012)
- Polymer @ YouTube (August 22, 2017)
- A Conspiracy To Kill IE6 (May 1, 2019)
- Building a Better Web - Part 1: A faster YouTube on web (October 20, 2022)
- Visualizing money: how we explained a complex financial product using animation (September 25, 2018)
- Why & How Words With Friends Is Adopting React Native (September 17, 2018)
- React Native Stability Monitoring (May 14, 2019)
- Building a large-scale design system: How we created a design system for the U.S. government (October 3, 2017)
- From dark to light and back again (November 8, 2018)
- How we used esbuild to reduce our browser extension build times by 90% (May 30, 2024)
- PWA Stats
- Web Performance Optimization Stats
- Production Web Apps Performance Study Q4/16 - Q1/17 (January 21, 2017)
- Case study: improving a popular library’s size for webpack users (June 23, 2017)
- Case study: analyzing the Walmart site performance (April 27, 2018)
- Web Components for Enterprise (July 2019): part 1 and part 2
- 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 (June 28, 2020)
- Building an accessible emoji picker (July 1, 2020)
- How ZDF created a video PWA with offline and dark mode (October 7, 2020)
- NDTV achieved a 55% improvement in LCP by optimizing for Core Web Vitals (October 27, 2020)
- Rakuten 24’s investment in PWA increases user retention by 450% (November 17, 2020)
- JD.ID improves their mobile conversion rate by 53% with caching strategies, installation, and push notifications (November 24, 2020)
- PWA users are 2.5x more likely to purchase Gravit Designer PRO (December 8, 2020)
- Clipchamp's video editor PWA installs see a 97% monthly growth (December 8, 2020)
- How Zalando reduced performance feedback time from 1 day to 15 minutes with Lighthouse CI (April 13, 2021)
- Mainline Menswear implements PWA and sees a 55% conversion rate uplift (April 20, 2021)
- How Swappie increased mobile revenue by 42% by focusing on Core Web Vitals (September 15, 2021)
- How Terra improved user engagement thanks to Dark Mode (December 18, 2021)
- Принципы разработки Амплифера (2019)
- Как Амплифер использует Logux — инструмент для связи клиента и сервера (5 марта 2020)
- Как мы строим веб-платформу в Авиасейлс (4 ноября 2021)
- Фронтенд в Avito (13 декабря 2015)
- Фронтенд для миллионов (24 июня 2017)
- Дизайн-платформа в Avito (8 апреля 2017)
- Скриншоты как сервис (7 марта 2018)
- Unit-тестирование скриншотами: преодолеваем звуковой барьер (14 марта 2018)
- Масштабируемая архитектура фронтенда (7 апреля 2018)
- Каталог компонентов: переосмысление (19 мая 2018)
- Avito Online Frontend: Infrastructure (11 декабря 2018)
- Avito Online Frontend: Performance (18 декабря 2018)
- Жесть для Jest (17 августа 2019)
- Как мы нарисовали на карте несколько тысяч интерактивных объектов без вреда для перформанса (29 июля 2020)
- Webpack в дикой природе (20 ноября 2020)
- Полный цикл тестирования React-приложений (14 июля 2019)
- Многоязычный Badoo: «трудности перевода» (22 мая 2014)
- Специфика верстки мультиязычных веб-приложений (26 марта 2015)
- Как собрать статистику с веб-сайта и не набить себе шишек (29 марта 2017)
- Работаем с API по-взрослому (14 апреля 2017)
- Покрываем A/B-тесты UI-тестами. Как не запутаться в собственном коде (26 декабря 2018)
- Sketch + Node.js: генерируем иконки для множества платформ и брендов. Часть 1 (27 февраля 2019) и часть 2 (12 марта 2019)
- Локализация приложений: как мы подружили перевод и разработку (23 января 2020)
- Дизайн-токены способны на большее: создаем единый источник информации о компонентах UI (12 марта 2020)
- Как перенести на TypeScript большую кодовую базу React UI-компонентов (9 сентября 2020)
- Микрофронтенды: разделяй и властвуй (14 апреля 2021)
- Опыт перевода большого проекта с Flow на TypeScript (1 августа 2019)
- Разработка сторонних библиотек (22 мая 2017)
- Методы борьбы с legacy-кодом на примере GitLab (10 декабря 2019)
- Нянчим проект на React-redux с пелёнок (21 сентября 2016)
- Качество кода фронтенда в HH (4 февраля 2019)
- Как мы пилили серверный рендеринг и что из этого вышло (28 марта 2019)
- Перфоманс фронтенда как современное искусство: графики, код, кулстори (17 сентября 2020)
- «Продам гараж»: фронт и реклама в hh.ru (14 апреля 2021)
- Обновляем Angular до 6-ой версии в проекте без использования CLI (16 мая 2018)
- Как организовать собственный репозиторий модулей Node.js с блэкджеком и версионностью (25 июля 2018)
- Как разделить фронтенд и бэкенд, сохранив взаимопонимание (11 апреля 2019)
- От библиотеки компонентов к дизайн-системе (23 июня 2020)
- Ленивая подгрузка переводов с Angular (22 июля 2020)
- Автоматизируем локализацию макетов в Figma (29 декабря 2020)
- Пошаговая инструкция: как с Node.js организовать иконки из Figma в проекте (30 декабря 2022)
- Разработка собственного решения: риски и ответственность (26 ноября 2015)
- Frontend: Разработка и поддержка (6 сентября 2016)
- Архитектура фронтенда крупного проекта, как она есть (19 апреля 2018)
- WebAuthn в реальной жизни: запись доклада (27 ноября 2019), статья (20 февраля 2020)
- Кастомизация компонентов Ant Design и оптимизация бандла (11 декабря 2020)
- Адаптивный layout — как переверстать весь проект, не перевёрстывая его (24 сентября 2021)
- Как Microsoft To-Do использует React (18 июня 2018)
- Как мы учились рисовать тексты на Canvas (3 июля 2019)
- Как мы боролись за байты на фронтенде. Усмиряем прожорливый виджет рисования и помогаем iPad его переварить (6 июля 2021)
- Выбранный UI-фреймворк – вред. Архитектурные требования – профит (20 июля 2017)
- Микросервисный фронтенд — современный подход к разделению фронта (21 августа 2018)
- 9 лет в монолите на Node.JS (9 июля 2019)
- Как мигрировать с mocha на jest в 14 простых шагов — и зачем (31 января 2020)
- Как мы разогнали мобильную Lenta.ru до скорости света (31 марта 2016)
- Проектирование дизайн-системы Рамблера (18 июня 2018)
- Опыт Rambler Group: как мы начали полностью контролировать формирование и поведение фронтовых React компонентов (12 июля 2018)
- Apollo: 9 месяцев — полет нормальный (27 июля 2018)
- Способы синхронизации вкладок браузера (7 сентября 2018)
- Маршрутизация в большом приложении на React (27 сентября 2018)
- Разработка Rich Text Editor: проблемы и решения (5 марта 2018)
- Как масштабировать сложный Single Page Application (5 июня 2017)
- Переход с AngularJS на Angular (февраль 2018): цели, планы и правила переноса элементов, проблемы и решения гибридного режима, жизнь после AngularJS
- От Skype до WebRTC: как мы организовали видеосвязь через веб (3 апреля 2019)
- Как мы подружили SCSS с CSS Variables на примере c темизацией UI Kit (9 июля 2019)
- Как в Sports.ru писали свой WYSIWYG-редактор (13 марта 2020)
- Как мы разрабатываем новый фронтенд Tinkoff.ru (23 июня 2016)
- Создание Tinkoff Design System. Первые шаги (18 апреля 2017)
- Создание Tinkoff Design System. UI Kit, версионирование и витрина компонентов (9 октября 2017)
- Как организовать работу над библиотекой общих компонентов (25 сентября 2019)
- WARNING: sanitizing HTML stripped some content и как с ним правильно бороться (27 сентября 2019)
- Как заопенсорсить npm-пакет с нормальным деплоем, CI и демо (без потери радости к жизни) (30 сентября 2019)
- Компоненты-агностики в Angular (25 октября 2019)
- «Шакал»: сжимаем фронтенд (7 ноября 2019)
- Как мы распилили монолит: часть 1, часть 2, часть 3, часть 4 (август–декабрь 2020)
- Чем плох JavaScript в большом проекте? С какими проблемами мы столкнулись и как их решали (16 февраля 2016)
- Как отрефакторить 2 500 000 строк кода и не сойти с ума (5 июня 2017)
- Два года с Dart: о том, как мы пишем на языке, который ежегодно «хоронят» (15 июня 2017)
- DIY: Как мы делали «живое» расписание для Codefest X (18 апреля 2019)
- 10 верстальщиков на 30 команд. Вы рехнулись? (21 мая 2019)
- Как настроить веб-аналитику на AMP страницах (26 июня 2019)
- Предъявите паспорт (18 августа 2017)
- БЭМ + React: гибкая архитектура дизайн-системы (23 октября 2017)
- Изоморфное приложение React JS + Spring Boot (27 октября 2017)
- Атомарные SPA (7 апреля 2018)
- Тёмная сторона дизайн-системы и что с ней делать (16 марта 2020)
- React со скоростью света: не совсем обычный серверный рендеринг (2 июня 2017)
- Как оседлать радугу: история создания тёмной темы (29 апреля 2019)
- Баги, которые вы никогда не встретите (26 ноября 2019)
- Бенчмарки VKUI и других ребят из UI-библиотек (26 мая 2021)
- Додо Пицца: собственная касса на веб-технологиях (14 октября 2019)
- Лошадь сдохла – слезь: переход с tslint на eslint (29 октября 2019)
- Опыт интеграции веб-компонентов на сайт Леруа Мерлен (18 февраля 2020)
- Веб-пуш уведомления в Медузе (10 декабря 2015)
- AMP, Instant Articles, Instant View, whut? (23 ноября 2016)
- Как использовать кастомные шрифты в вебе и не сойти с ума (1 декабря 2016)
- Подкасты «Медузы» (21 сентября 2017)
- Как техотдел «Медузы» решил оптимизировать картинки — а в процессе переделал сайт, админку и подход к интерфейсу (13 июля 2020)
- Архитектура и платформа проекта Одноклассники (21 марта 2011)
- Как мы оптимизировали социальную кнопку (26 августа 2013)
- Новый фронтенд Одноклассников: запуск React в Java. Часть 1 и часть 2 (январь–февраль 2020)
- За закрытой дверью фронтенда Единой фронтальной системы (ЕФС) (7 апреля 2017)
- Redux как сердце архитектуры фронтенда Единой фронтальной системы (4 мая 2017)
- Работа с периферией из JavaScript: от теории к практике (15 июня 2017)
- Как работают приложения Сбербанк Онлайн: Workflow API и фрэймворки (18 апреля 2018)
- Хороший ли выбор Svelte для реализации виджета? (28 мая 2020)
- Frontend в Sportmaster Lab (4 декабря 2020)
- Интерфейсы для тех, кто еще не читает. Принципы проектирования детского UX-UI (24 августа 2020)
- Единый UI-кит и синхронизация дизайна в Учи.ру. Часть 1 (20 февраля 2021)
- Как мы ускоряли комментарии Хабра (25 ноября 2021)
- Микросервисный фронтенд (7 ноября 2018)
- Как разрабатывать сотни A/B-экспериментов: доклад, текстовая версия (28 мая 2019)
- Внедряем Sign in with Apple — систему авторизации от Apple (8 ноября 2019)
- Micro-frontends. Асинхронный подход к мультикомандной разработке (28 августа 2020)
- Время менять шапки: ускорение мобильной поисковой выдачи Циан (11 января 2021)
- Прототипирование на продакшн-технологиях (26 октября 2017)
- Почему Node.js в качестве основы фронтенда – это круто (31 июля 2017)
- Создание NPM-модуля Яндекс.Кассы под Node.js — опыт Lodoss Team (1 февраля 2018)
- Фронтенд как у сына маминой подруги (26 апреля 2018)
- Реактивный фронтенд. История о том, как мы снова всё переписали (15 июня 2018)
- Jenkins на службе фронтенд-разработки (22 февраля 2018)
- Обзор архитектуры фронтенда ЮMoney (15 декабря 2020)
- Как инкрементальные обновления влияют на скорость загрузки. Опыт Яндекс.Почты (6 ноября 2014)
- Accessibility. Как мы делаем Яндекс доступным людям с ограниченными возможностями и почему считаем это важным (21 мая 2015)
- Лекция Виталия Харисова «10k» про лёгкую версию поиска для медленных соединений и способы оптимизации кода, позволяющие уложиться в 10 килобайт (22 апреля 2017)
- Как создавалась карта с голосами болельщиков для Олимпиады (20 августа 2017)
- Как мы делали «нарратив» – новый формат публикаций в Яндекс.Дзене (16 февраля 2018)
- React в Яндекс Поиске. Новая архитектура фронтенда СЕРПа (27 октября 2018)
- Бэкенд для фронтенда, или как в Яндекс.Маркете создают API без костылей (1 ноября 2018)
- React & БЭМ – официальная коллаборация. Часть историческая (5 февраля 2019)
- Как создать тёмную тему и не навредить. Опыт команды Яндекс.Почты (9 апреля 2019)
- «Под капотом» Турбо-страниц: архитектура технологии быстрой загрузки веб-страниц (17 июля 2019)
- От идеи до релиза. Детальный опыт фронтенда Маркета (22 июля 2019)
- Разработка в монорепозитории (3 октября 2019)
- Как мы внедряли WebAssembly в Яндекс.Картах и почему оставили JavaScript (19 ноября 2019)
- Как устроено тестирование фронтенда в Яндекс.Маркете и почему мы отказываемся от еженедельных релизов (10 декабря 2019)
- Как переписать фронтенд нагруженного проекта и не потерять главного (3 февраля 2020)
- Минифицируем приватные поля в TypeScript (13 июня 2020)
- Технические предпочтения пользователей с нарушениями зрения в 2020 году (18 августа 2020)
- Как и почему мы переехали с собственного npm-репозитория на Verdaccio (17 ноября 2020)
- Веб-тренажёр Яндекс.Практикума. Как всё устроено (27 ноября 2020)
- TARS, сделай уровень frontend-рутины 0% (26 марта 2015)
- Тестируем вёрстку правильно (18 февраля 2016)
- Этажи: 3D-навигация на WebGL в 2gis.ru (22 апреля 2016)
- Дели — сокращай, или как мы делали мобильный 2ГИС Онлайн (20 июля 2017)
- Справа налево. Что такое dir=rtl и как приручить арабский язык (10 мая 2018)
- Справа налево. Как перевернуть интерфейс сайта под RTL (10 июля 2018)
- Быстрая генерализация маркеров на WebGL-карте (6 марта 2019)
- 3D-аркада в браузере: как мы сделали игру на React + Redux (23 апреля 2020)