<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://web.dev/</id>
  <title>Harleen Batra on web.dev</title>
  <updated>2026-04-15T23:21:06Z</updated>
  <author>
    <name>Harleen Batra</name>
  </author>
  <link href="https://web.dev/authors/hbatra/feed.xml" rel="self"/>
  <link href="https://web.dev/"/>
  <icon>https://web-dev.imgix.net/image/admin/msXgnzpR066rwvDz772V.jpg?auto=format</icon>
  <logo>https://web.dev/images/shared/rss-banner.png</logo>
  <subtitle>Harleen is a Developer Marketing Manager</subtitle>
  
  
  <entry>
    <title>How Truebil made the web its channel of growth</title>
    <link href="https://web.dev/truebil-lite/"/>
    <updated>2019-08-16T00:00:00Z</updated>
    <id>https://web.dev/truebil-lite/</id>
    <content type="html" mode="escaped">&lt;h2 id=&quot;about&quot;&gt;About &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#about&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Founded in 2015, Truebil is an Indian online marketplace that sells 100% certified used cars. With over 1.4 million monthly active users, it&#39;s a one-stop solution that includes title transfer, insurance, loans, and service warranties. Prospective customers can see individual product pages with images and detailed inspection reports and get vehicle evaluations with the site&#39;s &amp;quot;Compare&amp;quot; and &amp;quot;Truescore&amp;quot; features. Truebil differentiates its product with rich features, including personalized recommendations based on machine learning, an add-to-favorites feature, a share-a-car feature, and more.&lt;/p&gt;
