PageSourceSearch

https://shakacode.com/blog/

html shakacode.com collected 2026-10-04 00:24:09 UTC 278,988 bytes, 390 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
1<script id="hs-script-loader" type="text/javascript" async="" defer="" src="https://js-na2.hs-scripts.com/4342163.js"></script>
1<meta http-equiv="x-ua-compatible" content="ie=edge"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><meta name="generator" content="Gatsby 5.16.1"/><meta name="theme-color" content="#663399"/><meta name="description" content="Editor&#x27;s pick" data-gatsby-head="true"/><meta property="og:title" content="Blog - Editor&#x27;s pick" data-gatsby-head="true"/><meta property="og:description" content="Editor&#x27;s pick" data-gatsby-head="true"/><meta property="og:type" content="website" data-gatsby-head="true"/><meta property="og:url" content="https://shakacode.com/blog/" data-gatsby-head="true"/><meta property="og:site_name" content="ShakaCode" data-gatsby-head="true"/><meta property="og:image" content="https://shakacode.com/shakacode-og.png" data-gatsby-head="true"/><meta name="image" content="https://shakacode.com/shakacode-og.png" data-gatsby-head="true"/><meta name="twitter:card" content="summary_large_image" data-gatsby-head="true"/><meta name="twitter:title" content="Blog - Editor&#x27;s pick" data-gatsby-head="true"/><meta name="twitter:description" content="Editor&#x27;s pick" data-gatsby-head="true"/><meta name="twitter:image" content="https://shakacode.com/shakacode-og.png" data-gatsby-head="true"/><link rel="icon" href="/favicon-32x32.png?v=f8282b9cf340b9549c7fa2ef690d0caf" type="image/png"/><link rel="manifest" href="/manifest.webmanifest" crossorigin="anonymous"/><link rel="apple-touch-icon" sizes="48x48" href="/icons/icon-48x48.png?v=f8282b9cf340b9549c7fa2ef690d0caf"/><link rel="apple-touch-icon" sizes="72x72" href="/icons/icon-72x72.png?v=f8282b9cf340b9549c7fa2ef690d0caf"/><link rel="apple-touch-icon" sizes="96x96" href="/icons/icon-96x96.png?v=f8282b9cf340b9549c7fa2ef690d0caf"/><link rel="apple-touch-icon" sizes="144x144" href="/icons/icon-144x144.png?v=f8282b9cf340b9549c7fa2ef690d0caf"/><link rel="apple-touch-icon" sizes="192x192" href="/icons/icon-192x192.png?v=f8282b9cf340b9549c7fa2ef690d0caf"/><link rel="apple-touch-icon" sizes="256x256" href="/icons/icon-256x256.png?v=f8282b9cf340b9549c7fa2ef690d0caf"/><link rel="apple-touch-icon" sizes="384x384" href="/icons/icon-384x384.png?v=f8282b9cf340b9549c7fa2ef690d0caf"/><link rel="apple-touch-icon" sizes="512x512" href="/icons/icon-512x512.png?v=f8282b9cf340b9549c7fa2ef690d0caf"/><link rel="sitemap" type="application/xml" href="/sitemap/sitemap-index.xml"/><title data-gatsby-head="true">Blog - Editor&#x27;s pick | Shakacode</title><link rel="canonical" href="https://shakacode.com/blog/" data-gatsby-head="true"/>
1<script>(function loadFontsStylesheet() {
2  function injectFontsStylesheet() {
3    if (document.getElementById("sc-google-fonts-stylesheet")) {
4      return;
5    }
6
7    var stylesheet = document.createElement("link");
8    stylesheet.id = "sc-google-fonts-stylesheet";
9    stylesheet.rel = "stylesheet";
10    stylesheet.href = "https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;700;800;900&family=Open+Sans:ital,wght@0,400;0,600;0,700;0,800;1,400&display=optional";
11    stylesheet.media = "print";
12    stylesheet.onload = function onFontsLoaded() {
13      stylesheet.media = "all";
14    };
15    document.head.appendChild(stylesheet);
16  }
17
18  // Delay font CSS injection until after the initial load to avoid first-render
19  // font swaps that can trigger measurable CLS on hero/header content.
20  function scheduleInjection() {
21    if (typeof window.requestIdleCallback === "function") {
22      window.requestIdleCallback(injectFontsStylesheet, { timeout: 2000 });
23      return;
24    }
25    window.setTimeout(injectFontsStylesheet, 200);
26  }
27
28  if (document.readyState === "complete") {
29    scheduleInjection();
30    return;
31  }
32
33  window.addEventListener("load", scheduleInjection, { once: true });
34})();</script>
34<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;700;800;900&amp;family=Open+Sans:ital,wght@0,400;0,600;0,700;0,800;1,400&amp;display=optional"/></noscript><style data-href="/styles.53ec77ec03f8dceb1193.css" data-identity="gatsby-global-css">@charset "UTF-8";code[class*=language-],pre[class*=language-]{word-wrap:normal;background:none;color:#000;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;-webkit-hyphens:none;hyphens:none;line-height:1.5;tab-size:4;text-align:left;text-shadow:0 1px #fff;white-space:pre;word-break:normal;word-spacing:normal}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{background:#b3d4fc;text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{margin:.5em 0;overflow:auto;padding:1em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{border-radius:.3em;padding:.1em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{background:hsla(0,0%,100%,.5);color:#9a6e3a}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.slick-loading .slick-list{background:#fff url(data:image/gif;base64,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) 50% no-repeat}@font-face{font-family:slick;font-style:normal;font-weight:400;src:url(data:application/vnd.ms-fontobject;base64,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);src:url(data:application/vnd.ms-fontobject;base64,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?#iefix) format("embedded-opentype"),url(data:font/woff;base64,d09GRk9UVE8AAAVkAAsAAAAAB1wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAAi4AAAKbH/pWDkZGVE0AAAM4AAAAGgAAABxt0civR0RFRgAAA1QAAAAcAAAAIAAyAARPUy8yAAADcAAAAFIAAABgUBj/rmNtYXAAAAPEAAAAUAAAAWIiC0SwaGVhZAAABBQAAAAuAAAANgABMftoaGVhAAAERAAAABwAAAAkA+UCA2htdHgAAARgAAAADgAAAA4ESgBKbWF4cAAABHAAAAAGAAAABgAFUABuYW1lAAAEeAAAANwAAAFuBSeBwnBvc3QAAAVUAAAAEAAAACAAAwABeJw9ks9vEkEUx2cpWyeUoFYgNkHi2Wt7N3rVm3cTs3UVLC4LxIWEQvi1P3i7O1tYLJDAmlgKGEhQrsajf0j7J3jYTXrQWUrMJG+++b55n5e8NwwKBhHDMLv5kxT3ATEBxKBn3qOAl9zxHgb1MAPhHQgHkyF08Gr/L8B/Eb6zWnmCJ7AJVLubQOheArXvJ1A4EXi6j4I+Zg9F0QFKvsnlBCmXeve+sFEnb/nCptdtQ4QYhVFRAT1HrF8UQK/RL/SbmUbclsvGVFXRZKDHUE38cc4qpkbAAsuwiImvro+ufcfaOIQ6szlrmjRJDaKZKnbjN3GWKIbiIzRFUfCffuxxKOL+3LDlDVvx2TdxN84qZEsnhNBa6pgm2dAsnzbLsETdsmRFxUeHV4e+I2/ptN8TyqV8T3Dt29t7EYOuajVIw2y1Wy3M86w0zg/Fz2IvawmQAUHOVrPVfLkoScVynsqsTG0MGUs4z55nh3mnOJa+li+rl9WpPIcFfDubDeaDC+fLBdYN3QADzLauGfj4B6sZmq6CCpqmtSvF0qlUl2qf5AJIUCSlTqlb7lUG+LRfGzZGzZEyBgccMu6MuqPecNDvD4Y9Kjtj4gD+DsvKVMTcMdtqtZtmkzQstQvYje7Syep0PDSAhSOeHYXYWThEF//A/0YvYV1fSQtpKU5STtrhbQ444OtpKSWJIg3pOg8cBs7maTY1EZf07aq+hjWs7IWzdCYTGhb2CtZ47x+Uhx28AAB4nGNgYGBkAIJz765vANHnCyvqYTQAWnkHswAAeJxjYGRgYOADYgkGEGBiYARCFjAG8RgABHYAN3icY2BmYmCcwMDKwMHow5jGwMDgDqW/MkgytDAwMDGwcjKAQQMDAyOQUmCAgoA01xQGB4ZExUmMD/4/YNBjvP3/NgNEDQPjbbBKBQZGADfLDgsAAHicY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQzMCQqKClOUJz0/z9YHRLv/+L7D+8V3cuHmgAHjGwM6ELUByxUMIOZCmbgAAA5LQ8XeJxjYGRgYABiO68w73h+m68M3EwMIHC+sKIeTqsyqDLeZrwN5HIwgKUB/aYJUgAAeJxjYGRgYLzNwMCgx8QAAkA2IwMqYAIAMGIB7QIAAAACAAAlACUAJQAlAAAAAFAAAAUAAHicbY49asNAEIU/2ZJDfkiRIvXapU
34FCEqpcptABUrg3ZhEiQoKVfY9UqVLlGDlADpAT5e16IUWysMz3hjfzBrjjjQT/EjKpCy+4YhN5yZoxcirPe+SMWz4jr6S+5UzSa3VuwpTnBfc8RF7yxDZyKs9r5IxHPiKv1P9iZqDnyAvMQ39UecbScVb/gJO03Xk4CFom3XYK1clhMdQUlKo7/d9NF13RkIdfy+MV7TSe2sl11tRFaXYmJKpWTd7kdVnJ8veevZKc+n3I93t9Jnvr5n4aTVWU/0z9AI2qMkV4nGNgZkAGjAxoAAAAjgAF) format("woff"),url(data:font/ttf;base64,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) format("truetype"),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLz4=#slick) format("svg")}.slick-next,.slick-prev{border:none;cursor:pointer;display:block;font-size:0;height:20px;line-height:0;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:20px}.slick-next,.slick-next:focus,.slick-next:hover,.slick-prev,.slick-prev:focus,.slick-prev:hover{background:transparent;color:transparent;outline:none}.slick-next:focus:before,.slick-next:hover:before,.slick-prev:focus:before,.slick-prev:hover:before{opacity:1}.slick-next.slick-disabled:before,.slick-prev.slick-disabled:before{opacity:.25}.slick-next:before,.slick-prev:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#fff;font-family:slick;font-size:20px;line-height:1;opacity:.75}.slick-prev{left:-25px}[dir=rtl] .slick-prev{left:auto;right:-25px}.slick-prev:before{content:"←"}[dir=rtl] .slick-prev:before{content:"→"}.slick-next{right:-25px}[dir=rtl] .slick-next{left:-25px;right:auto}.slick-next:before{content:"→"}[dir=rtl] .slick-next:before{content:"←"}.slick-dotted.slick-slider{margin-bottom:30px}.slick-dots{bottom:-25px;display:block;list-style:none;margin:0;padding:0;position:absolute;text-align:center;width:100%}.slick-dots li{display:inline-block;margin:0 5px;padding:0;position:relative}
34.slick-dots li,.slick-dots li button{cursor:pointer;height:20px;width:20px}.slick-dots li button{background:transparent;border:0;color:transparent;display:block;font-size:0;line-height:0;outline:none;padding:5px}.slick-dots li button:focus,.slick-dots li button:hover{outline:none}.slick-dots li button:focus:before,.slick-dots li button:hover:before{opacity:1}.slick-dots li button:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#000;content:"•";font-family:slick;font-size:6px;height:20px;left:0;line-height:20px;opacity:.25;position:absolute;text-align:center;top:0;width:20px}.slick-dots li.slick-active button:before{color:#000;opacity:.75}.slick-slider{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;box-sizing:border-box;touch-action:pan-y;-webkit-user-select:none;user-select:none;-khtml-user-select:none}.slick-list,.slick-slider{display:block;position:relative}.slick-list{margin:0;overflow:hidden;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{transform:translateZ(0)}.slick-track{display:block;left:0;margin-left:auto;margin-right:auto;position:relative;top:0}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{border:1px solid transparent;display:block;height:auto}.slick-arrow.slick-hidden{display:none}</style><style data-styled="" data-styled-version="6.4.1">.idZSLk{max-width:100%;width:8px;height:8px;}/*!sc*/
35.ijOdlI{max-width:100%;width:64px;height:64px;}/*!sc*/
36data-styled.g1[id="SvgIcon__StyledSvgIcon-sc-pvlift-0"]{content:"idZSLk,ijOdlI,"}/*!sc*/
37.bHoJxm{border-radius:32px;border-color:transparent;box-shadow:none;background-color:#EE2B16;padding:10px 35px;color:#fff;font-weight:500;cursor:pointer;}/*!sc*/
38.bHoJxm:hover{color:white;background-color:#fd503d;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/
39data-styled.g4[id="Button__ButtonLink-sc-xxhl33-1"]{content:"bHoJxm,"}/*!sc*/
40.hwslQr{border-radius:32px;border-color:#B11100;border-width:2px;border-style:solid;box-shadow:none;background-color:transparent;padding:10px 35px;color:#B11100;font-weight:500;cursor:pointer;}/*!sc*/
41.hwslQr:hover{border-color:#EE2B16;}/*!sc*/
42data-styled.g7[id="Button__ButtonOutlinedLink-sc-xxhl33-4"]{content:"hwslQr,"}/*!sc*/
43.gtLCY{border-radius:32px;border-color:#B11100;border-width:2px;border-style:solid;box-shadow:none;background-color:transparent;padding:10px 35px;color:#B11100;font-weight:500;cursor:pointer;}/*!sc*/
44.gtLCY:hover{border-color:#EE2B16;}/*!sc*/
45data-styled.g8[id="Button__ButtonOutlinedGatsbyLink-sc-xxhl33-5"]{content:"gtLCY,"}/*!sc*/
46.Idquw{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;font-weight:600;box-sizing:border-box;padding:calc(20px - 2px);padding-left:40px;padding-right:32px;font-size:18px;line-height:24px;}/*!sc*/
47.Idquw>*{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;}/*!sc*/
48.Idquw svg{width:24px;height:24px;margin-left:16px;}/*!sc*/
49@media (max-width:64.25em){.Idquw{padding:calc(12px - 2px);padding-left:32px;padding-right:24px;font-size:16px;line-height:24px;}.Idquw svg{width:20px;height:20px;margin-left:16px;}}/*!sc*/
50@media (max-width:51.125em){.Idquw{padding:calc(8px - 2px);padding-left:24px;padding-right:16px;font-size:14px;line-height:24px;}.Idquw svg{width:16px;height:16px;margin-left:8px;}}/*!sc*/
51@media (max-width:38em){.Idquw{font-size:13px;line-height:16px;padding:calc(8px - 2px);padding-left:16px;padding-right:16px;}.Idquw svg{width:16px;height:16px;margin-left:8px;}}/*!sc*/
52data-styled.g10[id="GoToButton__GoToButtonStyled-sc-1abjbqg-0"]{content:"Idquw,"}/*!sc*/
53.chqLVH{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;font-weight:600;box-sizing:border-box;padding:calc(20px - 2px);padding-left:40px;padding-right:32px;font-size:18px;line-height:24px;}/*!sc*/
54.chqLVH>*{-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;}/*!sc*/
55.chqLVH svg{width:24px;height:24px;margin-left:16px;}/*!sc*/
56@media (max-width:64.25em){.chqLVH{padding:calc(12px - 2px);padding-left:32px;padding-right:24px;font-size:16px;line-height:24px;}.chqLVH svg{width:20px;height:20px;margin-left:16px;}}/*!sc*/
57@media (max-width:51.125em){.chqLVH{padding:calc(8px - 2px);padding-left:24px;padding-right:16px;font-size:14px;line-height:24px;}.chqLVH svg{width:16px;height:16px;margin-left:8px;}}/*!sc*/
58@media (max-width:38em){.chqLVH{font-size:13px;line-height:16px;padding:calc(8px - 2px);padding-left:16px;padding-right:16px;}.chqLVH svg{width:16px;height:16px;margin-left:8px;}}/*!sc*/
59data-styled.g11[id="GoToButton__GoToButtonGatsbyStyled-sc-1abjbqg-1"]{content:"chqLVH,"}/*!sc*/
60.bkbNNW{font-weight:900;}/*!sc*/
61.bkbNNW,.bkbNNW *{font-size:44px;line-height:56px;}/*!sc*/
62@media (max-width:51.125em){.bkbNNW,.bkbNNW *{font-size:26px;line-height:32px;}}/*!sc*/
63data-styled.g13[id="H1-sc-hj2kha-0"]{content:"bkbNNW,"}
63/*!sc*/
64.QTrsV{font-weight:900;}/*!sc*/
65.QTrsV,.QTrsV *{font-size:36px;line-height:48px;}/*!sc*/
66@media (max-width:51.125em){.QTrsV,.QTrsV *{font-size:26px;line-height:32px;}}/*!sc*/
67data-styled.g14[id="H2-sc-1u39ok0-0"]{content:"QTrsV,"}/*!sc*/
68.jrMOUV{font-weight:800;}/*!sc*/
69.jrMOUV,.jrMOUV *{font-size:26px;line-height:32px;}/*!sc*/
70@media (max-width:51.125em){.jrMOUV,.jrMOUV *{font-size:22px;line-height:32px;}}/*!sc*/
71data-styled.g15[id="H3-sc-1emy8q1-0"]{content:"jrMOUV,"}/*!sc*/
72.ksjnPi{font-weight:600;}/*!sc*/
73.ksjnPi,.ksjnPi *{font-size:18px;line-height:24px;}/*!sc*/
74@media (max-width:51.125em){.ksjnPi,.ksjnPi *{font-size:16px;line-height:24px;}}/*!sc*/
75data-styled.g17[id="H5-sc-1ei3sam-0"]{content:"ksjnPi,"}/*!sc*/
76.dIDHqE{font-weight:600;}/*!sc*/
77.dIDHqE,.dIDHqE *{font-size:16px;line-height:24px;}/*!sc*/
78@media (max-width:51.125em){.dIDHqE,.dIDHqE *{font-size:14px;line-height:24px;}}/*!sc*/
79data-styled.g18[id="H6-sc-1fqdyt3-0"]{content:"dIDHqE,"}/*!sc*/
80.fduduP{font-size:18px;line-height:32px;}/*!sc*/
81@media (max-width:64.25em){.fduduP{font-size:16px;line-height:24px;}}/*!sc*/
82@media (max-width:51.125em){.fduduP{font-size:16px;line-height:24px;}}/*!sc*/
83@media (max-width:38em){.fduduP{font-size:16px;line-height:24px;}}/*!sc*/
84data-styled.g19[id="P-sc-2fe20n-0"]{content:"fduduP,"}/*!sc*/
85@media (max-width:38em){.cFpblv{padding-left:32px!important;padding-right:32px!important;}}/*!sc*/
86data-styled.g21[id="Container__ContainerWrapper-sc-azyjet-0"]{content:"cFpblv,"}/*!sc*/
87.dBncPp{height:64px;width:199px;}/*!sc*/
88data-styled.g32[id="IconShakacode__HeaderIconShakacode-sc-1df0ktu-0"]{content:"dBncPp,"}/*!sc*/
89.kmesXN{height:48px;width:149px;}/*!sc*/
90data-styled.g33[id="IconShakacode__FooterIconShakacode-sc-1df0ktu-1"]{content:"kmesXN,"}/*!sc*/
91@media (max-width:38em){.eMtYwd{padding-left:32px!important;padding-right:32px!important;}}/*!sc*/
92data-styled.g42[id="Col__ColWrapper-sc-1891fgc-0"]{content:"eMtYwd,"}/*!sc*/
93@media (max-width:38em){.dEimrw{margin-left:-32px!important;margin-right:-32px!important;}}/*!sc*/
94data-styled.g43[id="Row__RowWrapper-sc-1hye4yz-0"]{content:"dEimrw,"}/*!sc*/
95.bgWeJJ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:6px 12px;background:transparent;border:1px solid #D9E1E3;border-radius:6px;cursor:pointer;font-size:14px;color:#1f2323;-webkit-transition:all 0.2s ease;transition:all 0.2s ease;white-space:nowrap;}/*!sc*/
96.bgWeJJ:hover{background:#ADBBBF;border-color:#1f2323;}/*!sc*/
97@media (max-width:51.125em){.bgWeJJ{display:none;}}/*!sc*/
98data-styled.g46[id="SearchTrigger__DesktopBadge-sc-1ayqg8r-0"]{content:"bgWeJJ,"}/*!sc*/
99.iNWavl{padding:2px 6px;background:white;border:1px solid #D9E1E3;border-radius:4px;font-size:12px;font-family:monospace;color:#181E1F;box-shadow:0 1px 2px rgba(0,0,0,0.1);}/*!sc*/
100data-styled.g47[id="SearchTrigger__KeyboardShortcut-sc-1ayqg8r-1"]{content:"iNWavl,"}/*!sc*/
101.kscFKW{display:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:36px;height:36px;background:transparent;border:1px solid #D9E1E3;border-radius:6px;cursor:pointer;color:#1f2323;-webkit-transition:all 0.2s ease;transition:all 0.2s ease;padding:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}/*!sc*/
102.kscFKW:hover{background:#ADBBBF;border-color:#1f2323;}/*!sc*/
103.kscFKW svg{width:18px;height:18px;stroke:currentColor;stroke-width:2;fill:none;}/*!sc*/
104@media (max-width:51.125em){.kscFKW{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}/*!sc*/
105data-styled.g48[id="SearchTrigger__MobileButton-sc-1ayqg8r-2"]{content:"kscFKW,"}/*!sc*/
106.dmMQXT{position:relative;}/*!sc*/
107data-styled.g49[id="SearchTrigger__TooltipContainer-sc-1ayqg8r-3"]{content:"dmMQXT,"}/*!sc*/
108.csnytt{position:absolute;top:calc(100% + 8px);right:0;background:#181E1F;color:white;padding:12px 16px;border-radius:6px;font-size:13px;white-space:nowrap;opacity:0;visibility:hidden;-webkit-transition:opacity 0.3s ease,visibility 0.3s ease;transition:opacity 0.3s ease,visibility 0.3s ease;box-shadow:0 4px 12px rgba(0,0,0,0.15);z-index:1000;}/*!sc*/
109.csnytt::before{content:"";position:absolute;top:-6px;right:20px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #181E1F;}/*!sc*/
110@media (max-width:51.125em){.csnytt{display:none;}}/*!sc*/
111data-styled.g50[id="SearchTrigger__Tooltip-sc-1ayqg8r-4"]{content:"csnytt,"}/*!sc*/
112.bDlPnM{margin-left:12px;background:none;border:none;color:white;cursor:pointer;font-size:16px;padding:0;opacity:0.7;-webkit-transition:opacity 0.2s ease;transition:opacity 0.2s ease;}/*!sc*/
113.bDlPnM:hover{opacity:1;}/*!sc*/
114data-styled.g51[id="SearchTrigger__TooltipClose-sc-1ayqg8r-5"]{content:"bDlPnM,"}/*!sc*/
115.jbxYoX{color:#181E1F;font-weight:700;font-size:16px;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/
116.jbxYoX svg{margin-left:5px;}/*!sc*/
117.jbxYoX:hover{color:#B11100;}/*!sc*/
118data-styled.g87[id="MenuLinkTitle__StyledLink-sc-7z8r-0"]{content:"jbxYoX,"}/*!sc*/
119.ebTCDI{position:relative;}/*!sc*/
120data-styled.g88[id="MenuLinkTitle__Title-sc-7z8r-1"]{content:"ebTCDI,"}/*!sc*/
121.gxtYTm{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/
122data-styled.g89[id="MenuLink__MenuLinkWrapper-sc-1rlzywk-0"]{content:"gxtYTm,"}/*!sc*/
123.fAhcEw{font-size:16px;font-family:"Open Sans",sans-serif;font-weight:600;padding-top:12px;padding-bottom:12px;}/*!sc*/
124data-styled.g91[id="Menu__StyledButton-sc-1pnmqk0-0"]{content:"fAhcEw,"}/*!sc*/
125.jlWwFw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;}/*!sc*/
126data-styled.g92[id="Menu__MenuWrapper-sc-1pnmqk0-1"]{content:"jlWwFw,"}/*!sc*/
127.bJjXbU{height:24px;width:24px;}/*!sc*/
128data-styled.g98[id="MobileMenu__StyledIconBurger-sc-1ywfcxj-2"]{content:"bJjXbU,"}/*!sc*/
129.hpJFFD{width:100%;z-index:100;padding-bottom:50px;}/*!sc*/
130@media (max-width:51.125em){.hpJFFD{background:white;position:fixed;top:0px;padding-bottom:0;}}/*!sc*/
131data-styled.g100[id="Header__StyledHeader-sc-1f99kj7-0"]{content:"hpJFFD,"}/*!sc*/
132.iSlMMd{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/
133data-styled.g101[id="Header__LeftCol-sc-1f99kj7-1"]{content:"iSlMMd,"}/*!sc*/
134.loKBBo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;
134-webkit-justify-content:flex-end;justify-content:flex-end;gap:8px;}/*!sc*/
135data-styled.g102[id="Header__RightCol-sc-1f99kj7-2"]{content:"loKBBo,"}/*!sc*/
136.ftanBx{padding-top:56px;}/*!sc*/
137@media (max-width:51.125em){.ftanBx{padding-top:40px;}}/*!sc*/
138data-styled.g103[id="Header__StyledContainer-sc-1f99kj7-3"]{content:"ftanBx,"}/*!sc*/
139@media (max-width:51.125em){.kGenTA{height:40px;width:170px;}}/*!sc*/
140data-styled.g104[id="Header__StyledLogo-sc-1f99kj7-4"]{content:"kGenTA,"}/*!sc*/
141.ieckEi{display:contents;}/*!sc*/
142@media (max-width:51.125em){.ieckEi{display:none;}}/*!sc*/
143data-styled.g105[id="Header__DesktopOnly-sc-1f99kj7-5"]{content:"ieckEi,"}/*!sc*/
144.iKaCix{display:none;}/*!sc*/
145@media (max-width:51.125em){.iKaCix{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;}}/*!sc*/
146data-styled.g106[id="Header__MobileOnly-sc-1f99kj7-6"]{content:"iKaCix,"}/*!sc*/
147.gddtoa{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}/*!sc*/
148data-styled.g107[id="Header__StyledMobileMenu-sc-1f99kj7-7"]{content:"gddtoa,"}/*!sc*/
149body{font-family:"Open Sans",sans-serif;color:#181E1F;letter-spacing:0;font-size:18px;line-height:32px;margin:0;}/*!sc*/
150@media (max-width:64.25em){body{font-size:16px;line-height:24px;}}/*!sc*/
151@media (max-width:51.125em){body{font-size:16px;line-height:24px;}}/*!sc*/
152@media (max-width:38em){body{font-size:16px;line-height:24px;}}/*!sc*/
153h1,h2,h3,h4,h5,h6{font-family:"Open Sans",sans-serif;}/*!sc*/
154h1 .anchor,h2 .anchor,h3 .anchor,h4 .anchor{display:none;}/*!sc*/
155@media only screen and (min-width:1028px){h1:hover .anchor,h2:hover .anchor,h3:hover .anchor,h4:hover .anchor{position:absolute;left:0;display:unset;}}/*!sc*/
156a{color:#B11100;font-weight:600;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/
157a:hover{color:#EE2B16;-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/
158img{margin:0;}/*!sc*/
159img.maxWidth100{max-width:100%;}/*!sc*/
160@media (prefers-color-scheme:dark){.markdown-alert{--color-border-default:#30363d;--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-danger-fg:#f85149;--color-danger-emphasis:#da3633;--color-attention-fg:#d29922;--color-attention-emphasis:#9e6a03;--color-done-fg:#a371f7;--color-done-emphasis:#8957e5;--color-success-fg:#3fb950;--color-success-emphasis:#238636;}}/*!sc*/
161@media (prefers-color-scheme:light){.markdown-alert{--color-border-default:#d0d7de;--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-danger-fg:#d1242f;--color-danger-emphasis:#cf222e;--color-attention-fg:#9a6700;--color-attention-emphasis:#9a6700;--color-done-fg:#8250df;--color-done-emphasis:#8250df;--color-success-fg:#1a7f37;--color-success-emphasis:#1f883d;}}/*!sc*/
162.markdown-alert{border-left:.25em solid var(--borderColor-default,var(--color-border-default));color:inherit;margin-bottom:16px;padding:.5rem 1em;}/*!sc*/
163.markdown-alert>:last-child{margin-bottom:0!important;}/*!sc*/
164.markdown-alert .markdown-alert-title{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:14px;font-weight:500;line-height:1;}/*!sc*/
165.markdown-alert .markdown-alert-title svg.octicon{margin-right:8px!important;margin-right:var(--base-size-8,8px)!important;fill:currentColor;}/*!sc*/
166.markdown-alert.markdown-alert-note{border-left-color:var(--borderColor-accent-emphasis,var(--color-accent-emphasis));}/*!sc*/
167.markdown-alert.markdown-alert-note .markdown-alert-title{color:var(--color-accent-fg);color:var(--fgColor-accent,var(--color-accent-fg));}/*!sc*/
168.markdown-alert.markdown-alert-tip{border-left-color:var(--borderColor-success-emphasis,var(--color-success-emphasis));}/*!sc*/
169.markdown-alert.markdown-alert-tip .markdown-alert-title{color:var(--color-success-fg);color:var(--fgColor-success,var(--color-success-fg));}/*!sc*/
170.markdown-alert.markdown-alert-important{border-left-color:var(--borderColor-done-emphasis,var(--color-done-emphasis));}/*!sc*/
171.markdown-alert.markdown-alert-important .markdown-alert-title{color:var(--color-done-fg);color:var(--fgColor-done,var(--color-done-fg));}/*!sc*/
172.markdown-alert.markdown-alert-warning{border-left-color:var(--borderColor-attention-emphasis,var(--color-attention-emphasis));}/*!sc*/
173.markdown-alert.markdown-alert-warning .markdown-alert-title{color:var(--color-attention-fg);color:var(--fgColor-attention,var(--color-attention-fg));}/*!sc*/
174.markdown-alert.markdown-alert-caution{border-left-color:var(--borderColor-danger-emphasis,var(--color-danger-emphasis));}/*!sc*/
175.markdown-alert.markdown-alert-caution .markdown-alert-title{color:var(--color-danger-fg);color:var(--fgColor-danger,var(--color-danger-fg));}/*!sc*/
176data-styled.g108[id="sc-global-kwGRQb"]{content:"sc-global-kwGRQb1,"}/*!sc*/
177.bZPpoQ{margin-top:64px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}/*!sc*/
178.bZPpoQ a{font-weight:400;}/*!sc*/
179data-styled.g109[id="Footer__FooterRow-sc-12ia8lp-0"]{content:"bZPpoQ,"}/*!sc*/
180.eYKAGK{padding:30px 0 50px 0;font-size:14px;color:#4E5B5E;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/
181.eYKAGK>*{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;}/*!sc*/
182@media (max-width:51.125em){.eYKAGK>*{-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%;margin-bottom:15px;}}/*!sc*/
183@media (max-width:51.125em){.eYKAGK{-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}}/*!sc*/
184data-styled.g110[id="Footer__CopyrightSocialRow-sc-12ia8lp-1"]{content:"eYKAGK,"}/*!sc*/
185.ldfdIq{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;}/*!sc*/
186data-styled.g111[id="Footer__FooterMeta-sc-12ia8lp-2"]{content:"ldfdIq,"}/*!sc*/
187.koKcya{margin-top:0;margin-bottom:10px;color:#4E5B5E;font-weight:400;}/*!sc*/
188data-styled.g112[id="Footer__ColumnHeader-sc-12ia8lp-3"]{content:"koKcya,"}/*!sc*/
189.tHzLz{-webkit-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%;font-size:14px;color:#4E5B5E;}/*!sc*/
190@media (max-width:51.125em){.tHzLz{-webkit-order:100;-ms-flex-order:100;order:100;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%;}}/*!sc*/
191data-styled.g113[id="Footer__InfoCol-sc-12ia8lp-4"]{content:"tHzLz,"}/*!sc*/
192.ZjBBa{margin:15px 0 13px 0;}/*!sc*/
193data-styled.g114[id="Footer__CompanyDetails-sc-12ia8lp-5"]{content:"ZjBBa,"}/*!sc*/
194.bbDMAr{margin:3px 0;font-weight:600;}/*!sc*/
195data-styled.g115[id="Footer__CompanyNote-sc-12ia8lp-6"]{content:"bbDMAr,"}/*!sc*/
196.hjcyZu{font-style:normal;margin:0;}/*!sc*/
197data-styled.g116[id="Footer__Address-sc-12ia8lp-7"]{content:"hjcyZu,"}/*!sc*/
198.ktsrTa{color:#b11100;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/
199data-styled.g117[id="Footer__Phone-sc-12ia8lp-8"]{content:"ktsrTa,"}/*!sc*/
200.jqtrRj{-webkit-flex:1 1 0;-ms-flex:1 1 0;flex:1 1 0;min-width:0;}/*!sc*/
201@media (max-width:51.125em){.jqtrRj{margin-bottom:30px;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%;}}/*!sc*/
202data-styled.g118[id="Footer__MenuCol-sc-12ia8lp-9"]{content:"jqtrRj,"}/*!sc*/
203.fpKXnI{text-align:right;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;}/*!sc*/
204.fpKXnI svg{margin-left:16px;margin-right:0;width:32px;height:32px;}/*!sc*/
205@media (max-width:51.125em){.fpKXnI{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;}}/*!sc*/
206data-styled.g119[id="Footer__SocialCol-sc-12ia8lp-10"]{content:"fpKXnI,"}/*!sc*/
207.gkRlql{list-style:none;padding:0;margin:0;}/*!sc*/
208data-styled.g120[id="Footer__List-sc-12ia8lp-11"]{content:"gkRlql,"}/*!sc*/
209.hJkTqS{margin-bottom:3px;}/*!sc*/
210.hJkTqS a{color:#4E5B5E;-webkit-text-decoration:none;text-decoration:none;font-size:14px;}/*!sc*/
211.hJkTqS a:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/
212data-styled.g121[id="Footer__Item-sc-12ia8lp-12"]{content:"hJkTqS,"}/*!sc*/
213.cKuXgv{color:#4E5B5E;}/*!sc*/
214data-styled.g122[id="Footer__StyledLink-sc-12ia8lp-13"]{content:"cKuXgv,"}/*!sc*/
215.fGCfCH{color:#4E5B5E;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/
216.fGCfCH:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/
217data-styled.g123[id="Footer__FooterMetaLink-sc-12ia8lp-14"]{content:"fGCfCH,"}/*!sc*/
218.eihjKf{border:0;padding:0;background:transparent;font:inherit;color:#4E5B5E;cursor:pointer;}/*!sc*/
219.eihjKf:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/
220data-styled.g124[id="Footer__CookieSettingsButton-sc-12ia8lp-15"]{content:"eihjKf,"}/*!sc*/
221.hOnBbQ{width:16px!important;height:16px!important;margin-right:8px!important;margin-left:0!important;}/*!sc*/
222data-styled.g125[id="Footer__StyledIconSlack-sc-12ia8lp-16"]{content:"hOnBbQ,"}/*!sc*/
223.goWloY{padding:8px 16px 8px 12px;width:137px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;font-size:13px;line-height:16px;color:#343D3F;border:1px solid #88969a;}/*!sc*/
224.goWloY:hover{color:#343D3F;border:1px solid #88969a;}/*!sc*/
225data-styled.g126[id="Footer__StyledGoToButton-sc-12ia8lp-17"]{content:"goWloY,"}/*!sc*/
226.gjyWtj{margin:0 0 8px 0;color:#181E1F;}/*!sc*/
227data-styled.g127[id="BlogTile__StyledH3-sc-3gu07l-0"]{content:"gjyWtj,"}/*!sc*/
228.lglJtK{border-radius:8px;margin-bottom:16px;}/*!sc*/
229.lglJtK img{border-radius:8px;}/*!sc*/
230data-styled.g128[id="BlogTile__RoundImg-sc-3gu07l-1"]{content:"lglJtK,"}/*!sc*/
231.gMhwfl{font-size:16px;line-height:24px;margin-top:0;margin-bottom:12px;color:#181E1F;}/*!sc*/
232@media (max-width:51.125em){.gMhwfl{font-size:14px;}}/*!sc*/
233data-styled.g129[id="BlogTile__StyledP-sc-3gu07l-2"]{content:"gMhwfl,"}/*!sc*/
234.gwPFro:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/
235data-styled.g130[id="BlogTile__StyledLink-sc-3gu07l-3"]{content:"gwPFro,"}/*!sc*/
236.jyLfpH{color:#181E1F;margin-bottom:24px;text-transform:capitalize;}/*!sc*/
237@media (max-width:51.125em){.jyLfpH{font-weight:800;margin-top:188px;}}/*!sc*/
238data-styled.g131[id="BlogHero__StyledHeading-sc-1yv1wbe-0"]{content:"jyLfpH,"}/*!sc*/
239.bbJttb{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:space-between;
239-webkit-justify-content:space-between;justify-content:space-between;}/*!sc*/
240.bbJttb span{display:none!important;}/*!sc*/
241@media (max-width:64.25em){.bbJttb{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}}/*!sc*/
242data-styled.g132[id="BlogHero__StyledContainer-sc-1yv1wbe-1"]{content:"bbJttb,"}/*!sc*/
243.koEdAw{font-size:16px;line-height:24px;color:#4E5B5E;border:none;}/*!sc*/
244.koEdAw:focus{outline:none;}/*!sc*/
245.koEdAw ::-webkit-input-placeholder{font-size:16px;line-height:24px;color:#4E5B5E;}/*!sc*/
246.koEdAw ::-moz-placeholder{font-size:16px;line-height:24px;color:#4E5B5E;}/*!sc*/
247.koEdAw :-ms-input-placeholder{font-size:16px;line-height:24px;color:#4E5B5E;}/*!sc*/
248.koEdAw ::placeholder{font-size:16px;line-height:24px;color:#4E5B5E;}/*!sc*/
249data-styled.g133[id="BlogHero__StyledInput-sc-1yv1wbe-2"]{content:"koEdAw,"}/*!sc*/
250.jnHQks{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border:1px solid #D9E1E3;border-radius:20px;height:24px;width:220px;padding:8px 16px 8px 24px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:space-between;-webkit-justify-content:space-between;justify-content:space-between;}/*!sc*/
251@media (max-width:64.25em){.jnHQks{margin-bottom:32px;height:auto;width:-webkit-fill-available;}}/*!sc*/
252data-styled.g134[id="BlogHero__InputBoxContainer-sc-1yv1wbe-3"]{content:"jnHQks,"}/*!sc*/
253.hFckdU{width:16px;height:16px;text-align:center;}/*!sc*/
254data-styled.g135[id="BlogHero__StyledIconSearch-sc-1yv1wbe-4"]{content:"hFckdU,"}/*!sc*/
255.fuSymU{background-color:#343D3F;padding:80px 0;min-height:280px;}/*!sc*/
256data-styled.g136[id="WhatWeHaveDone__Wrapper-sc-1nnd7cc-0"]{content:"fuSymU,"}/*!sc*/
257.djetCA{color:#ADBBBF;font-size:26px;line-height:40px;font-weight:800;font-family:"Open Sans",sans-serif;}/*!sc*/
258data-styled.g137[id="WhatWeHaveDone__FirstPart-sc-1nnd7cc-1"]{content:"djetCA,"}/*!sc*/
259.kQrZvV{color:#fff;}/*!sc*/
260data-styled.g138[id="WhatWeHaveDone__SecondPart-sc-1nnd7cc-2"]{content:"kQrZvV,"}/*!sc*/
261.dNXGoq{position:relative;}/*!sc*/
262@media (max-width:51.125em){.dNXGoq{padding-top:64px;text-align:right;}}/*!sc*/
263data-styled.g139[id="WhatWeHaveDone__RightCol-sc-1nnd7cc-3"]{content:"dNXGoq,"}/*!sc*/
264.ZRZAk{position:absolute;left:120px;bottom:-50px;width:240px;}/*!sc*/
265@media (max-width:90em){.ZRZAk{left:50px;}}/*!sc*/
266@media (max-width:64.25em){.ZRZAk{left:0px;}}/*!sc*/
267@media (max-width:51.125em){.ZRZAk{width:50%;bottom:auto;top:64px;left:16px;}}/*!sc*/
268@media (max-width:38em){.ZRZAk{left:32px;}}/*!sc*/
269data-styled.g140[id="WhatWeHaveDone__StyledBoardHand-sc-1nnd7cc-4"]{content:"ZRZAk,"}/*!sc*/
270.LjiCP{width:360px;position:absolute;right:0;top:-120px;box-sizing:content-box;}/*!sc*/
271@media (max-width:51.125em){.LjiCP{width:75%;position:relative;top:0;right:-25%;}}/*!sc*/
272data-styled.g141[id="WhatWeHaveDone__StyledComputerImage-sc-1nnd7cc-5"]{content:"LjiCP,"}/*!sc*/
273.fzMvPu{margin-top:40px;color:#fff;background-color:#ee2b16;font-weight:500;}/*!sc*/
274.fzMvPu:hover{color:#fff;}/*!sc*/
275@media (max-width:51.125em){.fzMvPu{padding-left:32px;padding-right:24px;padding-top:10px;padding-bottom:10px;font-size:16px;}}/*!sc*/
276data-styled.g142[id="WhatWeHaveDone__StyledGoToButton-sc-1nnd7cc-6"]{content:"fzMvPu,"}/*!sc*/
277.XsVXv{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:48px;}/*!sc*/
278@media (max-width:51.125em){.XsVXv{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-bottom:64px;}}/*!sc*/
279data-styled.g143[id="FeaturedPost__Wrapper-sc-kysi2u-0"]{content:"XsVXv,"}/*!sc*/
280.FolGl{border-radius:8px;}/*!sc*/
281.FolGl img{border-radius:8px;}/*!sc*/
282data-styled.g144[id="FeaturedPost__Image-sc-kysi2u-1"]{content:"FolGl,"}/*!sc*/
283.kYFpQK{margin-bottom:16px;color:#181E1F;margin-top:0;}/*!sc*/
284data-styled.g145[id="FeaturedPost__StyledH3-sc-kysi2u-2"]{content:"kYFpQK,"}/*!sc*/
285.gyRJuJ{margin-bottom:16px;margin-top:0;}/*!sc*/
286data-styled.g146[id="FeaturedPost__StyledP-sc-kysi2u-3"]{content:"gyRJuJ,"}/*!sc*/
287.jgGgrY{min-width:60%;height:auto;margin-right:32px;margin-bottom:16px;}/*!sc*/
288.jgGgrY:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/
289@media (max-width:51.125em){.jgGgrY{min-width:100%;margin-bottom:24px;margin-right:0;}}/*!sc*/
290data-styled.g147[id="FeaturedPost__StyledLink-sc-kysi2u-4"]{content:"jgGgrY,"}/*!sc*/
291.fWUCUe{font-size:14px;line-height:24px;color:#181E1F;margin-bottom:16px;
291-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/
292data-styled.g148[id="FeaturedPost__FeaturedTag-sc-kysi2u-5"]{content:"fWUCUe,"}/*!sc*/
293.iIzrhQ{width:16px;height:16px;margin-right:8px;color:red;}/*!sc*/
294data-styled.g149[id="FeaturedPost__StyledIconStar-sc-kysi2u-6"]{content:"iIzrhQ,"}/*!sc*/
295.hogSuQ:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/
296data-styled.g150[id="FeaturedPost__TitleLink-sc-kysi2u-7"]{content:"hogSuQ,"}/*!sc*/
297.iYlNpY{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}/*!sc*/
298.iYlNpY svg{width:3px;height:3px;margin:0 8px;}/*!sc*/
299data-styled.g151[id="MetaTags__MetaContainer-sc-14z1kk-0"]{content:"iYlNpY,"}/*!sc*/
300.cFUqCH{font-size:14px;line-height:24px;text-transform:capitalize;}/*!sc*/
301data-styled.g152[id="MetaTags__Category-sc-14z1kk-1"]{content:"cFUqCH,"}/*!sc*/
302.eyfcvO{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/
303data-styled.g153[id="MetaTags__CategoryWrapper-sc-14z1kk-2"]{content:"eyfcvO,"}/*!sc*/
304.kxVtqD{line-height:24px;font-size:14px;color:#4E5B5E;}/*!sc*/
305data-styled.g154[id="MetaTags__StyledMeta-sc-14z1kk-3"]{content:"kxVtqD,"}/*!sc*/
306.cJrTsh{margin-bottom:48px;}/*!sc*/
307data-styled.g194[id="blog-category__StyledContainer-sc-i4zaiy-0"]{content:"cJrTsh,"}/*!sc*/
308.kUpzce{margin-bottom:64px;}/*!sc*/
309.kUpzce p{font-weight:500;}/*!sc*/
310.kUpzce span{font-size:14px;font-weight:500;}/*!sc*/
311data-styled.g195[id="blog-category__StyledCol-sc-i4zaiy-1"]{content:"kUpzce,"}/*!sc*/
312.lmlppV{margin-bottom:64px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}/*!sc*/
313@media (max-width:64.25em){.lmlppV{margin-bottom:48px;}}/*!sc*/
314data-styled.g196[id="blog-category__CategoriesBar-sc-i4zaiy-2"]{content:"lmlppV,"}/*!sc*/
315.cluGkn{font-size:14px;font-weight:600;letter-spacing:1px;line-height:24px;color:#1f2323;margin-right:22px;text-transform:uppercase;}/*!sc*/
316.cluGkn:hover{-webkit-text-decoration:none;text-decoration:none;color:#1f2323;cursor:pointer;}/*!sc*/
317@media (max-width:64.25em){.cluGkn{font-size:13px;letter-spacing:0.5px;line-height:16px;}}/*!sc*/
318.gIDIVP{font-size:14px;font-weight:600;letter-spacing:1px;line-height:24px;color:#4E5B5E;margin-right:22px;text-transform:uppercase;}/*!sc*/
319.gIDIVP:hover{-webkit-text-decoration:none;text-decoration:none;color:#4E5B5E;cursor:pointer;}/*!sc*/
320@media (max-width:64.25em){.gIDIVP{font-size:13px;letter-spacing:0.5px;line-height:16px;}}/*!sc*/
321data-styled.g197[id="blog-category__Category-sc-i4zaiy-3"]{content:"cluGkn,gIDIVP,"}/*!sc*/
322.exBogX{height:2px;min-width:40px;border-radius:2px;margin-right:24px;background-color:#343D3F;}/*!sc*/
323@media (max-width:64.25em){.exBogX{margin-top:4px;}}/*!sc*/
324data-styled.g198[id="blog-category__HorizontalLine-sc-i4zaiy-4"]{content:"exBogX,"}/*!sc*/
325@media (max-width:64.25em){.fDCLsd{margin-bottom:16px;line-height:16px;}}/*!sc*/
326data-styled.g199[id="blog-category__CategoryWrapper-sc-i4zaiy-5"]{content:"fDCLsd,"}/*!sc*/
327.eOAvle{background-color:#D9E1E3;height:2px;margin-bottom:64px;}/*!sc*/
328data-styled.g200[id="blog-category__SectionSeparator-sc-i4zaiy-6"]{content:"eOAvle,"}/*!sc*/
329.kcNKfJ{margin-bottom:64px;}/*!sc*/
330data-styled.g201[id="blog-category__LatestArticlesSection-sc-i4zaiy-7"]{content:"kcNKfJ,"}/*!sc*/
331.cgNDrg{margin-bottom:32px;}/*!sc*/
332data-styled.g202[id="blog-category__LatestArticlesHeading-sc-i4zaiy-8"]{content:"cgNDrg,"}/*!sc*/
333</style><style type="text/css">
334    .anchor.before {
335      position: absolute;
336      top: 0;
337      left: 0;
338      transform: translateX(-100%);
339      padding-right: 4px;
340    }
341    .anchor.after {
342      display: inline-block;
343      padding-left: 4px;
344    }
345    h1 .anchor svg,
346    h2 .anchor svg,
347    h3 .anchor svg,
348    h4 .anchor svg,
349    h5 .anchor svg,
350    h6 .anchor svg {
351      visibility: hidden;
352    }
353    h1:hover .anchor svg,
354    h2:hover .anchor svg,
355    h3:hover .anchor svg,
356    h4:hover .anchor svg,
357    h5:hover .anchor svg,
358    h6:hover .anchor svg,
359    h1 .anchor:focus svg,
360    h2 .anchor:focus svg,
361    h3 .anchor:focus svg,
362    h4 .anchor:focus svg,
363    h5 .anchor:focus svg,
364    h6 .anchor:focus svg {
365      visibility: visible;
366    }
367  </style>
367<script>
368    document.addEventListener("DOMContentLoaded", function(event) {
369      var hash = window.decodeURI(location.hash.replace('#', ''))
370      if (hash !== '') {
371        var element = document.getElementById(hash)
372        if (element) {
373          var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
374          var clientTop = document.documentElement.clientTop || document.body.clientTop || 0
375          var offset = element.getBoundingClientRect().top + scrollTop - clientTop
376          // Wait for the browser to finish rendering before scrolling.
377          setTimeout((function() {
378            window.scrollTo(0, offset - 10)
379          }), 0)
380        }
381      }
382    })
383  </script>
383<style>.gatsby-image-wrapper{position:relative;overflow:hidden}.gatsby-image-wrapper picture.object-fit-polyfill{position:static!important}.gatsby-image-wrapper img{bottom:0;height:100%;left:0;margin:0;max-width:none;padding:0;position:absolute;right:0;top:0;width:100%;object-fit:cover}.gatsby-image-wrapper [data-main-image]{opacity:0;transform:translateZ(0);transition:opacity .25s linear;will-change:opacity}.gatsby-image-wrapper-constrained{display:inline-block;vertical-align:top}</style><noscript><style>.gatsby-image-wrapper noscript [data-main-image]{opacity:1!important}.gatsby-image-wrapper [data-placeholder-image]{opacity:0!important}</style></noscript>
383<script type="module">const e="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;e&&document.body.addEventListener("load",(function(e){const t=e.target;if(void 0===t.dataset.mainImage)return;if(void 0===t.dataset.gatsbyImageSsr)return;let a=null,n=t;for(;null===a&&n;)void 0!==n.parentNode.dataset.gatsbyImageWrapper&&(a=n.parentNode),n=n.parentNode;const o=a.querySelector("[data-placeholder-image]"),r=new Image;r.src=t.currentSrc,r.decode().catch((()=>{})).then((()=>{t.style.opacity=1,o&&(o.style.opacity=0,o.style.transition="opacity 500ms linear")}))}),!0);</script>
383<script type="application/ld+json" data-gatsby-head="true">{"@context":"https://schema.org","@type":"Organization","name":"ShakaCode","description":"ShakaCode is a US software consultancy, remote-first since 2011, best known for React on Rails. We build and maintain AI automations for mid-market companies with small IT teams and optimize web performance.","foundingDate":"2011","contactPoint":{"@type":"ContactPoint","contactType":"sales","email":"[email protected]"},"url":"https://shakacode.com/","logo":"https://shakacode.com/shakacode-og.png","sameAs":["https://github.com/shakacode","https://linkedin.com/company/shakacode","https://twitter.com/shakacode"]}</script>
383<script type="application/ld+json" data-gatsby-head="true">{"@context":"https://schema.org","@type":"WebSite","name":"Shakacode","url":"https://shakacode.com/"}</script>
383</head><body><noscript id="gatsby-noscript">This app works best with JavaScript enabled.</noscript><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><div class="Header__StyledHeader-sc-1f99kj7-0 hpJFFD"><div style="box-sizing:border-box;position:relative;margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;max-width:1156px" class="Container__ContainerWrapper-sc-azyjet-0 Header__StyledContainer-sc-1f99kj7-3 cFpblv ftanBx"><div style="margin-left:-16px;margin-right:-16px;display:flex;flex-grow:0;flex-shrink:0;align-items:normal;justify-content:flex-start;flex-direction:row;flex-wrap:wrap" class="Row__RowWrapper-sc-1hye4yz-0 dEimrw"><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:25%;flex-basis:25%;flex-grow:0;flex-shrink:0;max-width:25%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 Header__LeftCol-sc-1f99kj7-1 eMtYwd iSlMMd"><a href="/"><svg class="IconShakacode__HeaderIconShakacode-sc-1df0ktu-0 Header__StyledLogo-sc-1f99kj7-4 dBncPp kGenTA" viewBox="0 0 206 47" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-add-photo-_R_aq_"><title id="svg-add-photo-_R_aq_">Add Photo</title><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b-shaka"><stop stop-color="#F32B05" offset="0%"></stop><stop stop-color="#B00012" offset="100%"></stop></linearGradient><linearGradient x1="50%" y1="24.608%" x2="50%" y2="72.622%" id="c-shaka"><stop stop-color="#FF6956" offset=".792%"></stop><stop stop-color="#FF6956" stop-opacity=".01" offset="96.579%"></stop></linearGradient><path d="M11.207 10h41.586a2 2 0 011.77 1.069l8.702 16.534a2 2 0 01-.453 2.437L33.317 55.848a2 2 0 01-2.634 0L1.188 30.04a2 2 0 01-.453-2.437l8.703-16.534A2 2 0 0111.208 10z" id="a-shaka"></path></defs><g fill="none" fill-rule="evenodd"><text font-family="&#x27;Montserrat Bold&#x27;, Montserrat, &#x27;Open Sans&#x27;, Arial, sans-serif" font-size="20" font-weight="bold" fill="#333738" transform="translate(0 -10)"><tspan x="80" y="41">ShakaCode</tspan></text><g transform="translate(0 -10)"><path d="M0 0h64v64H0z"></path><mask id="d-shaka" fill="#fff"><use xlink:href="#a-shaka"></use></mask><use fill="url(#b-shaka)" xlink:href="#a-shaka"></use><path d="M7 43c22.118-2.144 33.57-6.578 34.354-13.303 1.178-10.088-17.4-1.454-20.927-1 9.658-7.17 22.018-11.721 37.08-13.652H66V57H7V43z" fill="url(#c-shaka)" mask="url(#d-s
383haka)"></path></g></g></svg></a></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:75%;flex-basis:75%;flex-grow:0;flex-shrink:0;max-width:75%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 Header__RightCol-sc-1f99kj7-2 eMtYwd loKBBo"><div class="Header__DesktopOnly-sc-1f99kj7-5 ieckEi"><div class="Menu__MenuWrapper-sc-1pnmqk0-1 jlWwFw"><div class="MenuLink__MenuLinkWrapper-sc-1rlzywk-0 gxtYTm"><span class="MenuLinkTitle__StyledLink-sc-7z8r-0 jbxYoX"><span class="MenuLinkTitle__Title-sc-7z8r-1 ebTCDI">About</span><svg color="lightGray" viewBox="0 0 8 5" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-chevron-down-_R_d5iq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 idZSLk"><title id="svg-chevron-down-_R_d5iq_">Chevron down</title><path d="M1 0l3 3 3-3 1 1-4 4-4-4z" fill="#D9E1E3" fill-rule="evenodd"></path></svg></span></div><div class="MenuLink__MenuLinkWrapper-sc-1rlzywk-0 gxtYTm"><span class="MenuLinkTitle__StyledLink-sc-7z8r-0 jbxYoX"><span class="MenuLinkTitle__Title-sc-7z8r-1 ebTCDI">Services</span><svg color="lightGray" viewBox="0 0 8 5" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-chevron-down-_R_d9iq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 idZSLk"><title id="svg-chevron-down-_R_d9iq_">Chevron down</title><path d="M1 0l3 3 3-3 1 1-4 4-4-4z" fill="#D9E1E3" fill-rule="evenodd"></path></svg></span></div><div class="MenuLink__MenuLinkWrapper-sc-1rlzywk-0 gxtYTm"><span class="MenuLinkTitle__StyledLink-sc-7z8r-0 jbxYoX"><span class="MenuLinkTitle__Title-sc-7z8r-1 ebTCDI">Portfolio</span><svg color="lightGray" viewBox="0 0 8 5" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-chevron-down-_R_ddiq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 idZSLk"><title id="svg-chevron-down-_R_ddiq_">Chevron down</title><path d="M1 0l3 3 3-3 1 1-4 4-4-4z" fill="#D9E1E3" fill-rule="evenodd"></path></svg></span></div><div class="MenuLink__MenuLinkWrapper-sc-1rlzywk-0 gxtYTm"><span class="MenuLinkTitle__StyledLink-sc-7z8r-0 jbxYoX"><span class="MenuLinkTitle__Title-sc-7z8r-1 ebTCDI">Insights</span><svg color="lightGray" viewBox="0 0 8 5" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-chevron-down-_R_dhiq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 idZSLk"><title id="svg-chevron-down-_R_dhiq_">Chevron down</title><path d="M1 0l3 3 3-3 1 1-4 4-4-4z" fill="#D9E1E3" fill-rule="evenodd"></path></svg></span></div><div class="MenuLink__MenuLinkWrapper-sc-1rlzywk-0 gxtYTm"><span class="MenuLinkTitle__StyledLink-sc-7z8r-0 jbxYoX"><span class="MenuLinkTitle__Title-sc-7z8r-1 ebTCDI">Docs</span><svg color="lightGray" viewBox="0 0 8 5" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-chevron-down-_R_dliq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 idZSLk"><title id="svg-chevron-down-_R_dliq_">Chevron down</title><path d="M1 0l3 3 3-3 1 1-4 4-4-4z" fill="#D9E1E3" fill-rule="evenodd"></path></svg></span></div><div class="SearchTrigger__TooltipContainer-sc-1ayqg8r-3 dmMQXT"><button aria-label="Search documentation" class="SearchTrigger__DesktopBadge-sc-1ayqg8r-0 bgWeJJ"><span>Search</span><kbd class="SearchTrigger__KeyboardShortcut-sc-1ayqg8r-1 iNWavl">Ctrl+K</kbd></button><div class="SearchTrigger__Tooltip-sc-1ayqg8r-4 csnytt">Press <strong>Ctrl+K</strong> to search anytime<button class="SearchTrigger__TooltipClose-sc-1ayqg8r-5 bDlPnM">✕</button></div></div><button aria-label="Search documentation" class="SearchTrigger__MobileButton-sc-1ayqg8r-2 kscFKW"><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle cx="10.5" cy="10.5" r="7.5"></circle><line x1="16" y1="16" x2="21" y2="21" stroke-linecap="round"></line></svg></button><a href="https://meetings.hubspot.com/justingordon/30-minute-consultation" target="_blank" rel="noopener noreferrer" class="Button__ButtonLink-sc-xxhl33-1 Menu__StyledButton-sc-1pnmqk0-0 bHoJxm fAhcEw">Book a free call</a></div></div><div class="Header__MobileOnly-sc-1f99kj7-6 iKaCix"><div class="SearchTrigger__TooltipContainer-sc-1ayqg8r-3 dmMQXT"><button aria-label="Search documentation" class="SearchTrigger__DesktopBadge-sc-1ayqg8r-0 bgWeJJ"><span>Search</span><kbd class="SearchTrigger__KeyboardShortcut-sc-1ayqg8r-1 iNWavl">Ctrl+K</kbd></button><div class="SearchTrigger__Tooltip-sc-1ayqg8r-4 csnytt">Press <strong>Ctrl+K</strong> to search anytime<button class="SearchTrigger__TooltipClose-sc-1ayqg8r-5 bDlPnM">✕</button></div></div><button aria-label="Search documentation" class="SearchTrigger__MobileButton-sc-1ayqg8r-2 kscFKW"><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle cx="10.5" cy="10.5" r="7.5"></circle><line x1="16" y1="16" x2="21" y2="21" stroke-linecap="round"></line></svg></button><div class="Header__StyledMobileMenu-sc-1f99kj7-7 gddtoa"><svg color="darkerRed" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI MobileMenu__StyledIconBurger-sc-1ywfcxj-2 bJjXbU" viewBox="0 0 24 20" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-burger-_R_qiq_"><title id="svg-burger-_R_qiq_">Burger</title><path d="M14 16a2 2 0 110 4H2a2 2 0 110-4h12zm8-8a2 2 0 110 4H2a2 2 0 110-4h20zm0-8a2 2 0 110 4H2a2 2 0 110-4h20z" fill="#B11100" fill-rule="evenodd"></path></svg></div></div></div></div></div></div><header><div style="box-sizing:border-box;position:relative;margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;max-width:1156px" class="Container__ContainerWrapper-sc-azyjet-0 BlogHero__StyledContainer-sc-1yv1wbe-1 cFpblv bbJttb"><h1 class="H1-sc-hj2kha-0 BlogHero__StyledHeading-sc-1yv1wbe-0 bkbNNW jyLfpH">ShakaCode blog</h1><div class="BlogHero__InputBoxContainer-sc-1yv1wbe-3 jnHQks"><input type="text" aria-label="Search" placeholder="Search" class="BlogHero__StyledInput-sc-1yv1wbe-2 koEdAw" value=""/><svg class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI BlogHero__StyledIconSearch-sc-1yv1wbe-4 hFckdU" viewB
383ox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-search-_R_kkq_"><title id="svg-search-_R_kkq_">Search</title><g id="Search" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><circle stroke="#343D3F" stroke-width="2" cx="6.5" cy="6.5" r="5.5"></circle><path d="M9.5,11.0146355 L11,9.5 L15.2928932,13.7928932 C15.6834175,14.1834175 15.6834175,14.8165825 15.2928932,15.2071068 L15.2060711,15.2939289 C14.8159515,15.6840485 14.1835857,15.6845119 13.7928947,15.2949645 L9.5,11.0146355 L9.5,11.0146355 Z" fill="#343D3F"></path></g></svg></div></div></header><main><div style="box-sizing:border-box;position:relative;margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;max-width:1156px" class="Container__ContainerWrapper-sc-azyjet-0 blog-category__StyledContainer-sc-i4zaiy-0 cFpblv cJrTsh"><div style="margin-left:-16px;margin-right:-16px;display:flex;flex-grow:0;flex-shrink:0;align-items:normal;justify-content:flex-start;flex-direction:row;flex-wrap:wrap" class="Row__RowWrapper-sc-1hye4yz-0 dEimrw"><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:100%;flex-basis:0;flex-grow:1;flex-shrink:0;max-width:100%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__CategoriesBar-sc-i4zaiy-2 eMtYwd lmlppV"><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a aria-current="page" class="blog-category__Category-sc-i4zaiy-3 cluGkn" href="/blog/">Editor&#x27;s pick</a><div class="blog-category__HorizontalLine-sc-i4zaiy-4 exBogX"></div></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/about-us/">about us</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/ai/">AI</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/control-plane/">control plane</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/engineering/">engineering</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/infrastructure/">infrastructure</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/javascript/">javascript</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/open-source/">open source</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/other/">other</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/productivity/">productivity</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/rails/">rails</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/react/">react</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/react-native/">react native</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/react-on-rails/">react on rails</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/rescript/">rescript</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/ruby/">ruby</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/rust/">rust</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/terraform/">terraform</a></div><div class="blog-category__CategoryWrapper-sc-i4zaiy-5 fDCLsd"><a class="blog-category__Category-sc-i4zaiy-3 gIDIVP" href="/blog/all-topics/">all topics</a></div></div></div><div class="FeaturedPost__Wrapper-sc-kysi2u-0 XsVXv"><a class="FeaturedPost__StyledLink-sc-kysi2u-4 jgGgrY" href="/blog/railsconf-2021-implicit-to-explicit-decoding-rubys-magical-syntax/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained FeaturedPost__Image-sc-kysi2u-1 FolGl"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;369&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#483828;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" srcSet="/static/d3256ba53a9c08a340a0f20102681fcf/c9a6b/magic-rails.webp 136w,/static/d3256ba53a9c08a340a0f20102681fcf/36b4a/magic-rails.webp 272w,/static/d3256ba53a9c08a340a0f20102681fcf/557ac/magic-rails.webp 544w,/static/d3256ba53a9c08a340a0f20102681fcf/e8df9/magic-rails.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="eager" src="/static/d3256ba53a9c08a340a0f20102681fcf/5b7de/magic-rails.jpg" srcSet="/static/d3256ba53a9c08a340a0f20102681fcf/a1946/magic-rails.jpg 136w,/static/d3256ba53a9c08a340a0f20102681fcf/5926b/magic-rails.jpg 272w,/static/d3256ba53a9c08a340a0f20102681fcf/5b7de/magic-rails.jpg 544w,/static/d3256ba53a9c08a340a0f20102681fcf/441f6/magic-rails.jpg 1088w" alt="RailsConf 2021 -- Implicit to Explicit: Decoding Ruby&#x27;s Magical Syntax - read more"/></picture><noscript><picture><source type="image/webp" srcSet="/static/d3256ba53a9c08a340a0f20102681fcf/c9a6b/magic-rails.webp 136w,/static/d3256ba53a9c08a340a0f20102681fcf/36b4a/magic-rails.webp 272w,/static/d3256ba53a9c08a340a0f20102681fcf/557ac/magic-rails.webp 544w,/static/d3256ba53a9c08a340a0f20102681fcf/e8df9/magic-rails.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="eager" src="/static/d3256ba53a9c08a340a0f20102681fcf/5b7de/magic-rails.jpg" srcSet="/static/d3256ba53a9c08a340a0f20102681fcf/a1946/magic-rails.jpg 136w,/static/d3256ba53a9c08a340a0f20102681fcf/5926b/magic-rails.jpg 272w,/static/d3256ba53a9c08a340a0f20102681fcf/5b7de/magic-rails.jpg 544w,/static/d3256ba53a9c08a340a0f20102681fcf/441f6/magic-rails.jpg 1088w" alt="RailsConf 2021 -- Implicit to Explicit: Decoding Ruby&#x27;s Magical Syntax - read more"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div></a><div><div class="FeaturedPost__FeaturedTag-sc-kysi2u-5 fWUCUe"><svg class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI FeaturedPost__StyledIconStar-sc-kysi2u-6 iIzrhQ" viewBox="0 0 24 22" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-star-_R_4pisq_"><title id="svg-star-_R_4pisq_">Star</title><g id="1440-Star" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-580.000000, -1432.000000)" fill="#181E1F"><g id="Group-Star" transform="translate(160.000000, 1392.000000)"><polygon id="Star-Copy" points="432 58 424.946577 61.7082039 426.293661 53.854102 420.587322 48.2917961 428.473288 47.145898 432 40 435.526712 47.145898 443.412678 48.2917961 437.706339 53.854102 439.053423 61.7082039"></polygon></g></g></g></svg>Featured</div><a class="FeaturedPost__TitleLink-sc-kysi2u-7 hogSuQ" href="/blog/railsconf-2021-implicit-to-explicit-decoding-rubys-magical-syntax/"><h3 class="H3-sc-1emy8q1-0 FeaturedPost__StyledH3-sc-kysi2u-2 jrMOUV kYFpQK">RailsConf 2021 -- Implicit to Explicit: Decoding Ruby&#x27;s Magical Syntax</h3></a><p class="P-sc-2fe20n-0 FeaturedPost__StyledP-sc-kysi2u-3 fduduP gyRJuJ">Does a Rails model or config file seem like a magical syntax? Or can you read any Ruby code and understand it as the interpreter does?</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/rails/">rails</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_969isq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_969isq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_a69isq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_a69isq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">11 Apr 2021</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_e9isq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_e9isq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div><div class="blog-category__SectionSeparator-sc-i4zaiy-6 eOAvle"></div><section aria-label="Latest articles" class="blog-category__LatestArticlesSection-sc-i4zaiy-7 kcNKfJ"><h2 class="H2-sc-1u39ok0-0 blog-category__LatestArticlesHeading-sc-i4zaiy-8 QTrsV cgNDrg">Latest articles</h2><div style="margin-left:-16px;margin-right:-16px;display:flex;flex-grow:0;flex-shrink:0;align-items:normal;justify-content:flex-start;flex-direction:row;flex-wrap:wrap" class="Row__RowWrapper-sc-1hye4yz-0 dEimrw"><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/shortcut-jira-trello-github-toggl-time-and-task-tracking/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;194&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/ac3b6/image4.webp 136w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/62147/image4.webp 272w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/8dd09/image4.webp 544w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/f6df9/image4.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/e511f/image4.png" data-srcset="/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/0f9bb/image4.png 136w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/b23c2/image4.png 272w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/e511f/image4.png 544w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/c8a77/image4.png 1088w" alt="Shortcut (Jira/Trello/Github) Toggl Time and Task Tracking"/></picture><noscript><picture><source type="image/webp" srcSet="/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/ac3b6/image4.webp 136w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/62147/image4.webp 272w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/8dd09/image4.webp 544w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/f6df9/image4.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/e511f/image4.png" srcSet="/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/0f9bb/image4.png 136w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/b23c2/image4.png 272w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/e511f/image4.png 544w,/static/67cfc2f530fa7dfcdf5fa7a9091d1bad/c8a77/image4.png 1088w" alt="Shortcut (Jira/Trello/Github) Toggl Time and Task Tracking"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">Shortcut (Jira/Trello/Github) Toggl Time and Task Tracking</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">Clear and regular communications regarding time spent on various tasks are critical to having good client relationships. To this end, ShakaCode leverages Toggl with Shortcut to provide reports to our clients so they can assess the overall level of effort for various tasks and efficiency of ShakaCode development efforts.</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ie6qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ie6qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/about-us/">about us</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ke6qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ke6qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">12 Feb 2023</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_u6qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_u6qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/consulting-vs-full-time-hires/"><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">ShakaCode Consulting Versus Full-Time Hires and Staff Augmentation</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">Consulting Versus Full-Time Hires</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ieaqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ieaqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/about-us/">about us</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_keaqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_keaqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">11 Feb 2023</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_uaqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_uaqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/managing-external-data-sources-in-e2e-testing-for-cross-platform-react-native-application/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;363&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/1603dd1b693bfee2bee3dc61e992b3d6/3403b/image1.webp 136w,/static/1603dd1b693bfee2bee3dc61e992b3d6/32884/image1.webp 272w,/static/1603dd1b693bfee2bee3dc61e992b3d6/aa893/image1.webp 544w,/static/1603dd1b693bfee2bee3dc61e992b3d6/a1d17/image1.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/1603dd1b693bfee2bee3dc61e992b3d6/5e451/image1.jpg" data-srcset="/static/1603dd1b693bfee2bee3dc61e992b3d6/c2fb9/image1.jpg 136w,/static/1603dd1b693bfee2bee3dc61e992b3d6/2381f/image1.jpg 272w,/static/1603dd1b693bfee2bee3dc61e992b3d6/5e451/image1.jpg 544w,/static/1603dd1b693bfee2bee3dc61e992b3d6/a2e00/image1.jpg 1088w" alt="Managing External Data Sources in 
383End-to-End Testing for cross-platform React Native Application"/></picture><noscript><picture><source type="image/webp" srcSet="/static/1603dd1b693bfee2bee3dc61e992b3d6/3403b/image1.webp 136w,/static/1603dd1b693bfee2bee3dc61e992b3d6/32884/image1.webp 272w,/static/1603dd1b693bfee2bee3dc61e992b3d6/aa893/image1.webp 544w,/static/1603dd1b693bfee2bee3dc61e992b3d6/a1d17/image1.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/1603dd1b693bfee2bee3dc61e992b3d6/5e451/image1.jpg" srcSet="/static/1603dd1b693bfee2bee3dc61e992b3d6/c2fb9/image1.jpg 136w,/static/1603dd1b693bfee2bee3dc61e992b3d6/2381f/image1.jpg 272w,/static/1603dd1b693bfee2bee3dc61e992b3d6/5e451/image1.jpg 544w,/static/1603dd1b693bfee2bee3dc61e992b3d6/a2e00/image1.jpg 1088w" alt="Managing External Data Sources in End-to-End Testing for cross-platform React Native Application"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">Managing External Data Sources in End-to-End Testing for cross-platform React Native Application</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">End to end(E2E) testing is a traditional testing methodology where the aim is to examine how an application works by assessing the flow from start to end. In Scenario-Based End-to-End Testing, Application is examined from all layers – front end to backend along with its interfaces and the endpoints</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/react-native/">react native</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ieeqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ieeqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_keeqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_keeqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">5 Feb 2021</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ueqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ueqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Pulkit</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/cool-things-you-can-do-with-first-class-modules-in-rescript-react/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;128&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/9c39fc646ed6211267e8a10d40cb0567/04e00/featured.webp 136w,/static/9c39fc646ed6211267e8a10d40cb0567/0f394/featured.webp 272w,/static/9c39fc646ed6211267e8a10d40cb0567/6e60c/featured.webp 544w,/static/9c39fc646ed6211267e8a10d40cb0567/c1f8c/featured.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/9c39fc646ed6211267e8a10d40cb0567/3a547/featured.png" data-srcset="/static/9c39fc646ed6211267e8a10d40cb0567/d7bfa/featured.png 136w,/static/9c39fc646ed6211267e8a10d40cb0567/da845/featured.png 272w,/static/9c39fc646ed6211267e8a10d40cb0567/3a547/featured.png 544w,/static/9c39fc646ed6211267e8a10d40cb0567/6ea0b/featured.png 1088w" alt="Cool Things You Can Do with First-Class Modules in ReScriptReact"/></picture><noscript><picture><source type="image/webp" srcSet="/static/9c39fc646ed6211267e8a10d40cb0567/04e00/featured.webp 136w,/static/9c39fc646ed6211267e8a10d40cb0567/0f394/featured.webp 272w,/static/9c39fc646ed6211267e8a10d40cb0567/6e60c/featured.webp 544w,/static/9c39fc646ed6211267e8a10d40cb0567/c1f8c/featured.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/9c39fc646ed6211267e8a10d40cb0567/3a547/featured.png" srcSet="/static/9c39fc646ed6211267e8a10d40cb0567/d7bfa/featured.png 136w,/static/9c39fc646ed6211267e8a10d40cb0567/da845/featured.png 272w,/static/9c39fc646ed6211267e8a10d40cb0567/3a547/featured.png 544w,/static/9c39fc646ed6211267e8a10d40cb0567/6ea0b/featured.png 1088w" alt="Cool Things You Can Do with First-Class Modules in ReScriptReact"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">Cool Things You Can Do with First-Class Modules in ReScriptReact</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">This post is about not so widely known advanced feature of the language, that helps to build handy abstractions over ReScriptReact components.</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ieiqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ieiqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/rescript/">rescript</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_keiqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_keiqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">2 Nov 2020</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_uiqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_uiqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Alex Fedoseev</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/a-definite-guide-to-e2e-ci-setup-react-native-using-cavy-cli/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;272&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/a76ae3e714f19bf6b2c1cf2224f247a6/e65a2/image1.webp 136w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/76089/image1.webp 272w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/d4813/image1.webp 544w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/dabe2/image1.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/a76ae3e714f19bf6b2c1cf2224f247a6/ebb89/image1.png" data-srcset="/static/a76ae3e714f19bf6b2c1cf2224f247a6/f80ef/image1.png 136w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/92f87/image1.png 272w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/ebb89/image1.png 544w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/dd3f5/image1.png 1088w" alt="A definitive guide to E2E Testing CI Setup for React-Native using Cavy-CLI"/></picture><noscript><picture><source type="image/webp" srcSet="/static/a76ae3e714f19bf6b2c1cf2224f247a6/e65a2/image1.webp 136w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/76089/image1.webp 272w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/d4813/image1.webp 544w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/dabe2/image1.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/a76ae3e714f19bf6b2c1cf2224f247a6/ebb89/image1.png" srcSet="/static/a76ae3e714f19bf6b2c1cf2224f247a6/f80ef/image1.png 136w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/92f87/image1.png 272w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/ebb89/image1.png 544w,/static/a76ae3e714f19bf6b2c1cf2224f247a6/dd3f5/image1.png 1088w" alt="A definitive guide to E2E Testing CI Setup for React-Native using Cavy-CLI"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">A definitive guide to E2E Testing CI Setup for React-Native using Cavy-CLI</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">React Native is a cross-platform mobile application development framework. It saves development time &amp; cost and adds the ability to ship OTA (over the air) updates.</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/react-native/">react native</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_iemqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_iemqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_kemqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_kemqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">9 Oct 2020</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_umqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_umqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Pulkit</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/railsconf-2020-webpacker-it-just-works-but-how/"><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">RailsConf 2020 -- Webpacker, It-Just-Works, But How?</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">How does the Webpacker gem provide &quot;it-just-works&quot; webpack integration with Rails? That simplicity did not come easily. The rich functionality, complexity, and rapid evolution of the webpack ecosystem necessitated extension points beyond a simple Ruby config file.</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/rails/">rails</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ieqqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ieqqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_keqqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_keqqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">5 May 2020</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_uqqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_uqqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/introduction-to-cypress-on-rails/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;261&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#183858;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/b88b300287ccfe6e5e7e194c2fdd19d4/5c6ac/cypress-on-rails.webp 136w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/c88a6/cypress-on-rails.webp 272w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/e45d0/cypress-on-rails.webp 544w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/322fc/cypress-on-rails.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/b88b300287ccfe6e5e7e194c2fdd19d4/fa404/cypress-on-rails.png" data-srcset="/static/b88b300287ccfe6e5e7e194c2fdd19d4/69d03/cypress-on-rails.png 136w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/cc532/cypress-on-rails.png 272w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/fa404/cypress-on-rails.png 544w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/45c98/cypress-on-rails.png 1088w" alt="Introduction to Cypress on Rails"/></picture><noscript><picture><source type="image/webp" srcSet="/static/b88b300287ccfe6e5e7e194c2fdd19d4/5c6ac/cypress-on-rails.webp 136w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/c88a6/cypress-on-rails.webp 272w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/e45d0/cypress-on-rails.webp 544w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/322fc/cypress-on-rails.webp 1088w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/b88b300287ccfe6e5e7e194c2fdd19d4/fa404/cypress-on-rails.png" srcSet="/static/b88b300287ccfe6e5e7e194c2fdd19d4/69d03/cypress-on-rails.png 136w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/cc532/cypress-on-rails.png 272w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/fa404/cypress-on-rails.png 544w,/static/b88b300287ccfe6e5e7e194c2fdd19d4/45c98/cypress-on-rails.png 1088w" alt="Introduction to Cypress on Rails"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">Introduction to Cypress on Rails</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">Cypress provides really powerful tools to create true end-to-end tests for modern web applications. With these testing features, stay 100% confident that all frontend user interactions, even async requests, work as expected.</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ieuqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ieuqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/rails/">rails</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_keuqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_keuqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">26 Dec 2019</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_uuqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_uuqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Anton</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/hvmns-90-reduction-in-server-response-time-from-react-on-rails-pro/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;307&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/50b029c67ab74bd11ef7feff1bb6af35/0d5f8/image5.webp 136w,/static/50b029c67ab74bd11ef7feff1bb6af35/0aeab/image5.webp 272w,/static/50b029c67ab74bd11ef7feff1bb6af35/03184/image5.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/50b029c67ab74bd11ef7feff1bb6af35/af029/image5.png" data-srcset="/static/50b029c67ab74bd11ef7feff1bb6af35/7f54b/image5.png 136w,/static/50b029c67ab74bd11ef7feff1bb6af35/55521/image5.png 272w,/static/50b029c67ab74bd11ef7feff1bb6af35/af029/image5.png 544w" alt="HVMN’s 90% Reduction in Server Response Time from React on Rails Pro"/></picture><noscript><picture><source type="image/webp" srcSet="/static/50b029c67ab74bd11ef7feff1bb6af35/0d5f8/image5.webp 136w,/static/50b029c67ab74bd11ef7feff1bb6af35/0aeab/image5.webp 272w,/static/50b029c67ab74bd11ef7feff1bb6af35/03184/image5.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/50b029c67ab74bd11ef7feff1bb6af35/af029/image5.png" srcSet="/static/50b029c67ab74bd11ef7feff1bb6af35/7f54b/image5.png 136w,/static/50b029c67ab74bd11ef7feff1bb6af35/55521/image5.png 272w,/static/50b029c67ab74bd11ef7feff1bb6af35/af029/image5.png 544w" alt="HVMN’s 90% Reduction in Server Response Time from React on Rails Pro"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">HVMN’s 90% Reduction in Server Response Time from React on Rails Pro</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">Since HVMN installed React on Rails Pro, they’ve seen a roughly 90% improvement in server-response times. The gain came from a combination of intelligent caching along with a much more efficient…</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_if2qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_if2qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/react-on-rails/">react on rails</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_kf2qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_kf2qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">13 Sep 2018</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_v2qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_v2qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/front-end-sadness-to-happiness-the-react-on-rails-story-at-goruco-2017/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;363&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#381808;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/90341908dd9c9f64a16fb0f3c7d1e138/3403b/feature.webp 136w,/static/90341908dd9c9f64a16fb0f3c7d1e138/32884/feature.webp 272w,/static/90341908dd9c9f64a16fb0f3c7d1e138/aa893/feature.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/90341908dd9c9f64a16fb0f3c7d1e138/5e451/feature.jpg" data-srcset="/static/90341908dd9c9f64a16fb0f3c7d1e138/c2fb9/feature.jpg 136w,/static/90341908dd9c9f64a16fb0f3c7d1e138/2381f/feature.jpg 272w,/static/90341908dd9c9f64a16fb0f3c7d1e138/5e451/feature.jpg 544w" alt="Front-End Sadness to Happiness: The React on Rails Story at GORUCO 2017"/></picture><noscript><picture><source type="image/webp" srcSet="/static/90341908dd9c9f64a16fb0f3c7d1e138/3403b/feature.webp 136w,/static/90341908dd9c9f64a16fb0f3c7d1e138/32884/feature.webp 272w,/static/90341908dd9c9f64a16fb0f3c7d1e138/aa893/feature.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/90341908dd9c9f64a16fb0f3c7d1e138/5e451/feature.jpg" srcSet="/static/90341908dd9c9f64a16fb0f3c7d1e138/c2fb9/feature.jpg 136w,/static/90341908dd9c9f64a16fb0f3c7d1e138/2381f/feature.jpg 272w,/static/90341908dd9c9f64a16fb0f3c7d1e138/5e451/feature.jpg 544w" alt="Front-End Sadness to Happiness: The React on Rails Story at GORUCO 2017"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">Front-End Sadness to Happiness: The React on Rails Story at GORUCO 2017</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">Here is a short recap of my odyssey around 4 major US cities giving talks on React on Rails in June of 2017. This talk focused on the “Why?” of React on Rails.</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/react-on-rails/">react on rails</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_if6qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_if6qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_kf6qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_kf6qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">15 Jul 2017</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_v6qsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_v6qsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/an-attitude-of-gratitude-for-open-source/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;524&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/20f9d3273305db7851422eb35add3a53/10206/feature.webp 136w,/static/20f9d3273305db7851422eb35add3a53/89f08/feature.webp 272w,/static/20f9d3273305db7851422eb35add3a53/b077d/feature.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/20f9d3273305db7851422eb35add3a53/d902b/feature.png" data-srcset="/static/20f9d3273305db7851422eb35add3a53/6db3f/feature.png 136w,/static/20f9d3273305db7851422eb35add3a53/c76f0/feature.png 272w,/static/20f9d3273305db7851422eb35add3a53/d902b/feature.png 544w" alt="An Attitude of Gratitude for Open Source"/></picture><noscript><picture><source type="image/webp" srcSet="/static/20f9d3273305db7851422eb35add3a53/10206/feature.webp 136w,/static/20f9d3273305db7851422eb35add3a53/89f08/feature.webp 272w,/static/20f9d3273305db7851422eb35add3a53/b077d/feature.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/20f9d3273305db7851422eb35add3a53/d902b/feature.png" srcSet="/static/20f9d3273305db7851422eb35add3a53/6db3f/feature.png 136w,/static/20f9d3273305db7851422eb35add3a53/c76f0/feature.png 272w,/static/20f9d3273305db7851422eb35add3a53/d902b/feature.png 544w" alt="An Attitude of Gratitude for Open Source"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">An Attitude of Gratitude for Open Source</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">This happened today, in a discussion on github, regarding the “damage” done by having two alternative mainstream ways of integrating React.js with Ruby on Rails.</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ifaqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ifaqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/about-us/">about us</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_kfaqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_kfaqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">27 Jun 2016</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_vaqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_vaqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/the-react-on-rails-doctrine/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;262&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/bd929e768125c837832c13782ab10416/b7922/featured.webp 136w,/static/bd929e768125c837832c13782ab10416/46ed9/featured.webp 272w,/static/bd929e768125c837832c13782ab10416/e958b/featured.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/bd929e768125c837832c13782ab10416/f9121/featured.png" data-srcset="/static/bd929e768125c837832c13782ab10416/0f44c/featured.png 136w,/static/bd929e768125c837832c13782ab10416/220d8/featured.png 272w,/static/bd929e768125c837832c13782ab10416/f9121/featured.png 544w" alt="The React on Rails Doctrine"/></picture><noscript><picture><source type="image/webp" srcSet="/static/bd929e768125c837832c13782ab10416/b7922/featured.webp 136w,/static/bd929e768125c837832c13782ab10416/46ed9/featured.webp 272w,/static/bd929e768125c837832c13782ab10416/e958b/featured.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/bd929e768125c837832c13782ab10416/f9121/featured.png" srcSet="/static/bd929e768125c837832c13782ab10416/0f44c/featured.png 136w,/static/bd929e768125c837832c13782ab10416/220d8/featured.png 272w,/static/bd929e768125c837832c13782ab10416/f9121/featured.png 544w" alt="The React on Rails Doctrine"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">The React on Rails Doctrine</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">This document is an extension and complement to &quot;The Rails Doctrine.&quot;</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/react-on-rails/">react on rails</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ifeqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ifeqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_kfeqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_kfeqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">24 Jan 2016</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_veqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_veqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:33.333333333333336%;flex-basis:33.333333333333336%;flex-grow:0;flex-shrink:0;max-width:33.333333333333336%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 blog-category__StyledCol-sc-i4zaiy-1 eMtYwd kUpzce"><div><a class="BlogTile__StyledLink-sc-3gu07l-3 gwPFro" href="/blog/gogaruco-2013/"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained BlogTile__RoundImg-sc-3gu07l-1 lglJtK"><div style="max-width:544px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;361&#x27;%20width=&#x27;544&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#382828;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/b19af9570abf503b044c255dcc2aae2e/32c9e/image1.webp 136w,/static/b19af9570abf503b044c255dcc2aae2e/7fa51/image1.webp 272w,/static/b19af9570abf503b044c255dcc2aae2e/d241f/image1.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" data-src="/static/b19af9570abf503b044c255dcc2aae2e/6d37b/image1.jpg" data-srcset="/static/b19af9570abf503b044c255dcc2aae2e/7d926/image1.jpg 136w,/static/b19af9570abf503b044c255dcc2aae2e/5bba0/image1.jpg 272w,/static/b19af9570abf503b044c255dcc2aae2e/6d37b/image1.jpg 544w" alt="GoGaRuCo 2013: Community &gt; Code"/></picture><noscript><picture><source type="image/webp" srcSet="/static/b19af9570abf503b044c255dcc2aae2e/32c9e/image1.webp 136w,/static/b19af9570abf503b044c255dcc2aae2e/7fa51/image1.webp 272w,/static/b19af9570abf503b044c255dcc2aae2e/d241f/image1.webp 544w" sizes="(min-width: 544px) 544px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 544px) 544px, 100vw" decoding="async" loading="lazy" src="/static/b19af9570abf503b044c255dcc2aae2e/6d37b/image1.jpg" srcSet="/static/b19af9570abf503b044c255dcc2aae2e/7d926/image1.jpg 136w,/static/b19af9570abf503b044c255dcc2aae2e/5bba0/image1.jpg 272w,/static/b19af9570abf503b044c255dcc2aae2e/6d37b/image1.jpg 544w" alt="GoGaRuCo 2013: Community &gt; Code"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div><h5 class="H5-sc-1ei3sam-0 BlogTile__StyledH3-sc-3gu07l-0 ksjnPi gjyWtj">GoGaRuCo 2013: Community &gt; Code</h5></a><p class="P-sc-2fe20n-0 BlogTile__StyledP-sc-3gu07l-2 fduduP gMhwfl">A Newbie&#x27;s 2013 GoGaRuCo Experience</p><div class="MetaTags__MetaContainer-sc-14z1kk-0 iYlNpY"><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/rails/">rails</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_ifiqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_ifiqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><div class="MetaTags__CategoryWrapper-sc-14z1kk-2 eyfcvO"><a aria-current="page" class="MetaTags__Category-sc-14z1kk-1 cFUqCH" href="/blog/">Editor&#x27;s pick</a><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_kfiqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_kfiqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg></div><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">22 Sep 2013</span><svg viewBox="0 0 3 3" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-dot-_R_viqsq_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-dot-_R_viqsq_">Dot</title><circle cx="493.5" cy="945.5" r="1.5" transform="translate(-492 -944)" fill="#4E5B5E" fill-rule="evenodd"></circle></svg><span class="MetaTags__StyledMeta-sc-14z1kk-3 kxVtqD">by <!-- -->Justin Gordon</span></div></div></div></div></section></div><div class="WhatWeHaveDone__Wrapper-sc-1nnd7cc-0 fuSymU"><div style="box-sizing:border-box;position:relative;margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;max-width:1156px" class="Container__ContainerWrapper-sc-azyjet-0 cFpblv"><div style="margin-left:-16px;margin-right:-16px;display:flex;flex-grow:0;flex-shrink:0;align-items:normal;justify-content:flex-start;flex-direction:row;flex-wrap:wrap" class="Row__RowWrapper-sc-1hye4yz-0 dEimrw"><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:50%;flex-basis:50%;flex-grow:0;flex-shrink:0;max-width:50%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 eMtYwd"><div class="WhatWeHaveDone__FirstPart-sc-1nnd7cc-1 djetCA">Are you looking for a software development partner who can</div><div class="WhatWeHaveDone__FirstPart-sc-1nnd7cc-1 WhatWeHaveDone__SecondPart-sc-1nnd7cc-2 djetCA kQrZvV">develop modern, high-performance web apps and sites?</div><a class="Button__ButtonOutlinedGatsbyLink-sc-xxhl33-5 GoToButton__GoToButtonGatsbyStyled-sc-1abjbqg-1 gtLCY chqLVH WhatWeHaveDone__StyledGoToButton-sc-1nnd7cc-6 fzMvPu" href="/recent-work/"><span>See what we&#x27;ve done</span><svg color="darkerRed" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI GoToButton__StyledIcon-sc-1abjbqg-2" viewBox="0 0 24 16" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-arrow-right-_R_bcsq_"><title id="svg-arrow-right-_R_bcsq_">Arrow right</title><g fill="none" fill-rule="evenodd"><path d="M-322-1076h1440v3236H-322z"></path><path d="M0 7h20l-5.5-5.5L16 0l7 7 1 1-1 1-7 7-1.5-1.5L20 9H0z" fill="#B11100"></path></g></svg></a></div><div style="box-sizing:border-box;min-height:1px;position:relative;padding-left:16px;padding-right:16px;width:50%;flex-basis:50%;flex-grow:0;flex-shrink:0;max-width:50%;margin-left:0%;right:auto;left:auto" class="Col__ColWrapper-sc-1891fgc-0 WhatWeHaveDone__RightCol-sc-1nnd7cc-3 eMtYwd dNXGoq"><div class="WhatWeHaveDone__StyledComputerImage-sc-1nnd7cc-5 LjiCP"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained"><div style="max-width:750px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;750&#x27;%20width=&#x27;750&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/1b26327a838e1cd171ee5eed36dcf192/2ede0/computer.webp 116w,/static/1b26327a838e1cd171ee5eed36dcf192/2b4d1/computer.webp 232w,/static/1b26327a838e1cd171ee5eed36dcf192/1b22d/computer.webp 464w" sizes="(min-width: 464px) 464px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 464px) 464px, 100vw" decoding="async" loading="lazy" data-src="/static/1b26327a838e1cd171ee5eed36dcf192/8aab1/computer.png" data-srcset="/static/1b26327a838e1cd171ee5eed36dcf192/9e4b3/computer.png 116w,/static/1b26327a838e1cd171ee5eed36dcf192/a0ed5/computer.png 232w,/static/1b26327a838e1cd171ee5eed36dcf192/8aab1/computer.png 464w" alt="woman programming"/></picture><noscript><picture><source type="image/webp" srcSet="/static/1b26327a838e1cd171ee5eed36dcf192/2ede0/computer.webp 116w,/static/1b26327a838e1cd171ee5eed36dcf192/2b4d1/computer.webp 232w,/static/1b26327a838e1cd171ee5eed36dcf192/1b22d/computer.webp 464w" sizes="(min-width: 464px) 464px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 464px) 464px, 100vw" decoding="async" loading="lazy" src="/static/1b26327a838e1cd171ee5eed36dcf192/8aab1/computer.png" srcSet="/static/1b26327a838e1cd171ee5eed36dcf192/9e4b3/computer.png 116w,/static/1b26327a838e1cd171ee5eed36dcf192/a0ed5/computer.png 232w,/static/1b26327a838e1cd171ee5eed36dcf192/8aab1/computer.png 464w" alt="woman programming"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div></div><div class="WhatWeHaveDone__StyledBoardHand-sc-1nnd7cc-4 ZRZAk"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained"><div style="max-width:750px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height=&#x27;750&#x27;%20width=&#x27;750&#x27;%20xmlns=&#x27;http://www.w3.org/2000/svg&#x27;%20version=&#x27;1.1&#x27;%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><picture><source type="image/webp" data-srcset="/static/366d9e394aa9719232e34ca14d30fea6/e3d76/board_hand.webp 70w,/static/366d9e394aa9719232e34ca14d30fea6/469fe/board_hand.webp 140w,/static/366d9e394aa9719232e34ca14d30fea6/b7e34/board_hand.webp 280w" sizes="(min-width: 280px) 280px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 280px) 280px, 100vw" decoding="async" loading="lazy" data-src="/static/366d9e394aa9719232e34ca14d30fea6/6d61f/board_hand.png" data-srcset="/static/366d9e394aa9719232e34ca14d30fea6/99c1e/board_hand.png 70w,/static/366d9e394aa9719232e34ca14d30fea6/af989/board_hand.png 140w,/static/366d9e394aa9719232e34ca14d30fea6/6d61f/board_hand.png 280w" alt="hand on board adjusting a fluxogram"/></picture><noscript><picture><source type="image/webp" srcSet="/static/366d9e394aa9719232e34ca14d30fea6/e3d76/board_hand.webp 70w,/static/366d9e394aa9719232e34ca14d30fea6/469fe/board_hand.webp 140w,/static/366d9e394aa9719232e34ca14d30fea6/b7e34/board_hand.webp 280w" sizes="(min-width: 280px) 280px, 100vw"/><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 280px) 280px, 100vw" decoding="async" loading="lazy" src="/static/366d9e394aa9719232e34ca14d30fea6/6d61f/board_hand.png" srcSet="/static/366d9e394aa9719232e34ca14d30fea6/99c1e/board_hand.png 70w,/static/366d9e394aa9719232e34ca14d30fea6/af989/board_hand.png 140w,/static/366d9e394aa9719232e34ca14d30fea6/6d61f/board_hand.png 280w" alt="hand on board adjusting a fluxogram"/></picture></noscript>
383<script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script>
383</div></div></div></div></div></div></main><footer><div style="box-sizing:border-box;position:relative;margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;max-width:1156px" class="Container__ContainerWrapper-sc-azyjet-0 cFpblv"><div class="Footer__FooterRow-sc-12ia8lp-0 bZPpoQ"><div class="Footer__InfoCol-sc-12ia8lp-4 tHzLz"><a href="/"><svg class="IconShakacode__FooterIconShakacode-sc-1df0ktu-1 kmesXN" viewBox="0 0 206 47" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-add-photo-_R_2b4q_"><title id="svg-add-photo-_R_2b4q_">Add Photo</title><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b-shaka"><stop stop-color="#F32B05" offset="0%"></stop><stop stop-color="#B00012" offset="100%"></stop></linearGradient><linearGradient x1="50%" y1="24.608%" x2="50%" y2="72.622%" id="c-shaka"><stop stop-color="#FF6956" offset=".792%"></stop><stop stop-color="#FF6956" stop-opacity=".01" offset="96.579%"></stop></linearGradient><path d="M11.207 10h41.586a2 2 0 011.77 1.069l8.702 16.534a2 2 0 01-.453 2.437L33.317 55.848a2 2 0 01-2.634 0L1.188 30.04a2 2 0 01-.453-2.437l8.703-16.534A2 2 0 0111.208 10z" id="a-shaka"></path></defs><g fill="none" fill-rule="evenodd"><text font-family="&#x27;Montserrat Bold&#x27;, Montserrat, &#x27;Open Sans&#x27;, Arial, sans-serif" font-size="20" font-weight="bold" fill="#333738" transform="translate(0 -10)"><tspan x="80" y="41">ShakaCode</tspan></text><g transform="translate(0 -10)"><path d="M0 0h64v64H0z"></path><mask id="d-shaka" fill="#fff"><use xlink:href="#a-shaka"></use></mask><use fill="url(#b-shaka)" xlink:href="#a-shaka"></use><path d="M7 43c22.118-2.144 33.57-6.578 34.354-13.303 1.178-10.088-17.4-1.454-20.927-1 9.658-7.17 22.018-11.721 37.08-13.652H66V57H7V43z" fill="url(#c-shaka)" mask="url(#d-s
383haka)"></path></g></g></svg></a><div class="Footer__CompanyDetails-sc-12ia8lp-5 ZjBBa">ShakaCode, LLC<div class="Footer__CompanyNote-sc-12ia8lp-6 bbDMAr">Consulting since 2011</div><address class="Footer__Address-sc-12ia8lp-7 hjcyZu">141 Makahiki Street<br/>Paia, HI 96779</address></div><a href="tel:808-281-7272" class="Footer__Phone-sc-12ia8lp-8 ktsrTa">808-281-7272</a></div><div class="Footer__MenuCol-sc-12ia8lp-9 jqtrRj"><h6 class="H6-sc-1fqdyt3-0 Footer__ColumnHeader-sc-12ia8lp-3 dIDHqE koKcya"><a class="Footer__StyledLink-sc-12ia8lp-13 cKuXgv" href="/about/">About</a></h6><ul class="Footer__List-sc-12ia8lp-11 gkRlql"><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/about/#why">Why us</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/about/#our-values">Our values</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/about/#team">Meet the team</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/career/">Join the team</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/contact/">Contact</a></li></ul></div><div class="Footer__MenuCol-sc-12ia8lp-9 jqtrRj"><h6 class="H6-sc-1fqdyt3-0 Footer__ColumnHeader-sc-12ia8lp-3 dIDHqE koKcya"><a class="Footer__StyledLink-sc-12ia8lp-13 cKuXgv" href="/services/">Services</a></h6><ul class="Footer__List-sc-12ia8lp-11 gkRlql"><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/services/#what-we-do">What we do</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/services/ai-consulting/">AI Automation</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/design/">Design</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/react-on-rails-pro/">React on Rails Pro</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/shakaperf/">ShakaPerf</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/services/web-scraping-and-data-analysis/">Web Scraping &amp; Data Analysis</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/open-source-projects/">Open source projects</a></li></ul></div><div class="Footer__MenuCol-sc-12ia8lp-9 jqtrRj"><h6 class="H6-sc-1fqdyt3-0 Footer__ColumnHeader-sc-12ia8lp-3 dIDHqE koKcya">Portfolio</h6><ul class="Footer__List-sc-12ia8lp-11 gkRlql"><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/recent-work/">Recent work</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/hichee/">HiChee.com</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/shakaflow/">ShakaFlow</a></li></ul></div><div class="Footer__MenuCol-sc-12ia8lp-9 jqtrRj"><h6 class="H6-sc-1fqdyt3-0 Footer__ColumnHeader-sc-12ia8lp-3 dIDHqE koKcya">Insights</h6><ul class="Footer__List-sc-12ia8lp-11 gkRlql"><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a aria-current="page" class="" href="/blog/">Blog</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="https://forum.shakacode.com" target="_blank" rel="noopener noreferrer">Forum</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/talks/">Talks</a></li></ul></div><div class="Footer__MenuCol-sc-12ia8lp-9 jqtrRj"><h6 class="H6-sc-1fqdyt3-0 Footer__ColumnHeader-sc-12ia8lp-3 dIDHqE koKcya">Docs</h6><ul class="Footer__List-sc-12ia8lp-11 gkRlql"><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="https://reactonrails.com/docs/" target="_blank" rel="noopener noreferrer">React on Rails</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="https://reactonrails.com/docs/pro/" target="_blank" rel="noopener noreferrer">React on Rails Pro</a></li><li class="Footer__Item-sc-12ia8lp-12 hJkTqS"><a href="/control-plane-flow/docs/">Control Plane Flow</a></li></ul></div></div><div class="Footer__CopyrightSocialRow-sc-12ia8lp-1 eYKAGK"><div class="Footer__FooterMeta-sc-12ia8lp-2 ldfdIq"><div>Copyright <!-- -->2026<!-- --> ShakaCode</div><a class="Footer__FooterMetaLink-sc-12ia8lp-14 fGCfCH" href="/privacy/">Privacy &amp; Cookies</a><button type="button" class="Footer__CookieSettingsButton-sc-12ia8lp-15 eihjKf">Cookie Settings</button></div><div class="Footer__SocialCol-sc-12ia8lp-10 fpKXnI"><a href="https://invite.reactrails.com" target="_blank" rel="noopener noreferrer" class="Button__ButtonOutlinedLink-sc-xxhl33-4 GoToButton__GoToButtonStyled-sc-1abjbqg-0 hwslQr Idquw Footer__StyledGoToButton-sc-12ia8lp-17 goWloY"><svg class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI Footer__StyledIconSlack-sc-12ia8lp-16 hOnBbQ GoToButton__StyledIcon-sc-1abjbqg-2" color="darkerRed" viewB
383ox="0 0 40 40" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-slack-_R_9l4q_"><title id="svg-slack-_R_9l4q_">Slack</title><g id="Slack" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><rect id="Rectangle-Slack" x="0" y="0" width="40" height="40"></rect><path d="M8.98355217,25.0128609 C8.98355217,27.2099217 7.18871304,29.0047609 4.99181739,29.0047609 C2.79500435,29.0047609 1.00024783,27.2098391 1.00024783,25.0128609 C1.00024783,22.8161304 2.79508696,21.0213739 4.99181739,21.0213739 L8.98355217,21.0213739 L8.98355217,25.0128609 Z" id="Path-1" fill="#E01E5A" fill-rule="nonzero"></path><path d="M10.9953217,25.0128609 C10.9953217,22.8161304 12.7902435,21.0213739 14.9870565,21.0213739 C17.1838696,21.0213739 18.9787087,22.816213 18.9787087,25.0128609 L18.9787087,35.0083478 C18.9787087,37.2050783 17.183787,38.9999174 14.9870565,38.9999174 C12.7901609,38.9999174 10.9953217,37.2049957 10.9953217,35.0083478 L10.9953217,25.0128609 Z" id="Path-2" fill="#E01E5A" fill-rule="nonzero"></path><path d="M14.9870565,8.98355217 C12.7901609,8.98355217 10.9953217,7.18863043 10.9953217,4.99181739 C10.9953217,2.79500435 12.7902435,1.00016522 14.9870565,1.00016522 C17.1838696,1.00016522 18.9787087,2.79508696 18.9787087,4.99181739 L18.9787087,8.98355217 L14.9870565,8.98355217 L14.9870565,8.98355217 Z" id="Path-3" fill="#36C5F0" fill-rule="nonzero"></path><path d="M14.9870565,10.9954043 C17.1838696,10.9954043 18.9787087,12.7902435 18.9787087,14.9871391 C18.9787087,17.1839522 17.183787,18.9786261 14.9870565,18.9786261 L4.99173478,18.9786261 C2.79492174,18.9786261 1.00016522,17.1838696 1.00016522,14.9871391 C1.00016522,12.7901609 2.79500435,10.9954043 4.99173478,10.9954043 L14.9870565,10.9954043 L14.9870565,10.9954043 Z" id="Path-4" fill="#36C5F0" fill-rule="nonzero"></path><path d="M31.016613,14.9871391 C31.016613,12.7901609 32.811287,10.9954043 35.0082652,10.9954043 C37.2050783,10.9954043 38.9997522,12.7902435 38.9997522,14.9871391 C38.9997522,17.1839522 37.2049957,18.9786261 35.0082652,18.9786261 L31.016613,18.9786261 L31.016613,14.9871391 L31.016613,14.9871391 Z" id="Path-5" fill="#2EB67D" fill-rule="nonzero"></path><path d="M29.0046783,14.9871391 C29.0046783,17.1839522 27.2097565,18.9786261 25.0129435,18.9786261 C22.8161304,18.9786261 21.0212913,17.1838696 21.0212913,14.9871391 L21.0212913,4.99173478 C2
3831.0212913,2.79492174 22.816213,1.00008261 25.0129435,1.00008261 C27.2098391,1.00008261 29.0046783,2.79500435 29.0046783,4.99173478 L29.0046783,14.9871391 L29.0046783,14.9871391 Z" id="Path-6" fill="#2EB67D" fill-rule="nonzero"></path><path d="M25.0129435,31.0165304 C27.2098391,31.0165304 29.0046783,32.8113696 29.0046783,35.0082652 C29.0046783,37.2049957 27.2097565,38.9998348 25.0129435,38.9998348 C22.8161304,38.9998348 21.0212913,37.204913 21.0212913,35.0082652 L21.0212913,31.0165304 L25.0129435,31.0165304 L25.0129435,31.0165304 Z" id="Path-7" fill="#ECB22E" fill-rule="nonzero"></path><path d="M25.0129435,29.0047609 C22.8161304,29.0047609 21.0212913,27.2098391 21.0212913,25.0128609 C21.0212913,22.8161304 22.816213,21.0213739 25.0129435,21.0213739 L35.0083478,21.0213739 C37.2051609,21.0213739 38.9998348,22.816213 38.9998348,25.0128609 C38.9998348,27.2099217 37.2050783,29.0047609 35.0083478,29.0047609 L25.0129435,29.0047609 Z" id="Path-8" fill="#ECB22E" fill-rule="nonzero"></path></g></svg><span>Join our Slack</span></a><a href="https://github.com/shakacode" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-github-_R_2l4q_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-github-_R_2l4q_">Github</title><path d="M16 32a16 16 0 110-32 16 16 0 010 32zm2.8-14.5a1 1 0 00-.8.5c-.3.3-.4.6-.4 1 0 .5.1.9.4 1.2.2.3.5.4.8.4.3 0 .5-.1.8-.4.2-.3.3-.7.3-1.1 0-.5-.1-.8-.3-1.1-.3-.3-.5-.5-.8-.5zm4-4v-1.3c-.1-.9-.3-1.7-.6-2.4h-.5l-1.4.6-2.1 1.2c-.5-.2-1.2-.3-2.2-.3-1 0-1.7.1-2.2.3a9.4 9.4 0 00-4-1.8c-.3.7-.5 1.5-.5 2.4v1.3c-.9 1-1.3 2-1.3 3.4 0 .8.1 1.6.3 2.2l.7 1.7c.3.4.7.8 1.2 1a5.6 5.6 0 002.4 1.1 10.4 10.4 0 002.5.2 20.4 20.4 0 005.5-.5 5.7 5.7 0 002.4-1.8l.7-1.7A8 8 0 0024 17c0-1.3-.4-2.4-1.3-3.4zM16 22.3c-2 0-3.4-.2-4.4-.7-1-.4-1.4-1.3-1.4-2.8 0-.8.3-1.5.9-2 .2-.2.5-.4 1-.5l1-.1a45.2 45.2 0 013 .1h3.7c.4 0 .8.2 1.1.5.7.5 1 1.2 1 2 0 1.5-.5 2.4-1.5 2.8-1 .5-2.4.7-4.4.7zm-2.7-4.8a1 1 0 00-.9.5c-.2.3-.3.6-.3 1 0 .5.1.9.3 1.2.3.3.5.4.9.4.3 0 .5-.1.7-.4.3-.3.4-.7.4-1.1 0-.5-.1-.8-.4-1.1-.2-.3-.4-.5-.7-.5z" fill="#242A2D" fill-rule="evenodd"></path></svg></a><a href="https://linkedin.com/company/shakacode" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-linkedin-_R_3l4q_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-linkedin-_R_3l4q_">Linkedin</title><path d="M16 32a16 16 0 110-32 16 16 0 010 32zm8-10v-5.8c0-3.1-1.7-4.6-4-4.6-1.8 0-2.6 1-3 1.7V12h-3.5V22H17v-5.7-.8c.3-.6.9-1.2 1.8-1.2 1.3 0 1.8 1 1.8 2.3V22H24zM10 10.5c1.1 0 1.9-.8 1.9-1.8S11 7 9.9 7C8.8 7 8 7.8 8 8.7c0 1 .7 1.8 1.9 1.8zM11.5 22V11.9H8.2V22h3.4z" fill="#0077B5" fill-rule="evenodd"></path></svg></a><a href="https://twitter.com/shakacode" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-labelledby="svg-twitter-_R_4l4q_" class="SvgIcon__StyledSvgIcon-sc-pvlift-0 ijOdlI"><title id="svg-twitter-_R_4l4q_">Twitter</title><path d="M16 32a16 16 0 110-32 16 16 0 010 32zm8-20.5c-.6.3-1.2.5-1.9.6.7-.5 1.2-1 1.5-1.9-.7.4-1.4.7-2.1.8a3.3 3.3 0 00-5.6 3A9.3 9.3 0 019 10.6a3.3 3.3 0 001 4.4c-.5 0-1-.2-1.5-.4 0 1.6 1.2 3 2.7 3.2a3.3 3.3 0 01-1.5 0 3.3 3.3 0 003 2.4A6.6 6.6 0 018 21.5a9.3 9.3 0 0014.4-8.3c.6-.4 1.2-1 1.6-1.7z" fill="#1EA1F2" fill-rule="evenodd"></path></svg></a></div></div></div></footer></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div>
383<script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/blog/";/*]]>*/</script>
383<!-- slice-start id="_gatsby-scripts-1" -->
384          
384<script
385            id="gatsby-chunk-mapping"
386          >
387            window.___chunkMapping="{\"app\":[\"/app-830fa17965a199005046.js\"],\"component---src-pages-404-tsx\":[\"/component---src-pages-404-tsx-55c0f3992fe239090859.js\"],\"component---src-pages-about-tsx\":[\"/component---src-pages-about-tsx-031aa30c88ef1cdbfde7.js\"],\"component---src-pages-career-tsx\":[\"/component---src-pages-career-tsx-911d4b54a9d9cdfd34da.js\"],\"component---src-pages-contact-tsx\":[\"/component---src-pages-contact-tsx-94ee018bf82fd4842bee.js\"],\"component---src-pages-design-tsx\":[\"/component---src-pages-design-tsx-5d7a0a58880c1cad4c89.js\"],\"component---src-pages-hichee-tsx\":[\"/component---src-pages-hichee-tsx-3d2e9662e55d72a2d032.js\"],\"component---src-pages-index-tsx\":[\"/component---src-pages-index-tsx-af84030dd314df6a53b7.js\"],\"component---src-pages-open-source-projects-tsx\":[\"/component---src-pages-open-source-projects-tsx-f8605d4376c54d1e6176.js\"],\"component---src-pages-privacy-tsx\":[\"/component---src-pages-privacy-tsx-4b0c9361250201b21e62.js\"],\"component---src-pages-react-on-rails-pro-tsx\":[\"/component---src-pages-react-on-rails-pro-tsx-e985b8c12f0afd9884bf.js\"],\"component---src-pages-recent-work-bmdi-tsx\":[\"/component---src-pages-recent-work-bmdi-tsx-865eb70fb7b0a4ae6be4.js\"],\"component---src-pages-recent-work-brivity-tsx\":[\"/component---src-pages-recent-work-brivity-tsx-24f2e68f13c68efd6a2a.js\"],\"component---src-pages-recent-work-datacenters-tsx\":[\"/component---src-pages-recent-work-datacenters-tsx-51fe3840bdb49bce69d2.js\"],\"component---src-pages-recent-work-gget-tsx\":[\"/component---src-pages-recent-work-gget-tsx-4bf61ed5baa3adbd8fa3.js\"],\"component---src-pages-recent-work-ivacation-online-tsx\":[\"/component---src-pages-recent-work-ivacation-online-tsx-84d41fd140fc0bd6aef2.js\"],\"component---src-pages-recent-work-popmenu-integrations-tsx\":[\"/component---src-pages-recent-work-popmenu-integrations-tsx-95808ec7c4820a21eb17.js\"],\"component---src-pages-recent-work-popmenu-tsx\":[\"/component---src-pages-recent-work-popmenu-tsx-2606a1145b225e21d31a.js\"],\"component---src-pages-recent-work-printivity-tsx\":[\"/component---src-pages-recent-work-printivity-tsx-458a1b562b5ec2e8ce9d.js\"],\"component---src-pages-recent-work-snorkel-tsx\":[\"/component---src-pages-recent-work-snorkel-tsx-48fba2f356e22715fcf4.js\"],\"component---src-pages-recent-work-tsx\":[\"/component---src-pages-recent-work-tsx-f457435ed9204f832c22.js\"],\"component---src-pages-services-ai-consulting-index-tsx\":[\"/component---src-pages-services-ai-consulting-index-tsx-61db0183541f7ff91185.js\"],\"component---src-pages-services-it-infrastructure-optimization-tsx\":[\"/component---src-pages-services-it-infrastructure-optimization-tsx-5965eb8310cd387f554e.js\"],\"component---src-pages-services-performance-optimization-tsx\":[\"/component---src-pages-services-performance-optimization-tsx-31c4a06b797cda629ea8.js\"],\"component---src-pages-services-ts
387x\":[\"/component---src-pages-services-tsx-2ea2e22291f9fe4184ec.js\"],\"component---src-pages-services-web-scraping-and-data-analysis-index-tsx\":[\"/component---src-pages-services-web-scraping-and-data-analysis-index-tsx-d399b82ece155e927e1c.js\"],\"component---src-pages-services-web-scraping-and-data-analysis-thank-you-for-booking-tsx\":[\"/component---src-pages-services-web-scraping-and-data-analysis-thank-you-for-booking-tsx-feb7d297d7928f185763.js\"],\"component---src-pages-shakaflow-tsx\":[\"/component---src-pages-shakaflow-tsx-8766f83adffdb4e0c925.js\"],\"component---src-pages-shakaperf-tsx\":[\"/component---src-pages-shakaperf-tsx-16dc667de74ff72d6749.js\"],\"component---src-pages-talks-tsx\":[\"/component---src-pages-talks-tsx-dfafc15df5b5d2d0f5b3.js\"],\"component---src-pages-technologies-cypress-on-rails-tsx\":[\"/component---src-pages-technologies-cypress-on-rails-tsx-f2c79753f2f0f7e451ed.js\"],\"component---src-pages-technologies-domo-tsx\":[\"/component---src-pages-technologies-domo-tsx-c8faa6fd0d4e21322960.js\"],\"component---src-pages-technologies-gatsby-tsx\":[\"/component---src-pages-technologies-gatsby-tsx-9d78e572093f23c18dcc.js\"],\"component---src-pages-technologies-graphql-pro-tsx\":[\"/component---src-pages-technologies-graphql-pro-tsx-a597e50b3adcfe892383.js\"],\"component---src-pages-technologies-next-js-tsx\":[\"/component---src-pages-technologies-next-js-tsx-ba49f1c63c73948f9864.js\"],\"component---src-pages-technologies-react-native-tsx\":[\"/component---src-pages-technologies-react-native-tsx-f4ca39d7d96d3d5fc595.js\"],\"component---src-pages-technologies-react-on-rails-tsx\":[\"/component---src-pages-technologies-react-on-rails-tsx-365542f088f89cc75425.js\"],\"component---src-pages-technologies-react-tsx\":[\"/component---src-pages-technologies-react-tsx-10a96100d8cdd54ff54b.js\"],\"component---src-pages-technologies-rescript-tsx\":[\"/component---src-pages-technologies-rescript-tsx-3f952a713abdd28926fe.js\"],\"component---src-pages-technologies-ruby-on-rails-tsx\":[\"/component---src-pages-technologies-ruby-on-rails-tsx-a4f30cabfed89c0e4ae1.js\"],\"component---src-pages-technologies-rust-tsx\":[\"/component---src-pages-technologies-rust-tsx-7e05e1fd9dae2c7fe19e.js\"],\"component---src-pages-technologies-shakapacker-tsx\":[\"/component---src-pages-technologies-shakapacker-tsx-bb53601721b438406c3d.js\"],\"component---src-pages-technologies-typescript-tsx\":[\"/component---src-pages-technologies-typescript-tsx-8d69678e8c81ddd9a337.js\"],\"component---src-pages-technologies-wordpress-tsx\":[\"/component---src-pages-technologies-wordpress-tsx-7f2d8c4dc5c71f969d02.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-2014-golden-gate-ruby-conference-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-2014-golden-gate-ruby-conference-index-mdx-7f82f80b43dfd016176d.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-a-definite-guide-to-e-2-e-ci-setup-react-native-using-cavy-cli-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-a-definite-guide-to-e-2-e-ci-setup-react-native-using-cavy-cli-index-mdx-bd9fc1dd98785eaac3b4.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-a-year-of-development-with-redux-part-1-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-a-year-of-development-with-redux-part-1-index-mdx-0758434c9c4c95b2a659.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-a-year-of-development-with-redux-part-2-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-a-year-of-development-with-redux-part-2-index-mdx-e0ba4faa175309a65ca4.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-a-year-of-development-with-redux-part-3-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-a-year-of-development-with-redux-part-3-index-mdx-3e4ee8af4e25f6a70a4c.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-adding-a-js-library-when-u
387sing-webpack-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-adding-a-js-library-when-using-webpack-index-mdx-e49676b61e5a3e176898.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-ai-assisted-migrations-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-ai-assisted-migrations-index-mdx-75b5ba4797be489da646.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-alfred-tips-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-alfred-tips-index-mdx-7576b4060f120f43b186.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-an-attitude-of-gratitude-for-open-source-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-an-attitude-of-gratitude-for-open-source-index-mdx-7ce87c514801239e5cbc.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-an-introduction-to-test-suite-optimization-in-ruby-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-an-introduction-to-test-suite-optimization-in-ruby-index-mdx-78e18781405cb67d39e9.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-audit-30-ai-assisted-commits-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-audit-30-ai-assisted-commits-index-mdx-2a0e1434a016c721b1ac.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-bulletproof-enums-using-immutable-records-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-bulletproof-enums-using-immutable-records-index-mdx-52c9a8dc2c383e8d9ea1.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-buying-apple-products-with-amex-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-buying-apple-products-with-amex-index-mdx-1eb8dc3f859046178485.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-can-shakacode-help-you-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-can-shakacode-help-you-index-mdx-cfd6614c1452719a8d60.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-capybara-phantomjs-poltergeist-rspec-tips-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-capybara-phantomjs-poltergeist-rspec-tips-index-mdx-551314a4b39063da8dce.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-choosing-between-kamal-control-plane-shakacode-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-choosing-between-kamal-control-plane-shakacode-index-mdx-424f646696611045f4b1.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-client-engagement-model-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-client-engagement-model-index-mdx-2b20dc384d14890f7a18.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-cloudinary-to-self-hosted-image-pipeline-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-cloudinary-to-self-hosted-image-pipeline-index-mdx-07435d5ccd322ad805f4.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-code-coverage-cannot-see-a-cookie-banner-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-code-coverage-cannot-see-a-cookie-banner-index-mdx-952f99cdf31edfd046a7.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-coffeescript-chrome-extensions-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-coffeescript-chrome-extensions-index-mdx-f37a0ac5c50151e9b96b.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-comprehensive-guide-to-simplecov-gem-in-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-comprehensive-guide-to-simplecov-gem-in-rails-index-mdx-6a4214d60cdb1fee9a28.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-consulting-vs-full-time-hires-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-consulting-vs-full-time-hires-index-mdx-a5b52ad20cfdf1cc7731.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-cool
387-things-you-can-do-with-first-class-modules-in-rescript-react-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-cool-things-you-can-do-with-first-class-modules-in-rescript-react-index-mdx-af5009b327603f74e660.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-cut-demo-hosting-costs-with-scale-to-zero-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-cut-demo-hosting-costs-with-scale-to-zero-index-mdx-867403260410c1f72c2a.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-debugging-made-easy-with-pry-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-debugging-made-easy-with-pry-index-mdx-e194dfb9635dcb9d3b01.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-defer-unique-constraints-in-postgresql-with-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-defer-unique-constraints-in-postgresql-with-rails-index-mdx-794a0d73fb8518ea5a7c.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-easy-react-server-rendering-with-webpacker-v-4-and-react-on-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-easy-react-server-rendering-with-webpacker-v-4-and-react-on-rails-index-mdx-e2624f79af9c91795eeb.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-eliminate-n-1-queries-with-bullet-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-eliminate-n-1-queries-with-bullet-index-mdx-fd8e4549e8d07a546e17.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-eliminating-illegal-state-in-rescript-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-eliminating-illegal-state-in-rescript-index-mdx-9f9096ff0645db3ba44a.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-ember-dot-js-hello-world-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-ember-dot-js-hello-world-index-mdx-10854cc34cf0367c8c2f.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-emberjs-rails-4-tutorial-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-emberjs-rails-4-tutorial-index-mdx-d8b4dd78fb6fa5cfd8fb.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-empower-your-rails-application-with-cancancan-gem-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-empower-your-rails-application-with-cancancan-gem-index-mdx-3effebd6c2ad8549f06c.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-enums-and-queries-in-rails-4-dot-1-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-enums-and-queries-in-rails-4-dot-1-index-mdx-b1d7f6ab9c56fddb0b82.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-exploring-the-ffaker-gem-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-exploring-the-ffaker-gem-index-mdx-24de68a7b3fdd16702e0.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-fast-tests-comparing-zeus-with-spring-on-rails-4-dot-1-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-fast-tests-comparing-zeus-with-spring-on-rails-4-dot-1-index-mdx-dea24b3d8a82fad7a2ec.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-flaky-visual-regression-tests-and-what-to-do-about-them-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-flaky-visual-regression-tests-and-what-to-do-about-them-index-mdx-6da82eed684d9eb7fc1d.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-front-end-sadness-to-happiness-the-react-on-rails-story-at-goruco-2017-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-front-end-sadness-to-happiness-the-react-on-rails-story-at-goruco-201
3877-index-mdx-06202e8a3da2cf74781a.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-general-troubleshooting-and-getting-started-with-react-on-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-general-troubleshooting-and-getting-started-with-react-on-rails-index-mdx-62cc85f28107f5e3d197.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-getting-started-with-discourse-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-getting-started-with-discourse-index-mdx-2a8afd1bfad6cef7955d.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-github-stacked-prs-visual-regression-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-github-stacked-prs-visual-regression-index-mdx-251e444d14bbfcbb77ee.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-gogaruco-2013-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-gogaruco-2013-index-mdx-86eec9ebd72028cd6328.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-gogaruco-pictures-2014-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-gogaruco-pictures-2014-index-mdx-f72f33e4ffa7de169647.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-graphql-in-ruby-on-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-graphql-in-ruby-on-rails-index-mdx-39dbace667eb797440fe.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-headless-chrome-automation-in-rails-using-ferrum-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-headless-chrome-automation-in-rails-using-ferrum-index-mdx-e85e30918fde61bfa8a8.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-how-i-almost-fell-for-phishing-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-how-i-almost-fell-for-phishing-index-mdx-46523fb8e0588ac91f35.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-how-much-client-side-javascript-in-rails-4-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-how-much-client-side-javascript-in-rails-4-index-mdx-f04d1baafa0c1bd233c2.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-how-to-use-different-versions-of-a-file-for-client-and-server-rendering-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-how-to-use-different-versions-of-a-file-for-client-and-server-rendering-index-mdx-39f2b090680588f631c5.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-hvmns-90-reduction-in-server-response-time-from-react-on-rails-pro-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-hvmns-90-reduction-in-server-response-time-from-react-on-rails-pro-index-mdx-3987f7199411a00ea69f.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-identify-unused-routes-in-rails-7-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-identify-unused-routes-in-rails-7-index-mdx-ff98cecb21903eb4e1d7.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-influencing-webpacker-rather-than-forking-to-support-webpacker-in-react-on-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-influencing-webpacker-rather-than-forking-to-support-webpacker-in-react-on-rails-index-mdx-e9d8f969f5069f93a29b.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-integrating-webpack-and-the-es-6-transpiler-into-an-existing-rails-project-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-integrating-webpack-and-the-es-6-transpiler-into-an-existing-rails-project-index-mdx-37d3abb6f2e6cf8c3215.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-introducing-playwright-support-in-cypress-on-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-introducing-playwright-support-in-cypress-on-rails-index-mdx-ba6c8d7515cb230c173b.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-introducing-react-on-rails-v-9-with-webpacker-support-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-introducing-react-on-rails-v-9-with-webpacker-support-index-mdx-e29455e842b726ffa987.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-introduction-to-cypress-on-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-introduction-to-cypress-on-rails-index-mdx-0779100d86a97cdce3bf.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-isomorphic-react-with-rails-part-1-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-isomorphic-react-with-rails-part-1-index-mdx-48432f59394cd89dc4f6.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-isomorphic-react-with-rails-part-2-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-isomorphic-react-with-rails-part-2-index-mdx-7692c4fcd33692463f38.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-isomorphic-react-with-rails-part-3-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-isomorphic-react-with-rails-part-3-index-mdx-2d77dd46adf29d008c3c.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-isomorphic-react-with-rails-part-4-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-isomorphic-react-with-rails-part-4-index-mdx-f985395de7ee20abe9f9.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-keeping-your-database-migrations-strong-with-strong-migrations-gem-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-keeping-your-database-migrations-strong-with-strong-migrations-gem-index-mdx-b2b1f0b9abbfe36d627d.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-level-up-your-ruby-code
387-with-draper-decorators-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-level-up-your-ruby-code-with-draper-decorators-index-mdx-e702b50cded03f7d8074.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-manage-rails-app-business-logic-using-active-interaction-gem-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-manage-rails-app-business-logic-using-active-interaction-gem-index-mdx-5701ddf36a68483b2909.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-managing-external-data-sources-in-e-2-e-testing-for-cross-platform-react-native-application-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-managing-external-data-sources-in-e-2-e-testing-for-cross-platform-react-native-application-index-mdx-2bb065b1cc719e35771f.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-masking-pii-with-ruby-gsub-with-regular-expression-named-match-groups-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-masking-pii-with-ruby-gsub-with-regular-expression-named-match-groups-index-mdx-13b4a1582c9057e28b40.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-mastering-authorization-in-rails-with-pundit-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-mastering-authorization-in-rails-with-pundit-index-mdx-64d05fcd4a998693fe17.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-maximizing-code-quality-with-rails-pre-commit-and-pre-push-hooks-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-maximizing-code-quality-with-rails-pre-commit-and-pre-push-hooks-index-mdx-d38a063e07af6e61d669.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-metaprogramming-in-ruby-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-metaprogramming-in-ruby-index-mdx-a2270879d3c9f208a576.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-migrating-from-angular-to-react-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-migrating-from-angular-to-react-index-mdx-646033e5a4c51718d343.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-migrating-from-bash-to-zsh-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-migrating-from-bash-to-zsh-index-mdx-18d84596cc2b675cfc95.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-migrating-from-capybara-webkit-to-poltergeist-phantomjs-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-migrating-from-capybara-webkit-to-poltergeist-phantomjs-index-mdx-3935fcef72b8a93c6138.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-migration-to-webpack-2-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-migration-to-webpack-2-index-mdx-23f41e4ea21dd8db434d.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-migrations-on-sequelize-cli-for-beginners-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-migrations-on-sequelize-cli-for-beginners-index-mdx-f569b0a590bdc4cc1af1.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-my-react-on-rails-talk-at-the-la-ruby-rails-meetup-november-10-2016-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-my-react-on-rails-talk-at-the-la-ruby-rails-meetup-november-10-2016-index-mdx-7d6028e0a9cd877720ab.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-octopress-setup-with-github-and-org-mode-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-octopress-setup-with-github-and-org-mode-index-mdx-28a21c16cff8a7462c7d.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-octopress-setup-with-github-and-org-mode-v-2-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-octopress-setup-with-github-and-org-mode-v-2-index-mdx-34ea38cb508b63c610f6.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-optimized-parallelized-circleci-configuration-for-reactonrails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-optimized-parallelized-circleci-configuration-for-reactonrails-index-mdx-85c10e4da56fafdc6406.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-optimizing-google-fonts-on-gatsby-sites-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-optimizing-google-fonts-on-gatsby-sites-index-mdx-87cf345e49be2fcc8ca9.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-optimizing-js-bundle-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-optimizing-js-bundle-index-mdx-8a75a45ff27bbe4b3f56.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-pry-ruby-and-fun-with-the-hash-constructor-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-pry-ruby-and-fun-with-the-hash-constructor-index-mdx-8df790bc24f3b0a58b9e.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-pry-ruby-array-zip-csv-and-the-hash-constructor-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-pry-ruby-array-zip-csv-and-the-hash-constructor-index-mdx-014d49401e0954a05a10.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-pull-requests-creating-and-review-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-pull-requests-creating-and-review-index-mdx-f85f0106b4452aa05556.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-active-record-api-for-general-async-queries-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-active-record-api-for-general-async-queries-index-mdx-ffa852d4e09ae7cf80b4.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-activestorage-transform-job-preprocess-previewable-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-activestorage-transform-job-preprocess-previewable-index-mdx-b1ffce12284cf678b26a.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-activerecord-regroup-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-activerecord-regroup-index-mdx-7116fff41ceb8019d555.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-default-dockerfiles-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-default-dockerfiles-index-mdx-f215e6c2f82bc3bdfb52.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-message-pack-as-message-serializer-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-message-pack-as-message-serializer-index-mdx-8053aeb6160162001207.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-object-with-method-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-object-with-method-index-mdx-a86160eeb36f416b4bb3.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-option-to-extract-audio-sample-rate-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-option-to-extract-audio-sample-rate-index-mdx-4757c89b87abcc5b69f9.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-path-params-options-to-url-for-helper-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-path-params-options-to-url-for-helper-index-mdx-d3b50fe4e0377a757564.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-support-for-infinite-range-for-length-validators-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-support-for-infinite-range-for-length-validators-index-mdx-5d04651ea721e13e5b47.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-support-for-intersect-to-activerecord-relation-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-support-for-intersect-to-activerecord-relation-index-mdx-488155fc0cd72372abe0.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-support-for-multi-column-ordering-in-activerecord-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-support-for-multi-column-ordering-in-activerecord-index-mdx-f14b2b86676cbe6b7b6b.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-support-to-run-test-for-given-line-range-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-support-to-run-test-for-given-line-range-index-mdx-a0a4161f90fcbd5
387d8976.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-the-option-to-disable-activerecord-enum-methods-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-the-option-to-disable-activerecord-enum-methods-index-mdx-2f7fe219a1effc3b23a2.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-validation-to-enums-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-validation-to-enums-index-mdx-a7eb6d2b04638d4b73fe.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allow-error-reporter-to-handle-several-error-classes-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allow-error-reporter-to-handle-several-error-classes-index-mdx-71a717bff05aa228deac.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-activerecord-reselect-to-accept-hash-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-activerecord-reselect-to-accept-hash-index-mdx-56062da7481f9f3f7d57.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-attaching-file-or-pathname-to-has-one-attached-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-attaching-file-or-pathname-to-has-one-attached-index-mdx-7a40a0878fc37ea91bb8.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-matching-exception-messages-to-assert-raises-assertion-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-matching-exception-messages-to-assert-raises-assertion-index-mdx-80bcc9e238191eb9e7c5.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-passing-options-to-activerecord-explain-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-passing-options-to-activerecord-explain-index-mdx-8f40425f797afb1fd1cc.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-resetting-singular-associations-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-resetting-singular-associations-index-mdx-284393a6c89209acc6d2.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-templates-to-define-accepted-locals-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-templates-to-define-accepted-locals-index-mdx-23a45d19c80fa4712256.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-using-aliased-attributes-in-insert-all-upsert-all-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-allows-using-aliased-attributes-in-insert-all-upsert-all-index-mdx-b5b893b14b2a24ad1e70.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-increment-decrement-counter-accepts-a-by-argument-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-increment-decrement-counter-accepts-a-by-argument-index-mdx-1f13bf8b8d9a6adc53e6.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-introduces-active-record-generates-token-for-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-introduces-active-record-generates-token-for-index-mdx-9403ef2f5ffad81a8ec1.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-introduces-config-autoload-lib-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-introduces-config-autoload-lib-index-mdx-bc7f0c01fdc7f4381cbc.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-limits-max-length-of-auto-generated-index-names-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-limits-max-length-of-auto-generated-index-names-index-mdx-960ebfd404d791fa60db.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-raises-error-on-generating-model-attributes-with-dangerous-name-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-raises-error-on-generating-model-attributes-with-dangerous-name-index-mdx-3f6e8982b5e635115650.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-removes-secret-setup-command-and-deprecates-secret-show-edit-commands-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-removes-secret-setup-command-and-deprecates-secret-show-edit-commands-index-mdx-3240fa8fd18c62169ac0.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-enhances-postgresql-enum-functionality-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-enhances-postgresql-enum-functionality-index-mdx-8d94bbf1a529f6193afd.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-allow-browser-to-set-minimum-version-for-apps-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-allow-browser-to-set-minimum-version-for-apps-index-mdx-7701206633e3b0ee5517.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-brakeman-by-default-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-brakeman-by-default-index-mdx-acf09371db7556ca4aeb.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-github-ci-files-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-github-ci-files-index-mdx-9e817fa67a9ac23e5537.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-rate-limiting-to-action-controller-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-rate-limiting-to-action-controller-index-mdx-0d76791ffde9a7ce4f46.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-rubocop-by-default-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-adds-rubocop-by-default-index-mdx-de9f7140738ff1622298.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-extends-explain-support-to-activerecord-relations-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-8-extends-explain-support-to-activerecord-relations-index-mdx-aaf8760baddbcc755f3b.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-add-deliver-callbacks-to-action-mailer-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-add-deliver-callbacks-to-action-mailer-index-mdx-f886a73d6aa52b83b0f1.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-add-expires-at-option-to-active-storage-blob-signed-id-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-add-expires-at-option-to-active-storage-blob-signed-id-index-mdx-d5d527985cdac829646d.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-add-normalize-to-activerecord-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-add-normalize-to-activerecord-index-mdx-e82ece9db5ebdac3f226.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-add-picture-tag-helper-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-add-picture-tag-helper-index-mdx-322eed2e5ee0c994bfb8.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-adds-ability-to-raise-error-on-missing-callback-actions-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-adds-ability-to-raise-error-on-missing-callback-actions-index-mdx-269880b8aa18613df888.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-adds-errorreporter-unexpected-for-error-reporting-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-adds-errorreporter-unexpected-for-error-reporting-index-mdx-b9b76da4078cac0d9dfc.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-adds-parent-option-to-controller-generator-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-adds-parent-option-to-controller-generator-index-mdx-35de84a9f320ade1036b.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-adds-perform-all-later-to-activejob-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-adds-perform-all-later-to-activejob-index-mdx-b4e69ca03704e6a4f784.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-concerns-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-concerns-index-mdx-63d408bbf701978792da.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rails-make-active-records-query-cache-an-lru-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rails-make-active-records-query-cache-an-lru-index-mdx-276a75b39ce185ad254e.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-railsconf-2014-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-railsconf-2014-index-mdx-abf6da750525647ac45b.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-railsconf-2020-webpacker-it-just-works-but-how-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-railsconf-2020-webpacker-it-just-works-but-how-index-mdx-49450db2bb33fb7ae9ca.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-railsconf-2021-implicit-to-explicit-decoding-rubys-magical-syntax-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-railsconf-2021-implicit-to-explicit-decoding-rubys-magical-syntax-index-mdx-d61cbc541e465bfbfb9e.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-react-on-rails-2000-stars-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-react-on-rails-2000-stars-index-mdx-d96bef1d6371550b6fe1.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-react-on-rails-file-system-based-automated-bundle-generation-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-react-on-rails-file-system-based-automated-bundle-generation-index-mdx-809b16cb1364b8c92156.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-react-purecomponent-pitfalls-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-react-purecomponent-pitfalls-index-mdx-02f6fbb7661a484ae5ae.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-react-svgs-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-react-svgs-index-mdx-53857a10c88eac392496.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-redux-tree-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-redux-tree-index-mdx-d2df2a91e318790c55de.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-remote-pair-programming-tips-using-screenhero-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-remote-pair-programming-tips-using-screenhero-index-mdx-d2870139e82adfb4616a.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-renaming-redating-blog-posts-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-renaming-redating-blog-posts-index-mdx-627524cfc83dae33bcb5.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rescript-feedback-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rescript-feedback-index-mdx-9fa5ad97740b21caa20c.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rescript-modules-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rescript-modules-index-mdx-ebdd21776981f10b6333.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-rocking-with-tmux-tmuxinator-and-iterm-2-for-rails-development-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-rocking-with-tmux-tmuxinator-and-iterm-2-for-rails-development-index-mdx-8819bc64e18f18d4c4d8.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-ruby-3-2-adds-a-new-data-class-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-ruby-3-2-adds-a-new-data-class-index-mdx-fd244f978fb4834e6da3.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-ruby-3-3
387-0-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-ruby-3-3-0-index-mdx-d9427b3ab04c96d665f6.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-ruby-3-3-introduces-range-overlap-method-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-ruby-3-3-introduces-range-overlap-method-index-mdx-8c34682e7cee0770b7ee.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-ruby-on-rails-javascript-with-es-6-or-coffeescript-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-ruby-on-rails-javascript-with-es-6-or-coffeescript-index-mdx-1c8617712cf370947de4.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-safe-identifiers-in-rescript-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-safe-identifiers-in-rescript-index-mdx-3bef7553faccc79d1361.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-safe-routing-in-rescript-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-safe-routing-in-rescript-index-mdx-104f7eb060ee08463c02.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-sending-bytes-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-sending-bytes-index-mdx-fd20fb4838fd30a47cb4.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-shakapacker-7-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-shakapacker-7-index-mdx-c2e5980d1be5db04768f.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-shortcut-jira-trello-github-toggl-time-and-task-tracking-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-shortcut-jira-trello-github-toggl-time-and-task-tracking-index-mdx-5814e301007907b6a8d0.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-simple-form-and-disable-processing-by-default-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-simple-form-and-disable-processing-by-default-index-mdx-18863804b76aa9cd3763.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-simplify-your-ruby-application-configuration-with-figaro-gem-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-simplify-your-ruby-application-configuration-with-figaro-gem-index-mdx-0271edb4b4a2f4ac68eb.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-specific-issues-upgrading-gems-to-rails-4-dot-1-and-rspec-3-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-specific-issues-upgrading-gems-to-rails-4-dot-1-and-rspec-3-index-mdx-14306655ee87ecdd6f00.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-storing-or-excluding-node-modules-in-rails-git-repositories-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-storing-or-excluding-node-modules-in-rails-git-repositories-index-mdx-0641c1189ac2ad08a11b.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-strategies-for-rails-logging-and-error-handling-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-strategies-for-rails-logging-and-error-handling-index-mdx-cfd26506eac0f8784a80.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-streaming-explained-restaurant-analogy-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-streaming-explained-restaurant-analogy-index-mdx-0b7acc9b308226e5a848.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-streamlined-syntax-unveiling-the-power-of-slim-template-language-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-streamlined-syntax-unveiling-the-power-of-slim-template-language-index-mdx-aa438b206cf3d38ae684.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-success-the-shakacode-way-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-success-the-shakacode-way-index-mdx-9b422b5472c44078edc5.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-supercharge-your-rails-app-with-active-admin-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-supercharge-your-rails-app-with-active-admin-index-mdx-4115f01680ce76cfa774.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-tanstack-with-react-on-rails-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-tanstack-with-react-on-rails-index-mdx-99e675e7c86e9a7593f4.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-teach-me-with-analogies-ai-prompt-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-teach-me-with-analogies-ai-prompt-index-mdx-1d07e785d47d60ae6925.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-telecommuting-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-telecommuting-index-mdx-6447ebe3c8b854c93a15.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-testing-error-handling-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-testing-error-handling-index-mdx-dd71cc602ba1b911318c.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-the-react-on-rails-doctrine-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-the-react-on-rails-doctrine-index-mdx-0aaa38b940f53acf4905.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-things-i-wish-i-knew-before-using-terraform-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-things-i-wish-i-knew-before-using-terraform-index-mdx-62e531e5c036fe634a99.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-thiserror-anyhow-or-how-i-handle-errors-in-rust-apps-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-thiserror-anyhow-or-how-i-handle-errors-in-rust-apps-index-mdx-fa0c03de43dbb6871574.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-timescaledb-to-postgres-jsonb-packing-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-timescaledb-to-postgres-jsonb-packing-index-mdx-2a946a4270b8047692dd.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-unlocking-seo-friendly-urls-with-friendlyid-gem-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-unlocking-seo-friendly-urls-with-friendlyid-gem-index-mdx-15853c2403ad2f8497fa.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-update-to-emberjs-hello-world-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-update-to-emberjs-hello-world-index-mdx-9281385d0a957858fe83.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-updating-to-jekyll-2-and-discourse-for-comments-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-updating-to-jekyll-2-and-discourse-for-comments-index-mdx-39d97005222e6620a28a.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-upgrade-rails-5-2-to-6-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-upgrade-rails-5-2-to-6-index-mdx-d026bfe31f0013478f15.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-upgrade-rails-6-1-to-7-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-upgrade-rails-6-1-to-7-index-mdx-c5eae0affe3ab1229445.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-upgrading-octopress-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-upgrading-octopress-index-mdx-053e0180f32505ca0093.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-upgrading-to-rails-4-and-rspec-3-with-capybara-and-resque-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-upgrading-to-rails-4-and-rspec-3-with-capybara-and-resque-index-mdx-d5c5f3b29bddf8dcf071.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-using-rubymine-slash-intellij-regexp-search-slash-replace-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-using-rubymine-slash-intellij-regexp-search-slash-replace-index-mdx-8b30180e73586f910692.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-webpacker-lite-why-fork-webpacker-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-webpacker-lite-why-fork-webpacker-index-mdx-c96e18d3f6d7dcacbd12.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-were-super-inclusive-at-shakacode-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-were-super-inclusive-at-shakacode-index-mdx-9cbd6078fea94984976d.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-who-is-shakacode-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-who-is-shakacode-index-mdx-a9479d26ab93395df665.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-why-stay-versus-move-away-from-heroku-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-why-stay-versus-move-away-from-heroku-index-mdx-31959812d93977d31ce6.js\"],\"component---src-template-blog-article-tsx-content-file-path-src-posts-yak-shaving-failing-integration-tests-with-react-index-mdx\":[\"/component---src-template-blog-article-tsx-content-file-path-src-posts-yak-shaving-failing-integration-tests-with-react-index-mdx-37ebac5656cfb433afd1.js\"],\"component---src-template-blog-category-all-topics-tsx\":[\"/component---src-template-blog-category-all-topics-tsx-8c17099e5c0ca72f3a2f.js\"],\"component---src-template-blog-category-tsx\":[\"/component---src-template-blog-category-tsx-31aa09385a83c7a9ed2a.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-ai-github-flow-prompt-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-ai-github-flow-prompt-md-2efc70002c8a33534199.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-ci-automation-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-ci-automation-md-3d6681b2b7a99871ea2e.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-commands-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-commands-md-a952d4e7d62b7076a587.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-dns-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-dns-md-210befb00c7861ed4677.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-grafana-opentelemetry-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-grafana-opentelemetry-md-2094d12e5c1d4192ba05.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-migrating-heroku-to-control-plane-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-migrating-heroku-to-control-plane-md-eaf5d08a4bd9aa5627b8.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-postgres-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-postgres-md-d8b7bd8245f2d10b2147.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-rds-private-networking-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-rds-private-networking-md-bc56871548ba3666b30e.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-redis-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-redis-md-482be45d5d1acae6a8f6.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-releasing-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-releasing-md-13571ba7e3c57445720a.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-secrets-and-env-values-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-secrets-and-env-values-md-b20f054f6b444396d609.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-application-instrumentation-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-application-instrumentation-md-74ff86934da5b09a3111.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-collector-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-collector-md-2ac04dc27d9fcab8a5b9.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-index-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-index-md-f2b5deaa9dd6b8b0cbb3.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-pipelines-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-pipelines-md-f0105d51acd439171c84.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-review-apps-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-review-apps-md-9bc916721c0b608086d6.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-troubleshooting-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-telemetry-troubleshooting-md-e8c3c20
387dd29510c36303.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-terraform-details-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-terraform-details-md-274f8883a5bab1715a9c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-terraform-overview-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-terraform-overview-md-7e5a6546d2d889ddb56b.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-thruster-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-thruster-md-6325bb0115edf9f07a34.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-tips-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-tips-md-b0d7ad2505d2886c38d1.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-troubleshooting-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-docs-troubleshooting-md-bfe7e9e85454dffa601d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-readme-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-control-plane-flow-readme-md-94ef44ac6bffb7769446.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-llms-full-preamble-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-llms-full-preamble-md-d209fe14012699671b6f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-doctor-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-doctor-md-74797d50a9545e9dbefd.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-generator-details-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-generator-details-md-ee62789bc0e0c43eee16.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-javascript-api-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-javascript-api-md-fa63633e9fffe14eb151.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-rails-view-rendering-from-inline-javascript-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-rails-view-rendering-from-inline-javascript-md-103fb83173afad0ee551.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-redux-store-api-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-redux-store-api-md-50c2fa82ec13b77e7e90.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-ruby-api-pro-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-ruby-api-pro-md-b1f349cb756baa56cec7.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-view-helpers-api-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-api-reference-view-helpers-api-md-2433abd95614b613a3a2.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-accessibility-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-accessibility-md-6a57120a9834a3e67322.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-bundle-caching-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-bundle-caching-md-191acc3df66f64945f08.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-caching-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-caching-md-69c95335673724baa35e.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-client-side-routing-instant-navigation-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-client-side-routing-instant-navigation-md-c137c2cc28587d855df2.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-code-splitting-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-code-splitting-md-8f4a1502c6bd48719d4f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-debugging-hydration-mismatches-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-debugging-hydration-mismatches-md-6b8ba3d4d595eb86dc27.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-debugging-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-debugging-md-b92fe89d8cea6d3e5322.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-dev-server-and-testing-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-dev-server-and-testing-md-2a7da96e000176ada784.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-extensible-precompile-pattern-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-extensible-precompile-pattern-md-efedfcd5d2e19560808a.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-fast-images-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-fast-images-md-78d5082805da1d30157e.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-fonts-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-fonts-md-8d1c8fd6f0b1242f1e80.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-forms-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-forms-md-1c94b72a7ee47566daf5.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-generated-rails-response-types-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-generated-rails-response-types-md-a681c03f39b9f5ca4d18.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-hmr-and-hot-reloading-with-the-webpack-dev-server-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-hmr-and-hot-reloading-with-the-webpack-dev-server-md-213958bc68645c098900.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-how-to-conditionally-server-render-based-on-device-type-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-how-to-conditionally-server-render-based-on-device-type-md-525173a7b7dc02c05f81.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-how-to-use-different-files-for-client-and-server-rendering-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-how-to-use-different-files-for-client-and-server-rendering-md-45def0d89e10c8f79ebf.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-hydration-scheduling-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-hydration-scheduling-md-8253da866509704c1b52.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-i-18-n-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-i-18-n-md-ae0d1100486c5fa3942f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-images-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-images-md-9d83657456088da0c922.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-mutations-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-mutations-md-369d8cd4dc1866d67af4.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-basics-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-basics-md-a7d654abd2414c940c92.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-container-deployment-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-container-deployment-md-bde309b9a186e5c0bfbb.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-debugging-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-debugging-md-f96ce85507f6778a3f06.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-error-reporting-and-tracing-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-error-reporting-and-tracing-md-31fbe10e919025ea710d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-health-checks-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-health-checks-md-38baab86fc5fe80026dd.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-heroku-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-heroku-md-abedef8eecba669598c5.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-js-configuration-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-js-configuration-md-22243a43854d255b0bb8.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-troubleshooting-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-node-renderer-troubleshooting-md-cd755a466cb96f4b7e2a.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-performance-tracks-and-profiling-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-performance-tracks-and-profiling-md-e8727b903f86643c0735.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-process-managers-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-process-managers-md-74c75ffc55af5948b816.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-rails-engine-integration-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-rails-engine-integration-md-50c099322e57f562502f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-rails-webpacker-react-integration-options-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-rails-webpacker-react-integration-options-md-5921168d53b5fa50bcbd.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-19-activity-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-19-activity-md-fea112d69af760ab3c40.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-19-native-metadata-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-19-native-metadata-md-2582971ee3aa97293e9b.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-and-redux-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-and-redux-md-405f1fa318803644245a.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-compiler-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-fe
387atures-react-compiler-md-114a9913c6a6da77804b.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-helmet-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-helmet-md-9112560f1c5c4176b245.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-router-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-react-router-md-aeef97f1b13bb876a704.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-streaming-server-rendering-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-streaming-server-rendering-md-c954ee970439eb636782.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-styling-with-tailwind-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-styling-with-tailwind-md-d91d4f9a8aa488e18a8c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-tanstack-query-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-tanstack-query-md-da9a02cd8acd34e6c2c3.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-tanstack-router-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-tanstack-router-md-f6c5178b939a207796bd.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-testing-configuration-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-testing-configuration-md-8178ec5bc2337ec60cb0.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-turbolinks-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-turbolinks-md-a5cb79de7453368ba285.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-view-transitions-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-view-transitions-md-8c4f398b8f64fcd37b9d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-web-components-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-web-components-md-7a07aff8264ccbd7f3c8.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-web-vitals-and-rum-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-building-features-web-vitals-and-rum-md-5cc79cd0bbac1757f971.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-configuration-configuration-deprecated-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-configuration-configuration-deprecated-md-e282deac7cf1cda8452b.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-configuration-configuration-pro-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-configuration-configuration-pro-md-2978ece1fb28103a6631.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-configuration-readme-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-configuration-readme-md-538bae4fad8b5c566ec7.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-auto-bundling-file-system-based-automated-bundle-generation-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-auto-bundling-file-system-based-automated-bundle-generation-md-d4692f32a5f3a28d796c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-client-vs-server-rendering-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-client-vs-server-rendering-md-959395c2b9aacebdd763.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-execjs-limitations-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-execjs-limitations-md-3ab2c85c00977b5ea5a4.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-how-react-on-rails-works-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-how-react-on-rails-works-md-702cf5e089b25c7be12d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-performance-benchmarks-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-performance-benchmarks-md-62aeae342e68d54998e7.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-react-server-rendering-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-react-server-rendering-md-1a9c3fb468263d036b0b.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-render-functions-and-railscontext-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-render-functions-and-railscontext-md-bedcaed4a68c87fcf01b.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-render-functions-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-render-functions-md-a3afb27dcaf239d7a4b4.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-webpack-configuration-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-core-concepts-webpack-configuration-md-35e9d44d1936af73ef55.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-docker-deployment-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-docker-deployment-md-38828098d757bd1bc9c0.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-heroku-deployment-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-heroku-deployment-md-6f29977e0c0b225dee4d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-readme-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-readme-md-eb92cc02cdf52369ddf6.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-review-app-security-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-review-app-security-md-80e71eb3d4aae8534005.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-security-model-and-hardening-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-security-model-and-hardening-md-ebbaf2324afea6c4f7b8.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-server-rendering-tips-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-server-rendering-tips-md-37beb226085321df8cdc.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-troubleshooting-build-errors-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-troubleshooting-build-errors-md-0d7c66d0252c4236b14d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-troubleshooting-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-troubleshooting-md-726fcb521f156ffd9cf7.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-troubleshooting-when-using-shakapacker-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-troubleshooting-when-using-shakapacker-md-8b4bd4539616cd51d629.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-troubleshooting-when-using-webpacker-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-deployment-troubleshooting-when-using-webpacker-md-c2e5e5f6bd29d468bccf.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-common-issues-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-common-issues-md-86a7aeb3e11321d85193.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-comparing-react-on-rails-to-alternatives-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-comparing-react-on-rails-to-alternatives-md-49c7fe7bf8eae228f902.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-comparison-with-alternatives-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-comparison-with-alternatives-md-8ec3a077f5f03d2a1460.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-consuming-an-unreleased-build-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-consuming-an-unreleased-build-md-5536e26e6dbd29f57678.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-create-react-on-rails-app-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-create-react-on-rails-app-md-00aaf8ad516fd6083524.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-examples-and-references-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-examples-and-references-md-151cf9447a2e3116d320.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-installation-into-an-existing-rails-app-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-installation-into-an-existing-rails-app-md-541c0f856b0fdb074e2a.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-nextjs-with-separate-rails-backend-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-nextjs-with-separate-rails-backend-md-2b9fe9d61f186ec319dc.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-oss-vs-pro-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-oss-vs-pro-md-c3ef0514ccc3d07b50d4.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-pro-quick-start-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-pro-quick-start-md-d5c5ec680dd5325a7ac3.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-project-structure-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-project-structure-md-43e0ea38282fc5c4e332.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-quick-start-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-quick-start-md-a51cc87a01d56dc06702.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-tutorial-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-tutorial-md-2b7664f33ad65e744527.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-using-react-on-rails-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-using-react-on-rails-md-4afa0f433e6b32930f9a.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-why-rspack-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-getting-started-why-rspack-md-933dc04c39471edf03a0.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-introduction-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-introduction-md-b24b9828bf827b8c01f0.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-angular-js-integration-migration-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-ra
387ils-docs-oss-migrating-angular-js-integration-migration-md-6b3c6c328900a21b4993.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-babel-to-swc-migration-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-babel-to-swc-migration-md-189648c536dab3a88508.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-convert-rails-5-api-only-app-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-convert-rails-5-api-only-app-md-c4b882b4852a2874a00c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-example-migrations-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-example-migrations-md-bf952e09afde0605325b.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-inertia-rails-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-inertia-rails-md-e1e35528629e7571ff18.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-nextjs-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-nextjs-md-19069128cc47191abb5e.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-react-rails-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-react-rails-md-24f7c9147050fe841169.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-vite-rails-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-vite-rails-md-0cbbe6d859243afc1175.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-webpack-to-rspack-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-from-webpack-to-rspack-md-015fe0b8733e572f59d7.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-to-rsc-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-migrating-to-rsc-md-39b74b57d03be2bcf380.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-component-patterns-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-component-patterns-md-9b5c101590dbccd1ccea.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-context-and-state-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-context-and-state-md-4b7d5df415b4093482e4.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-data-fetching-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-data-fetching-md-7fd567997b2b60fdfe3c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-flight-payload-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-flight-payload-md-79a70a347b6368af086f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-http-response-patterns-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-http-response-patterns-md-f1dcc15fb1cbfdd5dc7f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-performance-validation-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-performance-validation-md-70648cba9186e3d6d1e2.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-preparing-app-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-preparing-app-md-7e12cfa9aa07eae4630a.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-static-shell-sidecar-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-static-shell-sidecar-md-d56a21a6f37f2d00dd82.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-third-party-libs-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-third-party-libs-md-4fc1219cd2d0affd2674.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-troubleshooting-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-migrating-rsc-troubleshooting-md-1f4c0d10523b683e84c8.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-articles-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-articles-md-3cf65056e3d3b06f79fe.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-asset-pipeline-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-asset-pipeline-md-768ade7eec24998adf29.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-credits-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-credits-md-79ac848f73acae069743.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-doctrine-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-doctrine-md-68b0a4d66ff4a022fe38.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-style-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-style-md-cd1659528e123027801d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-tips-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-tips-md-838a15a24704b5f004a8.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-updating-dependencies-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-misc-updating-dependencies-md-9e699909aec06f9bd39c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-reference-error-reference-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-reference-error-reference-md-7d7ea41dec6b0e9d62cc.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-15-0-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-15-0-0-md-b60e03cae866edbdb1f8.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-0-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-0-0-md-8b409faea833bc7043a0.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-1-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-1-0-md-143746656600c6c2aa2b.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-2-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-2-0-md-1e1332d1527f15a8def3.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-3-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-3-0-md-ef05cdef8815390e00b5.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-4-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-4-0-md-5e20377d9ba8d1fcc016.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-5-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-5-0-md-70b5ca4a784ac4f21282.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-5-1-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-5-1-md-65de80fc72414ebaf2a1.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-6-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-16-6-0-md-cae0a51945b5a0c4a3ed.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-17-0-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-17-0-0-md-2c96085baf96c643f05f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-17-0-1-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-17-0-1-md-581432eceb5a6eaccfeb.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-17-1-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-17-1-0-md-eef5ea8e369847c714a0.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-index-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-release-notes-index-md-132ed7a0aaf62341edbe.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-upgrading-react-on-rails-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-oss-upgrading-upgrading-react-on-rails-md-40b925ec359c8708a2ac.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-async-props-database-queries-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-async-props-database-queries-md-51ef8bfbce041e94f2e3.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-deployment-review-app-security-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-deployment-review-app-security-md-6c52e527e4a320812739.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-fragment-caching-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-fragment-caching-md-7340254f282c63b5aab6.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-home-pro-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-home-pro-md-90bde8e89ada279e2816.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-installation-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-installation-md-1ed0b7281af690116c85.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-js-memory-leaks-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-js-memory-leaks-md-ff8e0e33652f2ba949df.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-license-ci-integration-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-license-ci-integration-md-d9c3e930914256ef5ac4.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-major-performance-breakthroughs-upgrade-guide-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-major-performance-breakthroughs-upgrade-guide-md-9c8b1c6b0d4e6fc40879.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-node-renderer-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-node-renderer-md-c504d453ae5929d8405e.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-profiling-server-side-rendering-code-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-profiling-server-side-rendering-code-md-21bdefbec40f7a5f7afd.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-on-rails-pro-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-on-rails-pro-md-ba0f87a52a054ca4eb72.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-s
387erver-components-activity-inside-rsc-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-activity-inside-rsc-md-97cc7132f4eea43c9e0f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-add-streaming-and-interactivity-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-add-streaming-and-interactivity-md-c714b91714a52e686be9.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-client-reference-diagnostics-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-client-reference-diagnostics-md-5de9c38ff7821fc100e9.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-create-without-ssr-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-create-without-ssr-md-55f48a661644898c245c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-critical-resource-hints-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-critical-resource-hints-md-3882483c3232adf3a48c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-css-and-styling-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-css-and-styling-md-5d22a28da0f15270ce67.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-flight-protocol-syntax-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-flight-protocol-syntax-md-21695bcce38f856fdd2e.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-glossary-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-glossary-md-1ac3452a900d2ba6b691.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-how-react-server-components-work-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-how-react-server-components-work-md-1f77db26ee60670c84a9.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-index-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-index-md-f8593c5ea4b03bd1d7b1.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-inside-client-components-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-inside-client-components-md-76fbc5e84a7560351494.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-nextjs-comparison-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-nextjs-comparison-md-47b3086549f91f10de95.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-per-request-data-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-per-request-data-md-1bcd5c9629140b4d5ddb.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-purpose-and-benefits-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-purpose-and-benefits-md-e3ce93f9ee10e5fbabaf.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-rendering-flow-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-rendering-flow-md-33cadacc86b5d1e2a8a3.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-rsc-payload-route-data-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-rsc-payload-route-data-md-a34ec6b7ac5da5fa1936.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-rspack-compatibility-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-rspack-compatibility-md-65c134b552608596e44f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-selective-hydration-in-streamed-components-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-selective-hydration-in-streamed-components-md-89152c98829300442aac.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-server-side-rendering-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-server-side-rendering-md-0de1512a7bd8408a44ee.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-static-shell-global-js-opt-out-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-static-shell-global-js-opt-out-md-d9f5afcb203a4197807f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-success-stories-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-success-stories-md-5d1ba58a0f7c9a326d8d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-system-spec-streaming-rsc-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-system-spec-streaming-rsc-md-4aee6414f7c64aff6092.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-tanstack-start-comparison-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-tanstack-start-comparison-md-ad60eb120ce383398397.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-tutorial-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-tutorial-md-58009b256119020fe893.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-unstable-cache-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-unstable-cache-md-8e5430ca461
3877346f5a01.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-upgrading-existing-pro-app-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-react-server-components-upgrading-existing-pro-app-md-47f3633707a4b8f7f460.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-release-notes-4-0-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-release-notes-4-0-md-be630a686d51e816bdd4.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-release-notes-index-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-release-notes-index-md-0d162206897803f82a84.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-release-notes-v-4-react-server-components-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-release-notes-v-4-react-server-components-md-8173c131290061e58f8d.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-rolling-deploy-adapters-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-rolling-deploy-adapters-md-75a99df77713e414bf0c.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-rolling-deploy-custom-adapters-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-rolling-deploy-custom-adapters-md-d0fdf18f4e0245158824.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-streaming-ssr-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-streaming-ssr-md-835dc751da4fe1c8b14f.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-strict-csp-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-strict-csp-md-7027f560ec6c320a0d12.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-troubleshooting-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-troubleshooting-md-e578bda239f77ad89dd9.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-updating-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-updating-md-6e9d2aa968f0f70bcecb.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-upgrading-to-pro-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-docs-pro-upgrading-to-pro-md-15d73d620dd71c1a7853.js\"],\"component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-pro-react-on-rails-pro-docs-adr-0001-boot-seed-rolling-deploy-bundles-md\":[\"/component---src-template-doc-article-tsx-content-file-path-cache-gatsby-source-git-react-on-rails-pro-react-on-rails-pro-docs-adr-0001-boot-seed-rolling-deploy-bundles-md-eff0a742d63ef4ef20c3.js\"]}";
388          </script>
388
389        
389<script>window.___webpackCompilationHash="9bdf90f6c595c1aab37a";</script>
389<script src="/webpack-runtime-492c7e49a3546dd1de25.js" async></script>
389<script src="/framework-e742fdd0ea3278bbf1dc.js" async></script>
389<script src="/aaa5778d-6b3595f7639cb377a61b.js" async></script>
389<script src="/app-830fa17965a199005046.js" async></script>
389<!-- slice-end id="_gatsby-scripts-1" -->
389<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"b83ff145507d4ad9a5f26185497e996c","r":1,"spa":2}' crossorigin="anonymous"></script>
389
390</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.