CINXE.COM

Rails Merch Store

<!doctype html> <html class="js" lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="theme-color" content=""> <link rel="canonical" href="https://merch.rubyonrails.org/"><link rel="icon" type="image/png" href="//merch.rubyonrails.org/cdn/shop/files/rails-circle.png?crop=center&height=32&v=1721924104&width=32"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><title> Rails Merch Store </title> <meta name="description" content="Your one stop for official Rails merch, featuring t-shirts, hoodies, caps, and mugs."> <meta property="og:site_name" content="Rails Merch Store"> <meta property="og:url" content="https://merch.rubyonrails.org/"> <meta property="og:title" content="Rails Merch Store"> <meta property="og:type" content="website"> <meta property="og:description" content="Your one stop for official Rails merch, featuring t-shirts, hoodies, caps, and mugs."><meta property="og:image" content="http://merch.rubyonrails.org/cdn/shop/files/500px-Ruby_On_Rails_Logo.png?v=1723450230"> <meta property="og:image:secure_url" content="https://merch.rubyonrails.org/cdn/shop/files/500px-Ruby_On_Rails_Logo.png?v=1723450230"> <meta property="og:image:width" content="500"> <meta property="og:image:height" content="188"><meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Rails Merch Store"> <meta name="twitter:description" content="Your one stop for official Rails merch, featuring t-shirts, hoodies, caps, and mugs."> <script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/constants.js?v=132983761750457495441722292306" defer="defer"></script> <script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/pubsub.js?v=158357773527763999511722292307" defer="defer"></script> <script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/global.js?v=88558128918567037191722292307" defer="defer"></script><script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/animations.js?v=88693664871331136111722292306" defer="defer"></script><script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script><meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/64807075977/digital_wallets/dialog"> <meta name="shopify-checkout-api-token" content="4022bc6f8f1089cb56cd16c6a1dc4579"> <script async="async" src="/checkouts/internal/preloads.js?locale=en-CA"></script> <link rel="preconnect" href="https://shop.app" crossorigin="anonymous"> <script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-CA&shop_id=64807075977" crossorigin="anonymous"></script> <script id="apple-pay-shop-capabilities" type="application/json">{"shopId":64807075977,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/64807075977","merchantName":"Rails Merch Store","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Rails Merch Store","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script> <script id="shopify-features" type="application/json">{"accessToken":"4022bc6f8f1089cb56cd16c6a1dc4579","betas":["rich-media-storefront-analytics"],"domain":"merch.rubyonrails.org","predictiveSearch":true,"shopId":64807075977,"smart_payment_buttons_url":"https:\/\/merch.rubyonrails.org\/cdn\/shopifycloud\/payment-sheet\/assets\/latest\/spb.en.js","dynamic_checkout_cart_url":"https:\/\/merch.rubyonrails.org\/cdn\/shopifycloud\/payment-sheet\/assets\/latest\/dynamic-checkout-cart.en.js","locale":"en"}</script> <script>var Shopify = Shopify || {}; Shopify.shop = "c7f7a4-94.myshopify.com"; Shopify.locale = "en"; Shopify.currency = {"active":"USD","rate":"1.0"}; Shopify.country = "CA"; Shopify.theme = {"name":"Spotlight","id":135462813833,"schema_name":"Spotlight","schema_version":"15.0.0","theme_store_id":1891,"role":"main"}; Shopify.theme.handle = "null"; Shopify.theme.style = {"id":null,"handle":null}; Shopify.cdnHost = "merch.rubyonrails.org/cdn"; Shopify.routes = Shopify.routes || {}; Shopify.routes.root = "/";</script> <script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script> <script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script> <script>window.ShopifyPay = window.ShopifyPay || {}; window.ShopifyPay.apiHost = "shop.app\/pay";</script> <script id="shop-js-analytics" type="application/json">{"pageType":"index"}</script> <script> window.Shopify = window.Shopify || {}; if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; window.Shopify.featureAssets['shop-js'] = {"pay-button":["modules/client.pay-button_CUnJ4mxT.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js"],"init-shop-email-lookup-coordinator":["modules/client.init-shop-email-lookup-coordinator_Cvq-awuK.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js"],"init-customer-accounts-sign-up":["modules/client.init-customer-accounts-sign-up_q0Lq9zwa.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js","modules/client.login-button_BXY0vbFt.en.esm.js"],"avatar":["modules/client.avatar_BTnouDA3.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/client.init-shop-for-new-customer-accounts_Dk4hKwLj.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js","modules/client.login-button_BXY0vbFt.en.esm.js"],"init-customer-accounts":["modules/client.init-customer-accounts_C6p9QzrF.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js","modules/client.login-button_BXY0vbFt.en.esm.js"],"shop-pay-payment-request":["modules/client.shop-pay-payment-request_Ba1p9ane.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js","modules/client.login-button_BXY0vbFt.en.esm.js","modules/chunk.shop-pay_C8q_1fm1.esm.js"],"discount-app":["modules/client.discount-app_BIPXfj_1.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js"],"payment-terms":["modules/client.payment-terms_CXNNgMn-.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js","modules/client.login-button_BXY0vbFt.en.esm.js"],"login-button":["modules/client.login-button_BXY0vbFt.en.esm.js","modules/chunk.common_CTPs4D8t.esm.js"]}; </script> <script id="__st">var __st={"a":64807075977,"offset":3600,"reqid":"c069e1d6-3f75-44d7-a1ec-5466199eba6a-1734498687","pageurl":"merch.rubyonrails.org\/","u":"823462cf03e5","p":"home"};</script> <script>window.ShopifyPaypalV4VisibilityTracking = true;</script> <script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}function i(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=c.action?c:{data:c};for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch{}}const u='password',m='form_key',f=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',u],d=()=>{try{return window.sessionStorage}catch{return}},p=t=>t.elements[m],l='form_type',h='cptcha';function _(t){t.dataset[h]=!0}const y=window,E=y.document,v='Shopify',g='ce_forms',T='captcha';let S=!1;((t,e)=>{const n=(w='f06e6c50-85a8-45c8-87d0-21a2b65856fe','https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.0.iife.js',A={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=y[v][g],c=o.bindForm;if(c)return c(t,w,e,A).then(n);o.q.push([[t,w,e,A],n]),S||(E.body.append(Object.assign(E.createElement('script'),{id:'captcha-provider',async:!0,src:'https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.0.iife.js'})),S=!0)});var w,A;y[v]=y[v]||{},y[v][g]=y[v][g]||{},y[v][g].q=[],y[v][T]=y[v][T]||{},y[v][T].protect=function(t,e){n(t,void 0,e),_(t)},Object.freeze(y[v][T]),function(t,e,n,y,E,v){const[g,T,S,w]=function(t,e,n){const i=e?o:[],u=t?c:[],m=[...i,...u],f=r(m),d=r(i),p=n&&r(m.filter((([t,e])=>n.includes(e))));return[a(f),a(d),a(p),s()]}(y,E,v),A=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},b=t=>g().includes(t);t.addEventListener('submit',(t=>{const e=A(t);if(!e)return;const n=b(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=p(e),c=w().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!d())return;!function(t){const e=d();if(!e)return;const n=p(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){p(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:m})),t.elements[m].value=e}(t,e),function(t,e){const n=d();if(!n)return;const o=[...t.querySelectorAll(`input[type='${u}']`)].map((({name:t})=>t)),c=[...f,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const I=(t,e)=>{t&&!t.dataset[h]&&(n(t,e.some((e=>e===t))),_(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=A(t);b(e)&&I(e,T())}));const O=e.get('form_key'),R=e.get(l),L=O&&R;t.addEventListener('DOMContentLoaded',(()=>{const t=T();if(L)for(const e of t)e.elements[l].value===R&&i(e,O);[...new Set([...S(),...g().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>I(e,t)))}))}(E,new URLSearchParams(y.location.search),n,!0,!0,['guest_login'])})()}();</script> <script integrity="sha256-EGCDRYTvIEOXsReXgqGwkAR+5Dl8tickSrieA/ZcQwc=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//merch.rubyonrails.org/cdn/shopifycloud/shopify/assets/storefront/load_feature-1060834584ef204397b1179782a1b090047ee4397cb627244ab89e03f65c4307.js" crossorigin="anonymous"></script> <script crossorigin="anonymous" defer="defer" src="//merch.rubyonrails.org/cdn/shopifycloud/shopify/assets/shopify_pay/storefront-80e528be853eac23af2454534897ca9536b1d3d04aa043b042f34879a3c111c8.js?v=20220906"></script> <script integrity="sha256-HAs5a9TQVLlKuuHrahvWuke+s1UlxXohfHeoYv8G2D8=" data-source-attribution="shopify.dynamic-checkout" defer="defer" src="//merch.rubyonrails.org/cdn/shopifycloud/shopify/assets/storefront/features-1c0b396bd4d054b94abae1eb6a1bd6ba47beb35525c57a217c77a862ff06d83f.js" crossorigin="anonymous"></script> <script id="sections-script" data-sections="header" defer="defer" src="//merch.rubyonrails.org/cdn/shop/t/3/compiled_assets/scripts.js?233"></script> <style id="shopify-dynamic-checkout-cart">@media screen and (min-width: 750px) { #dynamic-checkout-cart { min-height: 50px; } } @media screen and (max-width: 750px) { #dynamic-checkout-cart { min-height: 120px; } } </style><script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script> <style data-shopify> @font-face { font-family: "Basic Commercial"; font-weight: 700; font-style: normal; font-display: swap; src: url("//merch.rubyonrails.org/cdn/fonts/basic_commercial/basiccommercial_n7.58fc15bd5b52101eea961dd8bc6882e199098b2d.woff2?h1=YzdmN2E0LTk0LmFjY291bnQubXlzaG9waWZ5LmNvbQ&h2=cmFpbHN3b3JsZC5teXNob3BpZnkuY29t&h3=bWVyY2gucnVieW9ucmFpbHMub3Jn&hmac=575ab52412d96a2a6814b1de6cff941943463a2b6f8bb23f59dbffbde18f6fd0") format("woff2"), url("//merch.rubyonrails.org/cdn/fonts/basic_commercial/basiccommercial_n7.4e66c0895d465cee42ac67c5439d380b23021fbd.woff?h1=YzdmN2E0LTk0LmFjY291bnQubXlzaG9waWZ5LmNvbQ&h2=cmFpbHN3b3JsZC5teXNob3BpZnkuY29t&h3=bWVyY2gucnVieW9ucmFpbHMub3Jn&hmac=5c7236475d8313b9998ac5aea4e53cd81240182cccd7db1bc529fca5a16c8f2e") format("woff"); } :root, .color-scheme-1 { --color-background: 255,255,255; --gradient-background: #ffffff; --color-foreground: 18,18,18; --color-background-contrast: 191,191,191; --color-shadow: 18,18,18; --color-button: 185,0,0; --color-button-text: 255,255,255; --color-secondary-button: 255,255,255; --color-secondary-button-text: 18,18,18; --color-link: 18,18,18; --color-badge-foreground: 18,18,18; --color-badge-background: 255,255,255; --color-badge-border: 18,18,18; --payment-terms-background-color: rgb(255 255 255); } .color-scheme-2 { --color-background: 255,255,255; --gradient-background: #ffffff; --color-foreground: 18,18,18; --color-background-contrast: 191,191,191; --color-shadow: 18,18,18; --color-button: 18,18,18; --color-button-text: 243,243,243; --color-secondary-button: 255,255,255; --color-secondary-button-text: 18,18,18; --color-link: 18,18,18; --color-badge-foreground: 18,18,18; --color-badge-background: 255,255,255; --color-badge-border: 18,18,18; --payment-terms-background-color: rgb(255 255 255); } .color-scheme-3 { --color-background: 36,40,51; --gradient-background: #242833; --color-foreground: 255,255,255; --color-background-contrast: 47,52,66; --color-shadow: 18,18,18; --color-button: 255,255,255; --color-button-text: 18,18,18; --color-secondary-button: 36,40,51; --color-secondary-button-text: 255,255,255; --color-link: 255,255,255; --color-badge-foreground: 255,255,255; --color-badge-background: 36,40,51; --color-badge-border: 255,255,255; --payment-terms-background-color: rgb(36 40 51); } .color-scheme-4 { --color-background: 241,232,233; --gradient-background: #f1e8e9; --color-foreground: 18,18,18; --color-background-contrast: 193,153,157; --color-shadow: 18,18,18; --color-button: 255,255,255; --color-button-text: 18,18,18; --color-secondary-button: 241,232,233; --color-secondary-button-text: 255,255,255; --color-link: 255,255,255; --color-badge-foreground: 18,18,18; --color-badge-background: 241,232,233; --color-badge-border: 18,18,18; --payment-terms-background-color: rgb(241 232 233); } .color-scheme-5 { --color-background: 185,0,0; --gradient-background: #b90000; --color-foreground: 255,255,255; --color-background-contrast: 211,0,0; --color-shadow: 18,18,18; --color-button: 255,255,255; --color-button-text: 185,0,0; --color-secondary-button: 185,0,0; --color-secondary-button-text: 255,255,255; --color-link: 255,255,255; --color-badge-foreground: 255,255,255; --color-badge-background: 185,0,0; --color-badge-border: 255,255,255; --payment-terms-background-color: rgb(185 0 0); } body, .color-scheme-1, .color-scheme-2, .color-scheme-3, .color-scheme-4, .color-scheme-5 { color: rgba(var(--color-foreground), 0.75); background-color: rgb(var(--color-background)); } :root { --font-body-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Ubuntu, Helvetica Neue, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; --font-body-style: normal; --font-body-weight: 400; --font-body-weight-bold: 700; --font-heading-family: "Basic Commercial", sans-serif; --font-heading-style: normal; --font-heading-weight: 700; --font-body-scale: 1.0; --font-heading-scale: 1.0; --media-padding: px; --media-border-opacity: 0.0; --media-border-width: 0px; --media-radius: 4px; --media-shadow-opacity: 0.0; --media-shadow-horizontal-offset: 0px; --media-shadow-vertical-offset: 4px; --media-shadow-blur-radius: 5px; --media-shadow-visible: 0; --page-width: 120rem; --page-width-margin: 0rem; --product-card-image-padding: 0.0rem; --product-card-corner-radius: 0.6rem; --product-card-text-alignment: center; --product-card-border-width: 0.0rem; --product-card-border-opacity: 0.1; --product-card-shadow-opacity: 0.0; --product-card-shadow-visible: 0; --product-card-shadow-horizontal-offset: 0.0rem; --product-card-shadow-vertical-offset: 0.0rem; --product-card-shadow-blur-radius: 0.5rem; --collection-card-image-padding: 0.0rem; --collection-card-corner-radius: 1.6rem; --collection-card-text-alignment: left; --collection-card-border-width: 0.0rem; --collection-card-border-opacity: 0.1; --collection-card-shadow-opacity: 0.0; --collection-card-shadow-visible: 0; --collection-card-shadow-horizontal-offset: 0.0rem; --collection-card-shadow-vertical-offset: 0.4rem; --collection-card-shadow-blur-radius: 0.5rem; --blog-card-image-padding: 0.0rem; --blog-card-corner-radius: 1.6rem; --blog-card-text-alignment: left; --blog-card-border-width: 0.0rem; --blog-card-border-opacity: 0.1; --blog-card-shadow-opacity: 0.0; --blog-card-shadow-visible: 0; --blog-card-shadow-horizontal-offset: 0.0rem; --blog-card-shadow-vertical-offset: 0.4rem; --blog-card-shadow-blur-radius: 0.5rem; --badge-corner-radius: 0.4rem; --popup-border-width: 1px; --popup-border-opacity: 1.0; --popup-corner-radius: 4px; --popup-shadow-opacity: 0.0; --popup-shadow-horizontal-offset: 0px; --popup-shadow-vertical-offset: 4px; --popup-shadow-blur-radius: 5px; --drawer-border-width: 1px; --drawer-border-opacity: 0.1; --drawer-shadow-opacity: 0.0; --drawer-shadow-horizontal-offset: 0px; --drawer-shadow-vertical-offset: 4px; --drawer-shadow-blur-radius: 5px; --spacing-sections-desktop: 0px; --spacing-sections-mobile: 0px; --grid-desktop-vertical-spacing: 16px; --grid-desktop-horizontal-spacing: 16px; --grid-mobile-vertical-spacing: 8px; --grid-mobile-horizontal-spacing: 8px; --text-boxes-border-opacity: 0.15; --text-boxes-border-width: 0px; --text-boxes-radius: 0px; --text-boxes-shadow-opacity: 0.0; --text-boxes-shadow-visible: 0; --text-boxes-shadow-horizontal-offset: 0px; --text-boxes-shadow-vertical-offset: 4px; --text-boxes-shadow-blur-radius: 5px; --buttons-radius: 4px; --buttons-radius-outset: 5px; --buttons-border-width: 1px; --buttons-border-opacity: 1.0; --buttons-shadow-opacity: 0.0; --buttons-shadow-visible: 0; --buttons-shadow-horizontal-offset: 0px; --buttons-shadow-vertical-offset: 4px; --buttons-shadow-blur-radius: 5px; --buttons-border-offset: 0.3px; --inputs-radius: 4px; --inputs-border-width: 1px; --inputs-border-opacity: 1.0; --inputs-shadow-opacity: 0.0; --inputs-shadow-horizontal-offset: 0px; --inputs-margin-offset: 0px; --inputs-shadow-vertical-offset: 4px; --inputs-shadow-blur-radius: 5px; --inputs-radius-outset: 5px; --variant-pills-radius: 40px; --variant-pills-border-width: 1px; --variant-pills-border-opacity: 0.55; --variant-pills-shadow-opacity: 0.0; --variant-pills-shadow-horizontal-offset: 0px; --variant-pills-shadow-vertical-offset: 4px; --variant-pills-shadow-blur-radius: 5px; } *, *::before, *::after { box-sizing: inherit; } html { box-sizing: border-box; font-size: calc(var(--font-body-scale) * 62.5%); height: 100%; } body { display: grid; grid-template-rows: auto auto 1fr auto; grid-template-columns: 100%; min-height: 100%; margin: 0; font-size: 1.5rem; letter-spacing: 0.06rem; line-height: calc(1 + 0.8 / var(--font-body-scale)); font-family: var(--font-body-family); font-style: var(--font-body-style); font-weight: var(--font-body-weight); } @media screen and (min-width: 750px) { body { font-size: 1.6rem; } } </style> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/base.css?v=155294859434750486431722292306" rel="stylesheet" type="text/css" media="all" /> <link rel="preload" as="font" href="//merch.rubyonrails.org/cdn/fonts/basic_commercial/basiccommercial_n7.58fc15bd5b52101eea961dd8bc6882e199098b2d.woff2?h1=YzdmN2E0LTk0LmFjY291bnQubXlzaG9waWZ5LmNvbQ&h2=cmFpbHN3b3JsZC5teXNob3BpZnkuY29t&h3=bWVyY2gucnVieW9ucmFpbHMub3Jn&hmac=575ab52412d96a2a6814b1de6cff941943463a2b6f8bb23f59dbffbde18f6fd0" type="font/woff2" crossorigin> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-localization-form.css?v=120620094879297847921722292306" rel="stylesheet" type="text/css" media="all" /> <script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/localization-form.js?v=144176611646395275351722292307" defer="defer"></script><link rel="stylesheet" href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-predictive-search.css?v=118923337488134913561722292306" media="print" onload="this.media='all'" ><script> if (Shopify.designMode) { document.documentElement.classList.add('shopify-design-mode'); } </script> <style> .shopify-payment-button__button--unbranded { font-size: 0 !important; } .shopify-payment-button__button--unbranded::before { content: 'Pay Now'; position: absolute; visibility: visible; top: 0; left: 0; bottom: 0; font-size: 14px; display: contents; } </style> <link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch"> <script>(function(){if ("sendBeacon" in navigator && "performance" in window) {var session_token = document.cookie.match(/_shopify_s=([^;]*)/);function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 64807075977,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token: session_token && session_token.length === 2 ? session_token[1] : "",page_type: "index"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script> <script id="web-pixels-manager-setup">(function d(d,e,r,a,n){var o,i,t,s,l=(i=(o={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](12[89]|1[3-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(12[7-9]|1[3-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(12[89]|1[3-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](12[89]|1[3-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(12[7-9]|1[3-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(12[89]|1[3-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,t=o.legacy,s=navigator.userAgent,i.test(s)?"modern":(t.test(s),"legacy"));window.Shopify=window.Shopify||{};var c=window.Shopify;c.analytics=c.analytics||{};var u=c.analytics;u.replayQueue=[],u.publish=function(d,e,r){return u.replayQueue.push([d,e,r]),!0};try{self.performance.mark("wpm:start")}catch(d){}var h=[r,"/wpm","/b",n,l.substring(0,1),".js"].join("");!function(d){var e=d.src,r=d.async,a=void 0===r||r,n=d.onload,o=d.onerror,i=document.createElement("script"),t=document.head,s=document.body;i.async=a,i.src=e,n&&i.addEventListener("load",n),o&&i.addEventListener("error",o),t?t.appendChild(i):s?s.appendChild(i):console.error("Did not find a head or body element to append the script")}({src:h,async:!0,onload:function(){var r=window.webPixelsManager.init(d);e(r);var a=window.Shopify.analytics;a.replayQueue.forEach((function(d){var e=d[0],a=d[1],n=d[2];r.publishCustomEvent(e,a,n)})),a.replayQueue=[],a.publish=r.publishCustomEvent,a.visitor=r.visitor},onerror:function(){var e=d.storefrontBaseUrl.replace(/\/$/,""),r="".concat(e,"/.well-known/shopify/monorail/unstable/produce_batch"),n=JSON.stringify({metadata:{event_sent_at_ms:(new Date).getTime()},events:[{schema_id:"web_pixels_manager_load/3.1",payload:{version:a||"latest",bundle_target:l,page_url:self.location.href,status:"failed",surface:d.surface,error_msg:"".concat(h," has failed to load")},metadata:{event_created_at_ms:(new Date).getTime()}}]});try{if(self.navigator.sendBeacon.bind(self.navigator)(r,n))return!0}catch(d){}var o=new XMLHttpRequest;try{return o.open("POST",r,!0),o.setRequestHeader("Content-Type","text/plain"),o.send(n),!0}catch(d){console&&console.warn&&console.warn("[Web Pixels Manager] Got an unhandled error while logging a load error.")}return!1}})})({shopId: 64807075977,storefrontBaseUrl: "https://merch.rubyonrails.org",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",surface: "storefront-renderer",enabledBetaFlags: [],webPixelsConfigList: [{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0220","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0220","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Rails Merch Store","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"c7f7a4-94.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/merch.rubyonrails.org"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"purchasingCompany":null},},function pageEvents(webPixelsManagerAPI) {webPixelsManagerAPI.publish("page_viewed", {});},"https://merch.rubyonrails.org/cdn","0841d9a8b8dd7925775c027a734dd233ae0a69a4","531f4151wf5c7d559p98247de9m3526fde0",);</script> <script>window.ShopifyAnalytics = window.ShopifyAnalytics || {}; window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; window.ShopifyAnalytics.meta.currency = 'USD'; var meta = {"page":{"pageType":"home"}}; for (var attr in meta) { window.ShopifyAnalytics.meta[attr] = meta[attr]; }</script> <script>window.ShopifyAnalytics.merchantGoogleAnalytics = function() { }; </script> <script class="analytics">(function () { var customDocumentWrite = function(content) { var jquery = null; if (window.jQuery) { jquery = window.jQuery; } else if (window.Checkout && window.Checkout.$) { jquery = window.Checkout.$; } if (jquery) { jquery('body').append(content); } }; var hasLoggedConversion = function(token) { if (token) { return document.cookie.indexOf('loggedConversion=' + token) !== -1; } return false; } var setCookieIfConversion = function(token) { if (token) { var twoMonthsFromNow = new Date(Date.now()); twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; } } var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; if (trekkie.integrations) { return; } trekkie.methods = [ 'identify', 'page', 'ready', 'track', 'trackForm', 'trackLink' ]; trekkie.factory = function(method) { return function() { var args = Array.prototype.slice.call(arguments); args.unshift(method); trekkie.push(args); return trekkie; }; }; for (var i = 0; i < trekkie.methods.length; i++) { var key = trekkie.methods[i]; trekkie[key] = trekkie.factory(key); } trekkie.load = function(config) { trekkie.config = config || {}; trekkie.config.initialDocumentCookie = document.cookie; var first = document.getElementsByTagName('script')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.onerror = function(e) { var scriptFallback = document.createElement('script'); scriptFallback.type = 'text/javascript'; scriptFallback.onerror = function(error) { var Monorail = { produce: function produce(monorailDomain, schemaId, payload) { var currentMs = new Date().getTime(); var event = { schema_id: schemaId, payload: payload, metadata: { event_created_at_ms: currentMs, event_sent_at_ms: currentMs } }; return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); }, sendRequest: function sendRequest(endpointUrl, payload) { // Try the sendBeacon API if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { var blobData = new window.Blob([payload], { type: 'text/plain' }); if (window.navigator.sendBeacon(endpointUrl, blobData)) { return true; } // sendBeacon was not successful } // XHR beacon var xhr = new XMLHttpRequest(); try { xhr.open('POST', endpointUrl); xhr.setRequestHeader('Content-Type', 'text/plain'); xhr.send(payload); } catch (e) { console.log(e); } return false; }, isIos12: function isIos12() { return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; } }; Monorail.produce('monorail-edge.shopifysvc.com', 'trekkie_storefront_load_errors/1.1', {shop_id: 64807075977, theme_id: 135462813833, app_name: "storefront", context_url: window.location.href, source_url: "//merch.rubyonrails.org/cdn/s/trekkie.storefront.8b4c16448efd5412843a4e489d8eb4898c09f6d2.min.js"}); }; scriptFallback.async = true; scriptFallback.src = '//merch.rubyonrails.org/cdn/s/trekkie.storefront.8b4c16448efd5412843a4e489d8eb4898c09f6d2.min.js'; first.parentNode.insertBefore(scriptFallback, first); }; script.async = true; script.src = '//merch.rubyonrails.org/cdn/s/trekkie.storefront.8b4c16448efd5412843a4e489d8eb4898c09f6d2.min.js'; first.parentNode.insertBefore(script, first); }; trekkie.load( {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":64807075977,"isMerchantRequest":null,"themeId":135462813833,"themeCityHash":"16533073261498527630","contentLanguage":"en","currency":"USD"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain"},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}} ); var loaded = false; trekkie.ready(function() { if (loaded) return; loaded = true; window.ShopifyAnalytics.lib = window.trekkie; var originalDocumentWrite = document.write; document.write = customDocumentWrite; try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; document.write = originalDocumentWrite; window.ShopifyAnalytics.lib.page(null,{"pageType":"home"}); var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) var token = match? match[1]: undefined; if (!hasLoggedConversion(token)) { setCookieIfConversion(token); } }); var eventsListenerScript = document.createElement('script'); eventsListenerScript.async = true; eventsListenerScript.src = "//merch.rubyonrails.org/cdn/shopifycloud/shopify/assets/shop_events_listener-61fa9e0a912c675e178777d2b27f6cbd482f8912a6b0aa31fa3515985a8cd626.js"; document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); })();</script> <script class="boomerang"> (function () { window.BOOMR = window.BOOMR || {}; window.BOOMR.themeName = "Spotlight"; window.BOOMR.themeVersion = "15.0.0"; window.BOOMR.shopId = 64807075977; window.BOOMR.themeId = 135462813833; })();</script> <script defer src="https://merch.rubyonrails.org/cdn/shopifycloud/perf-kit/shopify-perf-kit-1.1.0.min.js" data-application="storefront-renderer" data-shop-id="64807075977" data-render-region="gcp-asia-southeast1" data-page-type="index" data-theme-instance-id="135462813833" data-monorail-region="shop_domain" data-resource-timing-sampling-rate="10" ></script> </head> <body class="gradient"> <a class="skip-to-content-link button visually-hidden" href="#MainContent"> Skip to content </a><!-- BEGIN sections: header-group --> <div id="shopify-section-sections--16983495475337__header" class="shopify-section shopify-section-group-header-group section-header"><link rel="stylesheet" href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-list-menu.css?v=151968516119678728991722292306" media="print" onload="this.media='all'"> <link rel="stylesheet" href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-search.css?v=165164710990765432851722292306" media="print" onload="this.media='all'"> <link rel="stylesheet" href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-menu-drawer.css?v=110695408305392539491722292306" media="print" onload="this.media='all'"> <link rel="stylesheet" href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-cart-notification.css?v=54116361853792938221722292306" media="print" onload="this.media='all'"> <link rel="stylesheet" href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-cart-items.css?v=127384614032664249911722292306" media="print" onload="this.media='all'"><link rel="stylesheet" href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-price.css?v=70172745017360139101722292306" media="print" onload="this.media='all'"><style> header-drawer { justify-self: start; margin-left: -1.2rem; }@media screen and (min-width: 990px) { header-drawer { display: none; } }.menu-drawer-container { display: flex; } .list-menu { list-style: none; padding: 0; margin: 0; } .list-menu--inline { display: inline-flex; flex-wrap: wrap; } summary.list-menu__item { padding-right: 2.7rem; } .list-menu__item { display: flex; align-items: center; line-height: calc(1 + 0.3 / var(--font-body-scale)); } .list-menu__item--link { text-decoration: none; padding-bottom: 1rem; padding-top: 1rem; line-height: calc(1 + 0.8 / var(--font-body-scale)); } @media screen and (min-width: 750px) { .list-menu__item--link { padding-bottom: 0.5rem; padding-top: 0.5rem; } } </style><style data-shopify>.header { padding: 18px 3rem 6px 3rem; } .section-header { position: sticky; /* This is for fixing a Safari z-index issue. PR #2147 */ margin-bottom: 0px; } @media screen and (min-width: 750px) { .section-header { margin-bottom: 0px; } } @media screen and (min-width: 990px) { .header { padding-top: 36px; padding-bottom: 12px; } }</style><script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/details-disclosure.js?v=13653116266235556501722292306" defer="defer"></script> <script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/details-modal.js?v=25581673532751508451722292306" defer="defer"></script> <script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/cart-notification.js?v=133508293167896966491722292306" defer="defer"></script> <script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/search-form.js?v=133129549252120666541722292307" defer="defer"></script><svg xmlns="http://www.w3.org/2000/svg" class="hidden"> <symbol id="icon-search" viewbox="0 0 18 19" fill="none"> <path fill-rule="evenodd" clip-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 112.85 3.5a5.784 5.784 0 018.18 8.18zm.26 1.12a6.78 6.78 0 11.72-.7l5.4 5.4a.5.5 0 11-.71.7l-5.41-5.4z" fill="currentColor"/> </symbol> <symbol id="icon-reset" class="icon icon-close" fill="none" viewBox="0 0 18 18" stroke="currentColor"> <circle r="8.5" cy="9" cx="9" stroke-opacity="0.2"/> <path d="M6.82972 6.82915L1.17193 1.17097" stroke-linecap="round" stroke-linejoin="round" transform="translate(5 5)"/> <path d="M1.22896 6.88502L6.77288 1.11523" stroke-linecap="round" stroke-linejoin="round" transform="translate(5 5)"/> </symbol> <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17"> <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor"> </symbol> </svg><sticky-header data-sticky-type="on-scroll-up" class="header-wrapper color-scheme-1 gradient"><header class="header header--middle-left header--mobile-center page-width"> <details-modal class="header__search"> <details> <summary class="header__icon header__icon--search header__icon--summary link focus-inset modal__toggle" aria-haspopup="dialog" aria-label="Search" > <span> <svg class="modal__toggle-open icon icon-search" aria-hidden="true" focusable="false"> <use href="#icon-search"> </svg> <svg class="modal__toggle-close icon icon-close" aria-hidden="true" focusable="false"> <use href="#icon-close"> </svg> </span> </summary> <div class="search-modal modal__content gradient" role="dialog" aria-modal="true" aria-label="Search" > <div class="modal-overlay"></div> <div class="search-modal__content search-modal__content-bottom" tabindex="-1" ><predictive-search class="search-modal__form" data-loading-text="Loading..."><form action="/search" method="get" role="search" class="search search-modal__form"> <div class="field"> <input class="search__input field__input" id="Search-In-Modal-1" type="search" name="q" value="" placeholder="Search"role="combobox" aria-expanded="false" aria-owns="predictive-search-results" aria-controls="predictive-search-results" aria-haspopup="listbox" aria-autocomplete="list" autocorrect="off" autocomplete="off" autocapitalize="off" spellcheck="false"> <label class="field__label" for="Search-In-Modal-1">Search</label> <input type="hidden" name="options[prefix]" value="last"> <button type="reset" class="reset__button field__button hidden" aria-label="Clear search term" > <svg class="icon icon-close" aria-hidden="true" focusable="false"> <use xlink:href="#icon-reset"> </svg> </button> <button class="search__button field__button" aria-label="Search"> <svg class="icon icon-search" aria-hidden="true" focusable="false"> <use href="#icon-search"> </svg> </button> </div><div class="predictive-search predictive-search--header" tabindex="-1" data-predictive-search> <div class="predictive-search__loading-state"> <svg aria-hidden="true" focusable="false" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg" > <circle class="path" fill="none" stroke-width="6" cx="33" cy="33" r="30"></circle> </svg> </div> </div> <span class="predictive-search-status visually-hidden" role="status" aria-hidden="true"></span></form></predictive-search><button type="button" class="search-modal__close-button modal__close-button link link--text focus-inset" aria-label="Close" > <svg class="icon icon-close" aria-hidden="true" focusable="false"> <use href="#icon-close"> </svg> </button> </div> </div> </details> </details-modal> <h1 class="header__heading"><a href="/" class="header__heading-link link link--text focus-inset"><div class="header__heading-logo-wrapper"> <img src="//merch.rubyonrails.org/cdn/shop/files/rails-circle.png?v=1721924104&amp;width=600" alt="Rails Merch Store" srcset="//merch.rubyonrails.org/cdn/shop/files/rails-circle.png?v=1721924104&amp;width=100 100w, //merch.rubyonrails.org/cdn/shop/files/rails-circle.png?v=1721924104&amp;width=150 150w, //merch.rubyonrails.org/cdn/shop/files/rails-circle.png?v=1721924104&amp;width=200 200w" width="100" height="100.0" loading="eager" class="header__heading-logo motion-reduce" sizes="(max-width: 200px) 50vw, 100px"> </div></a></h1> <div class="header__icons"> <div class="desktop-localization-wrapper"> </div> <details-modal class="header__search"> <details> <summary class="header__icon header__icon--search header__icon--summary link focus-inset modal__toggle" aria-haspopup="dialog" aria-label="Search" > <span> <svg class="modal__toggle-open icon icon-search" aria-hidden="true" focusable="false"> <use href="#icon-search"> </svg> <svg class="modal__toggle-close icon icon-close" aria-hidden="true" focusable="false"> <use href="#icon-close"> </svg> </span> </summary> <div class="search-modal modal__content gradient" role="dialog" aria-modal="true" aria-label="Search" > <div class="modal-overlay"></div> <div class="search-modal__content search-modal__content-bottom" tabindex="-1" ><predictive-search class="search-modal__form" data-loading-text="Loading..."><form action="/search" method="get" role="search" class="search search-modal__form"> <div class="field"> <input class="search__input field__input" id="Search-In-Modal" type="search" name="q" value="" placeholder="Search"role="combobox" aria-expanded="false" aria-owns="predictive-search-results" aria-controls="predictive-search-results" aria-haspopup="listbox" aria-autocomplete="list" autocorrect="off" autocomplete="off" autocapitalize="off" spellcheck="false"> <label class="field__label" for="Search-In-Modal">Search</label> <input type="hidden" name="options[prefix]" value="last"> <button type="reset" class="reset__button field__button hidden" aria-label="Clear search term" > <svg class="icon icon-close" aria-hidden="true" focusable="false"> <use xlink:href="#icon-reset"> </svg> </button> <button class="search__button field__button" aria-label="Search"> <svg class="icon icon-search" aria-hidden="true" focusable="false"> <use href="#icon-search"> </svg> </button> </div><div class="predictive-search predictive-search--header" tabindex="-1" data-predictive-search> <div class="predictive-search__loading-state"> <svg aria-hidden="true" focusable="false" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg" > <circle class="path" fill="none" stroke-width="6" cx="33" cy="33" r="30"></circle> </svg> </div> </div> <span class="predictive-search-status visually-hidden" role="status" aria-hidden="true"></span></form></predictive-search><button type="button" class="search-modal__close-button modal__close-button link link--text focus-inset" aria-label="Close" > <svg class="icon icon-close" aria-hidden="true" focusable="false"> <use href="#icon-close"> </svg> </button> </div> </div> </details> </details-modal> <a href="/cart" class="header__icon header__icon--cart link focus-inset" id="cart-icon-bubble"><svg class="icon icon-cart-empty" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40" fill="none" > <path d="m15.75 11.8h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33l-.78-11.61zm0 1h-2.22l-.71 10.67a4 4 0 0 0 3.99 4.27h7.38a4 4 0 0 0 4-4.27l-.72-10.67h-2.22v.63a4.75 4.75 0 1 1 -9.5 0zm8.5 0h-7.5v.63a3.75 3.75 0 1 0 7.5 0z" fill="currentColor" fill-rule="evenodd"/> </svg> <span class="visually-hidden">Cart</span></a> </div> </header> </sticky-header> <cart-notification> <div class="cart-notification-wrapper page-width"> <div id="cart-notification" class="cart-notification focus-inset color-scheme-1 gradient" aria-modal="true" aria-label="Item added to your cart" role="dialog" tabindex="-1" > <div class="cart-notification__header"> <h2 class="cart-notification__heading caption-large text-body"><svg class="icon icon-checkmark" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 9" fill="none" > <path fill-rule="evenodd" clip-rule="evenodd" d="M11.35.643a.5.5 0 01.006.707l-6.77 6.886a.5.5 0 01-.719-.006L.638 4.845a.5.5 0 11.724-.69l2.872 3.011 6.41-6.517a.5.5 0 01.707-.006h-.001z" fill="currentColor"/> </svg> Item added to your cart </h2> <button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="Close" > <svg class="icon icon-close" aria-hidden="true" focusable="false"> <use href="#icon-close"> </svg> </button> </div> <div id="cart-notification-product" class="cart-notification-product"></div> <div class="cart-notification__links"> <a href="/cart" id="cart-notification-button" class="button button--secondary button--full-width" >View cart</a> <form action="/cart" method="post" id="cart-notification-form"> <button class="button button--primary button--full-width" name="checkout"> Check out </button> </form> <button type="button" class="link button-label">Continue shopping</button> </div> </div> </div> </cart-notification> <style data-shopify> .cart-notification { display: none; } </style> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Organization", "name": "Rails Merch Store", "logo": "https:\/\/merch.rubyonrails.org\/cdn\/shop\/files\/rails-circle.png?v=1721924104\u0026width=500", "sameAs": [ "", "", "", "", "", "", "", "", "" ], "url": "https:\/\/merch.rubyonrails.org" } </script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebSite", "name": "Rails Merch Store", "potentialAction": { "@type": "SearchAction", "target": "https:\/\/merch.rubyonrails.org\/search?q={search_term_string}", "query-input": "required name=search_term_string" }, "url": "https:\/\/merch.rubyonrails.org" } </script> </div><div id="shopify-section-sections--16983495475337__announcement_bar_JNEbnf" class="shopify-section shopify-section-group-header-group announcement-bar-section"><link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-slideshow.css?v=170654395204511176521722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-slider.css?v=14039311878856620671722292306" rel="stylesheet" type="text/css" media="all" /> <div class="utility-bar color-scheme-4 gradient" > <div class="page-width utility-bar__grid"><div class="announcement-bar" role="region" aria-label="Announcement" ><p class="announcement-bar__message h5"> <span>The official Ruby on Rails merch store</span></p></div><div class="localization-wrapper"> </div> </div> </div> </div> <!-- END sections: header-group --> <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1"> <section id="shopify-section-template--16983494721673__featured_collection_4ERkzp" class="shopify-section section"><link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-card.css?v=120341546515895839841722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-price.css?v=70172745017360139101722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-slider.css?v=14039311878856620671722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/template-collection.css?v=58558206033505836701722292307" rel="stylesheet" type="text/css" media="all" /> <style data-shopify>.section-template--16983494721673__featured_collection_4ERkzp-padding { padding-top: 27px; padding-bottom: 27px; } @media screen and (min-width: 750px) { .section-template--16983494721673__featured_collection_4ERkzp-padding { padding-top: 36px; padding-bottom: 36px; } }</style><div class="color-scheme-1 isolate gradient" > <div class="collection section-template--16983494721673__featured_collection_4ERkzp-padding" id="collection-template--16983494721673__featured_collection_4ERkzp" data-id="template--16983494721673__featured_collection_4ERkzp" > <div class="collection__title title-wrapper title-wrapper--no-top-margin page-width"></div> <slider-component class="slider-mobile-gutter page-width page-width-desktop scroll-trigger animate--slide-in"> <ul id="Slider-template--16983494721673__featured_collection_4ERkzp" data-id="template--16983494721673__featured_collection_4ERkzp" class="grid product-grid contains-card contains-card--product contains-card--standard grid--5-col-desktop grid--2-col-tablet-down" role="list" aria-label="Slider" > <li id="Slide-template--16983494721673__featured_collection_4ERkzp-1" class="grid__item scroll-trigger animate--slide-in" data-cascade style="--animation-order: 1;" > <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-rating.css?v=179577762467860590411722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-volume-pricing.css?v=111870094811454961941722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-price.css?v=70172745017360139101722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/quick-order-list.css?v=38387008350345892421722292307" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/quantity-popover.css?v=78745769908715669131722292307" rel="stylesheet" type="text/css" media="all" /> <div class="card-wrapper product-card-wrapper underline-links-hover"> <div class=" card card--standard card--media " style="--ratio-percent: 100%;" > <div class="card__inner color-scheme-2 gradient ratio" style="--ratio-percent: 100%;" ><div class="card__media"> <div class="media media--transparent media--hover-effect"> <img srcset="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt.jpg?v=1733163973&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt.jpg?v=1733163973&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt.jpg?v=1733163973&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt.jpg?v=1733163973&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt.jpg?v=1733163973&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt.jpg?v=1733163973&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt.jpg?v=1733163973 1500w " src="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt.jpg?v=1733163973&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="Classic Rails T-shirt" class="motion-reduce" loading="lazy" width="1500" height="2000" > <img srcset="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt3.jpg?v=1733163977&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt3.jpg?v=1733163977&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt3.jpg?v=1733163977&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt3.jpg?v=1733163977&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt3.jpg?v=1733163977&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt3.jpg?v=1733163977&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt3.jpg?v=1733163977 1500w " src="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Shirt3.jpg?v=1733163977&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="" class="motion-reduce" loading="lazy" width="1500" height="2000" ></div> </div><div class="card__content"> <div class="card__information"> <h3 class="card__heading" > <a href="/products/rails-short-sleeve-shirt" id="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7811622371465" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7811622371465 NoMediaStandardBadge-template--16983494721673__featured_collection_4ERkzp-7811622371465" > Classic Rails T-shirt </a> </h3> </div> <div class="card__badge bottom left"></div> </div> </div> <div class="card__content"> <div class="card__information"> <h3 class="card__heading h5" id="title-template--16983494721673__featured_collection_4ERkzp-7811622371465" > <a href="/products/rails-short-sleeve-shirt" id="CardLink-template--16983494721673__featured_collection_4ERkzp-7811622371465" class="full-unstyled-link" aria-labelledby="CardLink-template--16983494721673__featured_collection_4ERkzp-7811622371465 Badge-template--16983494721673__featured_collection_4ERkzp-7811622371465" > Classic Rails T-shirt </a> </h3> <div class="card-information"><span class="caption-large light"></span> <div class=" price " > <div class="price__container"><div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> <span class="price-item price-item--regular"> $35.00 USD </span></div> <div class="price__sale"> <span class="visually-hidden visually-hidden--inline">Regular price</span> <span> <s class="price-item price-item--regular"> </s> </span><span class="visually-hidden visually-hidden--inline">Sale price</span> <span class="price-item price-item--sale price-item--last"> $35.00 USD </span> </div> <small class="unit-price caption hidden"> <span class="visually-hidden">Unit price</span> <span class="price-item price-item--last"> <span></span> <span aria-hidden="true">/</span> <span class="visually-hidden">&nbsp;per&nbsp;</span> <span> </span> </span> </small> </div></div> </div> </div> <div class="card__badge bottom left"></div> </div> </div> </div> </li><li id="Slide-template--16983494721673__featured_collection_4ERkzp-2" class="grid__item scroll-trigger animate--slide-in" data-cascade style="--animation-order: 2;" > <div class="card-wrapper product-card-wrapper underline-links-hover"> <div class=" card card--standard card--media " style="--ratio-percent: 100%;" > <div class="card__inner color-scheme-2 gradient ratio" style="--ratio-percent: 100%;" ><div class="card__media"> <div class="media media--transparent media--hover-effect"> <img srcset="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie.jpg?v=1733163975&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie.jpg?v=1733163975&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie.jpg?v=1733163975&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie.jpg?v=1733163975&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie.jpg?v=1733163975&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie.jpg?v=1733163975&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie.jpg?v=1733163975 1500w " src="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie.jpg?v=1733163975&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="Classic Rails Hoodie" class="motion-reduce" loading="lazy" width="1500" height="2000" > <img srcset="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie-05.jpg?v=1733163974&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie-05.jpg?v=1733163974&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie-05.jpg?v=1733163974&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie-05.jpg?v=1733163974&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie-05.jpg?v=1733163974&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie-05.jpg?v=1733163974&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie-05.jpg?v=1733163974 1500w " src="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hoodie-05.jpg?v=1733163974&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="" class="motion-reduce" loading="lazy" width="1500" height="2000" ></div> </div><div class="card__content"> <div class="card__information"> <h3 class="card__heading" > <a href="/products/rails-zip-hoodie" id="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7811648356489" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7811648356489 NoMediaStandardBadge-template--16983494721673__featured_collection_4ERkzp-7811648356489" > Classic Rails Hoodie </a> </h3> </div> <div class="card__badge bottom left"></div> </div> </div> <div class="card__content"> <div class="card__information"> <h3 class="card__heading h5" id="title-template--16983494721673__featured_collection_4ERkzp-7811648356489" > <a href="/products/rails-zip-hoodie" id="CardLink-template--16983494721673__featured_collection_4ERkzp-7811648356489" class="full-unstyled-link" aria-labelledby="CardLink-template--16983494721673__featured_collection_4ERkzp-7811648356489 Badge-template--16983494721673__featured_collection_4ERkzp-7811648356489" > Classic Rails Hoodie </a> </h3> <div class="card-information"><span class="caption-large light"></span> <div class=" price " > <div class="price__container"><div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> <span class="price-item price-item--regular"> $55.00 USD </span></div> <div class="price__sale"> <span class="visually-hidden visually-hidden--inline">Regular price</span> <span> <s class="price-item price-item--regular"> </s> </span><span class="visually-hidden visually-hidden--inline">Sale price</span> <span class="price-item price-item--sale price-item--last"> $55.00 USD </span> </div> <small class="unit-price caption hidden"> <span class="visually-hidden">Unit price</span> <span class="price-item price-item--last"> <span></span> <span aria-hidden="true">/</span> <span class="visually-hidden">&nbsp;per&nbsp;</span> <span> </span> </span> </small> </div></div> </div> </div> <div class="card__badge bottom left"></div> </div> </div> </div> </li><li id="Slide-template--16983494721673__featured_collection_4ERkzp-3" class="grid__item scroll-trigger animate--slide-in" data-cascade style="--animation-order: 3;" > <div class="card-wrapper product-card-wrapper underline-links-hover"> <div class=" card card--standard card--media " style="--ratio-percent: 100%;" > <div class="card__inner color-scheme-2 gradient ratio" style="--ratio-percent: 100%;" ><div class="card__media"> <div class="media media--transparent media--hover-effect"> <img srcset="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat2.jpg?v=1733163975&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat2.jpg?v=1733163975&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat2.jpg?v=1733163975&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat2.jpg?v=1733163975&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat2.jpg?v=1733163975&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat2.jpg?v=1733163975&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat2.jpg?v=1733163975 1500w " src="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat2.jpg?v=1733163975&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="Classic Rails Cap" class="motion-reduce" loading="lazy" width="1500" height="2000" > <img srcset="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat-10.jpg?v=1733163976&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat-10.jpg?v=1733163976&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat-10.jpg?v=1733163976&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat-10.jpg?v=1733163976&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat-10.jpg?v=1733163976&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat-10.jpg?v=1733163976&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat-10.jpg?v=1733163976 1500w " src="//merch.rubyonrails.org/cdn/shop/files/Rails_Classic_Hat-10.jpg?v=1733163976&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="" class="motion-reduce" loading="lazy" width="1500" height="2000" ></div> </div><div class="card__content"> <div class="card__information"> <h3 class="card__heading" > <a href="/products/rails-dad-hat" id="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7811648389257" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7811648389257 NoMediaStandardBadge-template--16983494721673__featured_collection_4ERkzp-7811648389257" > Classic Rails Cap </a> </h3> </div> <div class="card__badge bottom left"></div> </div> </div> <div class="card__content"> <div class="card__information"> <h3 class="card__heading h5" id="title-template--16983494721673__featured_collection_4ERkzp-7811648389257" > <a href="/products/rails-dad-hat" id="CardLink-template--16983494721673__featured_collection_4ERkzp-7811648389257" class="full-unstyled-link" aria-labelledby="CardLink-template--16983494721673__featured_collection_4ERkzp-7811648389257 Badge-template--16983494721673__featured_collection_4ERkzp-7811648389257" > Classic Rails Cap </a> </h3> <div class="card-information"><span class="caption-large light"></span> <div class=" price " > <div class="price__container"><div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> <span class="price-item price-item--regular"> $35.00 USD </span></div> <div class="price__sale"> <span class="visually-hidden visually-hidden--inline">Regular price</span> <span> <s class="price-item price-item--regular"> </s> </span><span class="visually-hidden visually-hidden--inline">Sale price</span> <span class="price-item price-item--sale price-item--last"> $35.00 USD </span> </div> <small class="unit-price caption hidden"> <span class="visually-hidden">Unit price</span> <span class="price-item price-item--last"> <span></span> <span aria-hidden="true">/</span> <span class="visually-hidden">&nbsp;per&nbsp;</span> <span> </span> </span> </small> </div></div> </div> </div> <div class="card__badge bottom left"></div> </div> </div> </div> </li><li id="Slide-template--16983494721673__featured_collection_4ERkzp-4" class="grid__item scroll-trigger animate--slide-in" data-cascade style="--animation-order: 4;" > <div class="card-wrapper product-card-wrapper underline-links-hover"> <div class=" card card--standard card--media " style="--ratio-percent: 100%;" > <div class="card__inner color-scheme-2 gradient ratio" style="--ratio-percent: 100%;" ><div class="card__media"> <div class="media media--transparent media--hover-effect"> <img srcset="//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug1.jpg?v=1733163974&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug1.jpg?v=1733163974&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug1.jpg?v=1733163974&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug1.jpg?v=1733163974&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug1.jpg?v=1733163974&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug1.jpg?v=1733163974&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug1.jpg?v=1733163974 1500w " src="//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug1.jpg?v=1733163974&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="Rails Travel Mug" class="motion-reduce" loading="lazy" width="1500" height="2000" > <img srcset="//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug2.jpg?v=1733163978&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug2.jpg?v=1733163978&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug2.jpg?v=1733163978&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug2.jpg?v=1733163978&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug2.jpg?v=1733163978&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug2.jpg?v=1733163978&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug2.jpg?v=1733163978 1500w " src="//merch.rubyonrails.org/cdn/shop/files/Rails_Travel_Mug2.jpg?v=1733163978&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="" class="motion-reduce" loading="lazy" width="1500" height="2000" ></div> </div><div class="card__content"> <div class="card__information"> <h3 class="card__heading" > <a href="/products/rails-insulated-mug" id="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7811648454793" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7811648454793 NoMediaStandardBadge-template--16983494721673__featured_collection_4ERkzp-7811648454793" > Rails Travel Mug </a> </h3> </div> <div class="card__badge bottom left"></div> </div> </div> <div class="card__content"> <div class="card__information"> <h3 class="card__heading h5" id="title-template--16983494721673__featured_collection_4ERkzp-7811648454793" > <a href="/products/rails-insulated-mug" id="CardLink-template--16983494721673__featured_collection_4ERkzp-7811648454793" class="full-unstyled-link" aria-labelledby="CardLink-template--16983494721673__featured_collection_4ERkzp-7811648454793 Badge-template--16983494721673__featured_collection_4ERkzp-7811648454793" > Rails Travel Mug </a> </h3> <div class="card-information"><span class="caption-large light"></span> <div class=" price " > <div class="price__container"><div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> <span class="price-item price-item--regular"> $35.00 USD </span></div> <div class="price__sale"> <span class="visually-hidden visually-hidden--inline">Regular price</span> <span> <s class="price-item price-item--regular"> </s> </span><span class="visually-hidden visually-hidden--inline">Sale price</span> <span class="price-item price-item--sale price-item--last"> $35.00 USD </span> </div> <small class="unit-price caption hidden"> <span class="visually-hidden">Unit price</span> <span class="price-item price-item--last"> <span></span> <span aria-hidden="true">/</span> <span class="visually-hidden">&nbsp;per&nbsp;</span> <span> </span> </span> </small> </div></div> </div> </div> <div class="card__badge bottom left"></div> </div> </div> </div> </li><li id="Slide-template--16983494721673__featured_collection_4ERkzp-5" class="grid__item scroll-trigger animate--slide-in" data-cascade style="--animation-order: 5;" > <div class="card-wrapper product-card-wrapper underline-links-hover"> <div class=" card card--standard card--media " style="--ratio-percent: 100%;" > <div class="card__inner color-scheme-2 gradient ratio" style="--ratio-percent: 100%;" ><div class="card__media"> <div class="media media--transparent media--hover-effect"> <img srcset="//merch.rubyonrails.org/cdn/shop/files/IMG_5131.jpg?v=1728937174&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/IMG_5131.jpg?v=1728937174&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/IMG_5131.jpg?v=1728937174&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/IMG_5131.jpg?v=1728937174&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/IMG_5131.jpg?v=1728937174&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/IMG_5131.jpg?v=1728937174&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/IMG_5131.jpg?v=1728937174 3024w " src="//merch.rubyonrails.org/cdn/shop/files/IMG_5131.jpg?v=1728937174&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="Rails Baby Onesie" class="motion-reduce" loading="lazy" width="3024" height="4032" > <img srcset="//merch.rubyonrails.org/cdn/shop/files/RubyonRailsJPEGforShopify-01_a27d13a6-b047-4c6f-b918-b3771d2de6e1.jpg?v=1726241345&width=165 165w,//merch.rubyonrails.org/cdn/shop/files/RubyonRailsJPEGforShopify-01_a27d13a6-b047-4c6f-b918-b3771d2de6e1.jpg?v=1726241345&width=360 360w,//merch.rubyonrails.org/cdn/shop/files/RubyonRailsJPEGforShopify-01_a27d13a6-b047-4c6f-b918-b3771d2de6e1.jpg?v=1726241345&width=533 533w,//merch.rubyonrails.org/cdn/shop/files/RubyonRailsJPEGforShopify-01_a27d13a6-b047-4c6f-b918-b3771d2de6e1.jpg?v=1726241345&width=720 720w,//merch.rubyonrails.org/cdn/shop/files/RubyonRailsJPEGforShopify-01_a27d13a6-b047-4c6f-b918-b3771d2de6e1.jpg?v=1726241345&width=940 940w,//merch.rubyonrails.org/cdn/shop/files/RubyonRailsJPEGforShopify-01_a27d13a6-b047-4c6f-b918-b3771d2de6e1.jpg?v=1726241345&width=1066 1066w,//merch.rubyonrails.org/cdn/shop/files/RubyonRailsJPEGforShopify-01_a27d13a6-b047-4c6f-b918-b3771d2de6e1.jpg?v=1726241345 2550w " src="//merch.rubyonrails.org/cdn/shop/files/RubyonRailsJPEGforShopify-01_a27d13a6-b047-4c6f-b918-b3771d2de6e1.jpg?v=1726241345&width=533" sizes="(min-width: 1200px) 267px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" alt="" class="motion-reduce" loading="lazy" width="2550" height="3300" ></div> </div><div class="card__content"> <div class="card__information"> <h3 class="card__heading" > <a href="/products/baby-onesie-6-months" id="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7839154471049" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--16983494721673__featured_collection_4ERkzp-7839154471049 NoMediaStandardBadge-template--16983494721673__featured_collection_4ERkzp-7839154471049" > Rails Baby Onesie </a> </h3> </div> <div class="card__badge bottom left"></div> </div> </div> <div class="card__content"> <div class="card__information"> <h3 class="card__heading h5" id="title-template--16983494721673__featured_collection_4ERkzp-7839154471049" > <a href="/products/baby-onesie-6-months" id="CardLink-template--16983494721673__featured_collection_4ERkzp-7839154471049" class="full-unstyled-link" aria-labelledby="CardLink-template--16983494721673__featured_collection_4ERkzp-7839154471049 Badge-template--16983494721673__featured_collection_4ERkzp-7839154471049" > Rails Baby Onesie </a> </h3> <div class="card-information"><span class="caption-large light"></span> <div class=" price " > <div class="price__container"><div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> <span class="price-item price-item--regular"> $25.00 USD </span></div> <div class="price__sale"> <span class="visually-hidden visually-hidden--inline">Regular price</span> <span> <s class="price-item price-item--regular"> </s> </span><span class="visually-hidden visually-hidden--inline">Sale price</span> <span class="price-item price-item--sale price-item--last"> $25.00 USD </span> </div> <small class="unit-price caption hidden"> <span class="visually-hidden">Unit price</span> <span class="price-item price-item--last"> <span></span> <span aria-hidden="true">/</span> <span class="visually-hidden">&nbsp;per&nbsp;</span> <span> </span> </span> </small> </div></div> </div> </div> <div class="card__badge bottom left"></div> </div> </div> </div> </li></ul></slider-component></div> </div> </section> </main> <!-- BEGIN sections: footer-group --> <div id="shopify-section-sections--16983495409801__footer" class="shopify-section shopify-section-group-footer-group"> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/section-footer.css?v=61390616271034004541722292307" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-newsletter.css?v=4727253280200485261722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-list-menu.css?v=151968516119678728991722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-list-payment.css?v=69253961410771838501722292306" rel="stylesheet" type="text/css" media="all" /> <link href="//merch.rubyonrails.org/cdn/shop/t/3/assets/component-list-social.css?v=35792976012981934991722292306" rel="stylesheet" type="text/css" media="all" /> <style data-shopify>.footer { margin-top: 0px; } .section-sections--16983495409801__footer-padding { padding-top: 0px; padding-bottom: 0px; } @media screen and (min-width: 750px) { .footer { margin-top: 0px; } .section-sections--16983495409801__footer-padding { padding-top: 0px; padding-bottom: 0px; } }</style><footer class="footer color-scheme-1 gradient section-sections--16983495409801__footer-padding"><div class="footer__content-top page-width"><div class="footer__blocks-wrapper grid grid--1-col grid--2-col grid--4-col-tablet scroll-trigger animate--slide-in" data-cascade ><div class="footer-block grid__item footer-block--menu scroll-trigger animate--slide-in" data-cascade style="--animation-order: 1;" ><h2 class="footer-block__heading inline-richtext">Quick links</h2><ul class="footer-block__details-content list-unstyled"><li> <a href="/pages/about-us" class="link link--text list-menu__item list-menu__item--link" > About </a> </li><li> <a href="/pages/return-policy" class="link link--text list-menu__item list-menu__item--link" > FAQ </a> </li><li> <a href="https://app.todohelpers.com/forms/4758b5b0-d6f9-4f41-8041-992cc9b748fb" class="link link--text list-menu__item list-menu__item--link" > Suggestion Link </a> </li></ul></div><div class="footer-block grid__item scroll-trigger animate--slide-in" data-cascade style="--animation-order: 2;" ><div class="footer-block__brand-info"></div></div></div><div class="footer-block--newsletter scroll-trigger animate--slide-in" data-cascade ></div> </div><div class="footer__content-bottom scroll-trigger animate--slide-in" data-cascade > <div class="footer__content-bottom-wrapper page-width"> <div class="footer__column footer__localization isolate"></div> <div class="footer__column footer__column--info"></div> </div> <div class="footer__content-bottom-wrapper page-width footer__content-bottom-wrapper--center"> <div class="footer__copyright caption"> <small class="copyright__content" >&copy; 2024, <a href="/" title="">Rails Merch Store</a></small> <small class="copyright__content"><a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&amp;utm_medium=shopify&amp;utm_source=onlinestore">Powered by Shopify</a></small></div> </div> </div> </footer> <style> #shopify-section-sections--16983495409801__footer .container {text-align: left;} </style></div> <!-- END sections: footer-group --> <ul hidden> <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li> <li id="a11y-new-window-message">Opens in a new window.</li> </ul> <script> window.shopUrl = 'https://merch.rubyonrails.org'; window.routes = { cart_add_url: '/cart/add', cart_change_url: '/cart/change', cart_update_url: '/cart/update', cart_url: '/cart', predictive_search_url: '/search/suggest', }; window.cartStrings = { error: `There was an error while updating your cart. Please try again.`, quantityError: `You can only add [quantity] of this item to your cart.`, }; window.variantStrings = { addToCart: `Add to cart`, soldOut: `Sold out`, unavailable: `Unavailable`, unavailable_with_option: `[value] - Unavailable`, }; window.quickOrderListStrings = { itemsAdded: `[quantity] items added`, itemAdded: `[quantity] item added`, itemsRemoved: `[quantity] items removed`, itemRemoved: `[quantity] item removed`, viewCart: `View cart`, each: `[money]/ea`, min_error: `This item has a minimum of [min]`, max_error: `This item has a maximum of [max]`, step_error: `You can only add this item in increments of [step]`, }; window.accessibilityStrings = { imageAvailable: `Image [index] is now available in gallery view`, shareSuccess: `Link copied to clipboard`, pauseSlideshow: `Pause slideshow`, playSlideshow: `Play slideshow`, recipientFormExpanded: `Gift card recipient form expanded`, recipientFormCollapsed: `Gift card recipient form collapsed`, countrySelectorSearchCount: `[count] countries/regions found`, }; </script><script src="//merch.rubyonrails.org/cdn/shop/t/3/assets/predictive-search.js?v=162273246065392412141722292307" defer="defer"></script></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10