&lt;h2 id=&quot;challenge&quot;&gt;Challenge &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#challenge&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Truebil is a lean startup with low-frequency, high-value transactions, so it was critical to choose the right platform to prioritize and invest in.&lt;/p&gt;
&lt;p&gt;Truebil identified mobile as their target platform, and they chose the web for their first app, &lt;a href=&quot;https://m.truebil.com/&quot; rel=&quot;noopener&quot;&gt;Truebil Lite&lt;/a&gt;, because of the web&#39;s easy discovery and low friction. Web technology provides lower development costs, less data and memory usage, and significantly lower customer acquisition costs than building an Android/iOS app. And by building a progressive web app (PWA), Truebil could get all the perks of the web &lt;em&gt;and&lt;/em&gt; the benefits of iOS/Android.&lt;/p&gt;
&lt;h2 id=&quot;solution&quot;&gt;Solution &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#solution&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An in-house team took four months to develop Truebil Lite using React, Django, and Preact (for production migration). They set clear guiding principles for the web app based on user goals. The experience had to be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fast&lt;/strong&gt; on first load and subsequent navigations,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliable&lt;/strong&gt;, independent of the user&#39;s network or device constraints, and&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Engaging&lt;/strong&gt;, especially for small mobile screens, so users would want to return to it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;optimize-for-fast-first-load-and-navigations&quot;&gt;Optimize for fast first load and navigations &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#optimize-for-fast-first-load-and-navigations&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Using &lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/overview/&quot; rel=&quot;noopener&quot;&gt;Lighthouse&lt;/a&gt; to guide performance optimizations, the team adopted a performance-first culture while implementing new features. Truebil was able to significantly improve user experience by prioritizing the &lt;a href=&quot;https://web.dev/fcp/&quot;&gt;First Contentful Paint&lt;/a&gt; and &lt;a href=&quot;https://web.dev/tti/&quot;&gt;Time to Interactive (TTI)&lt;/a&gt; metrics and optimizing for fast first loads, repeat visits, and smooth navigation. The team achieved those results by setting performance budgets and using a variety of techniques to achieve them.&lt;/p&gt;
&lt;h4 id=&quot;set-performance-budgets&quot;&gt;Set performance budgets &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#set-performance-budgets&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;With a performance-first mindset, the Truebil team chose to architect their experience as a single page app with server-side rendering for first load and client-side rendering for subsequent loads. Keeping web apps with client side rendering performant can be difficult, so Truebil set very strict &lt;a href=&quot;https://web.dev/fast#set-performance-budgets&quot;&gt;performance budgets&lt;/a&gt; to ensure they don&#39;t compromise on speed, especially as they add more features.&lt;/p&gt;
&lt;p&gt;The team set strict milestone-based budgets for TTI with the goal of keeping it below five seconds. To meet that goal they manually ensured no build would exceed a 250 KB JavaScript bundle size, kept a constant check on image sizes, and continually tracked the app&#39;s Lighthouse performance score.&lt;/p&gt;
&lt;h4 id=&quot;optimize-javascript-bundles&quot;&gt;Optimize JavaScript bundles &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#optimize-javascript-bundles&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The team started with the basics by using the &lt;a href=&quot;https://web.dev/apply-instant-loading-with-prpl&quot;&gt;PRPL pattern&lt;/a&gt; to precache and optimize JavaScript payloads and by moving to HTTP/2 to serve critical JavaScript bundles.&lt;/p&gt;
&lt;p&gt;To lazy load non-critical resources, they used their framework-level lazy loading components to load below-the-fold fragments.&lt;/p&gt;
&lt;p&gt;To remove any JavaScript bundle bottlenecks, the team &lt;a href=&quot;https://web.dev/reduce-javascript-payloads-with-code-splitting&quot;&gt;reduced payloads via code splitting&lt;/a&gt;. They used component- and route-based chunking to reduce main bundle size and &lt;strong&gt;improve their loading time by 44%,&lt;/strong&gt; with TTI falling from 6 seconds to about 5 seconds and &lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/&quot; rel=&quot;noopener&quot;&gt;First Meaningful Paint (FMP)&lt;/a&gt; from 4.1 seconds to 3.6 seconds.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Screenshots of Chrome DevTools showing Truebil Lite&amp;#x27;s build size before and after code splitting.&quot; decoding=&quot;async&quot; height=&quot;350&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
  &lt;figcaption&gt;Impact of reducing chunk size.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h4 id=&quot;inline-critical-css&quot;&gt;Inline critical CSS &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#inline-critical-css&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;To further improve FMP, the team used Lighthouse to find opportunities for and validate the impact of performance optimizations. Lighthouse indicated that reducing render blocking CSS would have the biggest effect, so Truebil inlined all critical CSS and &lt;a href=&quot;https://web.dev/defer-non-critical-css&quot;&gt;deferred non-critical CSS&lt;/a&gt;. This technique &lt;strong&gt;reduced FMP by around 2 seconds&lt;/strong&gt;.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Screenshots of Chrome DevTools showing Truebil Lite&amp;#x27;s time to First Meaningful Paint before and after inlining CSS.&quot; decoding=&quot;async&quot; height=&quot;496&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
  &lt;figcaption&gt;Impact of inlining critical CSS.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h4 id=&quot;avoid-multiple,-costly-round-trips-to-any-origin&quot;&gt;Avoid multiple, costly round trips to any origin &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#avoid-multiple,-costly-round-trips-to-any-origin&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;To mitigate overhead from DNS and TLS, Truebil used &lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/&quot; rel=&quot;noopener&quot;&gt;&lt;code&gt;&amp;lt;link rel=&amp;quot;preconnect&amp;quot;&amp;gt;&lt;/code&gt;&lt;/a&gt; and &lt;code&gt;&amp;lt;link rel=&amp;quot;dns-prefetch&amp;quot;&amp;gt;&lt;/code&gt;. This approach causes the browser to complete the TLS handshake as soon as possible on page load and pre-resolve cross-origin domain names, allowing for a secure, snappy user experience.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Screenshots of Chrome DevTools showing the effect of rel=preconnect.&quot; decoding=&quot;async&quot; height=&quot;350&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
  &lt;figcaption&gt;Impact of adding &lt;code&gt;&amp;#60;link rel=preconnect&amp;#62;&lt;/code&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h4 id=&quot;dynamically-prefetch-the-next-page&quot;&gt;Dynamically prefetch the next page &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#dynamically-prefetch-the-next-page&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;By analyzing their data, the team identified the most common user journeys that they could optimize for. In these cases, the app dynamically downloads the next page resource by using &lt;code&gt;&amp;lt;link rel=prefetch&amp;gt;&lt;/code&gt; to ensure smooth navigation for users. While the team manually identifies the links to prefetch, they use webpack to bundle the JS for those links.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;Screenshots of the Truebil Lit app and Chrome DevTools showing that network requests aren&amp;#x27;t needed on common navigations because the assets have already been prefetched.&quot; decoding=&quot;async&quot; height=&quot;1006&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
  &lt;figcaption&gt;The effect of prefetching assets for common user journeys.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h4 id=&quot;optimize-images-and-fonts&quot;&gt;Optimize images and fonts &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#optimize-images-and-fonts&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Images are a critical part of Truebil&#39;s product experience and credibility, with each product listing including up to 40 pictures. To ensure that images do not block page load, the team chose to &lt;a href=&quot;https://web.dev/image-cdns&quot;&gt;serve all their resources from a CDN&lt;/a&gt; and use &lt;a href=&quot;https://imagemagick.org/index.php&quot; rel=&quot;noopener&quot;&gt;imagemagick&lt;/a&gt; for image optimization. They also Gzipped all compressible resources, including images, JavaScript, and CSS, to further cut down load time.&lt;/p&gt;
