2312 lines
129 KiB
HTML
2312 lines
129 KiB
HTML
<!doctype html>
|
||
<html xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en-US" class="touch-styles">
|
||
<head>
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<!-- This is Squarespace. --><!-- engineering -->
|
||
<base href="">
|
||
<meta charset="utf-8" />
|
||
<title>Under the Hood: Ensuring Site Reliability — Squarespace Engineering Blog</title>
|
||
<meta http-equiv="Accept-CH" content="Sec-CH-UA-Platform-Version, Sec-CH-UA-Model" /><link rel="icon" type="image/x-icon" href="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1488232272880-FIYFRX6DZWNLZCYKO8PM/favicon.ico"/>
|
||
<link rel="canonical" href="https://engineering.squarespace.com/blog/2017/under-the-hood-ensuring-site-reliability"/>
|
||
<meta property="og:site_name" content="Squarespace Engineering Blog"/>
|
||
<meta property="og:title" content="Under the Hood: Ensuring Site Reliability — Squarespace Engineering Blog"/>
|
||
<meta property="og:latitude" content="38.0322493"/>
|
||
<meta property="og:longitude" content="-82.53817500000002"/>
|
||
<meta property="og:locality" content=""/>
|
||
<meta property="og:url" content="https://engineering.squarespace.com/blog/2017/under-the-hood-ensuring-site-reliability"/>
|
||
<meta property="og:type" content="article"/>
|
||
<meta property="og:description" content="Squarespace hosts millions of websites on our cloud-based website-building platform. The reliability of these sites is a top priority for us. We’re consistently implementing the best technologies and safeguards to enable quick load times and prevent outages. The measures we take allow our customers "/>
|
||
<meta property="og:image" content="http://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/592f2679b3db2bd02a5a29ea/1496331639413/failover-diagram.png?format=1500w"/>
|
||
<meta property="og:image:width" content="1084"/>
|
||
<meta property="og:image:height" content="1088"/>
|
||
<meta itemprop="name" content="Under the Hood: Ensuring Site Reliability — Squarespace Engineering Blog"/>
|
||
<meta itemprop="url" content="https://engineering.squarespace.com/blog/2017/under-the-hood-ensuring-site-reliability"/>
|
||
<meta itemprop="description" content="Squarespace hosts millions of websites on our cloud-based website-building platform. The reliability of these sites is a top priority for us. We’re consistently implementing the best technologies and safeguards to enable quick load times and prevent outages. The measures we take allow our customers "/>
|
||
<meta itemprop="thumbnailUrl" content="http://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/592f2679b3db2bd02a5a29ea/1496331639413/failover-diagram.png?format=1500w"/>
|
||
<link rel="image_src" href="http://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/592f2679b3db2bd02a5a29ea/1496331639413/failover-diagram.png?format=1500w" />
|
||
<meta itemprop="image" content="http://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/592f2679b3db2bd02a5a29ea/1496331639413/failover-diagram.png?format=1500w"/>
|
||
<meta itemprop="author" content="Franklin Angulo"/>
|
||
<meta itemprop="datePublished" content="2017-06-01T14:30:00-0400"/>
|
||
<meta itemprop="dateModified" content="2017-06-01T18:23:56-0400"/>
|
||
<meta itemprop="headline" content="Under the Hood: Ensuring Site Reliability"/>
|
||
<meta itemprop="publisher" content="Squarespace Engineering Blog"/>
|
||
<meta name="twitter:title" content="Under the Hood: Ensuring Site Reliability — Squarespace Engineering Blog"/>
|
||
<meta name="twitter:image" content="http://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/592f2679b3db2bd02a5a29ea/1496331639413/failover-diagram.png?format=1500w"/>
|
||
<meta name="twitter:url" content="https://engineering.squarespace.com/blog/2017/under-the-hood-ensuring-site-reliability"/>
|
||
<meta name="twitter:card" content="summary"/>
|
||
<meta name="twitter:description" content="Squarespace hosts millions of websites on our cloud-based website-building platform. The reliability of these sites is a top priority for us. We’re consistently implementing the best technologies and safeguards to enable quick load times and prevent outages. The measures we take allow our customers "/>
|
||
<meta name="description" content=" Squarespace hosts millions of websites on our cloud-based website-building platform. The reliability of these sites is a top priority for us. We’re consistently implementing the best technologies and safeguards to enable quick load times and prevent outages. The measures we take allow our customers to create Squarespace websites with confidence. " />
|
||
<link rel="preconnect" href="https://images.squarespace-cdn.com">
|
||
<link rel="preconnect" href="https://use.typekit.net" crossorigin>
|
||
<link rel="preconnect" href="https://p.typekit.net" crossorigin>
|
||
<script type="text/javascript" src="//use.typekit.net/ik/rp4XZDkcJ9i_YnLtkkudLSxCAMrWzSElCvQ9HEoD3SwfenIIfFHN4UJLFRbh52jhWD9hjAJoFRB8jh4RZAbhwQiRjhbkF2jUZsnZMKG0jAFu-WsoShFGZAsude80ZkoRdhXCHKoyjamTiY8Djhy8ZYmC-Ao1Oco8if37OcBDOcu8OfG0ZAo1-Ao8ZW4TdcS0SaBujW48Sagyjh90jhNlOfG0SaBujW48SagyjhmDjhy8ZYmC-Ao1OcFzdPUyjamTiY8Djhy8ZYmC-Ao1OcFzdPUyjamTiY8Djhy8ZYmC-Ao1Oco8ifUySkolZPU8dciTdcm8Sc80ZkoDSWmyScmDSeBRZPoRdhXCdeNRjAUGdaFXOYFUiABkZWF3jAF8ShFGZAsude80ZkoRdhXCiaiaOcBRiA8XpWFR-emqiAUTdcS0jhNlOYiaikoyjamTiY8Djhy8ZYmC-Ao1Oco8ifUaiaS0jWw0dA9CiaiaOcm0Zh80ZAmk-Ao1O1FUiABkZWF3jAF8OcFzdPUaiaS0SaBujW48SagyjhmDjhy8ZYmC-Ao1OcFzdPJwSY4zpe8ljPu0daZyJ6Tl-AoTdhtlSY4zJ6Z8iW4zSeI7fbKzMsMMeMb6MKGHfO2IMsMMeM96MKG4fHXgIMMjgKMfH6qJK3IbMg6YJMJ7fbRRHyMMeMX6MKG4fOMgIMMj2KMfH6GJCSbgIMMj2kMfH6qJRMIbMg6sJMJ7fbKLFsMgeM96MKG4fHToIMJjgfMfH6qJ7YqbMy6YJMJ7f6R8y6IbMy6sJMHbMSzQyj6e.js" async fetchpriority="high" onload="try{Typekit.load();}catch(e){} document.documentElement.classList.remove('wf-loading');"></script>
|
||
<script>document.documentElement.classList.add('wf-loading')</script>
|
||
<style>@keyframes fonts-loading { 0%, 99% { color: transparent; } } html.wf-loading * { animation: fonts-loading 3s; }</style>
|
||
<link rel="preconnect" href="https://file.squarespace-cdn.com" crossorigin>
|
||
<style data-sqsp-font-ids="6a3136d96307d35684222716">
|
||
/* latin-ext */
|
||
@font-face {
|
||
font-family: 'Lato';
|
||
font-style: normal;
|
||
font-weight: 900;
|
||
font-display: swap;
|
||
src: url('https://file.squarespace-cdn.com/content/v2/namespaces/fonts/libraries/sqsp/assets/3b4d6a5c-b35c-4b21-b18d-126e5103b918/latin-ext.woff2') format('woff2');
|
||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||
}
|
||
/* latin */
|
||
@font-face {
|
||
font-family: 'Lato';
|
||
font-style: normal;
|
||
font-weight: 900;
|
||
font-display: swap;
|
||
src: url('https://file.squarespace-cdn.com/content/v2/namespaces/fonts/libraries/sqsp/assets/3d8ef5e9-0b47-4a17-abf5-d6c4904147db/latin.woff2') format('woff2');
|
||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||
}
|
||
</style><script type="text/javascript" crossorigin="anonymous" nomodule="nomodule" src="//assets.squarespace.com/@sqs/polyfiller/1.6/legacy.js"></script>
|
||
<script type="text/javascript" crossorigin="anonymous" src="//assets.squarespace.com/@sqs/polyfiller/1.6/modern.js"></script>
|
||
<script data-name="static-context">Static = window.Static || {}; Static.SQUARESPACE_CONTEXT = {"betaFeatureFlags":["modernized-pdp-m2-enabled","campaigns_discount_section_in_blasts","i18n_beta_website_locales","campaigns_thumbnail_layout","enable_form_submission_trigger","campaigns_import_discounts","marketing_automations","commerce_product_payment_plan_editing","json_tweaks","campaigns_discount_section_in_automations","order_status_page_checkout_landing_enabled","campaigns_new_image_layout_picker","enable_modernized_pdp_m3_layout_ux","enable_modernized_standalone_pages","contacts_and_campaigns_redesign","campaigns_table_v2","campaigns_merch_state","marketing_landing_page","enable_modernized_standalone_pages_kill_switch","output_template_css_assets","enable_modernized_pdp_m3_fluid"],"facebookAppId":"314192535267336","facebookApiVersion":"v6.0","rollups":{"squarespace-announcement-bar":{"js":"//assets.squarespace.com/universal/scripts-compressed/announcement-bar-df4516beb5aa0028-min.en-US.js"},"squarespace-audio-player":{"css":"//assets.squarespace.com/universal/styles-compressed/audio-player-b05f5197a871c566-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/audio-player-2c392274facfe228-min.en-US.js"},"squarespace-blog-collection-list":{"css":"//assets.squarespace.com/universal/styles-compressed/blog-collection-list-b4046463b72f34e2-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/blog-collection-list-3a5374d437fc6d00-min.en-US.js"},"squarespace-calendar-block-renderer":{"css":"//assets.squarespace.com/universal/styles-compressed/calendar-block-renderer-c3fef2a497c8e56b-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/calendar-block-renderer-26d8e9b90fb9f480-min.en-US.js"},"squarespace-chartjs-helpers":{"css":"//assets.squarespace.com/universal/styles-compressed/chartjs-helpers-96b256171ee039c1-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/chartjs-helpers-522a53304a318d5d-min.en-US.js"},"squarespace-comments":{"css":"//assets.squarespace.com/universal/styles-compressed/comments-23ce383529b75c4f-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/comments-e7efb03b263e7183-min.en-US.js"},"squarespace-custom-css-popup":{"css":"//assets.squarespace.com/universal/styles-compressed/custom-css-popup-ff86295ac1cc1d28-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/custom-css-popup-6b1928f63f535a38-min.en-US.js"},"squarespace-dialog":{"css":"//assets.squarespace.com/universal/styles-compressed/dialog-86aacd645d83874c-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/dialog-5a370ceb3b783b61-min.en-US.js"},"squarespace-events-collection":{"css":"//assets.squarespace.com/universal/styles-compressed/events-collection-c3fef2a497c8e56b-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/events-collection-53a2a66e197347e0-min.en-US.js"},"squarespace-form-rendering-utils":{"js":"//assets.squarespace.com/universal/scripts-compressed/form-rendering-utils-4d2ae44cbdf7308c-min.en-US.js"},"squarespace-forms":{"css":"//assets.squarespace.com/universal/styles-compressed/forms-0afd3c6ac30bbab1-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/forms-6d9e12a028dd1efc-min.en-US.js"},"squarespace-gallery-collection-list":{"css":"//assets.squarespace.com/universal/styles-compressed/gallery-collection-list-b4046463b72f34e2-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/gallery-collection-list-e50dc2cea7153bb8-min.en-US.js"},"squarespace-image-zoom":{"css":"//assets.squarespace.com/universal/styles-compressed/image-zoom-b4046463b72f34e2-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/image-zoom-0ca1efc2ac068abc-min.en-US.js"},"squarespace-pinterest":{"css":"//assets.squarespace.com/universal/styles-compressed/pinterest-b4046463b72f34e2-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/pinterest-17423cbbf8d04380-min.en-US.js"},"squarespace-popup-overlay":{"css":"//assets.squarespace.com/universal/styles-compressed/popup-overlay-b742b752f5880972-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/popup-overlay-d14ed9411116d82d-min.en-US.js"},"squarespace-product-quick-view":{"css":"//assets.squarespace.com/universal/styles-compressed/product-quick-view-0afd3c6ac30bbab1-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/product-quick-view-292b172c00faedda-min.en-US.js"},"squarespace-products-collection-item-v2":{"css":"//assets.squarespace.com/universal/styles-compressed/products-collection-item-v2-b4046463b72f34e2-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/products-collection-item-v2-7fbb3f7b25936e86-min.en-US.js"},"squarespace-products-collection-list-v2":{"css":"//assets.squarespace.com/universal/styles-compressed/products-collection-list-v2-b4046463b72f34e2-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/products-collection-list-v2-a0f681feaaa1d600-min.en-US.js"},"squarespace-search-page":{"css":"//assets.squarespace.com/universal/styles-compressed/search-page-90a67fc09b9b32c6-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/search-page-1af2c4e17252dac5-min.en-US.js"},"squarespace-search-preview":{"js":"//assets.squarespace.com/universal/scripts-compressed/search-preview-0b8ae236f536a890-min.en-US.js"},"squarespace-simple-liking":{"css":"//assets.squarespace.com/universal/styles-compressed/simple-liking-701bf8bbc05ec6aa-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/simple-liking-75b6582783ed07a5-min.en-US.js"},"squarespace-social-buttons":{"css":"//assets.squarespace.com/universal/styles-compressed/social-buttons-95032e5fa98e47a5-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/social-buttons-322494b0519c3493-min.en-US.js"},"squarespace-tourdates":{"css":"//assets.squarespace.com/universal/styles-compressed/tourdates-b4046463b72f34e2-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/tourdates-268b851e0659685f-min.en-US.js"},"squarespace-website-overlays-manager":{"css":"//assets.squarespace.com/universal/styles-compressed/website-overlays-manager-07ea5a4e004e6710-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/website-overlays-manager-b34cb8a41e4a5843-min.en-US.js"}},"pageType":50,"website":{"id":"56ab961ecbced617ccd2461e","captchaSettings":{"enabledForDonations":false},"cloneable":false,"contentModifiedOn":1774904636357,"developerMode":false,"formattingLocale":"en-US","fullSiteTitle":"Under the Hood: Ensuring Site Reliability \u2014 Squarespace Engineering Blog","identifier":"engineering","imageMetadataProcessingEnabled":false,"isHstsEnabled":false,"language":"en-US","location":{"mapZoom":12.0,"mapLat":38.0322493,"mapLng":-82.53817500000002,"markerLat":38.0322493,"markerLng":-82.53817500000002,"addressTitle":"as","addressLine1":"S","addressLine2":"a","addressCountry":"a"},"logoImageId":"5790dacdbebafb39ee1c7196","screenshotId":"c48c212c7984c59ca99e25afa0efc1fefae15cb6e801072fbe93ed17776399b8","shareButtonOptions":{"3":true,"4":true},"showOwnerLogin":false,"siteDescription":"<p class=\"\" style=\"white-space:pre-wrap;\">The Squarespace Engineering Blog recounts the stories of challenges, technical advances, and new processes we\u2019ve developed and adopted as a world-class engineering team.</p>","siteStatus":{},"siteTagLine":"","siteTitle":"Squarespace Engineering Blog","socialLogoImageId":"57923ed0e4fcb57da233b96a","sslSetting":3,"timeZone":"America/New_York","translationLocale":"en-US","typekitId":"","websiteType":1,"hasBeenCloneable":false,"statsMigrated":false,"authenticUrl":"https://engineering.squarespace.com","baseUrl":"https://engineering.squarespace.com","internalUrl":"https://engineering.squarespace.com","logoImageUrl":"//images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1469110989004-NAEJ4RDRLVXZFG14F17O/header-logo-1x.png","machineTimeZoneOffset":-14400000,"socialAccounts":[{"serviceId":60,"userId":"10203794036833619","screenname":"Ruben Hughes","addedOn":1466700709936,"profileUrl":"http://www.facebook.com/10203794036833619","iconUrl":"http://graph.facebook.com/10203794036833619/picture?type=square","metaData":{"service":"facebook"},"iconEnabled":true,"serviceName":"facebook-unauth"},{"serviceId":62,"userId":"14319981","userName":"squarespace","screenname":"Squarespace","addedOn":1466700772629,"profileUrl":"https://twitter.com/squarespace","iconUrl":"http://pbs.twimg.com/profile_images/479693851599200256/28uIqxzS_normal.png","collectionId":"576c13e4e4fcb5bcdb37b3be","iconEnabled":true,"serviceName":"twitter-unauth"}],"socialLogoImageUrl":"//images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1469202128455-06GLLCFFXTH0GISITPYZ/home-thumbnail.jpg","timeZoneAbbr":"EDT","timeZoneOffset":-14400000},"websiteSettings":{"id":"56ab961ecbced617ccd24621","websiteId":"56ab961ecbced617ccd2461e","type":"Business","subjects":[],"country":"US","state":"NY","simpleLikingEnabled":true,"mobileInfoBarSettings":{"isContactEmailEnabled":false,"isContactPhoneNumberEnabled":false,"isLocationEnabled":false,"isBusinessHoursEnabled":false},"announcementBarSettings":{},"commentLikesAllowed":true,"commentAnonAllowed":true,"commentThreaded":true,"commentApprovalRequired":false,"commentAvatarsOn":true,"commentSortType":2,"commentFlagThreshold":0,"commentFlagsAllowed":true,"commentEnableByDefault":true,"commentDisableAfterDaysDefault":0,"disqusShortname":"","commentsEnabled":false,"contactPhoneNumber":"","businessHours":{},"storeSettings":{"returnPolicy":null,"termsOfService":null,"privacyPolicy":null,"expressCheckout":false,"continueShoppingLinkUrl":"/","useLightCart":false,"showNoteField":false,"shippingCountryDefaultValue":"US","billToShippingDefaultValue":false,"showShippingPhoneNumber":true,"isShippingPhoneRequired":false,"showBillingPhoneNumber":true,"isBillingPhoneRequired":false,"currenciesSupported":["CHF","HKD","MXN","EUR","DKK","USD","CAD","MYR","NOK","THB","AUD","SGD","ILS","PLN","GBP","CZK","SEK","NZD","PHP","RUB"],"defaultCurrency":"USD","selectedCurrency":"USD","measurementStandard":1,"showCustomCheckoutForm":false,"checkoutPageMarketingOptInEnabled":false,"enableMailingListOptInByDefault":true,"sameAsRetailLocation":false,"merchandisingSettings":{"scarcityEnabledOnProductItems":false,"scarcityEnabledOnProductBlocks":false,"scarcityMessageType":"DEFAULT_SCARCITY_MESSAGE","scarcityThreshold":10,"multipleQuantityAllowedForServices":true,"restockNotificationsEnabled":false,"restockNotificationsMailingListSignUpEnabled":false,"relatedProductsEnabled":false,"relatedProductsOrdering":"random","soldOutVariantsDropdownDisabled":false,"productComposerOptedIn":false,"productComposerABTestOptedOut":false,"productReviewsEnabled":false,"displayImportedProductReviewsEnabled":false,"hasOptedToCollectNativeReviews":false},"minimumOrderSubtotalEnabled":false,"addToCartConfirmationType":2,"isLive":true,"multipleQuantityAllowedForServices":true},"useEscapeKeyToLogin":true,"ssBadgeType":1,"ssBadgePosition":4,"ssBadgeVisibility":1,"ssBadgeDevices":1,"pinterestOverlayOptions":{"mode":"disabled","size":"small","shape":"rect","color":"white"},"userAccountsSettings":{"loginAllowed":false,"signupAllowed":false}},"cookieSettings":{"isCookieBannerEnabled":false,"isRestrictiveCookiePolicyEnabled":false,"cookieBannerText":"By using this website, you agree to our use of cookies. We use cookies to provide you with a great experience and to help our website run effectively.","cookieBannerTheme":"DARK","cookieBannerVariant":"BAR","cookieBannerPosition":"BOTTOM","cookieBannerCtaVariant":"ICON","cookieBannerCtaText":"OK","cookieBannerAcceptType":"OPT_IN","cookieBannerHasOptOut":false,"cookieBannerHasManageCookies":false,"cookieBannerSavedPreferencesLayout":"PILL"},"websiteCloneable":false,"collection":{"title":"Home","id":"56aba24fc6fc08c6cb69a290","fullUrl":"/","type":1,"permissionType":1},"item":{"title":"Under the Hood: Ensuring Site Reliability","id":"592f264c1b10e3bcc1f803b7","fullUrl":"/blog/2017/under-the-hood-ensuring-site-reliability","publicCommentCount":0,"commentState":2,"recordType":1},"subscribed":false,"appDomain":"squarespace.com","templateTweakable":true,"tweakJSON":{"aspect-ratio":"Auto","gallery-arrow-style":"No Background","gallery-aspect-ratio":"3:2 Standard","gallery-auto-crop":"true","gallery-autoplay":"false","gallery-design":"Grid","gallery-info-overlay":"Show on Hover","gallery-loop":"false","gallery-navigation":"Bullets","gallery-show-arrows":"true","gallery-transitions":"Fade","galleryArrowBackground":"rgba(34,34,34,1)","galleryArrowColor":"rgba(255,255,255,1)","galleryAutoplaySpeed":"3","galleryCircleColor":"rgba(255,255,255,1)","galleryInfoBackground":"rgba(0, 0, 0, .7)","galleryThumbnailSize":"100px","gridSize":"350px","gridSpacing":"20px","maxNumberColumns":"3","minColumnWidth":"225","tweak-blog-list-grid-alignment":"Top","tweak-blog-list-grid-narrow-columns":"false","tweak-blog-list-max-width":"Wide","tweak-crop-images":"None","tweak-infinite-scroll":"false","tweak-product-item-image-zoom-factor":"2.5","tweak-product-list-item-hover-behavior":"Show Alternate Image","tweak-product-list-items-per-row":"4","tweak-related-products-items-per-row":"3","tweak-related-products-title-spacing":"50px","tweak-show-progress-indicator":"false","tweak-user-account-link-position":"With Nav"},"templateId":"54d3906fe4b04c1c9981b00e","templateVersion":"7","pageFeatures":[1,2,4],"gmRenderKey":"QUl6YVN5Q0JUUk9xNkx1dkZfSUUxcjQ2LVQ0QWVUU1YtMGQ3bXk4","templateScriptsRootUrl":"https://static1.squarespace.com/static/ta/54d39057e4b01a0da310c80f/4948/scripts/","impersonatedSession":false,"tzData":{"zones":[[-300,"US","E%sT",null]],"rules":{"US":[[1967,2006,null,"Oct","lastSun","2:00","0","S"],[1987,2006,null,"Apr","Sun>=1","2:00","1:00","D"],[2007,"max",null,"Mar","Sun>=8","2:00","1:00","D"],[2007,"max",null,"Nov","Sun>=1","2:00","0","S"]]}},"showAnnouncementBar":false,"recaptchaEnterpriseContext":{"recaptchaEnterpriseSiteKey":"6LdDFQwjAAAAAPigEvvPgEVbb7QBm-TkVJdDTlAv"},"i18nContext":{"timeZoneData":{"id":"America/New_York","name":"Eastern Time"}},"env":"PRODUCTION","visitorFormContext":{"formFieldFormats":{"initialAddressFormat":{"id":0,"type":"ADDRESS","country":"US","labelLocale":"en","fields":[{"type":"FIELD","label":"Address Line 1","identifier":"Line1","length":0,"required":true,"metadata":{"autocomplete":"address-line1"}},{"type":"SEPARATOR","label":"\n","identifier":"Newline","length":0,"required":false,"metadata":{}},{"type":"FIELD","label":"Address Line 2","identifier":"Line2","length":0,"required":false,"metadata":{"autocomplete":"address-line2"}},{"type":"SEPARATOR","label":"\n","identifier":"Newline","length":0,"required":false,"metadata":{}},{"type":"FIELD","label":"City","identifier":"City","length":0,"required":true,"metadata":{"autocomplete":"address-level2"}},{"type":"SEPARATOR","label":",","identifier":"Comma","length":0,"required":false,"metadata":{}},{"type":"SEPARATOR","label":" ","identifier":"Space","length":0,"required":false,"metadata":{}},{"type":"FIELD","label":"State","identifier":"State","length":0,"required":true,"metadata":{"autocomplete":"address-level1"}},{"type":"SEPARATOR","label":" ","identifier":"Space","length":0,"required":false,"metadata":{}},{"type":"FIELD","label":"ZIP Code","identifier":"Zip","length":0,"required":true,"metadata":{"autocomplete":"postal-code"}}]},"initialNameOrder":"GIVEN_FIRST","initialPhoneFormat":{"id":0,"type":"PHONE_NUMBER","country":"US","labelLocale":"en-US","fields":[{"type":"SEPARATOR","label":"(","identifier":"LeftParen","length":0,"required":false,"metadata":{}},{"type":"FIELD","label":"1","identifier":"1","length":3,"required":false,"metadata":{}},{"type":"SEPARATOR","label":")","identifier":"RightParen","length":0,"required":false,"metadata":{}},{"type":"SEPARATOR","label":" ","identifier":"Space","length":0,"required":false,"metadata":{}},{"type":"FIELD","label":"2","identifier":"2","length":3,"required":false,"metadata":{}},{"type":"SEPARATOR","label":"-","identifier":"Dash","length":0,"required":false,"metadata":{}},{"type":"FIELD","label":"3","identifier":"3","length":14,"required":false,"metadata":{}}]},"countries":[{"name":"Afghanistan","code":"AF","phoneCode":"+93"},{"name":"\u00C5land Islands","code":"AX","phoneCode":"+358"},{"name":"Albania","code":"AL","phoneCode":"+355"},{"name":"Algeria","code":"DZ","phoneCode":"+213"},{"name":"American Samoa","code":"AS","phoneCode":"+1"},{"name":"Andorra","code":"AD","phoneCode":"+376"},{"name":"Angola","code":"AO","phoneCode":"+244"},{"name":"Anguilla","code":"AI","phoneCode":"+1"},{"name":"Antigua & Barbuda","code":"AG","phoneCode":"+1"},{"name":"Argentina","code":"AR","phoneCode":"+54"},{"name":"Armenia","code":"AM","phoneCode":"+374"},{"name":"Aruba","code":"AW","phoneCode":"+297"},{"name":"Ascension Island","code":"AC","phoneCode":"+247"},{"name":"Australia","code":"AU","phoneCode":"+61"},{"name":"Austria","code":"AT","phoneCode":"+43"},{"name":"Azerbaijan","code":"AZ","phoneCode":"+994"},{"name":"Bahamas","code":"BS","phoneCode":"+1"},{"name":"Bahrain","code":"BH","phoneCode":"+973"},{"name":"Bangladesh","code":"BD","phoneCode":"+880"},{"name":"Barbados","code":"BB","phoneCode":"+1"},{"name":"Belarus","code":"BY","phoneCode":"+375"},{"name":"Belgium","code":"BE","phoneCode":"+32"},{"name":"Belize","code":"BZ","phoneCode":"+501"},{"name":"Benin","code":"BJ","phoneCode":"+229"},{"name":"Bermuda","code":"BM","phoneCode":"+1"},{"name":"Bhutan","code":"BT","phoneCode":"+975"},{"name":"Bolivia","code":"BO","phoneCode":"+591"},{"name":"Bosnia & Herzegovina","code":"BA","phoneCode":"+387"},{"name":"Botswana","code":"BW","phoneCode":"+267"},{"name":"Brazil","code":"BR","phoneCode":"+55"},{"name":"British Indian Ocean Territory","code":"IO","phoneCode":"+246"},{"name":"British Virgin Islands","code":"VG","phoneCode":"+1"},{"name":"Brunei","code":"BN","phoneCode":"+673"},{"name":"Bulgaria","code":"BG","phoneCode":"+359"},{"name":"Burkina Faso","code":"BF","phoneCode":"+226"},{"name":"Burundi","code":"BI","phoneCode":"+257"},{"name":"Cambodia","code":"KH","phoneCode":"+855"},{"name":"Cameroon","code":"CM","phoneCode":"+237"},{"name":"Canada","code":"CA","phoneCode":"+1"},{"name":"Cape Verde","code":"CV","phoneCode":"+238"},{"name":"Caribbean Netherlands","code":"BQ","phoneCode":"+599"},{"name":"Cayman Islands","code":"KY","phoneCode":"+1"},{"name":"Central African Republic","code":"CF","phoneCode":"+236"},{"name":"Chad","code":"TD","phoneCode":"+235"},{"name":"Chile","code":"CL","phoneCode":"+56"},{"name":"China","code":"CN","phoneCode":"+86"},{"name":"Christmas Island","code":"CX","phoneCode":"+61"},{"name":"Cocos (Keeling) Islands","code":"CC","phoneCode":"+61"},{"name":"Colombia","code":"CO","phoneCode":"+57"},{"name":"Comoros","code":"KM","phoneCode":"+269"},{"name":"Congo - Brazzaville","code":"CG","phoneCode":"+242"},{"name":"Congo - Kinshasa","code":"CD","phoneCode":"+243"},{"name":"Cook Islands","code":"CK","phoneCode":"+682"},{"name":"Costa Rica","code":"CR","phoneCode":"+506"},{"name":"C\u00F4te d\u2019Ivoire","code":"CI","phoneCode":"+225"},{"name":"Croatia","code":"HR","phoneCode":"+385"},{"name":"Cuba","code":"CU","phoneCode":"+53"},{"name":"Cura\u00E7ao","code":"CW","phoneCode":"+599"},{"name":"Cyprus","code":"CY","phoneCode":"+357"},{"name":"Czechia","code":"CZ","phoneCode":"+420"},{"name":"Denmark","code":"DK","phoneCode":"+45"},{"name":"Djibouti","code":"DJ","phoneCode":"+253"},{"name":"Dominica","code":"DM","phoneCode":"+1"},{"name":"Dominican Republic","code":"DO","phoneCode":"+1"},{"name":"Ecuador","code":"EC","phoneCode":"+593"},{"name":"Egypt","code":"EG","phoneCode":"+20"},{"name":"El Salvador","code":"SV","phoneCode":"+503"},{"name":"Equatorial Guinea","code":"GQ","phoneCode":"+240"},{"name":"Eritrea","code":"ER","phoneCode":"+291"},{"name":"Estonia","code":"EE","phoneCode":"+372"},{"name":"Eswatini","code":"SZ","phoneCode":"+268"},{"name":"Ethiopia","code":"ET","phoneCode":"+251"},{"name":"Falkland Islands","code":"FK","phoneCode":"+500"},{"name":"Faroe Islands","code":"FO","phoneCode":"+298"},{"name":"Fiji","code":"FJ","phoneCode":"+679"},{"name":"Finland","code":"FI","phoneCode":"+358"},{"name":"France","code":"FR","phoneCode":"+33"},{"name":"French Guiana","code":"GF","phoneCode":"+594"},{"name":"French Polynesia","code":"PF","phoneCode":"+689"},{"name":"Gabon","code":"GA","phoneCode":"+241"},{"name":"Gambia","code":"GM","phoneCode":"+220"},{"name":"Georgia","code":"GE","phoneCode":"+995"},{"name":"Germany","code":"DE","phoneCode":"+49"},{"name":"Ghana","code":"GH","phoneCode":"+233"},{"name":"Gibraltar","code":"GI","phoneCode":"+350"},{"name":"Greece","code":"GR","phoneCode":"+30"},{"name":"Greenland","code":"GL","phoneCode":"+299"},{"name":"Grenada","code":"GD","phoneCode":"+1"},{"name":"Guadeloupe","code":"GP","phoneCode":"+590"},{"name":"Guam","code":"GU","phoneCode":"+1"},{"name":"Guatemala","code":"GT","phoneCode":"+502"},{"name":"Guernsey","code":"GG","phoneCode":"+44"},{"name":"Guinea","code":"GN","phoneCode":"+224"},{"name":"Guinea-Bissau","code":"GW","phoneCode":"+245"},{"name":"Guyana","code":"GY","phoneCode":"+592"},{"name":"Haiti","code":"HT","phoneCode":"+509"},{"name":"Honduras","code":"HN","phoneCode":"+504"},{"name":"Hong Kong SAR China","code":"HK","phoneCode":"+852"},{"name":"Hungary","code":"HU","phoneCode":"+36"},{"name":"Iceland","code":"IS","phoneCode":"+354"},{"name":"India","code":"IN","phoneCode":"+91"},{"name":"Indonesia","code":"ID","phoneCode":"+62"},{"name":"Iran","code":"IR","phoneCode":"+98"},{"name":"Iraq","code":"IQ","phoneCode":"+964"},{"name":"Ireland","code":"IE","phoneCode":"+353"},{"name":"Isle of Man","code":"IM","phoneCode":"+44"},{"name":"Israel","code":"IL","phoneCode":"+972"},{"name":"Italy","code":"IT","phoneCode":"+39"},{"name":"Jamaica","code":"JM","phoneCode":"+1"},{"name":"Japan","code":"JP","phoneCode":"+81"},{"name":"Jersey","code":"JE","phoneCode":"+44"},{"name":"Jordan","code":"JO","phoneCode":"+962"},{"name":"Kazakhstan","code":"KZ","phoneCode":"+7"},{"name":"Kenya","code":"KE","phoneCode":"+254"},{"name":"Kiribati","code":"KI","phoneCode":"+686"},{"name":"Kosovo","code":"XK","phoneCode":"+383"},{"name":"Kuwait","code":"KW","phoneCode":"+965"},{"name":"Kyrgyzstan","code":"KG","phoneCode":"+996"},{"name":"Laos","code":"LA","phoneCode":"+856"},{"name":"Latvia","code":"LV","phoneCode":"+371"},{"name":"Lebanon","code":"LB","phoneCode":"+961"},{"name":"Lesotho","code":"LS","phoneCode":"+266"},{"name":"Liberia","code":"LR","phoneCode":"+231"},{"name":"Libya","code":"LY","phoneCode":"+218"},{"name":"Liechtenstein","code":"LI","phoneCode":"+423"},{"name":"Lithuania","code":"LT","phoneCode":"+370"},{"name":"Luxembourg","code":"LU","phoneCode":"+352"},{"name":"Macao SAR China","code":"MO","phoneCode":"+853"},{"name":"Madagascar","code":"MG","phoneCode":"+261"},{"name":"Malawi","code":"MW","phoneCode":"+265"},{"name":"Malaysia","code":"MY","phoneCode":"+60"},{"name":"Maldives","code":"MV","phoneCode":"+960"},{"name":"Mali","code":"ML","phoneCode":"+223"},{"name":"Malta","code":"MT","phoneCode":"+356"},{"name":"Marshall Islands","code":"MH","phoneCode":"+692"},{"name":"Martinique","code":"MQ","phoneCode":"+596"},{"name":"Mauritania","code":"MR","phoneCode":"+222"},{"name":"Mauritius","code":"MU","phoneCode":"+230"},{"name":"Mayotte","code":"YT","phoneCode":"+262"},{"name":"Mexico","code":"MX","phoneCode":"+52"},{"name":"Micronesia","code":"FM","phoneCode":"+691"},{"name":"Moldova","code":"MD","phoneCode":"+373"},{"name":"Monaco","code":"MC","phoneCode":"+377"},{"name":"Mongolia","code":"MN","phoneCode":"+976"},{"name":"Montenegro","code":"ME","phoneCode":"+382"},{"name":"Montserrat","code":"MS","phoneCode":"+1"},{"name":"Morocco","code":"MA","phoneCode":"+212"},{"name":"Mozambique","code":"MZ","phoneCode":"+258"},{"name":"Myanmar (Burma)","code":"MM","phoneCode":"+95"},{"name":"Namibia","code":"NA","phoneCode":"+264"},{"name":"Nauru","code":"NR","phoneCode":"+674"},{"name":"Nepal","code":"NP","phoneCode":"+977"},{"name":"Netherlands","code":"NL","phoneCode":"+31"},{"name":"New Caledonia","code":"NC","phoneCode":"+687"},{"name":"New Zealand","code":"NZ","phoneCode":"+64"},{"name":"Nicaragua","code":"NI","phoneCode":"+505"},{"name":"Niger","code":"NE","phoneCode":"+227"},{"name":"Nigeria","code":"NG","phoneCode":"+234"},{"name":"Niue","code":"NU","phoneCode":"+683"},{"name":"Norfolk Island","code":"NF","phoneCode":"+672"},{"name":"Northern Mariana Islands","code":"MP","phoneCode":"+1"},{"name":"North Korea","code":"KP","phoneCode":"+850"},{"name":"North Macedonia","code":"MK","phoneCode":"+389"},{"name":"Norway","code":"NO","phoneCode":"+47"},{"name":"Oman","code":"OM","phoneCode":"+968"},{"name":"Pakistan","code":"PK","phoneCode":"+92"},{"name":"Palau","code":"PW","phoneCode":"+680"},{"name":"Palestinian Territories","code":"PS","phoneCode":"+970"},{"name":"Panama","code":"PA","phoneCode":"+507"},{"name":"Papua New Guinea","code":"PG","phoneCode":"+675"},{"name":"Paraguay","code":"PY","phoneCode":"+595"},{"name":"Peru","code":"PE","phoneCode":"+51"},{"name":"Philippines","code":"PH","phoneCode":"+63"},{"name":"Poland","code":"PL","phoneCode":"+48"},{"name":"Portugal","code":"PT","phoneCode":"+351"},{"name":"Puerto Rico","code":"PR","phoneCode":"+1"},{"name":"Qatar","code":"QA","phoneCode":"+974"},{"name":"R\u00E9union","code":"RE","phoneCode":"+262"},{"name":"Romania","code":"RO","phoneCode":"+40"},{"name":"Russia","code":"RU","phoneCode":"+7"},{"name":"Rwanda","code":"RW","phoneCode":"+250"},{"name":"Samoa","code":"WS","phoneCode":"+685"},{"name":"San Marino","code":"SM","phoneCode":"+378"},{"name":"S\u00E3o Tom\u00E9 & Pr\u00EDncipe","code":"ST","phoneCode":"+239"},{"name":"Saudi Arabia","code":"SA","phoneCode":"+966"},{"name":"Senegal","code":"SN","phoneCode":"+221"},{"name":"Serbia","code":"RS","phoneCode":"+381"},{"name":"Seychelles","code":"SC","phoneCode":"+248"},{"name":"Sierra Leone","code":"SL","phoneCode":"+232"},{"name":"Singapore","code":"SG","phoneCode":"+65"},{"name":"Sint Maarten","code":"SX","phoneCode":"+1"},{"name":"Slovakia","code":"SK","phoneCode":"+421"},{"name":"Slovenia","code":"SI","phoneCode":"+386"},{"name":"Solomon Islands","code":"SB","phoneCode":"+677"},{"name":"Somalia","code":"SO","phoneCode":"+252"},{"name":"South Africa","code":"ZA","phoneCode":"+27"},{"name":"South Korea","code":"KR","phoneCode":"+82"},{"name":"South Sudan","code":"SS","phoneCode":"+211"},{"name":"Spain","code":"ES","phoneCode":"+34"},{"name":"Sri Lanka","code":"LK","phoneCode":"+94"},{"name":"St. Barth\u00E9lemy","code":"BL","phoneCode":"+590"},{"name":"St. Helena","code":"SH","phoneCode":"+290"},{"name":"St. Kitts & Nevis","code":"KN","phoneCode":"+1"},{"name":"St. Lucia","code":"LC","phoneCode":"+1"},{"name":"St. Martin","code":"MF","phoneCode":"+590"},{"name":"St. Pierre & Miquelon","code":"PM","phoneCode":"+508"},{"name":"St. Vincent & Grenadines","code":"VC","phoneCode":"+1"},{"name":"Sudan","code":"SD","phoneCode":"+249"},{"name":"Suriname","code":"SR","phoneCode":"+597"},{"name":"Svalbard & Jan Mayen","code":"SJ","phoneCode":"+47"},{"name":"Sweden","code":"SE","phoneCode":"+46"},{"name":"Switzerland","code":"CH","phoneCode":"+41"},{"name":"Syria","code":"SY","phoneCode":"+963"},{"name":"Taiwan","code":"TW","phoneCode":"+886"},{"name":"Tajikistan","code":"TJ","phoneCode":"+992"},{"name":"Tanzania","code":"TZ","phoneCode":"+255"},{"name":"Thailand","code":"TH","phoneCode":"+66"},{"name":"Timor-Leste","code":"TL","phoneCode":"+670"},{"name":"Togo","code":"TG","phoneCode":"+228"},{"name":"Tokelau","code":"TK","phoneCode":"+690"},{"name":"Tonga","code":"TO","phoneCode":"+676"},{"name":"Trinidad & Tobago","code":"TT","phoneCode":"+1"},{"name":"Tristan da Cunha","code":"TA","phoneCode":"+290"},{"name":"Tunisia","code":"TN","phoneCode":"+216"},{"name":"T\u00FCrkiye","code":"TR","phoneCode":"+90"},{"name":"Turkmenistan","code":"TM","phoneCode":"+993"},{"name":"Turks & Caicos Islands","code":"TC","phoneCode":"+1"},{"name":"Tuvalu","code":"TV","phoneCode":"+688"},{"name":"U.S. Virgin Islands","code":"VI","phoneCode":"+1"},{"name":"Uganda","code":"UG","phoneCode":"+256"},{"name":"Ukraine","code":"UA","phoneCode":"+380"},{"name":"United Arab Emirates","code":"AE","phoneCode":"+971"},{"name":"United Kingdom","code":"GB","phoneCode":"+44"},{"name":"United States","code":"US","phoneCode":"+1"},{"name":"Uruguay","code":"UY","phoneCode":"+598"},{"name":"Uzbekistan","code":"UZ","phoneCode":"+998"},{"name":"Vanuatu","code":"VU","phoneCode":"+678"},{"name":"Vatican City","code":"VA","phoneCode":"+39"},{"name":"Venezuela","code":"VE","phoneCode":"+58"},{"name":"Vietnam","code":"VN","phoneCode":"+84"},{"name":"Wallis & Futuna","code":"WF","phoneCode":"+681"},{"name":"Western Sahara","code":"EH","phoneCode":"+212"},{"name":"Yemen","code":"YE","phoneCode":"+967"},{"name":"Zambia","code":"ZM","phoneCode":"+260"},{"name":"Zimbabwe","code":"ZW","phoneCode":"+263"}]},"localizedStrings":{"validation":{"noValidSelection":"A valid selection must be made.","invalidUrl":"Must be a valid URL.","stringTooLong":"Value should have a length no longer than {0}.","containsInvalidKey":"{0} contains an invalid key.","invalidTwitterUsername":"Must be a valid Twitter username.","valueOutsideRange":"Value must be in the range {0} to {1}.","invalidPassword":"Passwords should not contain whitespace.","missingRequiredSubfields":"{0} is missing required subfields: {1}","invalidCurrency":"Currency value should be formatted like 1234 or 123.99.","invalidMapSize":"Value should contain exactly {0} elements.","subfieldsRequired":"All fields in {0} are required.","formSubmissionFailed":"Form submission failed. Review the following information: {0}.","invalidCountryCode":"Country code should have an optional plus and up to 4 digits.","invalidDate":"This is not a real date.","required":"{0} is required.","invalidStringLength":"Value should be {0} characters long.","invalidEmail":"Email addresses should follow the format user@domain.com.","invalidListLength":"Value should be {0} elements long.","allEmpty":"Please fill out at least one form field.","missingRequiredQuestion":"Missing a required question.","invalidQuestion":"Contained an invalid question.","captchaFailure":"Captcha validation failed. Please try again.","stringTooShort":"Value should have a length of at least {0}.","invalid":"{0} is not valid.","formErrors":"Form Errors","containsInvalidValue":"{0} contains an invalid value.","invalidUnsignedNumber":"Numbers must contain only digits and no other characters.","invalidName":"Valid names contain only letters, numbers, spaces, ', or - characters."},"submit":"Submit","status":{"title":"{@} Block","learnMore":"Learn more"},"name":{"firstName":"First Name","lastName":"Last Name"},"lightbox":{"openForm":"Open Form"},"likert":{"agree":"Agree","stronglyDisagree":"Strongly Disagree","disagree":"Disagree","stronglyAgree":"Strongly Agree","neutral":"Neutral"},"time":{"am":"AM","second":"Second","pm":"PM","minute":"Minute","amPm":"AM/PM","hour":"Hour"},"notFound":"Form not found.","date":{"yyyy":"YYYY","year":"Year","mm":"MM","day":"Day","month":"Month","dd":"DD"},"phone":{"country":"Country","number":"Number","prefix":"Prefix","areaCode":"Area Code","line":"Line"},"submitError":"Unable to submit form. Please try again later.","address":{"stateProvince":"State/Province","country":"Country","zipPostalCode":"Zip/Postal Code","address2":"Address 2","address1":"Address 1","city":"City"},"email":{"signUp":"Sign up for news and updates"},"required":"(required)","invalidData":"Invalid form data."}}};</script><script type="text/javascript">SQUARESPACE_ROLLUPS = {};</script>
|
||
<script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/visitor-site-error-reporter-51e4c647fcd6492e-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-visitor_site_error_reporter');</script>
|
||
<script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/visitor-site-error-reporter-51e4c647fcd6492e-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/extract-css-runtime-1636df0bffc85711-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-extract_css_runtime');</script>
|
||
<script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/extract-css-runtime-1636df0bffc85711-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/extract-css-moment-js-vendor-a5cfdec1ae227f33-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-extract_css_moment_js_vendor');</script>
|
||
<script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/extract-css-moment-js-vendor-a5cfdec1ae227f33-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/cldr-resource-pack-2c5e18cab442f0cf-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-cldr_resource_pack');</script>
|
||
<script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/cldr-resource-pack-2c5e18cab442f0cf-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/common-vendors-stable-784b947826b4c445-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-common_vendors_stable');</script>
|
||
<script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/common-vendors-stable-784b947826b4c445-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/common-vendors-b318b15483dd810a-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-common_vendors');</script>
|
||
<script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/common-vendors-b318b15483dd810a-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/common-606aac31f510b103-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-common');</script>
|
||
<script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/common-606aac31f510b103-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/performance-9611e68ec914bcf5-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-performance');</script>
|
||
<script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/performance-9611e68ec914bcf5-min.en-US.js" defer ></script><link rel="stylesheet" type="text/css" href="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/website.components.summary.styles.css"/><link rel="stylesheet" type="text/css" href="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.horizontalrule/1c8ea4ed-0373-4f0a-9bb4-2cc767e044eb_271/website.components.horizontalrule.styles.css"/><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/18018.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-manager.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-autocolumns.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/embed-video-player.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-carousel.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-stacked.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-strip.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/43528.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-autogrid.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-grid.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-list.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/website.components.summary.visitor.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.horizontalrule/1c8ea4ed-0373-4f0a-9bb4-2cc767e044eb_271/website.components.horizontalrule.visitor.js"></script><script src="https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-slideshow.js"></script><script>Squarespace.load(window);</script>
|
||
<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="https://engineering.squarespace.com/blog?format=rss" />
|
||
<script type="application/ld+json">{"url":"https://engineering.squarespace.com","name":"Squarespace Engineering Blog","description":"<p class=\"\" style=\"white-space:pre-wrap;\">The Squarespace Engineering Blog recounts the stories of challenges, technical advances, and new processes we\u2019ve developed and adopted as a world-class engineering team.</p>","image":"//images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1469110989004-NAEJ4RDRLVXZFG14F17O/header-logo-1x.png","@context":"http://schema.org","@type":"WebSite"}</script><script type="application/ld+json">{"legalName":"as","address":"S\na\na","telephone":"","sameAs":["http://www.facebook.com/10203794036833619","https://twitter.com/squarespace"],"@context":"http://schema.org","@type":"Organization"}</script><script type="application/ld+json">{"address":"S\na\na","image":"https://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/5790dacdbebafb39ee1c7196/1774904636357/","name":"as","openingHours":"","@context":"http://schema.org","@type":"LocalBusiness"}</script><script type="application/ld+json">{"name":"Under the Hood: Ensuring Site Reliability \u2014 Squarespace Engineering Blog","url":"https://engineering.squarespace.com/blog/2017/under-the-hood-ensuring-site-reliability","datePublished":"2017-06-01T14:30:00-0400","dateModified":"2017-06-01T18:23:56-0400","headline":"Under the Hood: Ensuring Site Reliability","author":"Franklin Angulo","publisher":{"name":"Squarespace Engineering Blog","logo":{"@type":"ImageObject","url":"https://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/5790dacdbebafb39ee1c7196/1774904636357/"},"@context":"http://schema.org","@type":"Organization"},"image":"http://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/592f2679b3db2bd02a5a29ea/1496331639413/failover-diagram.png?format=1500w","@context":"http://schema.org","@type":"Article"}</script><link rel="stylesheet" type="text/css" href="https://static1.squarespace.com/static/sitecss/56ab961ecbced617ccd2461e/420/54d3906fe4b04c1c9981b00e/572229f3f8508218a5d84293/4948/site.css?nocustom=true"/><link rel="stylesheet" type="text/css" href="https://static1.squarespace.com/static/custom-css/56ab961ecbced617ccd2461e/572229f3f8508218a5d84293/0/custom.css"/><link rel="stylesheet" type="text/css" href="/s/clarkson.css" />
|
||
|
||
<meta name="google-site-verification" content="pm-f38Oqh9LjWd-E-5kyh9LKGwe9Dcy4Zxf08Bb7pnI" />
|
||
|
||
<script async="async" src=//consent.trustarc.com/notice?domain=squarespace.com&c=teconsent&js=nj¬iceType=bb&text=true&pn=2>m=1 crossorigin=""></script><script>Static.COOKIE_BANNER_CAPABLE = true;</script>
|
||
<!-- End of Squarespace Headers -->
|
||
<script>
|
||
(function(){
|
||
var touchTest = 'ontouchstart' in window || navigator.msMaxTouchPoints;
|
||
if (!touchTest) {
|
||
document.documentElement.className = document.documentElement.className.replace(/touch\-styles/g, '');
|
||
}
|
||
})();</script>
|
||
</head>
|
||
<body id="item-592f264c1b10e3bcc1f803b7" class="tweak-header-background-color-on tweak-underline-body-links tweak-ui-icon-weight-light tweak-navigation-link-spacing-small tweak-hide-right-nav-column tweak-site-branding-borders-none tweak-show-site-tagline tweak-site-branding-layout-inline tweak-show-search-in-header tweak-user-account-link-position-with-nav tweak-quote-block-alignment-left tweak-blog-list-grid-alignment-top tweak-blog-list-max-width-wide tweak-crop-images-none tweak-cards tweak-show-excerpt-on-blog-list tweak-blog-text-alignment-left tweak-blog-promoted-meta-author tweak-blog-date-style-above-title tweak-blog-show-divider tweak-blog-item-banner-image-width-normal tweak-show-blog-item-author-profile-below-post tweak-template-social-icon-style-square-knockout event-thumbnails event-thumbnail-size-32-standard event-date-label event-list-show-cats event-list-date event-list-time event-list-address event-excerpts event-item-back-link gallery-design-grid aspect-ratio-auto lightbox-style-light gallery-navigation-bullets gallery-info-overlay-show-on-hover gallery-aspect-ratio-32-standard gallery-arrow-style-no-background gallery-transitions-fade gallery-show-arrows gallery-auto-crop tweak-product-list-image-aspect-ratio-11-square tweak-product-list-item-hover-behavior-show-alternate-image tweak-product-list-meta-position-under tweak-product-list-mobile-meta-position-under tweak-product-list-meta-alignment-under-left tweak-product-list-meta-alignment-overlay-center-center tweak-product-list-show-title tweak-product-list-show-price tweak-product-list-filter-display-hide tweak-product-list-filter-alignment-left tweak-product-item-nav-show-breadcrumb-and-pagination tweak-product-item-nav-pagination-style-previousnext tweak-product-item-nav-breadcrumb-alignment-left tweak-product-item-nav-pagination-alignment-split tweak-product-item-gallery-position-left tweak-product-item-gallery-design-slideshow tweak-product-item-gallery-aspect-ratio-23-standard-vertical tweak-product-item-gallery-thumbnail-alignment-left tweak-product-item-details-alignment-left tweak-product-item-details-show-title tweak-product-item-details-show-price tweak-product-item-details-show-excerpt tweak-product-item-details-excerpt-position-below-price tweak-product-item-details-show-share-buttons tweak-product-item-details-show-variants tweak-product-item-details-show-quantity tweak-product-item-details-options-style-square tweak-product-item-details-show-add-to-cart-button tweak-product-item-details-add-to-cart-button-style-solid tweak-product-item-details-add-to-cart-button-shape-square tweak-product-item-details-add-to-cart-button-padding-large tweak-product-item-image-zoom-enabled tweak-product-item-image-zoom-behavior-click tweak-product-item-lightbox-enabled tweak-related-products-image-aspect-ratio-11-square tweak-related-products-meta-alignment-under-center tweak-product-badge-style-circle tweak-product-badge-position-top-right tweak-product-badge-inset-floating newsletter-style-dark hide-opentable-icons opentable-style-dark small-button-style-outline small-button-shape-square medium-button-style-solid medium-button-shape-square large-button-style-solid large-button-shape-square image-block-poster-text-alignment-center image-block-card-dynamic-font-sizing image-block-card-content-position-center image-block-card-text-alignment-left image-block-overlap-dynamic-font-sizing image-block-overlap-content-position-center image-block-overlap-text-alignment-left image-block-collage-dynamic-font-sizing image-block-collage-content-position-top image-block-collage-text-alignment-left image-block-stack-dynamic-font-sizing image-block-stack-text-alignment-left button-style-solid button-corner-style-pill tweak-product-quick-view-button-style-floating tweak-product-quick-view-button-position-bottom tweak-product-quick-view-lightbox-excerpt-display-truncate tweak-product-quick-view-lightbox-show-arrows tweak-product-quick-view-lightbox-show-close-button tweak-product-quick-view-lightbox-controls-weight-light tweak-share-buttons-style-outline tweak-share-buttons-icons-show tweak-share-buttons-labels-show tweak-share-buttons-standard-icon-color native-currency-code-usd collection-56aba24fc6fc08c6cb69a290 view-item collection-type-blog collection-layout-default mobile-style-available" data-controller="SyncHeader, AddScrollingClass, HeaderScroll, BodyMinHeight">
|
||
<div class="nav-close-overlay">
|
||
|
||
</div>
|
||
<div class="nav-close-toggle-wrapper" id="navCloseToggleWrapper">
|
||
<a class="nav-toggle-close-label responsive-position--left" id="navCloseToggle" data-controller="NavToggle">
|
||
<svg class="Icon Icon--close close-icon" viewBox="0 0 18 18">
|
||
<use xlink:href="/assets/ui-icons.svg#close-icon-line"></use>
|
||
</svg>
|
||
</a>
|
||
</div>
|
||
<div id="sideTrayWrapper" class="sidetray-wrapper">
|
||
<div class="main-nav-wrapper responsive-padding--top responsive-padding--bottom" data-controller="NavOverflow">
|
||
<div class="nav-blocks-wrapper">
|
||
|
||
<nav id="mainNavigation" class="main-navigation" role="navigation" data-content-field="navigation">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="nav-link--collection nav-link--active nav-link--homepage" id="id-56aba24fc6fc08c6cb69a290">
|
||
<a href="/">
|
||
<span>Home</span>
|
||
</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="nav-link--external">
|
||
<a href="http://squarespace.com" target="_blank">
|
||
<span>Squarespace</span>
|
||
</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="nav-link--collection" id="id-57f2cb86893fc0dc46911588">
|
||
<a href="/about">
|
||
<span>About</span>
|
||
</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="nav-link--external">
|
||
<a href="http://www.squarespace.com/careers/engineering">
|
||
<span>Careers</span>
|
||
</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="nav-link--external">
|
||
<a href="http://squarespace.github.io/" target="_blank">
|
||
<span>Open Source</span>
|
||
</a>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</nav>
|
||
|
||
|
||
<div class="sqs-layout sqs-grid-1 columns-1 empty" data-layout-label="Nav Blocks" data-type="block-field" data-updated-on="1468846294445" id="navBlocks"><div class="row sqs-row"><div class="col sqs-col-1 span-1"></div></div></div>
|
||
</div>
|
||
</div><!--
|
||
--><div class="sidetray-blocks responsive-padding--top responsive-padding--bottom" data-controller="SidetrayBlocksOverflow">
|
||
<div class="sidetray-blocks-wrapper">
|
||
<div class="sqs-layout sqs-grid-1 columns-1" data-layout-label="Sidetray Blocks" data-type="block-field" data-updated-on="1466176586934" id="sideTrayBlocks"><div class="row sqs-row"><div class="col sqs-col-1 span-1"><div class="sqs-block html-block sqs-block-html" data-block-type="2" data-sqsp-block="text" id="block-yui_3_17_2_2_1466176090458_6905"><div class="sqs-block-content">
|
||
|
||
<div class="sqs-html-content" data-sqsp-text-block-content>
|
||
<p class="text-align-center">[placeholder]</p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div></div></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<form class="header-search-form" id="headerSearch" action="/search" method="get">
|
||
<input class="header-search-form-input" name="q" placeholder="Search" type="text" spellcheck="false" value="" autocomplete="off">
|
||
</form>
|
||
|
||
|
||
|
||
<div class="mobile-social">
|
||
<nav class="sqs-template-social-icons sqs-svg-icon--list" data-content-field="connected-accounts">
|
||
|
||
|
||
|
||
<a href="http://www.facebook.com/10203794036833619" target="_blank" class="sqs-svg-icon--wrapper facebook-unauth">
|
||
<div>
|
||
<svg class="sqs-svg-icon--social" viewBox="0 0 64 64">
|
||
<use class="sqs-use--icon" xlink:href="#facebook-unauth-icon"></use>
|
||
<use class="sqs-use--mask" xlink:href="#facebook-unauth-mask"></use>
|
||
</svg>
|
||
</div>
|
||
</a>
|
||
|
||
<a href="https://twitter.com/squarespace" target="_blank" class="sqs-svg-icon--wrapper twitter-unauth">
|
||
<div>
|
||
<svg class="sqs-svg-icon--social" viewBox="0 0 64 64">
|
||
<use class="sqs-use--icon" xlink:href="#twitter-unauth-icon"></use>
|
||
<use class="sqs-use--mask" xlink:href="#twitter-unauth-mask"></use>
|
||
</svg>
|
||
</div>
|
||
</a>
|
||
|
||
|
||
</nav>
|
||
</div>
|
||
|
||
|
||
|
||
<div id="site" class="site-container clearfix">
|
||
|
||
<div class="sqs-announcement-bar-dropzone header-announcement-wrapper responsive-padding--left responsive-padding--right" id="headerAnnouncementWrapper">
|
||
<header id="header" class="site-header loading" role="banner">
|
||
<a class="nav-toggle-label flex-item" id="navToggle" data-controller="NavToggle">
|
||
<svg class="Icon Icon--hamburger nav-toggle-label-icon" viewBox="0 0 26 18">
|
||
<use xlink:href="/assets/ui-icons.svg#hamburger-icon--even"></use>
|
||
</svg>
|
||
</a>
|
||
|
||
<div class="logo-wrapper flex-item">
|
||
|
||
|
||
<div class="logo-image branding" data-content-field="site-title">
|
||
<a href="/"><img src="//images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1469110989004-NAEJ4RDRLVXZFG14F17O/header-logo-1x.png?format=1500w" alt="Squarespace Engineering Blog" /></a>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<nav class="header-special-social--shown-on-collapse sqs-template-social-icons sqs-svg-icon--list">
|
||
|
||
|
||
|
||
<a href="http://www.facebook.com/10203794036833619" target="_blank" class="sqs-svg-icon--wrapper facebook-unauth">
|
||
<div>
|
||
<svg class="sqs-svg-icon--social" viewBox="0 0 64 64">
|
||
<use class="sqs-use--icon" xlink:href="#facebook-unauth-icon"></use>
|
||
<use class="sqs-use--mask" xlink:href="#facebook-unauth-mask"></use>
|
||
</svg>
|
||
</div>
|
||
</a>
|
||
|
||
<a href="https://twitter.com/squarespace" target="_blank" class="sqs-svg-icon--wrapper twitter-unauth">
|
||
<div>
|
||
<svg class="sqs-svg-icon--social" viewBox="0 0 64 64">
|
||
<use class="sqs-use--icon" xlink:href="#twitter-unauth-icon"></use>
|
||
<use class="sqs-use--mask" xlink:href="#twitter-unauth-mask"></use>
|
||
</svg>
|
||
</div>
|
||
</a>
|
||
|
||
|
||
</nav>
|
||
|
||
|
||
|
||
<div class="header-special flex-item">
|
||
<div class="social-search-wrapper">
|
||
<div class="social-ellipsis" id="socialEllipsis" data-controller="SocialToggle">
|
||
<svg class="ellipsis-icon" viewBox="0 0 100 24">
|
||
<use xlink:href="/assets/ui-icons.svg#ellipsis-icon"></use>
|
||
</svg>
|
||
<svg class="social-close-icon Icon Icon--close" viewBox="0 0 18 18">
|
||
<use xlink:href="/assets/ui-icons.svg#close-icon-line"></use>
|
||
</svg>
|
||
</div><!--
|
||
|
||
|
||
--><nav class="header-special-social sqs-template-social-icons sqs-svg-icon--list" data-content-field="connected-accounts">
|
||
|
||
|
||
|
||
<a href="http://www.facebook.com/10203794036833619" target="_blank" class="sqs-svg-icon--wrapper facebook-unauth">
|
||
<div>
|
||
<svg class="sqs-svg-icon--social" viewBox="0 0 64 64">
|
||
<use class="sqs-use--icon" xlink:href="#facebook-unauth-icon"></use>
|
||
<use class="sqs-use--mask" xlink:href="#facebook-unauth-mask"></use>
|
||
</svg>
|
||
</div>
|
||
</a>
|
||
|
||
<a href="https://twitter.com/squarespace" target="_blank" class="sqs-svg-icon--wrapper twitter-unauth">
|
||
<div>
|
||
<svg class="sqs-svg-icon--social" viewBox="0 0 64 64">
|
||
<use class="sqs-use--icon" xlink:href="#twitter-unauth-icon"></use>
|
||
<use class="sqs-use--mask" xlink:href="#twitter-unauth-mask"></use>
|
||
</svg>
|
||
</div>
|
||
</a>
|
||
|
||
|
||
</nav><!--
|
||
|
||
|
||
--><a href="/search" rel="search" class="header-search" data-controller="SearchToggle">
|
||
<svg class="Icon Icon--search search-icon" viewBox="0 0 20 20" shape-rendering="geometricPrecision">
|
||
<use xlink:href="/assets/ui-icons.svg#search-icon"></use>
|
||
</svg>
|
||
<svg class="Icon Icon--close search-close-icon" viewBox="0 0 18 18">
|
||
<use xlink:href="/assets/ui-icons.svg#close-icon-line"></use>
|
||
</svg>
|
||
</a>
|
||
</div><!--
|
||
--><!--
|
||
-->
|
||
</div>
|
||
</header>
|
||
</div>
|
||
|
||
<main id="page" class="site-page loading responsive-padding--left responsive-padding--right site-page--blog-item" role="main" data-content-field="main-content" data-controller="FadeInContent">
|
||
|
||
<div class="blog-wrapper" data-content-field="main-content" data-item-id="592f264c1b10e3bcc1f803b7">
|
||
|
||
<div class="blog-item-title blog-item-title--top">
|
||
<time class="dt-published date-callout" datetime="2017-06-01" pubdate>
|
||
<div class="date-wrapper">
|
||
<span class="month">Jun </span><span class="day"> 1</span>
|
||
</div>
|
||
</time>
|
||
<h2 class="entry-title entry-title--large p-name" data-content-field="title"><time class="dt-published date-highlight" datetime="2017-06-01" pubdate>Jun 1 </time>Under the Hood: Ensuring Site Reliability</h2>
|
||
|
||
<div class="meta-wrapper">
|
||
<div class="blog-meta-item blog-meta-author"><a href="/?author=578f91472e69cfb21bdf3c72" class="blog-author-name">Franklin Angulo</a> </div><!--
|
||
|
||
-->
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="main-content blog-view-item clearfix">
|
||
<input id="show-comments" type="checkbox" />
|
||
<article id="article-592f264c1b10e3bcc1f803b7" class="entry--item h-entry clearfix hentry author-franklin-angulo post-type-text">
|
||
|
||
|
||
<div class="blog-item-content-wrapper" data-controller="BlogProgressBar">
|
||
|
||
<div class="pie-wrapper" id="pieWrapper">
|
||
<div class="pie pie--left" id="pieLeft"></div>
|
||
<div class="pie pie--right hide" id="pieRight"></div>
|
||
<div class="mask mask--right hide" id="pieMask"></div>
|
||
<div class="mask mask--left" id="maskLeft"></div>
|
||
</div>
|
||
<div class="blog-item-content e-content"><div class="sqs-layout sqs-grid-12 columns-12" data-layout-label="Post Body" data-type="item" data-updated-on="1496262538712" id="item-592f264c1b10e3bcc1f803b7"><div class="row sqs-row"><div class="col sqs-col-12 span-12"><div class="sqs-block markdown-block sqs-block-markdown" data-block-type="44" data-sqsp-block="markdown" id="block-yui_3_17_2_1_1496262203552_15865"><div class="sqs-block-content"><p>Squarespace hosts millions of websites on our cloud-based website-building
|
||
platform. The reliability of these sites is a top priority for us. We’re
|
||
consistently implementing the best technologies and safeguards to enable quick
|
||
load times and prevent outages. The measures we take allow our customers to
|
||
create Squarespace websites with confidence.</p>
|
||
<p>Read on to learn more (and nerd out) about all that goes in to making sure every
|
||
Squarespace site is reliable and running smoothly.</p>
|
||
<h2 id="powerful-data-centers">Powerful data centers</h2>
|
||
<p>Our platform’s foundation is an enterprise-grade, redundant infrastructure
|
||
maintained across multiple geographically distributed data centers. Each of
|
||
these data centers hooks up to the Internet through various service providers.
|
||
Within each data center, we employ sophisticated designs of networking and
|
||
server components. The data centers have enough network bandwidth and server
|
||
capacity to withstand high traffic volumes for any website on our platform. We
|
||
embrace the concept of infrastructure as code; the provisioning and
|
||
configuration of all of our data center components are fully automated using
|
||
Ansible, and we carefully review infrastructure changes before applying them.</p>
|
||
<p>Additionally, we have disaster-recovery mechanisms in place that allow us to
|
||
shift our traffic to different data centers when necessary. A disaster may
|
||
require us to replicate any data, such as website content and images, in near
|
||
real-time to our other data centers. We regularly execute the disaster-recovery
|
||
steps to ensure that they function appropriately, and we continuously iterate
|
||
and improve on the process to make it as reliable and automated as possible.</p>
|
||
|
||
</div></div><div class="sqs-block image-block sqs-block-image" data-block-type="5" data-sqsp-block="image-classic" id="block-yui_3_17_2_1_1496262203552_17229"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div
|
||
class="
|
||
image-block-outer-wrapper
|
||
layout-caption-below
|
||
design-layout-inline
|
||
|
||
|
||
|
||
"
|
||
data-test="image-block-inline-outer-wrapper"
|
||
data-sqsp-image-classic-block-layout="inline"
|
||
>
|
||
|
||
|
||
|
||
|
||
<figure
|
||
class="
|
||
sqs-block-image-figure
|
||
intrinsic
|
||
"
|
||
style="max-width:1084px;"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<button
|
||
data-sqsp-image-classic-block-lightbox-button
|
||
class="
|
||
sqs-block-image-button
|
||
lightbox
|
||
|
||
|
||
|
||
"
|
||
data-description="<p>Failing over traffic between two data centers for one service</p>"
|
||
data-lightbox-theme="dark"
|
||
>
|
||
<span class="v6-visually-hidden">View fullsize</span>
|
||
|
||
<div
|
||
|
||
|
||
class="image-block-wrapper"
|
||
data-animation-role="image"
|
||
|
||
data-animation-override
|
||
|
||
>
|
||
<div data-sqsp-image-classic-block-image-container class="sqs-image-shape-container-element
|
||
|
||
|
||
|
||
has-aspect-ratio
|
||
" style="
|
||
position: relative;
|
||
|
||
padding-bottom:100.36900329589844%;
|
||
|
||
overflow: hidden;-webkit-mask-image: -webkit-radial-gradient(white, black);
|
||
"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<img data-stretch="false" data-src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png" data-image="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png" data-image-dimensions="1084x1088" data-image-focal-point="0.5,0.5" alt="Failing over traffic between two data centers for one service" data-load="false" elementtiming="system-image-block" data-sqsp-image-classic-block-image src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png" width="1084" height="1088" alt="" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" style="display:block;object-fit: cover; width: 100%; height: 100%; object-position: 50% 50%" onload="this.classList.add("loaded")" srcset="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262265738-6REH0DL5LAEM7BFA3ML8/failover-diagram.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</button>
|
||
|
||
|
||
|
||
|
||
|
||
<figcaption data-sqsp-image-classic-block-caption-container class="image-caption-wrapper">
|
||
<div class="image-caption"><p>Failing over traffic between two data centers for one service</p></div>
|
||
</figcaption>
|
||
|
||
|
||
</figure>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div><div class="sqs-block markdown-block sqs-block-markdown" data-block-type="44" data-sqsp-block="markdown" id="block-yui_3_17_2_1_1496262203552_23246"><div class="sqs-block-content"><h2 id="large-scale-software-engine">Large-scale software engine</h2>
|
||
<p>In addition to the data centers, our server engineering teams build and maintain
|
||
the large-scale software engine that serves millions of users worldwide. Some
|
||
teams are responsible for scaling our database, caching, search, and queueing
|
||
layers. Other teams are responsible for breaking up our main application into
|
||
smaller and more reliable service boundaries by building out a <a href="https://engineering.squarespace.com/blog/2017/the-pillars-of-squarespace-services">microservices framework</a>.</p>
|
||
<p>The server engineering teams also implement optimizations that apply to all
|
||
Squarespace websites. All JavaScript, CSS, and images are delivered by multiple
|
||
globally distributed content delivery networks (CDNs) to improve page-load times
|
||
around the world. Internal caching layers and advanced web technologies, like
|
||
<a href="https://engineering.squarespace.com/blog/2017/implementing-http2-for-squarespace-websites">HTTP/2</a>, speed up page-load times as well.</p>
|
||
<p>Squarespace also offers top-of-the-line security to ensure the reliability of
|
||
our websites. We automatically generate, configure, and renew <a href="https://engineering.squarespace.com/blog/2016/implementing-ssl-tls-for-all-squarespace-sites">SSL/TLS
|
||
certificates</a>
|
||
for all of the domains on our platform. This
|
||
keeps all connections to Squarespace websites secure. Squarespace websites are
|
||
further protected by our custom-built web-application firewall, which blocks
|
||
abusive traffic in real time.</p>
|
||
|
||
</div></div><div class="sqs-block image-block sqs-block-image" data-block-type="5" data-sqsp-block="image-classic" id="block-yui_3_17_2_1_1496262203552_24429"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div
|
||
class="
|
||
image-block-outer-wrapper
|
||
layout-caption-below
|
||
design-layout-inline
|
||
|
||
|
||
|
||
"
|
||
data-test="image-block-inline-outer-wrapper"
|
||
data-sqsp-image-classic-block-layout="inline"
|
||
>
|
||
|
||
|
||
|
||
|
||
<figure
|
||
class="
|
||
sqs-block-image-figure
|
||
intrinsic
|
||
"
|
||
style="max-width:1600px;"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<button
|
||
data-sqsp-image-classic-block-lightbox-button
|
||
class="
|
||
sqs-block-image-button
|
||
lightbox
|
||
|
||
|
||
|
||
"
|
||
data-description="<p>Web application firewall blocking requests in real time</p>"
|
||
data-lightbox-theme="dark"
|
||
>
|
||
<span class="v6-visually-hidden">View fullsize</span>
|
||
|
||
<div
|
||
|
||
|
||
class="image-block-wrapper"
|
||
data-animation-role="image"
|
||
|
||
data-animation-override
|
||
|
||
>
|
||
<div data-sqsp-image-classic-block-image-container class="sqs-image-shape-container-element
|
||
|
||
|
||
|
||
has-aspect-ratio
|
||
" style="
|
||
position: relative;
|
||
|
||
padding-bottom:38.375%;
|
||
|
||
overflow: hidden;-webkit-mask-image: -webkit-radial-gradient(white, black);
|
||
"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<img data-stretch="false" data-src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png" data-image="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png" data-image-dimensions="1600x614" data-image-focal-point="0.5,0.5" alt="Web application firewall blocking requests in real time" data-load="false" elementtiming="system-image-block" data-sqsp-image-classic-block-image src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png" width="1600" height="614" alt="" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" style="display:block;object-fit: cover; width: 100%; height: 100%; object-position: 50% 50%" onload="this.classList.add("loaded")" srcset="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262329957-V2ESQ051DU1YANO8DS0I/image-asset.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</button>
|
||
|
||
|
||
|
||
|
||
|
||
<figcaption data-sqsp-image-classic-block-caption-container class="image-caption-wrapper">
|
||
<div class="image-caption"><p>Web application firewall blocking requests in real time</p></div>
|
||
</figcaption>
|
||
|
||
|
||
</figure>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div><div class="sqs-block markdown-block sqs-block-markdown" data-block-type="44" data-sqsp-block="markdown" id="block-yui_3_17_2_1_1496262203552_27955"><div class="sqs-block-content"><p>For larger, more sophisticated attackers, we safeguard websites from distributed
|
||
denial-of-service (DDoS) attacks using a combination of internal and external
|
||
tools. Our engineers also proactively address any application security
|
||
vulnerability, such as cross-site scripting (XSS) attacks and third-party
|
||
software-library vulnerabilities (for example,
|
||
<a href="http://heartbleed.com/">Heartbleed</a> and <a href="https://imagetragick.com/">ImageTragick</a>).</p>
|
||
<h2 id="continuous-deployment-of-software">Continuous deployment of software</h2>
|
||
<p>We use Git repositories to host all of our code, and our build system
|
||
automatically builds all developer branches. Our build system also runs tests on
|
||
each branch to check for regressions on behavior covered by unit tests. Upon a
|
||
successful build of a branch, a developer may deploy it to one of the many QA
|
||
environments if extra testing or verification is required. Automated testing
|
||
frameworks may also be used in QA environments to guarantee the
|
||
production-readiness of a branch.</p>
|
||
<p>Once ready, a developer may merge his/her branch to the master branch. At this
|
||
point, our build system will kick off a build of the master branch and deploy it
|
||
to the staging environment. The deployment system will automatically run smoke-
|
||
testing suites in staging and, if they're successful, deploy the code to
|
||
production.</p>
|
||
<p>On any given weekday, we deploy our main application between 5 and 12 times.
|
||
These deployments contain smaller change sets, so it is easier to identify which
|
||
code changes may have caused an issue if one occurs. With more frequent
|
||
releases, engineers also experience a tighter feedback loop on the code they
|
||
push out. Finally, by depending on an automated deployment pipeline, it
|
||
encourages the development of more robust automated testing and validation
|
||
frameworks.</p>
|
||
<p>The majority of product outages occur almost immediately after new code is
|
||
released. We balance product stability with rate of change by emphasizing
|
||
testing. Our Site Reliability Engineering team provides multiple tools to our
|
||
developers for monitoring purposes. We maintain large Graphite clusters for
|
||
time-series data, ELK clusters for log aggregation, and Cassandra clusters for
|
||
Zipkin distributed tracing spans. Every minute, over 14 million metrics are
|
||
emitted to Graphite and 1 million log lines are ingested into ELK.</p>
|
||
|
||
</div></div><div class="sqs-block image-block sqs-block-image" data-block-type="5" data-sqsp-block="image-classic" id="block-yui_3_17_2_1_1496262203552_29203"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div
|
||
class="
|
||
image-block-outer-wrapper
|
||
layout-caption-below
|
||
design-layout-inline
|
||
|
||
|
||
|
||
"
|
||
data-test="image-block-inline-outer-wrapper"
|
||
data-sqsp-image-classic-block-layout="inline"
|
||
>
|
||
|
||
|
||
|
||
|
||
<figure
|
||
class="
|
||
sqs-block-image-figure
|
||
intrinsic
|
||
"
|
||
style="max-width:1600px;"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<button
|
||
data-sqsp-image-classic-block-lightbox-button
|
||
class="
|
||
sqs-block-image-button
|
||
lightbox
|
||
|
||
|
||
|
||
"
|
||
data-description="<p>Monitoring 95th-percentile latencies using a Grafana dashboard<br /> </p>"
|
||
data-lightbox-theme="dark"
|
||
>
|
||
<span class="v6-visually-hidden">View fullsize</span>
|
||
|
||
<div
|
||
|
||
|
||
class="image-block-wrapper"
|
||
data-animation-role="image"
|
||
|
||
data-animation-override
|
||
|
||
>
|
||
<div data-sqsp-image-classic-block-image-container class="sqs-image-shape-container-element
|
||
|
||
|
||
|
||
has-aspect-ratio
|
||
" style="
|
||
position: relative;
|
||
|
||
padding-bottom:31.875%;
|
||
|
||
overflow: hidden;-webkit-mask-image: -webkit-radial-gradient(white, black);
|
||
"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<img data-stretch="false" data-src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png" data-image="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png" data-image-dimensions="1600x510" data-image-focal-point="0.5,0.5" alt="Monitoring 95th-percentile latencies using a Grafana dashboard " data-load="false" elementtiming="system-image-block" data-sqsp-image-classic-block-image src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png" width="1600" height="510" alt="" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" style="display:block;object-fit: cover; width: 100%; height: 100%; object-position: 50% 50%" onload="this.classList.add("loaded")" srcset="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262364931-AL02LT4PG92ALSIL2HF7/image-asset.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</button>
|
||
|
||
|
||
|
||
|
||
|
||
<figcaption data-sqsp-image-classic-block-caption-container class="image-caption-wrapper">
|
||
<div class="image-caption"><p>Monitoring 95th-percentile latencies using a Grafana dashboard<br /> </p></div>
|
||
</figcaption>
|
||
|
||
|
||
</figure>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div><div class="sqs-block markdown-block sqs-block-markdown" data-block-type="44" data-sqsp-block="markdown" id="block-yui_3_17_2_1_1496262203552_32731"><div class="sqs-block-content"><h2 id="monitoring-and-response">Monitoring and response</h2>
|
||
<p>We monitor our data centers and our general system health around the clock. Our
|
||
internal Graphite, ELK, and Zipkin monitoring tools are complemented by external
|
||
monitoring systems to check our product feature availabilities, infrastructure
|
||
components, and network connectivity issues worldwide.</p>
|
||
<p>We've standardized on Sensu as our alerting framework that integrates with all
|
||
of our monitoring systems to notify the responsible team of engineers of any
|
||
issues that come up. If the issues are potentially customer-impacting, we route
|
||
alerts through PagerDuty to ensure swift response times and minimize any effects
|
||
on our customers and their website visitors.</p>
|
||
|
||
</div></div><div class="sqs-block image-block sqs-block-image" data-block-type="5" data-sqsp-block="image-classic" id="block-yui_3_17_2_1_1496262203552_33854"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div
|
||
class="
|
||
image-block-outer-wrapper
|
||
layout-caption-below
|
||
design-layout-inline
|
||
|
||
|
||
|
||
"
|
||
data-test="image-block-inline-outer-wrapper"
|
||
data-sqsp-image-classic-block-layout="inline"
|
||
>
|
||
|
||
|
||
|
||
|
||
<figure
|
||
class="
|
||
sqs-block-image-figure
|
||
intrinsic
|
||
"
|
||
style="max-width:1124px;"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div
|
||
|
||
|
||
class="image-block-wrapper"
|
||
data-animation-role="image"
|
||
|
||
data-animation-override
|
||
|
||
>
|
||
<div data-sqsp-image-classic-block-image-container class="sqs-image-shape-container-element
|
||
|
||
|
||
|
||
has-aspect-ratio
|
||
" style="
|
||
position: relative;
|
||
|
||
padding-bottom:25.62277603149414%;
|
||
|
||
overflow: hidden;-webkit-mask-image: -webkit-radial-gradient(white, black);
|
||
"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<img data-stretch="false" data-src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png" data-image="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png" data-image-dimensions="1124x288" data-image-focal-point="0.5,0.5" alt="A PagerDuty alert generated by Sensu posted to a Slack channel " data-load="false" elementtiming="system-image-block" data-sqsp-image-classic-block-image src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png" width="1124" height="288" alt="" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" style="display:block;object-fit: cover; width: 100%; height: 100%; object-position: 50% 50%" onload="this.classList.add("loaded")" srcset="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262461145-GACH0M1XRXB4K0CUZD2F/image-asset.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<figcaption data-sqsp-image-classic-block-caption-container class="image-caption-wrapper">
|
||
<div class="image-caption"><p>A PagerDuty alert generated by Sensu posted to a Slack channel<br /> </p></div>
|
||
</figcaption>
|
||
|
||
|
||
</figure>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div><div class="sqs-block markdown-block sqs-block-markdown" data-block-type="44" data-sqsp-block="markdown" id="block-yui_3_17_2_1_1496262203552_40052"><div class="sqs-block-content"><p>In the rare case that an outage occurs, our Site Reliability Engineers are
|
||
prepared to respond in different time zones across our New York, Portland, and
|
||
Dublin offices. We equip them with runbooks, automation, and training, all of
|
||
which reduce our mean time to repair (MTTR). We also post updates to our <a href="https://status.squarespace.com/">Status
|
||
page</a> and Tweet from the
|
||
<a href="https://twitter.com/SquarespaceHelp">@SquarespaceHelp</a> handle. After any
|
||
outage, the team(s) involved carry out postmortems to find root causes and make
|
||
necessary corrections. Every Friday, we have a weekly organization-wide
|
||
postmortem to review the team postmortems and share knowledge across teams.</p>
|
||
<h2 id="operational-excellence">Operational excellence</h2>
|
||
<p>Squarespace teams, like any other engineering teams, have to balance time spent
|
||
developing new software with time spent performing operational work. Our goal is
|
||
to reduce the operational burden on our teams to allow them to spend more time
|
||
developing features for our customers. Every month, our Site Reliability
|
||
Engineering team reports on the operational excellence of our organization. The
|
||
report includes data for platform uptime, page load latencies, PagerDuty
|
||
incidents, postmortems, DDoS attacks, time spent on on-call duty, and the
|
||
frequency and health of builds and deployments, among other metrics.</p>
|
||
<p>By reviewing our operational excellence on a monthly basis and making necessary
|
||
adjustments, we improve the reliability of the product for our customers and
|
||
empower our engineers to spend more time on software development and less on
|
||
operations.</p>
|
||
|
||
</div></div><div class="sqs-block image-block sqs-block-image" data-block-type="5" data-sqsp-block="image-classic" id="block-yui_3_17_2_1_1496262203552_41236"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div
|
||
class="
|
||
image-block-outer-wrapper
|
||
layout-caption-below
|
||
design-layout-inline
|
||
|
||
|
||
|
||
"
|
||
data-test="image-block-inline-outer-wrapper"
|
||
data-sqsp-image-classic-block-layout="inline"
|
||
>
|
||
|
||
|
||
|
||
|
||
<figure
|
||
class="
|
||
sqs-block-image-figure
|
||
intrinsic
|
||
"
|
||
style="max-width:1578px;"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<button
|
||
data-sqsp-image-classic-block-lightbox-button
|
||
class="
|
||
sqs-block-image-button
|
||
lightbox
|
||
|
||
|
||
|
||
"
|
||
data-description="<p>Monthly uptime metrics included in the Operational Excellence report<br /> </p>"
|
||
data-lightbox-theme="dark"
|
||
>
|
||
<span class="v6-visually-hidden">View fullsize</span>
|
||
|
||
<div
|
||
|
||
|
||
class="image-block-wrapper"
|
||
data-animation-role="image"
|
||
|
||
data-animation-override
|
||
|
||
>
|
||
<div data-sqsp-image-classic-block-image-container class="sqs-image-shape-container-element
|
||
|
||
|
||
|
||
has-aspect-ratio
|
||
" style="
|
||
position: relative;
|
||
|
||
padding-bottom:64.1318130493164%;
|
||
|
||
overflow: hidden;-webkit-mask-image: -webkit-radial-gradient(white, black);
|
||
"
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<img data-stretch="false" data-src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png" data-image="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png" data-image-dimensions="1578x1012" data-image-focal-point="0.5,0.5" alt="Monthly uptime metrics included in the Operational Excellence report " data-load="false" elementtiming="system-image-block" data-sqsp-image-classic-block-image src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png" width="1578" height="1012" alt="" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" style="display:block;object-fit: cover; width: 100%; height: 100%; object-position: 50% 50%" onload="this.classList.add("loaded")" srcset="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1496262508913-1RCKE89PLVL0KRHL4WNU/uptime-graph.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</button>
|
||
|
||
|
||
|
||
|
||
|
||
<figcaption data-sqsp-image-classic-block-caption-container class="image-caption-wrapper">
|
||
<div class="image-caption"><p>Monthly uptime metrics included in the Operational Excellence report<br /> </p></div>
|
||
</figcaption>
|
||
|
||
|
||
</figure>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div><div class="sqs-block markdown-block sqs-block-markdown" data-block-type="44" data-sqsp-block="markdown" id="block-yui_3_17_2_1_1496262203552_44541"><div class="sqs-block-content"><p>We take pride in our work to ensure that Squarespace is a reliable product for
|
||
our customers around the world. If you're interested in these types of
|
||
challenges, <a href="https://www.squarespace.com/about/careers?gh_jid=11405&gh_src=ic4dms">our team is
|
||
hiring</a>!</p>
|
||
|
||
</div></div></div></div></div></div>
|
||
|
||
<footer class="blog-item-footer">
|
||
|
||
<div class="footer-meta">
|
||
|
||
<div class="blog-meta-item blog-meta-author"><a href="/?author=578f91472e69cfb21bdf3c72" class="blog-author-name">Franklin Angulo</a></div>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<div class="blog-item-actions blog-item-actions--footer">
|
||
<div class="blog-item-actions-wrapper">
|
||
|
||
|
||
<div class="Share sqs-share-buttons" data-item-identifier="592f264c1b10e3bcc1f803b7" data-item-path="blog/2017/under-the-hood-ensuring-site-reliability">
|
||
|
||
<div class="Share-buttons">
|
||
|
||
<!--
|
||
|
||
LinkedIn
|
||
|
||
--><a href="https://www.linkedin.com/shareArticle?mini=true&source=Squarespace+Engineering+Blog&summary=Squarespace+hosts+millions+of+websites+on+our+cloud-based+website-building+platform.+The+reliability+of+...&url=https%3A%2F%2Fengineering.squarespace.com%2Fblog%2F2017%2Funder-the-hood-ensuring-site-reliability" class="Share-buttons-item Share-buttons-item--social" target="_blank" data-service="linkedin">
|
||
<svg class="Share-buttons-item-icon" viewBox="0 0 64 64">
|
||
<use xlink:href="/universal/svg/social-accounts.svg#linkedin-icon"></use>
|
||
</svg><span class="Share-buttons-item-label">LinkedIn</span><span class="Share-buttons-item-count">0</span>
|
||
</a><!--
|
||
|
||
Simple Like
|
||
|
||
--><a href="#" class="Share-buttons-item Share-buttons-item--like" data-item-identifier="592f264c1b10e3bcc1f803b7" data-like-count="12" data-service="squarespace-like">
|
||
<svg class="Share-buttons-item-icon" viewBox="0 0 64 64">
|
||
<g class="svg-icon">
|
||
<path d="M39.9,37.8c-7.3,4.8-7.7,6.9-7.9,7.8c-0.2-0.9-0.6-3-7.9-7.8c-16-10.6,1.4-25.4,7.9-11.7C38.5,12.4,55.9,27.3,39.9,37.8z"/>
|
||
</g>
|
||
</svg><span class="Share-buttons-item-label"><span class="Share-buttons-item-label-count">0</span> Likes</span>
|
||
</a>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="blog-item-author-profile blog-item-author-profile--footer responsive-margin--top">
|
||
|
||
<a href="/?author=578f91472e69cfb21bdf3c72" class="author-avatar content-fill" data-controller="SimpleImageLoad" data-tweaks="tweak-show-blog-item-author-profile">
|
||
<img class="author-avatar-image" data-src="https://static1.squarespace.com/static/images/578f90fe46c3c42341a35875/100w" data-image="https://static1.squarespace.com/static/images/578f90fe46c3c42341a35875/100w" data-image-focal-point="0.5,0.5" data-load="false">
|
||
</a>
|
||
|
||
<div class="author-name"><a href="/?author=578f91472e69cfb21bdf3c72">Franklin Angulo</a></div>
|
||
<p class="author-bio"><p>Franklin Angulo is a Director of Engineering at Squarespace. Follow him on Twitter at <a href="https://twitter.com/feangulo" rel="nofollow">@feangulo</a>.</p></p>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
</footer>
|
||
|
||
|
||
|
||
<section class="blog-item-comments">
|
||
<div class="blog-item-comments-toggle-wrapper">
|
||
<label for="show-comments" title="Show/Hide Comments" class="blog-item-comments-toggle">
|
||
</label>
|
||
<div id="blogItemCommentsContent" class="blog-item-comments-content">
|
||
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<aside id="blogItemSidebar" class="blog-item-sidebar">
|
||
|
||
<div class="blog-item-author-profile blog-item-author-profile--sidebar">
|
||
|
||
<a href="/?author=578f91472e69cfb21bdf3c72" class="author-avatar content-fill" data-controller="SimpleImageLoad" data-tweaks="tweak-show-blog-item-author-profile">
|
||
<img class="author-avatar-image" data-src="https://static1.squarespace.com/static/images/578f90fe46c3c42341a35875/100w" data-image="https://static1.squarespace.com/static/images/578f90fe46c3c42341a35875/100w" data-image-focal-point="0.5,0.5" data-load="false">
|
||
</a>
|
||
|
||
<div class="author-name"><a href="/?author=578f91472e69cfb21bdf3c72">Franklin Angulo</a></div>
|
||
<p class="author-bio"><p>Franklin Angulo is a Director of Engineering at Squarespace. Follow him on Twitter at <a href="https://twitter.com/feangulo" rel="nofollow">@feangulo</a>.</p></p>
|
||
|
||
|
||
</div>
|
||
|
||
<div class="sqs-layout sqs-grid-12 columns-12" data-layout-label="Blog Item Sidebar" data-type="block-field" data-updated-on="1461870668601" id="blogItemSidebarContent"><div class="row sqs-row"><div class="col sqs-col-12 span-12"><div class="sqs-block rss-block sqs-block-rss" data-block-type="49" id="block-yui_3_17_2_20_1461868458645_7232"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
<a href="https://engineering.squarespace.com/?format=rss" title="Home RSS" class="social-rss">Home RSS</a>
|
||
</div></div><div class="sqs-block website-component-block sqs-block-website-component sqs-block-horizontalrule horizontalrule-block" data-block-css="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.horizontalrule/1c8ea4ed-0373-4f0a-9bb4-2cc767e044eb_271/website.components.horizontalrule.styles.css"]" data-block-scripts="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.horizontalrule/1c8ea4ed-0373-4f0a-9bb4-2cc767e044eb_271/website.components.horizontalrule.visitor.js"]" data-block-type="1337" data-definition-name="website.components.horizontalrule" data-sqsp-block="line" data-website-component-id="yui_3_17_2_4_1461863002557_6752" id="block-yui_3_17_2_4_1461863002557_6752"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
<div>
|
||
<hr />
|
||
|
||
<style class="transform-overrides-vars">
|
||
|
||
</style>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div></div><div class="sqs-block html-block sqs-block-html" data-block-type="2" data-sqsp-block="text" id="block-yui_3_17_2_31_1454519879959_149006"><div class="sqs-block-content">
|
||
|
||
<div class="sqs-html-content" data-sqsp-text-block-content>
|
||
<h3>Latest Article</h3>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div><div class="sqs-block website-component-block sqs-block-website-component sqs-block-summary-v2 summary-block summary-v2-block" data-block-css="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/website.components.summary.styles.css"]" data-block-scripts="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/18018.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/43528.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/embed-video-player.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-autocolumns.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-autogrid.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-carousel.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-grid.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-list.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-slideshow.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-stacked.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-layout-strip.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/gallery-manager.js","https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.summary/861360d1-b3ec-4cf3-bb26-49bed66ff221_622/website.components.summary.visitor.js"]" data-block-type="1337" data-definition-name="website.components.summary" data-sqsp-block="summary" data-website-component-id="yui_3_17_2_31_1454519879959_10132" id="block-yui_3_17_2_31_1454519879959_10132"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="
|
||
summary-block-wrapper
|
||
summary-block-collection-type-blog
|
||
summary-block-setting-text-size-medium
|
||
summary-block-setting-text-align-left
|
||
summary-block-setting-design-list
|
||
summary-block-setting-design-list-thumbnail-left
|
||
summary-block-setting-metadata-position-below-content
|
||
summary-block-setting-primary-metadata-author
|
||
summary-block-setting-secondary-metadata-cats
|
||
|
||
summary-block-setting-show-title
|
||
summary-block-setting-show-price
|
||
summary-block-setting-hide-excerpt
|
||
summary-block-setting-show-read-more-link
|
||
|
||
sqs-gallery-design-list
|
||
|
||
"
|
||
|
||
data-design=list
|
||
data-image-aspect-ratio=Auto
|
||
data-slides-per-row=3
|
||
|
||
data-mixed-content=true
|
||
data-column-width=137
|
||
data-gutter="0"
|
||
data-list-image-size="30"
|
||
data-active-alignment=""
|
||
data-square-thumbs=""
|
||
data-auto-crop="true"
|
||
|
||
|
||
>
|
||
<div class="summary-item-list-container sqs-gallery-container">
|
||
<header class="summary-block-header">
|
||
|
||
<div class="summary-heading" data-animation-role="content">
|
||
|
||
<span class="summary-header-text">Featured</span>
|
||
|
||
</div>
|
||
|
||
<div class="summary-carousel-pager sqs-gallery-controls" data-animation-role="content">
|
||
<span
|
||
class="summary-carousel-pager-prev previous"
|
||
tabindex="0"
|
||
role="button"
|
||
aria-label="Previous"
|
||
></span>
|
||
<span
|
||
class="summary-carousel-pager-next next"
|
||
tabindex="0"
|
||
role="button"
|
||
aria-label="Next"
|
||
></span>
|
||
</div>
|
||
</header>
|
||
<div class="summary-item-list sqs-gallery">
|
||
|
||
<div class="
|
||
summary-item
|
||
positioned
|
||
summary-item-record-type-text
|
||
sqs-gallery-design-list-slide
|
||
|
||
|
||
summary-item-has-thumbnail
|
||
|
||
summary-item-has-excerpt
|
||
|
||
|
||
summary-item-has-author
|
||
|
||
|
||
"
|
||
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="summary-thumbnail-outer-container">
|
||
<a
|
||
|
||
|
||
href="/blog/2026/stain-the-page-how-i-prototype-with-ai"
|
||
|
||
|
||
class="
|
||
summary-thumbnail-container
|
||
sqs-gallery-image-container
|
||
|
||
"
|
||
data-title="Stain the Page: How I Prototype with AI"
|
||
data-description=""
|
||
aria-label="Stain the Page: How I Prototype with AI"
|
||
>
|
||
<div class="summary-thumbnail img-wrapper" data-animation-role="image">
|
||
|
||
|
||
|
||
<!-- Main Image -->
|
||
<img data-src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1784061679926-N02JLGPUUPOPOO571L1A/stain-the-page-thumbnail.png" data-image="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1784061679926-N02JLGPUUPOPOO571L1A/stain-the-page-thumbnail.png" data-image-dimensions="1536x1024" data-image-focal-point="0.5,0.5" alt="Stain the Page: How I Prototype with AI" data-load="false" class="summary-thumbnail-image" elementtiming="summary-thumbnail-image-list" />
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</a>
|
||
|
||
<!-- Products: Quick View -->
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="summary-content sqs-gallery-meta-container" data-animation-role="content">
|
||
|
||
<div class="summary-metadata-container summary-metadata-container--above-title">
|
||
|
||
<div class="summary-metadata summary-metadata--primary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Author -->
|
||
<span class="summary-metadata-item summary-metadata-item--author"><a
|
||
href="/?author=6a56a7ce1b8c4f055676990b#show-archive">Hannah Tipperman</a></span>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<div class="summary-metadata summary-metadata--secondary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="summary-title">
|
||
<a
|
||
|
||
|
||
href="/blog/2026/stain-the-page-how-i-prototype-with-ai"
|
||
|
||
|
||
class="summary-title-link">
|
||
Stain the Page: How I Prototype with AI
|
||
</a>
|
||
</div>
|
||
|
||
<div class="summary-metadata-container summary-metadata-container--below-title">
|
||
|
||
<div class="summary-metadata summary-metadata--primary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Author -->
|
||
<span class="summary-metadata-item summary-metadata-item--author"><a
|
||
href="/?author=6a56a7ce1b8c4f055676990b#show-archive">Hannah Tipperman</a></span>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<div class="summary-metadata summary-metadata--secondary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="
|
||
summary-excerpt
|
||
summary-excerpt-only
|
||
"><p style="white-space:pre-wrap;" data-rte-preserve-empty="true">AI is incredible for rapid idea and hypothesis testing by prototyping. It isn't about writing code — it’s about protecting your most valuable resource: cognitive energy. As engineers, we often face the overwhelming task of determining the look, feel, and architecture of an idea through hundreds of tiny decisions. By the time we get to the novel part of the problem we’re trying to solve, our brains are tired. We can burn out before we even truly begin.</p><p style="white-space:pre-wrap;" data-rte-preserve-empty="true">To solve this, we can steal a trick from artists and writers.</p></div>
|
||
|
||
|
||
|
||
<a href="/blog/2026/stain-the-page-how-i-prototype-with-ai" class="summary-read-more-link">Read more →</a>
|
||
|
||
<div class="summary-metadata-container summary-metadata-container--below-content">
|
||
|
||
<div class="summary-metadata summary-metadata--primary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Author -->
|
||
<span class="summary-metadata-item summary-metadata-item--author"><a
|
||
href="/?author=6a56a7ce1b8c4f055676990b#show-archive">Hannah Tipperman</a></span>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<div class="summary-metadata summary-metadata--secondary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="
|
||
summary-item
|
||
positioned
|
||
summary-item-record-type-text
|
||
sqs-gallery-design-list-slide
|
||
|
||
|
||
summary-item-has-thumbnail
|
||
|
||
summary-item-has-excerpt
|
||
|
||
|
||
summary-item-has-author
|
||
|
||
|
||
"
|
||
|
||
>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="summary-thumbnail-outer-container">
|
||
<a
|
||
|
||
|
||
href="/blog/2026/the-importance-of-documentation-in-b2b-api-adoption"
|
||
|
||
|
||
class="
|
||
summary-thumbnail-container
|
||
sqs-gallery-image-container
|
||
|
||
"
|
||
data-title="The Importance of Documentation in B2B API Adoption"
|
||
data-description=""
|
||
aria-label="The Importance of Documentation in B2B API Adoption"
|
||
>
|
||
<div class="summary-thumbnail img-wrapper" data-animation-role="image">
|
||
|
||
|
||
|
||
<!-- Main Image -->
|
||
<img data-src="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1782172684682-3W72FCZ7ROXYDSN5JZGY/reseller-post-v2.png" data-image="https://images.squarespace-cdn.com/content/v1/56ab961ecbced617ccd2461e/1782172684682-3W72FCZ7ROXYDSN5JZGY/reseller-post-v2.png" data-image-dimensions="1663x946" data-image-focal-point="0.5,0.5" alt="The Importance of Documentation in B2B API Adoption" data-load="false" class="summary-thumbnail-image" elementtiming="summary-thumbnail-image-list" />
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</a>
|
||
|
||
<!-- Products: Quick View -->
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="summary-content sqs-gallery-meta-container" data-animation-role="content">
|
||
|
||
<div class="summary-metadata-container summary-metadata-container--above-title">
|
||
|
||
<div class="summary-metadata summary-metadata--primary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Author -->
|
||
<span class="summary-metadata-item summary-metadata-item--author"><a
|
||
href="/?author=654a8188baaa88051a95da1e#show-archive">Anila Zaidi</a></span>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<div class="summary-metadata summary-metadata--secondary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="summary-title">
|
||
<a
|
||
|
||
|
||
href="/blog/2026/the-importance-of-documentation-in-b2b-api-adoption"
|
||
|
||
|
||
class="summary-title-link">
|
||
The Importance of Documentation in B2B API Adoption
|
||
</a>
|
||
</div>
|
||
|
||
<div class="summary-metadata-container summary-metadata-container--below-title">
|
||
|
||
<div class="summary-metadata summary-metadata--primary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Author -->
|
||
<span class="summary-metadata-item summary-metadata-item--author"><a
|
||
href="/?author=654a8188baaa88051a95da1e#show-archive">Anila Zaidi</a></span>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<div class="summary-metadata summary-metadata--secondary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="
|
||
summary-excerpt
|
||
summary-excerpt-only
|
||
"><p style="white-space:pre-wrap;" data-rte-preserve-empty="true">We read reviews before buying a TV, a sweater, almost anything. Businesses do the same – potential enterprise partners evaluate APIs through every piece of content they come across. So, what happens when you improve all of it?</p></div>
|
||
|
||
|
||
|
||
<a href="/blog/2026/the-importance-of-documentation-in-b2b-api-adoption" class="summary-read-more-link">Read more →</a>
|
||
|
||
<div class="summary-metadata-container summary-metadata-container--below-content">
|
||
|
||
<div class="summary-metadata summary-metadata--primary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Author -->
|
||
<span class="summary-metadata-item summary-metadata-item--author"><a
|
||
href="/?author=654a8188baaa88051a95da1e#show-archive">Anila Zaidi</a></span>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<div class="summary-metadata summary-metadata--secondary">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<style>
|
||
#block-yui_3_17_2_31_1454519879959_10132 {
|
||
--summary-title-font-size: 20px;
|
||
--summary-excerpt-font-size: 14px;
|
||
--summary-text-align: left;
|
||
--summary-list-image-float: left;
|
||
--summary-list-thumbnail-padding-left: 0;
|
||
--summary-list-thumbnail-padding-right: 20px;
|
||
--summary-list-qv-padding-left: 0;
|
||
--summary-list-qv-padding-right: 20px;
|
||
--summary-list-product-mark-left: 0;
|
||
--summary-list-product-mark-right: auto;
|
||
--summary-meta-above-display: none;
|
||
--summary-meta-below-title-display: none;
|
||
--summary-meta-below-content-display: block;
|
||
--summary-show-title: block;
|
||
--summary-show-thumbnail: none;
|
||
--summary-show-excerpt: none;
|
||
--summary-show-excerpt-clamped: none;
|
||
--summary-content-spacing: 2px;
|
||
--summary-show-price: block;
|
||
--summary-show-read-more-link: none;
|
||
}
|
||
</style>
|
||
<style id="container-styles">#block-yui_3_17_2_31_1454519879959_10132 {
|
||
|
||
|
||
|
||
}
|
||
|
||
#block-yui_3_17_2_31_1454519879959_10132 .summary-block-wrapper {
|
||
|
||
}
|
||
|
||
#block-yui_3_17_2_31_1454519879959_10132 {
|
||
mix-blend-mode: var(--tweak-summary-block-blend);
|
||
border-radius: var(--tweak-summary-block-radius);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</style>
|
||
|
||
</div></div><div class="sqs-block website-component-block sqs-block-website-component sqs-block-horizontalrule horizontalrule-block" data-block-css="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.horizontalrule/1c8ea4ed-0373-4f0a-9bb4-2cc767e044eb_271/website.components.horizontalrule.styles.css"]" data-block-scripts="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.horizontalrule/1c8ea4ed-0373-4f0a-9bb4-2cc767e044eb_271/website.components.horizontalrule.visitor.js"]" data-block-type="1337" data-definition-name="website.components.horizontalrule" data-sqsp-block="line" data-website-component-id="yui_3_17_2_31_1454519879959_9780" id="block-yui_3_17_2_31_1454519879959_9780"><div class="sqs-block-content">
|
||
|
||
|
||
|
||
<div>
|
||
<hr />
|
||
|
||
<style class="transform-overrides-vars">
|
||
|
||
</style>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</div></div><div class="sqs-block html-block sqs-block-html" data-block-type="2" data-sqsp-block="text" id="block-yui_3_17_2_20_1461868458645_10380"><div class="sqs-block-content">
|
||
|
||
<div class="sqs-html-content" data-sqsp-text-block-content>
|
||
<h3>Twitter</h3>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div></div></div></div>
|
||
</aside>
|
||
|
||
</article>
|
||
</div>
|
||
|
||
|
||
|
||
<section class="blog-item-pagination">
|
||
<a href="/blog/2017/understanding-linux-container-scheduling" class="blog-item-pagination-link blog-item-pagination-link--prev">
|
||
<div class="blog-item-label">
|
||
<svg class="prev-icon" viewBox="0 0 50 100">
|
||
<use xlink:href="/assets/ui-icons.svg#thick-arrow-left-icon"></use>
|
||
</svg>
|
||
</div>
|
||
<span class="pagination-title-wrapper">
|
||
|
||
<h2 class="blog-item-pagination-title"><time class="dt-published date-pagination" datetime="2017-06-27" pubdate>Jun 27 </time>Understanding Linux Container Scheduling</h2>
|
||
</span>
|
||
</a><!--
|
||
--><a href="/blog/2017/the-pillars-of-squarespace-services" class="blog-item-pagination-link blog-item-pagination-link--next">
|
||
<div class="blog-item-label">
|
||
<svg class="next-icon" viewBox="0 0 50 100">
|
||
<use xlink:href="/assets/ui-icons.svg#thick-arrow-right-icon"></use>
|
||
</svg>
|
||
</div>
|
||
<span class="pagination-title-wrapper">
|
||
|
||
<h2 class="blog-item-pagination-title"><time class="dt-published date-pagination" datetime="2017-05-22" pubdate>May 22 </time>The Pillars of Squarespace Services</h2>
|
||
</span>
|
||
</a>
|
||
</section>
|
||
|
||
|
||
|
||
|
||
|
||
<h2 class="related-title responsive-padding--top">Related Posts</h2>
|
||
<section id="related" class="blog-item-related clear" data-controller="RelatedPostImages">
|
||
<article id="article-575ec9a9b09f95d77de01b1f" class="blog-list-item entry entry--list entry--related h-entry hentry author-franklin-angulo post-type-text article-index-1 no-main-image" data-item-id="575ec9a9b09f95d77de01b1f" data-item-title="Introducing the Squarespace Engineering Blog">
|
||
<div class="thumbnail-title-wrapper">
|
||
|
||
<div class="entry-title-wrapper">
|
||
<div class="title-bg-wrapper">
|
||
<h2 class="entry-title entry-title--list">
|
||
<a href="/blog/2016/introducing-the-squarespace-engineering-blog" class="u-url" rel="bookmark">
|
||
<time class="dt-published date-callout" datetime="2016-07-22" pubdate>
|
||
<div class="date-wrapper">
|
||
<span class="month">Jul </span><span class="day">22</span>
|
||
</div>
|
||
</time>
|
||
<time class="dt-published date-highlight" datetime="2016-07-22" pubdate>Jul 22 </time>Introducing the Squarespace Engineering Blog
|
||
</a>
|
||
</h2>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="entry-text">
|
||
|
||
|
||
</div>
|
||
|
||
</article><article id="article-5a9957f924a6942a72ebdbe2" class="blog-list-item entry entry--list entry--related h-entry hentry author-xiaomeng-chen post-type-text article-index-2 no-main-image" data-item-id="5a9957f924a6942a72ebdbe2" data-item-title="Continuous Localization at Squarespace">
|
||
<div class="thumbnail-title-wrapper">
|
||
|
||
<div class="entry-title-wrapper">
|
||
<div class="title-bg-wrapper">
|
||
<h2 class="entry-title entry-title--list">
|
||
<a href="/blog/2018/continuous-localization-at-squarespace" class="u-url" rel="bookmark">
|
||
<time class="dt-published date-callout" datetime="2018-03-05" pubdate>
|
||
<div class="date-wrapper">
|
||
<span class="month">Mar </span><span class="day"> 5</span>
|
||
</div>
|
||
</time>
|
||
<time class="dt-published date-highlight" datetime="2018-03-05" pubdate>Mar 5 </time>Continuous Localization at Squarespace
|
||
</a>
|
||
</h2>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="entry-text">
|
||
|
||
|
||
</div>
|
||
|
||
</article><article id="article-5e29c4af6b1ec3264ac7abb9" class="blog-list-item entry entry--list entry--related h-entry hentry author-squarespace-engineering post-type-text article-index-3 no-main-image" data-item-id="5e29c4af6b1ec3264ac7abb9" data-item-title="The Nuts and Bolts with Franklin Angulo">
|
||
<div class="thumbnail-title-wrapper">
|
||
|
||
<div class="entry-title-wrapper">
|
||
<div class="title-bg-wrapper">
|
||
<h2 class="entry-title entry-title--list">
|
||
<a href="/blog/2020/the-nuts-and-bolts-with-franklin-angulo" class="u-url" rel="bookmark">
|
||
<time class="dt-published date-callout" datetime="2020-01-24" pubdate>
|
||
<div class="date-wrapper">
|
||
<span class="month">Jan </span><span class="day">24</span>
|
||
</div>
|
||
</time>
|
||
<time class="dt-published date-highlight" datetime="2020-01-24" pubdate>Jan 24 </time>The Nuts and Bolts with Franklin Angulo
|
||
</a>
|
||
</h2>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="entry-text">
|
||
|
||
|
||
</div>
|
||
|
||
</article>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<footer id="footer" class="site-footer responsive-margin--top responsive-padding--left responsive-padding--right responsive-padding--top responsive-padding--bottom" role="contentinfo">
|
||
<div class="sqs-layout sqs-grid-12 columns-12" data-layout-label="Footer Content" data-type="block-field" data-updated-on="1776362286301" id="footerBlocks"><div class="row sqs-row"><div class="col sqs-col-12 span-12"><div class="row sqs-row"><div class="col sqs-col-3 span-3"><div class="sqs-block markdown-block sqs-block-markdown" data-block-type="44" data-sqsp-block="markdown" id="block-yui_3_17_2_6_1468615304442_27967"><div class="sqs-block-content"><p><a href="https://squarespace.com"><img src="https://static1.squarespace.com/static/56ab961ecbced617ccd2461e/t/57894eb42e69cf797de82a65/1468616372751/logo-1-2.png" alt="https://squarespace.com"></a></p>
|
||
|
||
</div></div></div><div class="col sqs-col-2 span-2"><div class="sqs-block html-block sqs-block-html" data-block-type="2" data-sqsp-block="text" id="block-yui_3_17_2_6_1468615304442_3081"><div class="sqs-block-content">
|
||
|
||
<div class="sqs-html-content" data-sqsp-text-block-content>
|
||
<h3 style="white-space:pre-wrap;">PRODUCTS</h3><p class="" style="white-space:pre-wrap;"><a href="https://www.squarespace.com/domains">Domains</a><br><a href="https://www.squarespace.com/websites">Websites</a><br><a href="https://www.squarespace.com/commerce">Online Stores</a><br><a href="https://www.squarespace.com/google" target="_blank">G Suite</a><br><a href="https://www.squarespace.com/apps" target="_blank">Mobile Apps</a><br><a href="https://www.squarespace.com/logo">Logos</a><br><a href="https://www.squarespace.com/pricing">Pricing</a><br><a href="https://www.squarespace.com/feature-index">Feature Index</a><br><a href="https://www.squarespace.com/login">Login</a></p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div></div><div class="col sqs-col-2 span-2"><div class="sqs-block html-block sqs-block-html" data-block-type="2" data-sqsp-block="text" id="block-yui_3_17_2_6_1468615304442_15479"><div class="sqs-block-content">
|
||
|
||
<div class="sqs-html-content" data-sqsp-text-block-content>
|
||
<h3 style="white-space:pre-wrap;">COMPANY</h3><p class="" style="white-space:pre-wrap;"><a href="https://www.squarespace.com/about/company">About</a><br><a href="https://www.squarespace.com/about/careers">Careers</a><br><a href="https://www.squarespace.com/customers">Customers</a><br><a href="https://www.squarespace.com/press">Press & Media</a><br><a href="https://status.squarespace.com/">Service Status</a><br><a href="https://www.squarespace.com/terms-of-service">Terms of Service</a><br><a href="https://www.squarespace.com/privacy">Privacy Policy</a><br><a href="https://support.squarespace.com/hc/en-us/requests/new">Contact Us</a></p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div></div><div class="col sqs-col-2 span-2"><div class="sqs-block html-block sqs-block-html" data-block-type="2" data-sqsp-block="text" id="block-yui_3_17_2_6_1468615304442_16477"><div class="sqs-block-content">
|
||
|
||
<div class="sqs-html-content" data-sqsp-text-block-content>
|
||
<h3 style="white-space:pre-wrap;">COMMUNITY</h3><p class="" style="white-space:pre-wrap;"><a href="https://support.squarespace.com/">Help & Support</a><br><a href="https://answers.squarespace.com/">Answers</a><br><a href="https://workshops.squarespace.com/">Workshops</a><br><a href="https://specialists.squarespace.com/">Specialists</a><br><a href="https://developers.squarespace.com/">Developers</a><br><a href="https://circle.squarespace.com/">Circle</a></p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div></div><div class="col sqs-col-3 span-3"><div class="sqs-block html-block sqs-block-html" data-block-type="2" data-sqsp-block="text" id="block-yui_3_17_2_6_1468615304442_21908"><div class="sqs-block-content">
|
||
|
||
<div class="sqs-html-content" data-sqsp-text-block-content>
|
||
<h3 style="white-space:pre-wrap;">FOLLOW</h3><p class="" style="white-space:pre-wrap;"><a href="http://blog.squarespace.com" target="_blank">Squarespace Blog</a><br><a href="http://engineering.squarespace.com">Engineering Blog</a><br><a href="https://instagram.com/squarespace">Instagram</a><br><a href="https://facebook.com/squarespace">Facebook</a><br><a href="https://twitter.com/squarespace">Twitter</a></p>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div></div></div></div></div></div></div>
|
||
<div id="footerNavWrapper" class="nav-wrapper footer-nav">
|
||
|
||
|
||
</div>
|
||
</footer>
|
||
|
||
</div>
|
||
|
||
<div id="mobileBar" class="mobile-bar" data-controller="MobileOffset">
|
||
<a class="nav-toggle-label nav-toggle-label--mobile flex-item" id="navToggleMobile" data-controller="NavToggle">
|
||
<svg class="Icon Icon--hamburger nav-toggle-label-icon" viewBox="0 0 26 18">
|
||
<use class="use--odd" xlink:href="/assets/ui-icons.svg#hamburger-icon--odd"></use>
|
||
<use class="use--even" xlink:href="/assets/ui-icons.svg#hamburger-icon--even"></use>
|
||
</svg>
|
||
</a><!--
|
||
--><div class="social-ellipsis social-ellipsis--mobile flex-item" id="socialEllipsisMobile" data-controller="SocialToggle">
|
||
<svg class="ellipsis-icon" viewBox="0 0 25 6">
|
||
<use xlink:href="/assets/ui-icons.svg#ellipsis-icon"></use>
|
||
</svg>
|
||
<svg class="Icon Icon--close social-close-icon" viewBox="0 0 18 18">
|
||
<use xlink:href="/assets/ui-icons.svg#close-icon-line"></use>
|
||
</svg>
|
||
</div><!--
|
||
--><div class="search-cart--mobile flex-item">
|
||
<a href="/search" rel="search" class="header-search header-search--mobile" data-controller="SearchToggle">
|
||
<svg class="Icon Icon--search search-icon" viewBox="0 0 20 20">
|
||
<use xlink:href="/assets/ui-icons.svg#search-icon"></use>
|
||
</svg>
|
||
<svg class="Icon Icon--close search-close-icon" viewBox="0 0 18 18">
|
||
<use xlink:href="/assets/ui-icons.svg#close-icon-line"></use>
|
||
</svg>
|
||
</a>
|
||
|
||
|
||
</div><!--
|
||
-->
|
||
</div>
|
||
|
||
<script src="https://static1.squarespace.com/static/ta/54d39057e4b01a0da310c80f/4948/scripts/site-bundle.js" type="text/javascript"></script>
|
||
<div id="consent_blackbar"></div>
|
||
|
||
<script>
|
||
/* Replaces Header Logo with SVG */
|
||
|
||
var header = document.getElementById('header')
|
||
var headerLogoImg = header.querySelector('.logo-image img')
|
||
if (headerLogoImg) {
|
||
headerLogoImg.src = 'https://engineering.squarespace.com/s/logo.svg'
|
||
}
|
||
|
||
|
||
/* Replaces Footer Logo with SVG */
|
||
var footer = document.getElementById('footer')
|
||
var footerLogoImg = footer.querySelector('a[href$="squarespace.com"] img')
|
||
if (footerLogoImg) {
|
||
footerLogoImg.style.maxWidth = '34px'
|
||
footerLogoImg.src = 'https://engineering.squarespace.com/s/footer-logo.svg'
|
||
}
|
||
</script>
|
||
<script>
|
||
var pastScrollTop = document.body.scrollTop;
|
||
var mobileBar = document.getElementById('mobileBar');
|
||
window.addEventListener('scroll', function(e) {
|
||
if (0 > (document.body.scrollTop - pastScrollTop) || document.body.scrollTop < 50) {
|
||
mobileBar.classList.remove('tucked-away');
|
||
} else {
|
||
mobileBar.classList.add('tucked-away');
|
||
}
|
||
|
||
pastScrollTop = document.body.scrollTop;
|
||
});
|
||
</script>
|
||
<script>
|
||
// add link to blog item footer
|
||
var footerMeta = document.querySelector('.footer-meta');
|
||
if (footerMeta) {
|
||
var container = document.createElement('div');
|
||
container.innerHTML = '<p style="text-align:center;white-space:pre-wrap">Inspired by what we do here at Squarespace?<br><a href="https://www.squarespace.com/careers/engineering" style="text-decoration:underline">Take a look at our open roles!</a></p>';
|
||
footerMeta.appendChild(container);
|
||
}
|
||
|
||
</script>
|
||
<script>
|
||
// add year to date/time
|
||
var dateCallout = document.querySelector('.date-callout');
|
||
var dateWrapper = document.querySelector('.blog-view-item .date-wrapper');
|
||
if (dateWrapper && dateCallout) {
|
||
var year = parseInt(dateCallout.dateTime, 10);
|
||
if (year > 2000 && year < 3000) {
|
||
dateWrapper.innerHTML = dateWrapper.innerHTML.trim();
|
||
var yearNode = document.createElement('span');
|
||
yearNode.classList.add('year');
|
||
yearNode.innerHTML = ', ' + year;
|
||
dateWrapper.appendChild(yearNode);
|
||
}
|
||
}
|
||
</script><script data-sqs-type="imageloader-bootstrapper">if(window.ImageLoader) window.ImageLoader.bootstrap({}, document);</script><script>Squarespace.afterBodyLoad(Y);</script><svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="display:none" data-usage="social-icons-svg"><symbol id="facebook-unauth-icon" viewBox="0 0 64 64"><path d="M34.1,47V33.3h4.6l0.7-5.3h-5.3v-3.4c0-1.5,0.4-2.6,2.6-2.6l2.8,0v-4.8c-0.5-0.1-2.2-0.2-4.1-0.2 c-4.1,0-6.9,2.5-6.9,7V28H24v5.3h4.6V47H34.1z"/></symbol><symbol id="facebook-unauth-mask" viewBox="0 0 64 64"><path d="M0,0v64h64V0H0z M39.6,22l-2.8,0c-2.2,0-2.6,1.1-2.6,2.6V28h5.3l-0.7,5.3h-4.6V47h-5.5V33.3H24V28h4.6V24 c0-4.6,2.8-7,6.9-7c2,0,3.6,0.1,4.1,0.2V22z"/></symbol><symbol id="twitter-unauth-icon" viewBox="0 0 64 64"><path d="M48,22.1c-1.2,0.5-2.4,0.9-3.8,1c1.4-0.8,2.4-2.1,2.9-3.6c-1.3,0.8-2.7,1.3-4.2,1.6 C41.7,19.8,40,19,38.2,19c-3.6,0-6.6,2.9-6.6,6.6c0,0.5,0.1,1,0.2,1.5c-5.5-0.3-10.3-2.9-13.5-6.9c-0.6,1-0.9,2.1-0.9,3.3 c0,2.3,1.2,4.3,2.9,5.5c-1.1,0-2.1-0.3-3-0.8c0,0,0,0.1,0,0.1c0,3.2,2.3,5.8,5.3,6.4c-0.6,0.1-1.1,0.2-1.7,0.2c-0.4,0-0.8,0-1.2-0.1 c0.8,2.6,3.3,4.5,6.1,4.6c-2.2,1.8-5.1,2.8-8.2,2.8c-0.5,0-1.1,0-1.6-0.1c2.9,1.9,6.4,2.9,10.1,2.9c12.1,0,18.7-10,18.7-18.7 c0-0.3,0-0.6,0-0.8C46,24.5,47.1,23.4,48,22.1z"/></symbol><symbol id="twitter-unauth-mask" viewBox="0 0 64 64"><path d="M0,0v64h64V0H0z M44.7,25.5c0,0.3,0,0.6,0,0.8C44.7,35,38.1,45,26.1,45c-3.7,0-7.2-1.1-10.1-2.9 c0.5,0.1,1,0.1,1.6,0.1c3.1,0,5.9-1,8.2-2.8c-2.9-0.1-5.3-2-6.1-4.6c0.4,0.1,0.8,0.1,1.2,0.1c0.6,0,1.2-0.1,1.7-0.2 c-3-0.6-5.3-3.3-5.3-6.4c0,0,0-0.1,0-0.1c0.9,0.5,1.9,0.8,3,0.8c-1.8-1.2-2.9-3.2-2.9-5.5c0-1.2,0.3-2.3,0.9-3.3 c3.2,4,8.1,6.6,13.5,6.9c-0.1-0.5-0.2-1-0.2-1.5c0-3.6,2.9-6.6,6.6-6.6c1.9,0,3.6,0.8,4.8,2.1c1.5-0.3,2.9-0.8,4.2-1.6 c-0.5,1.5-1.5,2.8-2.9,3.6c1.3-0.2,2.6-0.5,3.8-1C47.1,23.4,46,24.5,44.7,25.5z"/></symbol></svg>
|
||
|
||
</body>
|
||
</html>
|