&lt;p&gt;To &lt;a href=&quot;https://web.dev/avoid-invisible-text&quot;&gt;avoid a flash of invisible text&lt;/a&gt; while keeping load time as low as possible, Truebil set up their CSS to use system fonts as a fallback until external fonts have loaded.&lt;/p&gt;
&lt;h4 id=&quot;further-optimizations&quot;&gt;Further optimizations &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#further-optimizations&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;When the app was ready, the team wanted to further reduce the vendor bundle size and JavaScript execution time, so they switched their React app to Preact in production. (Learn more in the &lt;a href=&quot;https://web.dev/react&quot;&gt;React&lt;/a&gt; collection.) This approach helped them reduce the vendor bundle size from 82.3 KB to 51.2 KB.&lt;/p&gt;
&lt;h3 id=&quot;build-in-reliability&quot;&gt;Build in reliability &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#build-in-reliability&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;With a focus on the Indian market, a vast majority of Truebil&#39;s users access their product on patchy networks that sometimes fall into bandwidths as low as 2G. So building a resilient experience was critical not only to improving performance under constrained network conditions but also to delivering a product that their users could rely on—one that &lt;em&gt;always&lt;/em&gt; works.&lt;/p&gt;
&lt;h4 id=&quot;a-hybrid-caching-strategy-for-reliable-loading&quot;&gt;A hybrid caching strategy for reliable loading &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#a-hybrid-caching-strategy-for-reliable-loading&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The interactivity and rate of change for Truebil&#39;s content vary a lot. To ensure that &lt;em&gt;all&lt;/em&gt; its content is both fresh and reliable, the Truebil team implemented &lt;a href=&quot;https://web.dev/runtime-caching-with-workbox&quot;&gt;API caching&lt;/a&gt; using a combination of network-first, cache-first, and fastest-first strategies.&lt;/p&gt;
&lt;p&gt;For static pages, such as the subscriptions page, Truebil uses a cache-first strategy to go to their subscription API cache first, falling back to the network.&lt;/p&gt;
&lt;p&gt;For pages with dynamic content that rarely changes, such as their product listing or details pages, Truebil uses a network-first strategy so that the browser first checks the network for content before falling back to the API cache if the network is unavailable.&lt;/p&gt;
&lt;p&gt;And for dynamic pages that change often, such as the home, filter, search, and city pages, Truebil uses a fastest-first strategy to choose between network or cache based on whichever comes first. To ensure that content is fresh, the cache is updated whenever the network response differs from what&#39;s in the cache.&lt;/p&gt;
&lt;h4 id=&quot;service-workers-for-a-full-offline-experience&quot;&gt;Service workers for a full offline experience &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#service-workers-for-a-full-offline-experience&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Even though a large part of Truebil&#39;s content is highly dynamic—cars can be added or bought at any time—the team wanted to ensure that their users had &lt;em&gt;some&lt;/em&gt; content to engage with, even if they were going through patchy networks or were completely offline.&lt;/p&gt;
&lt;p&gt;Using &lt;a href=&quot;https://web.dev/service-workers-cache-storage/&quot;&gt;service workers&lt;/a&gt;, the team was able to cache both static data and the dynamic data that a user has already interacted with so that the user can view it offline. To make sure users know that content might change when they come back online, the team changed the UI to grayscale to indicate offline mode. Browsing product pages is a critical part of the Truebil user journey. Users who have visited the PWA at least once can browse listings and product pages that they have visited before but won&#39;t be able to see any updates to the listing or the product.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;A screenshot of the Truebil Lite app in offline mode.&quot; decoding=&quot;async&quot; height=&quot;384&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
  &lt;figcaption&gt;
    Truebil Lite in offline mode.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;improve-engagement-to-keep-users-coming-back&quot;&gt;Improve engagement to keep users coming back &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#improve-engagement-to-keep-users-coming-back&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&quot;an-engaging-first-experience&quot;&gt;An engaging first experience &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#an-engaging-first-experience&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Since most of their users come from paid channels, Truebil needed to supplement their fast loading web app with a product that surfaces highly relevant recommendations to increase conversions. While the team uses a recommendation system based on sophisticated filtering for existing users, their system doesn&#39;t work for users who log in for the first time.&lt;/p&gt;
&lt;p&gt;To avoid giving their first-time users a cold start, the team integrated a recommendation system using their digital marketing efforts. They add product details such as car model, price, and body type into an ad&#39;s destination URL through a UTM parameter, which is read by their recommendation system and reflected in the products surfaced. In case the sysme reads no such details in the URL, it falls back to popular cars, which is a combination of popular models, popular budgets, and cars that have been popular in the last few weeks or days.&lt;/p&gt;
&lt;h4 id=&quot;an-installable-web-app&quot;&gt;An installable web app &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#an-installable-web-app&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Having built a fast, full-featured web app with a compelling user experience, Truebil wanted to ensure that their users would keep coming back. They realized that making the app installable would make repeat visits much more seamless.&lt;/p&gt;
&lt;p&gt;The team implemented the &lt;a href=&quot;https://developers.google.com/web/fundamentals/app-install-banners/&quot; rel=&quot;noopener&quot;&gt;Add to Home Screen&lt;/a&gt; feature to make their product a full progressive web app (PWA). This approach allowed users to add Truebil Lite to the home screen and launch it in full-screen mode. And since they had already implemented an offline mode, the team was able to add the new feature easily.&lt;/p&gt;
&lt;p&gt;To ensure that their users weren&#39;t spammed and to increase the probability that users would install the app, the team recently updated their strategy for &lt;a href=&quot;https://developers.google.com/web/fundamentals/app-install-banners/promoting-install-mobile&quot; rel=&quot;noopener&quot;&gt;promoting PWA installation&lt;/a&gt; so that  installation prompts appear when they&#39;ll actually be useful to different kinds of users. Truebil settled on a three-part strategy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Show prompts when the user has completed an action or is idle.&lt;/li&gt;
&lt;li&gt;Show contextual prompts to mature users.&lt;/li&gt;
&lt;li&gt;Show a banner when the user has spent a set amount of time on the site.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;default-banners-on-process-completion-and-on-high-traffic-pages&quot;&gt;Default banners on process completion and on high-traffic pages &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#default-banners-on-process-completion-and-on-high-traffic-pages&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The team decided to show an installation banner when a user completes a task or is on high-traffic pages but idle (that is, not taking an action, such as scrolling or filling out a form). This approach allowed them to avoid interrupting the user&#39;s activity.&lt;/p&gt;
&lt;img alt=&quot;Screenshots of Truebil Lite&amp;#x27;s installation banner.&quot; decoding=&quot;async&quot; height=&quot;549&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
&lt;h4 id=&quot;contextual-prompts-for-mature-users&quot;&gt;Contextual prompts for mature users &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#contextual-prompts-for-mature-users&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;For users who had interacted with the app for a while, the team used highly contextual custom messages to show the value of installing the app to the home screen:&lt;/p&gt;
&lt;img alt=&quot;Screenshots of Truebil Lite&amp;#x27;s contextual installation prompts for mature users.&quot; decoding=&quot;async&quot; height=&quot;514&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
&lt;h4 id=&quot;a-custom-banner-for-time-based-prompts&quot;&gt;A custom banner for time-based prompts &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/truebil-lite/#a-custom-banner-for-time-based-prompts&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Finally, the team built in a non-intrusive banner with a notification-like design that&#39;s triggered at specific events, such as opening a listing page or after the user has spent a set amount of time spent in the app:&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;A screenshot of Truebil Lite&amp;#x27;s time-based installation prompt banner.&quot; decoding=&quot;async&quot; height=&quot;868&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 452px) 452px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&amp;w=904 904w&quot; width=&quot;452&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;Because of these improvements, Truebil&#39;s conversion and engagement rates have grown significantly with &lt;strong&gt;26% longer user sessions&lt;/strong&gt; and &lt;strong&gt;61% more conversions&lt;/strong&gt;, which is significant for their business given the high transaction value of each conversion.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;For a startup with limited resources, choosing the right platform can be critical to the success of the business. Moving to a PWA focused on speed, resilience, and engagement, enabled us to increase our revenue-to-marketing spend by &lt;strong&gt;80%&lt;/strong&gt; thanks to increased conversions and the frictionless reach of the web.&lt;/p&gt;
  &lt;cite&gt;Rakesh Raman, Co-Founder and Chief of Product &amp; Data Science at Truebil&lt;/cite&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;stats&quot;&gt;
  &lt;div class=&quot;stats__item&quot;&gt;
    &lt;p class=&quot;stats__figure&quot;&gt;44&lt;sub&gt;%&lt;/sub&gt;&lt;/p&gt;
    &lt;p&gt;Improvement in loading time&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;stats__item&quot;&gt;
    &lt;p class=&quot;stats__figure&quot;&gt;26&lt;sub&gt;%&lt;/sub&gt;&lt;/p&gt;
    &lt;p&gt;Longer user sessions&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;stats__item&quot;&gt;
    &lt;p class=&quot;stats__figure&quot;&gt;61&lt;sub&gt;%&lt;/sub&gt;&lt;/p&gt;
    &lt;p&gt;Increase in conversions&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;stats__item&quot;&gt;
    &lt;p class=&quot;stats__figure&quot;&gt;80&lt;sub&gt;%&lt;/sub&gt;&lt;/p&gt;
    &lt;p&gt;Increase in revenue-to-marketing spend&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
</content>
    <author>
      <name>Harleen Batra</name>
    </author>
  </entry>
  
  <entry>
    <title>How OpenSooq increased engagement by investing in the web</title>
    <link href="https://web.dev/opensooq-case-study/"/>
    <updated>2019-07-03T00:00:00Z</updated>
    <id>https://web.dev/opensooq-case-study/</id>
    <content type="html" mode="escaped">&lt;p&gt;Based in Amman, Jordan, &lt;a href=&quot;http://jo.opensooq.com/en&quot; rel=&quot;noopener&quot;&gt;OpenSooq&lt;/a&gt; is a mobile-first classifieds marketplace offering a wide range of products and services in 19 countries across the Middle East and North Africa.&lt;/p&gt;
&lt;h2 id=&quot;the-challenge&quot;&gt;The challenge &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/opensooq-case-study/#the-challenge&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Over 85% of OpenSooq&#39;s traffic comes from mobile devices, and that number continues to rise. Many people in the region rely on low-end devices with limited storage capacities, which creates a strong need for OpenSooq&#39;s mobile site to be as fast and light as possible. However, slow load times on OpenSooq&#39;s old mobile site were affecting customer satisfaction and led to &lt;a href=&quot;https://support.google.com/analytics/answer/1009409?hl=en--for&quot; rel=&quot;noopener&quot;&gt;bounce rates&lt;/a&gt; as high as 49% in markets like Kuwait.&lt;/p&gt;
&lt;p&gt;To serve its customers with a consistently better experience across all platforms, the company realized it needed a faster, more responsive website. So, in June 2017, OpenSooq&#39;s engineering team launched a &lt;a href=&quot;https://web.dev/discover-installable/&quot;&gt;Progressive Web App (PWA)&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;a-focus-on-performance-and-reliability&quot;&gt;A focus on performance and reliability &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/opensooq-case-study/#a-focus-on-performance-and-reliability&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;OpenSooq&#39;s three in-house developers were able to build a full-featured PWA with &lt;a href=&quot;https://reactjs.org/&quot; rel=&quot;noopener&quot;&gt;React&lt;/a&gt; and &lt;a href=&quot;https://webpack.js.org/&quot; rel=&quot;noopener&quot;&gt;webpack&lt;/a&gt; in just two and a half months.&lt;/p&gt;
&lt;p&gt;To ensure that the site would be fast and easily indexable by search engines, the team chose to implement server-side rendering. With almost 28% of their users accessing the PWA on patchy 2G or 3G networks, it was critical that users trust the experience to work, regardless of network constraints. So the team implemented an offline experience using &lt;a href=&quot;https://web.dev/service-workers-cache-storage&quot;&gt;service workers&lt;/a&gt; and a &lt;a href=&quot;https://developer.chrome.com/docs/workbox/modules/workbox-strategies/#cache-first-cache-falling-back-to-network&quot; rel=&quot;noopener&quot;&gt;cache-first-then-network strategy&lt;/a&gt;. They also used the &lt;a href=&quot;https://web.dev/apply-instant-loading-with-prpl/?hl=en&quot;&gt;PRPL pattern&lt;/a&gt; to give their users instant loading.&lt;/p&gt;
&lt;p&gt;By adopting these best practices, the team was able to cut the average page load time (&lt;a href=&quot;https://web.dev/tti/&quot;&gt;Time to Interactive&lt;/a&gt;) from 4 seconds to less than 2 seconds. And they used &lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/overview/&quot; rel=&quot;noopener&quot;&gt;Lighthouse&lt;/a&gt; to make sure the site &lt;em&gt;stayed&lt;/em&gt; that fast. Those efforts helped OpenSooq hit over 1.8 billion pageviews a month.&lt;/p&gt;
&lt;figure&gt;
  &lt;img alt=&quot;A screenshot of the Lighthouse performance metrics for the OpenSooq PWA.&quot; decoding=&quot;async&quot; height=&quot;509&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 800px) 800px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=571 571w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=650 650w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=741 741w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=845 845w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=964 964w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=1098 1098w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=1252 1252w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=1428 1428w, https://web-dev.imgix.net/image/admin/ItUJANptPfn2KooyDyq4.png?auto=format&amp;w=1600 1600w&quot; width=&quot;800&quot; /&gt;
  &lt;figcaption&gt;OpenSooq&#39;s Lighthouse performance metrics.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote&gt;
  &lt;p&gt;
    Over a quarter of our users access the OpenSooq PWA from low-mid networks, so reliability was essential for keeping those users engaged. Service workers and caching strategies helped us build the reliable user experience we needed, seamlessly.
  &lt;/p&gt;
  &lt;cite&gt;
    Amin Shoman, PWA Technical Manager, OpenSooq
  &lt;/cite&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;improving-re-engagement&quot;&gt;Improving re-engagement &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/opensooq-case-study/#improving-re-engagement&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;figure data-float=&quot;right&quot;&gt;
  &lt;img alt=&quot;A smartphone displaying OpenSooq notifications.&quot; decoding=&quot;async&quot; height=&quot;549&quot; loading=&quot;lazy&quot; sizes=&quot;(min-width: 284px) 284px, calc(100vw - 48px)&quot; src=&quot;https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&quot; srcset=&quot;https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=200 200w, https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=228 228w, https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=260 260w, https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=296 296w, https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=338 338w, https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=385 385w, https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=439 439w, https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=500 500w, https://web-dev.imgix.net/image/admin/U97z7PSx8CgKACjMnLkO.png?auto=format&amp;w=568 568w&quot; width=&quot;284&quot; /&gt;
  &lt;figcaption&gt;OpenSooq&#39;s meaningful user notifications.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Having built a performant and reliable experience, the OpenSooq team wanted to make sure their users stayed engaged with the product. To do that, they enabled users to install the &lt;a href=&quot;https://developers.google.com/web/fundamentals/app-install-banners/promoting-install-mobile&quot; rel=&quot;noopener&quot;&gt;PWA to their home screen&lt;/a&gt; and added support for &lt;a href=&quot;https://developers.google.com/web/fundamentals/push-notifications/&quot; rel=&quot;noopener&quot;&gt;meaningful notifications&lt;/a&gt;. This allowed the site to notify buyers about seller interaction on queries and sellers about ad activation and expiration.&lt;/p&gt;
&lt;p&gt;These improvements increased the monthly active users of OpenSooq&#39;s web experience by 14%. For users who installed the PWA, there was a 48% increase in the number of page visits per session and a 28% jump in average session duration. OpenSooq also saw a 25% increase in users&#39; average time on a page and a 29% drop in average bounce rates across all markets.&lt;/p&gt;
&lt;h2 id=&quot;looking-ahead&quot;&gt;Looking ahead &lt;a class=&quot;headline-link&quot; href=&quot;https://web.dev/opensooq-case-study/#looking-ahead&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After just a few weeks of effort, OpenSooq created a 23 KB, full-featured PWA that delivers a consistent experience to users across all platforms and browsers. And because it&#39;s easy to update features on the web, the team has gone PWA-first by launching and testing new features and user flows on their PWA before rolling them out to other platforms.&lt;/p&gt;
&lt;p&gt;OpenSooq is now working on adding a &lt;a href=&quot;https://developer.chrome.com/blog/app-install-banners-native/&quot; rel=&quot;noopener&quot;&gt;platform-specific install prompt&lt;/a&gt; and integrating the PWA with &lt;a href=&quot;https://amp.dev/&quot; rel=&quot;noopener&quot;&gt;accelerated mobile pages (AMP)&lt;/a&gt;. These enhancements will further speed up page loads and make the transition to the platform-specific app as seamless as possible. By building on the foundation of their initial development effort, the OpenSooq team will continue giving their users the best possible experience.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;
    The importance of developing our PWA was clear to both the leadership and technical teams. After building a modern web app and making it performant, we&#39;re excited to see the business impact on our 2.5 month investment.
  &lt;/p&gt;
  &lt;cite&gt;
    Ramzi Alqrainy, Chief Technology Officer, OpenSooq
  &lt;/cite&gt;
&lt;/blockquote&gt;
</content>
    <author>
      <name>Harleen Batra</name>
    </author>
  </entry>
</feed>
