CINXE.COM
Tech by Nimbus
<!doctype html> <html xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en-US" > <head> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="initial-scale=1"> <!-- This is Squarespace. --><!-- pepper-apricots-6jsk --> <base href=""> <meta charset="utf-8" /> <title>Tech by Nimbus</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/5cfec03d965c11000125e9e1/1591979912340-AKFGQOR4XZCN46QN6PXP/favicon.ico?format=100w"/> <link rel="canonical" href="https://www.adsbynimbus.com/tech-blog"/> <meta property="og:site_name" content="Nimbus: Maximize your Programmatic Ad Revenue"/> <meta property="og:title" content="Tech by Nimbus"/> <meta property="og:url" content="https://www.adsbynimbus.com/tech-blog"/> <meta property="og:type" content="website"/> <meta property="og:description" content="Learn about the tech and culture of the engineering team behind Timehop and Nimbus — a mobile app used by millions, and ad tech maximizing publisher revenue."/> <meta property="og:image" content="http://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/6242156ab3e4c6016a40ab9a/1648498028656/nimbus.png?format=1500w"/> <meta property="og:image:width" content="600"/> <meta property="og:image:height" content="341"/> <meta itemprop="name" content="Tech by Nimbus"/> <meta itemprop="url" content="https://www.adsbynimbus.com/tech-blog"/> <meta itemprop="description" content="Learn about the tech and culture of the engineering team behind Timehop and Nimbus — a mobile app used by millions, and ad tech maximizing publisher revenue."/> <meta itemprop="thumbnailUrl" content="http://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/6242156ab3e4c6016a40ab9a/1648498028656/nimbus.png?format=1500w"/> <link rel="image_src" href="http://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/6242156ab3e4c6016a40ab9a/1648498028656/nimbus.png?format=1500w" /> <meta itemprop="image" content="http://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/6242156ab3e4c6016a40ab9a/1648498028656/nimbus.png?format=1500w"/> <meta name="twitter:title" content="Tech by Nimbus"/> <meta name="twitter:image" content="http://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/6242156ab3e4c6016a40ab9a/1648498028656/nimbus.png?format=1500w"/> <meta name="twitter:url" content="https://www.adsbynimbus.com/tech-blog"/> <meta name="twitter:card" content="summary"/> <meta name="twitter:description" content="Learn about the tech and culture of the engineering team behind Timehop and Nimbus — a mobile app used by millions, and ad tech maximizing publisher revenue."/> <meta name="description" content="Learn about the tech and culture of the engineering team behind Timehop and Nimbus — a mobile app used by millions, and ad tech maximizing publisher revenue." /> <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/fkGYrBOYu5LYYLjbdHwlpLYsYkMK8Zf2vZMvZhcoHMMfen6IfFHN4UJLFRbh52jhWDmRZcmRw2Fq5QjujDIUw2M3wQJuZQ88ws7jMkG0jAFu-WsoShFGZAsude80ZkoRdhXCHKoyjamTiY8Djhy8ZYmC-Ao1Oco8if37OcBDOcu8OfG0Sem3SemkOAB3Sc8RdasDOQZ7ShC0SaBujW48Sagyjh90jhNlOfG0SaBujW48SagyjhmDjhy8ZYmC-Ao1OcFzdPUyjamTiY8Djhy8ZYmC-Ao1OcFzdPUyjamTiY8Djhy8ZYmC-Ao1Oco8ifUyZYFKpAoTdA4uSkoRdhXCjWw0dA9CdeNRjAUGdaFXOYg8SYg8SKuySY4TjhNXSkXh-1FnO1FUiABkZWF3jAF8OcFzdPUDSWmyScmDSeBRZWFR-emqiAUTdcS0jhNlOYiaikoyjamTiY8Djhy8ZYmC-Ao1OcFzdPUaiaS0jAFu-WsoShFGZAsude80Zko0ZWbCiaiaOcBqSh4odc8lj1mDOcFzdPUaiaS0jWw0dA9CiaiaO1g8SYg8SKuySY4TjhNXSkXh-1FnO1FUiABkZWF3jAF8OcFzdPUaiaS0SaBujW48SagyjhmDjhy8ZYmC-Ao1OcFzdPJwSY4zpe8ljPu0daZyH6qJ73IbMg6gJMJ7fbRKHyMMeMw6MKG4fHvgIMMjgfMfH6qJnMIbMg6OJMJ7fbKOMsMMeMS6MKG4f5w7IMMj2PMfH6qJ7bIbMg6JJMJ7fbK3MsMMeMt6MKG4fJ3gIMMjIPMfqMet7lrbg6.js"></script> <script type="text/javascript">try{Typekit.load();}catch(e){}</script> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,300;1,700"><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 type="text/javascript">SQUARESPACE_ROLLUPS = {};</script> <script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/extract-css-runtime-63f8ee1606302f1d-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-extract_css_runtime');</script> <script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/extract-css-runtime-63f8ee1606302f1d-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-b60fc53b12f6d6c5-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-b60fc53b12f6d6c5-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-898e00d55a747fb4-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-cldr_resource_pack');</script> <script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/cldr-resource-pack-898e00d55a747fb4-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-51880dc0d7a0158c-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-common_vendors_stable');</script> <script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/common-vendors-stable-51880dc0d7a0158c-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-5e156bbba848f573-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-common_vendors');</script> <script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/common-vendors-5e156bbba848f573-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/common-94e4260a2c888c2a-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-common');</script> <script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/common-94e4260a2c888c2a-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/user-account-core-dd6921f788888942-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-user_account_core');</script> <script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/user-account-core-dd6921f788888942-min.en-US.js" ></script><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].css = ["//assets.squarespace.com/universal/styles-compressed/user-account-core-32dec2abb821f895-min.en-US.css"]; })(SQUARESPACE_ROLLUPS, 'squarespace-user_account_core');</script> <link rel="stylesheet" type="text/css" href="//assets.squarespace.com/universal/styles-compressed/user-account-core-32dec2abb821f895-min.en-US.css"><script>(function(rollups, name) { if (!rollups[name]) { rollups[name] = {}; } rollups[name].js = ["//assets.squarespace.com/universal/scripts-compressed/performance-9d05b185e76f83f8-min.en-US.js"]; })(SQUARESPACE_ROLLUPS, 'squarespace-performance');</script> <script crossorigin="anonymous" src="//assets.squarespace.com/universal/scripts-compressed/performance-9d05b185e76f83f8-min.en-US.js" defer ></script><script data-name="static-context">Static = window.Static || {}; Static.SQUARESPACE_CONTEXT = {"betaFeatureFlags":["order_status_page_checkout_landing_enabled","marketing_automations","i18n_beta_website_locales","campaigns_discount_section_in_automations","marketing_landing_page","campaigns_discount_section_in_blasts","contacts_and_campaigns_redesign","campaigns_new_image_layout_picker","campaigns_import_discounts","campaigns_thumbnail_layout"],"facebookAppId":"314192535267336","facebookApiVersion":"v6.0","rollups":{"squarespace-announcement-bar":{"js":"//assets.squarespace.com/universal/scripts-compressed/announcement-bar-a58f42dd1688607c-min.en-US.js"},"squarespace-audio-player":{"css":"//assets.squarespace.com/universal/styles-compressed/audio-player-5d864aadea1060d1-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/audio-player-0bd7c130e3073fcd-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-770996818a620a62-min.en-US.js"},"squarespace-calendar-block-renderer":{"css":"//assets.squarespace.com/universal/styles-compressed/calendar-block-renderer-b72d08ba4421f5a0-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/calendar-block-renderer-2ec94d8411bb5ead-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-2142d2f8231d73c4-min.en-US.js"},"squarespace-comments":{"css":"//assets.squarespace.com/universal/styles-compressed/comments-01eecf660cca1c8d-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/comments-e716b8edad917b22-min.en-US.js"},"squarespace-custom-css-popup":{"css":"//assets.squarespace.com/universal/styles-compressed/custom-css-popup-8b4b7be89276a2dc-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/custom-css-popup-01ee7f51965f1fea-min.en-US.js"},"squarespace-dialog":{"css":"//assets.squarespace.com/universal/styles-compressed/dialog-f9093f2d526b94df-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/dialog-8bfdf734a5337807-min.en-US.js"},"squarespace-events-collection":{"css":"//assets.squarespace.com/universal/styles-compressed/events-collection-b72d08ba4421f5a0-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/events-collection-51afa8cc48b69098-min.en-US.js"},"squarespace-form-rendering-utils":{"js":"//assets.squarespace.com/universal/scripts-compressed/form-rendering-utils-e4f78d87b802750e-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-40317f9ade4e10c9-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-91bf179640922449-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-60f9abd094f76732-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-bd68b525380ddc4e-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-0ea3fc72cc553163-min.en-US.js"},"squarespace-product-quick-view":{"css":"//assets.squarespace.com/universal/styles-compressed/product-quick-view-0ba5bac716923b8e-min.en-US.css","js":"//assets.squarespace.com/universal/scripts-compressed/product-quick-view-c3238e43da358948-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-6d4891a84922348b-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-dc2433d1c2d992d5-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-6146bdac74a24a7f-min.en-US.js"},"squarespace-search-preview":{"js":"//assets.squarespace.com/universal/scripts-compressed/search-preview-b063008493f0f2da-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-0ce9c692006369a3-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-95498e47d484525e-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-ae71d877718a0b75-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-175fdb432d56e3c3-min.en-US.js"}},"pageType":1,"website":{"id":"5cfec03d965c11000125e9e1","identifier":"pepper-apricots-6jsk","websiteType":1,"contentModifiedOn":1738780511870,"cloneable":false,"hasBeenCloneable":false,"developerMode":true,"siteStatus":{},"language":"en-US","timeZone":"America/New_York","machineTimeZoneOffset":-14400000,"timeZoneOffset":-14400000,"timeZoneAbbr":"EDT","siteTitle":"Nimbus: \uFEFFMaximize your Programmatic Ad Revenue","fullSiteTitle":"Tech by Nimbus","siteDescription":"","logoImageId":"623df49d0b06f17a61f6c2ba","shareButtonOptions":{"8":true,"7":true,"6":true,"3":true,"2":true,"1":true,"4":true},"logoImageUrl":"//images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/7fa96dc4-4ed6-43dd-9225-980cb3ab7e65/logo-4x.png","authenticUrl":"https://www.adsbynimbus.com","internalUrl":"https://pepper-apricots-6jsk.squarespace.com","baseUrl":"https://www.adsbynimbus.com","primaryDomain":"www.adsbynimbus.com","sslSetting":3,"isHstsEnabled":true,"typekitId":"","statsMigrated":false,"imageMetadataProcessingEnabled":false,"captchaSettings":{"siteKey":"","enabledForDonations":false},"showOwnerLogin":false},"websiteSettings":{"id":"5cfec03d965c11000125e9e3","websiteId":"5cfec03d965c11000125e9e1","subjects":[],"country":"US","state":"NY","simpleLikingEnabled":true,"mobileInfoBarSettings":{"isContactEmailEnabled":false,"isContactPhoneNumberEnabled":false,"isLocationEnabled":false,"isBusinessHoursEnabled":false},"announcementBarSettings":{"style":1,"text":"<p class=\"\" style=\"white-space:pre-wrap;\">We\u2019re Hiring! The Nimbus team is growing\u2026Find out more & Apply here!</p>","clickthroughUrl":{"url":"https://jobs.lever.co/timehop/","newWindow":false}},"commentLikesAllowed":true,"commentAnonAllowed":true,"commentThreaded":true,"commentApprovalRequired":false,"commentAvatarsOn":true,"commentSortType":2,"commentFlagThreshold":0,"commentFlagsAllowed":true,"commentEnableByDefault":true,"commentDisableAfterDaysDefault":0,"disqusShortname":"","commentsEnabled":false,"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":false,"sameAsRetailLocation":false,"merchandisingSettings":{"scarcityEnabledOnProductItems":false,"scarcityEnabledOnProductBlocks":false,"scarcityMessageType":"DEFAULT_SCARCITY_MESSAGE","scarcityThreshold":10,"multipleQuantityAllowedForServices":true,"restockNotificationsEnabled":false,"restockNotificationsSuccessText":"","restockNotificationsMailingListSignUpEnabled":false,"relatedProductsEnabled":false,"relatedProductsOrdering":"random","soldOutVariantsDropdownDisabled":false,"productComposerOptedIn":false,"productComposerABTestOptedOut":false,"productReviewsEnabled":false,"displayImportedProductReviewsEnabled":false,"hasOptedToCollectNativeReviews":false},"minimumOrderSubtotalEnabled":false,"isLive":false,"multipleQuantityAllowedForServices":true},"useEscapeKeyToLogin":false,"ssBadgeType":1,"ssBadgePosition":4,"ssBadgeVisibility":1,"ssBadgeDevices":1,"pinterestOverlayOptions":{"mode":"disabled"},"userAccountsSettings":{"loginAllowed":false,"signupAllowed":false}},"cookieSettings":{"isCookieBannerEnabled":false,"isRestrictiveCookiePolicyEnabled":false,"cookieBannerText":"","cookieBannerTheme":"","cookieBannerVariant":"","cookieBannerPosition":"","cookieBannerCtaVariant":"","cookieBannerCtaText":"","cookieBannerAcceptType":"OPT_IN","cookieBannerOptOutCtaText":"","cookieBannerHasOptOut":false,"cookieBannerHasManageCookies":true,"cookieBannerManageCookiesLabel":"","cookieBannerSavedPreferencesText":"","cookieBannerSavedPreferencesLayout":"PILL"},"websiteCloneable":false,"collection":{"title":"Tech by Nimbus","id":"5e1f8cf294e2641621dd85bb","fullUrl":"/tech-blog","type":1,"permissionType":1},"subscribed":false,"appDomain":"squarespace.com","templateTweakable":true,"tweakJSON":{"outerPadding":"84px","pagePadding":"33px","product-gallery-auto-crop":"true","product-image-auto-crop":"false","topPadding":"0px","tweak-v1-related-products-title-spacing":"50px"},"templateId":"65f0b5c01f660121e5d2c9c7","templateVersion":"7","pageFeatures":[1,2,4],"gmRenderKey":"QUl6YVN5Q0JUUk9xNkx1dkZfSUUxcjQ2LVQ0QWVUU1YtMGQ3bXk4","templateScriptsRootUrl":"https://static1.squarespace.com/static/ta/5cfec03d965c11000125e9e1/0/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"};</script><script>Squarespace.load(window);</script> <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="https://www.adsbynimbus.com/tech-blog?format=rss" /> <script type="application/ld+json">{"url":"https://www.adsbynimbus.com","name":"Nimbus: \uFEFFMaximize your Programmatic Ad Revenue","description":"","image":"//images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/7fa96dc4-4ed6-43dd-9225-980cb3ab7e65/logo-4x.png","@context":"http://schema.org","@type":"WebSite"}</script><link rel="stylesheet" type="text/css" href="https://static1.squarespace.com/static/sitecss/5cfec03d965c11000125e9e1/1158/65f0b5c01f660121e5d2c9c7/65f0b5c01f660121e5d2c9ca/0/site.css"/><script>Static.COOKIE_BANNER_CAPABLE = true;</script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-TJ0L7KN1HX"></script><script>window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('set', 'developer_id.dZjQwMz', true);gtag('config', 'G-TJ0L7KN1HX');</script><!-- End of Squarespace Headers --> <script src="https://static1.squarespace.com/static/ta/5cfec03d965c11000125e9e1/0/scripts/site-bundle.js" type="text/javascript"></script> </head> <body class="show-products-category-navigation page-borders-thick canvas-style-masthead-logo-left header-subtitle-none banner-alignment-center blog-layout-center project-layout-left-sidebar thumbnails-on-open-page-show-all social-icon-style-round hide-page-title hide-article-author 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 product-list-titles-under product-list-alignment-center product-item-size-32-standard product-gallery-size-11-square product-gallery-auto-crop show-product-price show-product-item-nav product-social-sharing tweak-v1-related-products-image-aspect-ratio-11-square tweak-v1-related-products-details-alignment-center newsletter-style-dark opentable-style-light small-button-style-solid small-button-shape-square medium-button-style-solid medium-button-shape-rounded 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-square 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 native-currency-code-usd collection-5e1f8cf294e2641621dd85bb collection-type-blog collection-layout-default view-list mobile-style-available logo-image" id="collection-5e1f8cf294e2641621dd85bb"> <div id="canvas"> <div id="mobileNav" class=""> <div class="wrapper"> <nav class="main-nav mobileNav"><ul> <li class="page-collection"> <a href="/nimbus-pro">Nimbus Pro</a> </li> <li class="page-collection"> <a href="/demo">Request a demo</a> </li> <li class="page-collection"> <a href="/tumblr-case-study">Tumblr Case Study</a> </li> <li class="page-collection"> <a href="/weatherbug-case-study">Weatherbug Case Study</a> </li> <li class="page-collection"> <a href="/kidoodle-case-study">Kidoodle Case Study</a> </li> <li class="page-collection"> <a href="/imgur-case-study">Imgur Case Study</a> </li> <li class="page-collection"> <a href="/demand-partners">Request an Integration</a> </li> <li class="page-collection"> <a href="/demand-loves-nimbus">Why Nimbus?</a> </li> <li class="page-collection"> <a href="/nimbus-learning-center">Learning Center</a> </li> <li class="page-collection"> <a href="/security-compliance">Security & Compliance</a> </li> <li class="blog-collection active-link"> <a href="/tech-blog">Blog</a> </li> <li class=" external-link"> <a href="https://dashboard.adsbynimbus.com/#/login" target="_blank">Sign In</a> </li> </ul> </nav> </div> </div> <div id="mobileMenuLink"><a>Menu</a></div> <header id="header" class="clear"> <div id="upper-logo"> <h1 class="logo" data-content-field="site-title"> <a href="/"><img src="//images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/7fa96dc4-4ed6-43dd-9225-980cb3ab7e65/logo-4x.png?format=1500w" alt="Nimbus: Maximize your Programmatic Ad Revenue" /></a> </h1> </div> <script type="module"> if (parseInt(Y.one('body').getComputedStyle('width'),10) <= 640) { Y.use('squarespace-ui-base', function(Y) { Y.one("#upper-logo .logo").plug(Y.Squarespace.TextShrink, { parentEl: Y.one('#upper-logo') }); }); } </script> <div class="site-info" data-content-field="business-information"> <div class="site-address">Street Address</div> <div class="site-city-state">City, State, Zip</div> <div class="site-phone">Phone Number</div> </div> <div class="site-tag-line"> </div> <div class="custom-info"> <div class="sqs-layout sqs-grid-12 columns-12" data-layout-label="Header Subtitle: Custom Content" data-type="block-field" data-updated-on="1381761023501" id="customInfoBlock"><div class="row sqs-row"><div class="col sqs-col-12 span-12"><div class="sqs-block html-block sqs-block-html" data-block-type="2" id="block-81eee4bbda3d9efd0834"><div class="sqs-block-content"> <div class="sqs-html-content"> <p class="text-align-center">Your Custom Text Here</p> </div> </div></div></div></div></div> </div> <div id="lower-logo"> <h1 class="logo" data-content-field="site-title"><a href="/"><img src="//images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/7fa96dc4-4ed6-43dd-9225-980cb3ab7e65/logo-4x.png?format=1500w" alt="Nimbus: Maximize your Programmatic Ad Revenue" /></a></h1> </div> <script type="module"> Y.use('squarespace-ui-base', function(Y) { Y.one("#lower-logo .logo").plug(Y.Squarespace.TextShrink, { parentEl: Y.one('#lower-logo') }); }); </script> <div id="topNav"> <nav class="main-nav" data-content-field="navigation"> <ul> <li class="page-collection"> <a href="/nimbus-pro">Nimbus Pro</a> </li> <li class="page-collection"> <a href="/demo">Request a demo</a> </li> <li class="page-collection"> <a href="/tumblr-case-study">Tumblr Case Study</a> </li> <li class="page-collection"> <a href="/weatherbug-case-study">Weatherbug Case Study</a> </li> <li class="page-collection"> <a href="/kidoodle-case-study">Kidoodle Case Study</a> </li> <li class="page-collection"> <a href="/imgur-case-study">Imgur Case Study</a> </li> <li class="page-collection"> <a href="/demand-partners">Request an Integration</a> </li> <li class="page-collection"> <a href="/demand-loves-nimbus">Why Nimbus?</a> </li> <li class="page-collection"> <a href="/nimbus-learning-center">Learning Center</a> </li> <li class="page-collection"> <a href="/security-compliance">Security & Compliance</a> </li> <li class="blog-collection active-link"> <a href="/tech-blog">Blog</a> </li> <li class=" external-link"> <a href="https://dashboard.adsbynimbus.com/#/login" target="_blank">Sign In</a> </li> </ul> <div class="page-divider"></div> </nav> </div> </header> <div class="page-divider top-divider"></div> <!-- // page image or divider --> <section id="page" class="clear" role="main" data-content-field="main-content" data-collection-id="5e1f8cf294e2641621dd85bb" data-collection-id="5e1f8cf294e2641621dd85bb" data-edit-main-image="Banner" > <!-- // CATEGORY NAV --> <div class="article-list hfeed"> <article class="hentry author-guest-user post-type-text article-index-1" id="article-630cd2e46255bc7d386d4a9a" data-item-id="630cd2e46255bc7d386d4a9a"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/nimbus-is-headed-to-dmexco-22">Nimbus is headed to DMEXCO 22!</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2022-08-29" itemprop="datePublished" pubdate><a href="/tech-blog/nimbus-is-headed-to-dmexco-22">August 29, 2022</a></time></span> <span class="author"><a href="/tech-blog?author=6421c628483c0c49c7d66cf2" rel="author">Guest User</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">We’re excited to see you there! Reach out to David Leviev and Adam Gray from the Nimbus team to hear about everything we’re cooking up for CTV and InApp monetization and what it could mean for you.</p> <a class="read-more" href="/tech-blog/nimbus-is-headed-to-dmexco-22">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="" data-asset-url="https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/5e1f8cf294e2641621dd85bb/630cd2e46255bc7d386d4a9a/1661784883744/" data-record-type="1" data-full-url="/tech-blog/nimbus-is-headed-to-dmexco-22" data-title="Nimbus is headed to DMEXCO 22!"></span> <span class="sqs-simple-like" data-item-id="630cd2e46255bc7d386d4a9a" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry author-guest-user post-type-text article-index-2" id="article-62d047e11b69b639d03f7a8d" data-item-id="62d047e11b69b639d03f7a8d"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/how-timehop-developed-the-world-class-ad-platform-nimbus-with-support-from-aws">How Timehop Developed the World Class Ad Platform Nimbus with Support from AWS</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2022-07-14" itemprop="datePublished" pubdate><a href="/tech-blog/how-timehop-developed-the-world-class-ad-platform-nimbus-with-support-from-aws">July 14, 2022</a></time></span> <span class="author"><a href="/tech-blog?author=6421c628483c0c49c7d66cf2" rel="author">Guest User</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">We partnered with AWS to tell the story about how we grew from memories to moneitization.</p> <a class="read-more" href="/tech-blog/how-timehop-developed-the-world-class-ad-platform-nimbus-with-support-from-aws">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="" data-asset-url="https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/5e1f8cf294e2641621dd85bb/62d047e11b69b639d03f7a8d/1657819202599/" data-record-type="1" data-full-url="/tech-blog/how-timehop-developed-the-world-class-ad-platform-nimbus-with-support-from-aws" data-title="How Timehop Developed the World Class Ad Platform Nimbus with Support from AWS"></span> <span class="sqs-simple-like" data-item-id="62d047e11b69b639d03f7a8d" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-nimbus tag-openrtb author-adam-gray post-type-text article-index-3" id="article-6180458c9d560b4ca26cf6e6" data-item-id="6180458c9d560b4ca26cf6e6"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/nimbus-partners-with-pangle">Nimbus Partners with Pangle</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2021-11-01" itemprop="datePublished" pubdate><a href="/tech-blog/nimbus-partners-with-pangle">November 1, 2021</a></time></span> <span class="author"><a href="/tech-blog?author=5ef21690f8af9640ffa2bd0f" rel="author">Adam Gray</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">Nimbus partners with Pangle to expand our broad network of demand partners and further maximize revenue for our app publishers.</p> <a class="read-more" href="/tech-blog/nimbus-partners-with-pangle">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/OpenRTB" rel="tag">OpenRTB</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498081522-PUURXAL7ZP3YIYW0SD72" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498081522-PUURXAL7ZP3YIYW0SD72/nimbus.png" data-record-type="1" data-full-url="/tech-blog/nimbus-partners-with-pangle" data-title="Nimbus Partners with Pangle"></span> <span class="sqs-simple-like" data-item-id="6180458c9d560b4ca26cf6e6" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-timehop tag-qaautomation author-alex-rose post-type-text article-index-4" id="article-5fd24a395e9bdb0390bd3363" data-item-id="5fd24a395e9bdb0390bd3363"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/automated-qa-for-mobile-apps">Automated QA for Mobile Apps</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-12-10" itemprop="datePublished" pubdate><a href="/tech-blog/automated-qa-for-mobile-apps">December 10, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5fd25bba4857494b1bea1605" rel="author">Alex Rose</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">How to prepare and overcome some of the most difficult challenges a mobile QA automation engineer will face.</p> <a class="read-more" href="/tech-blog/automated-qa-for-mobile-apps">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Timehop" rel="tag">Timehop</a>, <a href="/tech-blog/tag/QAAutomation" rel="tag">QAAutomation</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498119372-ZGXU4F5OUU7HAAWQTGBZ" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498119372-ZGXU4F5OUU7HAAWQTGBZ/nimbus.png" data-record-type="1" data-full-url="/tech-blog/automated-qa-for-mobile-apps" data-title="Automated QA for Mobile Apps"></span> <span class="sqs-simple-like" data-item-id="5fd24a395e9bdb0390bd3363" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-nimbus tag-kotlin tag-multiplatform tag-github tag-actions tag-android author-jason-sznol post-type-text article-index-5" id="article-5fc512ade18c5c478e9bcc6e" data-item-id="5fc512ade18c5c478e9bcc6e"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/kotlin-multiplatform-and-github-actions">Kotlin Multiplatform and Github Actions</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-11-30" itemprop="datePublished" pubdate><a href="/tech-blog/kotlin-multiplatform-and-github-actions">November 30, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5e5d37eff6db8a391c4d8ea6" rel="author">Jason Sznol</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">A step by step guide for setting up a Kotlin Multiplatform Mobile 1.4 shared library publication to Github Packages using Github Actions, and integrating into an existing Android app.</p> <a class="read-more" href="/tech-blog/kotlin-multiplatform-and-github-actions">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/Kotlin" rel="tag">Kotlin</a>, <a href="/tech-blog/tag/Multiplatform" rel="tag">Multiplatform</a>, <a href="/tech-blog/tag/Github" rel="tag">Github</a>, <a href="/tech-blog/tag/Actions" rel="tag">Actions</a>, <a href="/tech-blog/tag/Android" rel="tag">Android</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498155696-JOPT8GL1FSCJXBWQTR64" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498155696-JOPT8GL1FSCJXBWQTR64/nimbus.png" data-record-type="1" data-full-url="/tech-blog/kotlin-multiplatform-and-github-actions" data-title="Kotlin Multiplatform and Github Actions"></span> <span class="sqs-simple-like" data-item-id="5fc512ade18c5c478e9bcc6e" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-timehop tag-nimbus tag-data tag-elasticsearch author-mark-laczynski post-type-text article-index-6" id="article-5f7c40747e5e054ca08434ab" data-item-id="5f7c40747e5e054ca08434ab"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/getting-started-with-elasticsearch">Getting Started with ElasticSearch</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-10-06" itemprop="datePublished" pubdate><a href="/tech-blog/getting-started-with-elasticsearch">October 6, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5f7c48535ec0ad374a8f356f" rel="author">Mark Laczynski</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">Learn how to prepare a production-ready ElasticSearch cluster that can consume time series data end users can report on with Kibana.</p> <a class="read-more" href="/tech-blog/getting-started-with-elasticsearch">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Timehop" rel="tag">Timehop</a>, <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/Data" rel="tag">Data</a>, <a href="/tech-blog/tag/ElasticSearch" rel="tag">ElasticSearch</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498182563-CNNB2BYJ4CHAFSUYQOJ7" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498182563-CNNB2BYJ4CHAFSUYQOJ7/nimbus.png" data-record-type="1" data-full-url="/tech-blog/getting-started-with-elasticsearch" data-title="Getting Started with ElasticSearch"></span> <span class="sqs-simple-like" data-item-id="5f7c40747e5e054ca08434ab" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-culture author-guest-user post-type-text article-index-7" id="article-5f2acc39277bf472e6a1e1ba" data-item-id="5f2acc39277bf472e6a1e1ba"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/dynamic-programming">Dynamic Programming for Fun</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-08-05" itemprop="datePublished" pubdate><a href="/tech-blog/dynamic-programming">August 5, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=632340c9a4a3ba600eab9c6f" rel="author">Guest User</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">Backend Software Engineer, Andrey, gives an intro to Dynamic Programming, a method used in computer science to divide large complex problems into small, simpler ones.</p> <a class="read-more" href="/tech-blog/dynamic-programming">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Culture" rel="tag">Culture</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498199150-VOVWULJCHTHAS57C7EDM" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498199150-VOVWULJCHTHAS57C7EDM/nimbus.png" data-record-type="1" data-full-url="/tech-blog/dynamic-programming" data-title="Dynamic Programming for Fun"></span> <span class="sqs-simple-like" data-item-id="5f2acc39277bf472e6a1e1ba" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-nimbus tag-dashboard author-nimbus-accounts post-type-text article-index-8" id="article-5f171514d606497253c11e2a" data-item-id="5f171514d606497253c11e2a"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/confetti-on-nimbus-dashboard">Confetti on Nimbus Dashboard</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-07-21" itemprop="datePublished" pubdate><a href="/tech-blog/confetti-on-nimbus-dashboard">July 21, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5ccc97850460d60001c3f7e3" rel="author">Nimbus Accounts</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">How we designed and built infrastructure to render confetti on the Nimbus Dashboard— Celebrating our publishers’ highest ad revenue day.</p> <a class="read-more" href="/tech-blog/confetti-on-nimbus-dashboard">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/Dashboard" rel="tag">Dashboard</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498230880-0CTEOTZDO3K13VF6RDBC" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498230880-0CTEOTZDO3K13VF6RDBC/nimbus.png" data-record-type="1" data-full-url="/tech-blog/confetti-on-nimbus-dashboard" data-title="Confetti on Nimbus Dashboard"></span> <span class="sqs-simple-like" data-item-id="5f171514d606497253c11e2a" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-nimbus tag-openrtb author-adam-gray post-type-text article-index-9" id="article-5ef214dc28e7676403e95a19" data-item-id="5ef214dc28e7676403e95a19"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/nimbus-partners-with-criteo">Nimbus Partners with Criteo</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-06-23" itemprop="datePublished" pubdate><a href="/tech-blog/nimbus-partners-with-criteo">June 23, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5ef21690f8af9640ffa2bd0f" rel="author">Adam Gray</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">Nimbus partners with Criteo to expand our broad network of demand partners and further maximize revenue for our app publishers.</p> <a class="read-more" href="/tech-blog/nimbus-partners-with-criteo">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/OpenRTB" rel="tag">OpenRTB</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498249288-V4Y7X8J1I3B8B4NHX4RA" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498249288-V4Y7X8J1I3B8B4NHX4RA/nimbus.png" data-record-type="1" data-full-url="/tech-blog/nimbus-partners-with-criteo" data-title="Nimbus Partners with Criteo"></span> <span class="sqs-simple-like" data-item-id="5ef214dc28e7676403e95a19" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-timehop tag-nimbus tag-culture author-dmitry-traytel post-type-text article-index-10" id="article-5f0364c5a2030f2fc910c7e3" data-item-id="5f0364c5a2030f2fc910c7e3"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/timehop-at-work">Timehop at Work: 3 Years Ago</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-06-19" itemprop="datePublished" pubdate><a href="/tech-blog/timehop-at-work">June 19, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5e5d387c4661f72b58b108bf" rel="author">Dmitry Traytel</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">A message from our CTO, Dmitry Traytel, about his time at Timehop.</p> <a class="read-more" href="/tech-blog/timehop-at-work">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Timehop" rel="tag">Timehop</a>, <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/Culture" rel="tag">Culture</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498263681-OTX2Q3CKH1EUJTANJ427" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498263681-OTX2Q3CKH1EUJTANJ427/nimbus.png" data-record-type="1" data-full-url="/tech-blog/timehop-at-work" data-title="Timehop at Work: 3 Years Ago"></span> <span class="sqs-simple-like" data-item-id="5f0364c5a2030f2fc910c7e3" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-nimbus tag-openrtb author-rick-webb post-type-text article-index-11" id="article-5ed13b48ab1d9162b652a356" data-item-id="5ed13b48ab1d9162b652a356"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/data-privacy-approach">Our Approach to Data and Privacy</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-06-01" itemprop="datePublished" pubdate><a href="/tech-blog/data-privacy-approach">June 1, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5ed13cc5aa179d0d0a468a35" rel="author">Rick Webb</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class=""> How Nimbus approaches data and privacy with technology and practices designed to thrive in a GDPR and CCPA ecosystem.</p> <a class="read-more" href="/tech-blog/data-privacy-approach">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/OpenRTB" rel="tag">OpenRTB</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498278435-DT02YNQ87WALBBQFQL14" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498278435-DT02YNQ87WALBBQFQL14/nimbus.png" data-record-type="1" data-full-url="/tech-blog/data-privacy-approach" data-title="Our Approach to Data and Privacy"></span> <span class="sqs-simple-like" data-item-id="5ed13b48ab1d9162b652a356" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-nimbus tag-openrtb tag-renderrate author-inder-dhir post-type-text article-index-12" id="article-5ebad620b2761e6bdc5fae95" data-item-id="5ebad620b2761e6bdc5fae95"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/achieving-optimal-render-rate">Achieving Optimal Render Rate</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-05-12" itemprop="datePublished" pubdate><a href="/tech-blog/achieving-optimal-render-rate">May 12, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5e5d38299d88357d41532c4d" rel="author">Inder Dhir</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">How to increase render rate by identifying and fixing common issues holding it back.</p> <a class="read-more" href="/tech-blog/achieving-optimal-render-rate">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/OpenRTB" rel="tag">OpenRTB</a>, <a href="/tech-blog/tag/RenderRate" rel="tag">RenderRate</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498294449-2NNT16ACWTEAC18U7A2C" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498294449-2NNT16ACWTEAC18U7A2C/nimbus.png" data-record-type="1" data-full-url="/tech-blog/achieving-optimal-render-rate" data-title="Achieving Optimal Render Rate"></span> <span class="sqs-simple-like" data-item-id="5ebad620b2761e6bdc5fae95" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-openrtb tag-nimbus tag-adtech tag-renderrate author-marc-santiago post-type-text article-index-13" id="article-5e948bce330a876799a3203d" data-item-id="5e948bce330a876799a3203d"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/putting-the-tech-in-ad-tech">Putting the ‘Tech’ in Ad Tech</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-04-13" itemprop="datePublished" pubdate><a href="/tech-blog/putting-the-tech-in-ad-tech">April 13, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5e5d381583e7f96f9d4fc8c6" rel="author">Marc Santiago</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">How Nimbus takes an engineering-first approach to programmatic advertising</p> <a class="read-more" href="/tech-blog/putting-the-tech-in-ad-tech">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/OpenRTB" rel="tag">OpenRTB</a>, <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/AdTech" rel="tag">AdTech</a>, <a href="/tech-blog/tag/RenderRate" rel="tag">RenderRate</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498309478-DE1FZ6KQBYF7EFCM3CRL" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498309478-DE1FZ6KQBYF7EFCM3CRL/nimbus.png" data-record-type="1" data-full-url="/tech-blog/putting-the-tech-in-ad-tech" data-title="Putting the ‘Tech’ in Ad Tech"></span> <span class="sqs-simple-like" data-item-id="5e948bce330a876799a3203d" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-openrtb tag-nimbus author-andrey-grekhov post-type-text article-index-14" id="article-5e6173a4f11f6b3cb96dbbd8" data-item-id="5e6173a4f11f6b3cb96dbbd8"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/making-ad-blocking-easy">Making Ad Blocking Easy</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-03-18" itemprop="datePublished" pubdate><a href="/tech-blog/making-ad-blocking-easy">March 18, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5e5d38730afa0f3983e95f37" rel="author">Andrey Grekhov</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">How Nimbus gives publishers control of ad blocking with a clean and simple UI while minimizing engineering time.</p> <a class="read-more" href="/tech-blog/making-ad-blocking-easy">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/OpenRTB" rel="tag">OpenRTB</a>, <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498324305-4G3JARQ1YHQ3S9PCRQRQ" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498324305-4G3JARQ1YHQ3S9PCRQRQ/nimbus.png" data-record-type="1" data-full-url="/tech-blog/making-ad-blocking-easy" data-title="Making Ad Blocking Easy"></span> <span class="sqs-simple-like" data-item-id="5e6173a4f11f6b3cb96dbbd8" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-openrtb tag-nimbus author-nimbus-accounts post-type-text article-index-15" id="article-5e5d6a2dc9f8cf1b02a20680" data-item-id="5e5d6a2dc9f8cf1b02a20680"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/dashboard-real-time-reporting">Real-Time Reports on Nimbus’ Dashboard</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-03-05" itemprop="datePublished" pubdate><a href="/tech-blog/dashboard-real-time-reporting">March 5, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5ccc97850460d60001c3f7e3" rel="author">Nimbus Accounts</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">How we designed and built infrastructure to render real-time revenue and impression data — letting publishers view campaign performance on a dashboard in real-time.</p> <a class="read-more" href="/tech-blog/dashboard-real-time-reporting">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/OpenRTB" rel="tag">OpenRTB</a>, <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498338559-Z4VX787QF128V8Q2ABML" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498338559-Z4VX787QF128V8Q2ABML/nimbus.png" data-record-type="1" data-full-url="/tech-blog/dashboard-real-time-reporting" data-title="Real-Time Reports on Nimbus’ Dashboard"></span> <span class="sqs-simple-like" data-item-id="5e5d6a2dc9f8cf1b02a20680" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <article class="hentry tag-timehop tag-nimbus tag-culture tag-openrtb author-dmitry-traytel post-type-text article-index-16" id="article-5e6655e74ff63e2b452f58e1" data-item-id="5e6655e74ff63e2b452f58e1"> <!--POST HEADER--> <header> <h1 class="entry-title" itemprop="headline"> <a href="/tech-blog/ads-by-nimbus-memories-by-timehop">Ads by Nimbus, Memories by Timehop</a> </h1> <div class="meta"> <span class="date"><time class="published dt-published" datetime="2020-02-28" itemprop="datePublished" pubdate><a href="/tech-blog/ads-by-nimbus-memories-by-timehop">February 28, 2020</a></time></span> <span class="author"><a href="/tech-blog?author=5e5d387c4661f72b58b108bf" rel="author">Dmitry Traytel</a></span> </div> </header> <!--SPECIAL CONTENT--> <!--POST BODY--> <div class="body entry-content"><p class="">The story behind the creation of Timehop and Nimbus and the engineering team that built them both without increasing resources. </p> <a class="read-more" href="/tech-blog/ads-by-nimbus-memories-by-timehop">Read more</a></div> <!--POST FOOTER--> <footer class="clear"> <div class="meta"> <style> /* General Style for ALL blog pages*/ /* Background */ body #canvas { background-image: url("https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d5d7b10370a240001dd71c4/1566407440190/cloud-reports.svg"); background-color: #f8f4f2; background-size: 100% 33%; background-repeat: no-repeat; } body .single-post#canvas { background-size: 100% 10%; } .single-post [class*=sqs-col] .sqs-block { padding-left: 0; padding-right: 0; } /* Page Layout*/ #page { max-width: 1225px; margin: auto; margin-bottom: 120px; margin-top: 150px; display: grid; padding: 0 9%; grid-template-columns: 60% 33%; grid-column-gap: 7%; } /* Display Author */ .hide-article-author article header .meta .author { display: inline; } /* tags style */ .tags { color: #CC6899; font-weight: 700; } .tags a { color: #CC6899; } /* Articles list layout */ article { display: grid; grid-template-columns: 35% 53%; grid-gap: 12%; border-top: 1px solid #D8D8D8; padding: 25px 0; } /* Remove Read More link*/ .collection-type-blog article .read-more { color: #CC6899 !important; font-weight: 700; } footer.clear { display: block; } /* Remove footer (tags+likes) from article-list */ .article-list article footer.clear { display: none; } /* Posts Title on article list */ .collection-type-blog.blog-layout-center article header { text-align: left; margin-bottom: 0; } /* Articles list */ .collection-type-blog article .entry-title { font-family: proxima-nova; font-weight: 800; font-size: 30px; line-height: 37px; letter-spacing: 0; } .collection-type-blog.blog-layout-center article .body { margin-bottom: 0; } .collection-type-blog.blog-layout-center article .body p { margin-bottom: 0; } /* Page title */ .hide-page-title .page-title, .post-page article .entry-title { display: inline-block; font-size: 70px; line-height: 75px; letter-spacing: -0.7px; font-weight: 800; } .header-container { margin-bottom: 20px; margin-top: 40px; } .description { margin-bottom: 70px; } /* Meta Data design */ .author a { color: #CC6899 !important; font-weight: 700; font-style: normal; letter-spacing: 1.1px; text-transform: uppercase; font-size: 12px; line-height: 15px; } .collection-type-blog article .date { font-size: 14px; font-style: normal; letter-spacing: 0; margin-top: -3px; } span.date { display: block; } .collection-type-blog article header .meta span+span:before { content: ""; padding-right: 0; } .collection-type-blog article header .meta span+span { margin-left: 0; line-height: 20px; } /* Tag page title */ .tag-page .title-wrapper { margin-bottom: 3em; } .tag-page .title-wrapper h1 { margin-bottom: 0; } /* Back Icon*/ span.back-icon { background: url('/static/5cfec03d965c11000125e9e1/t/5e31fcdb10a4b62794757a7d/1580334299198/back.svg') no-repeat; padding: 25px 20px; vertical-align: middle; cursor: pointer; } span.back-icon:hover { content: ''; background: url('/static/5cfec03d965c11000125e9e1/t/5e39ec7f5cb0b166b76185b7/1580854399775/back-hover.svg') no-repeat; } /* Titles */ h1 { margin-top: 0; } #page h2, h3, h4 { color: #37B6B7 !important; letter-spacing: 0; } #page h2 { font-size: 22px; line-height: 28px; font-weight: 500; } /* SIDEBAR */ .collection-type-blog.blog-layout-center #sidebar { display: block; } iframe { border: 0; width: 100%; height: 100%; margin-top: 25%; } /* Code */ pre { background: rgba(219, 242, 244, 0.4); padding: 15px; border-bottom: 2px solid #83D7DA; margin-bottom: 1.6em; counter-reset: section; } code { font-family: SF Mono,Consolas,Dejavu Sans Mono,Menlo, monospace; font-style: italic; font-size: 15px; color: #666; } code:before { content: counter(section) ". "; counter-increment: section; } /* POST PAGE ONLY */ body #canvas has(> .post-page) { background-size: 100% 25% !important; } /* Articles - break grid */ .post-page article { display: block; border: none; } /* Header Section */ .post-page article header { padding-bottom: 25px; } .collection-type-blog article+article { margin-top: 0; } .collection-type-blog.blog-layout-center .post-page article header { margin-bottom: 45px; border-bottom: 1px solid #D8D8D8; } .post-page article .entry-title a { pointer-events: none; } .post-page article .entry-title a:hover { color: #000; cursor: inherit; } .post-page article .meta { position: relative; } .post-page span.sqs-simple-like { display: none; } .post-page span.tags-title { display: none; } .post-page article .meta .tags { color: #fff; position: absolute; top: 0; right: 0; } .post-page article .meta .tags a { color: #CC6899; font-size: 14px; } .post-page article .meta .tags a:hover { color: #9A3268; } .post-page article .meta .tags a:before { content: "#"; } .post-page article footer.clear { display: none; } .post-page #share { position: absolute; right: 0; top: 30px; } .post-page #share a { padding-left: 10px; } .post-page .body.entry-content { padding: 0 15px; } /* Blog body */ .collection-type-blog.blog-layout-center .post-page article .body p { margin-bottom: 1.6em; } /* MEDIA */ @media only screen and (max-width: 1024px) { #page { padding: 0 6.5%; display: block; margin-bottom: 70px; } article { display: block; } #sidebar { border-top: 1px solid #D8D8D8; } iframe { margin-top: 0; } } /* MOBILE */ @media only screen and (max-width: 739px) { body #canvas { background-size: 100% 25%; background-color: #fff; } body .single-post#canvas { background-size: 130% 17%; } .hide-page-title .page-title, .post-page article .entry-title { font-size: 45px; line-height: 50px; } .post-page article .meta .tags { position: initial; display: block; margin: 10px 0; } .post-page #share { position: initial; } span.back-icon { background-size: 50%; display: inline-block; padding: 25px 15px; } .post-page #share a:first-child { padding-left: 3px; } iframe { margin-top: 10%; } @media only screen and (max-width: 640px) { #page { margin-top: 0; } } } </style> <script> // Add the SIDEBAR to all pages: var waitSidebarExist = setInterval(function() { const pageSidebar = document.getElementById("sidebar"); if (pageSidebar) { const child = document.getElementById("sidebarBlocks"); let newIframeSidebar = new DOMParser().parseFromString('<iframe src="/blog-sidebar" scrolling="no" onload="resizeIframe(this)" onchange="resizeIframe(this)"></iframe>', 'text/html'); let newChild = newIframeSidebar.body.firstChild; pageSidebar.replaceChild(newChild, child); clearInterval(waitSidebarExist); } }, 100); // Swipe between date and author elements: var waitMetaExist = setInterval(function() { const meta = document.querySelector(".meta"); if (meta) { const date = document.querySelector(".date"); const author = document.querySelector(".author"); meta.insertBefore(author, date); clearInterval(waitMetaExist); } }, 100); // Custom scripts for Posts / Tags pages const pathArray = window.location.pathname.split("/"); const isPostPage = pathArray.length === 3 && pathArray[pathArray.length-1] !== ""; const isTagPage = pathArray[2] === "tag"; // POST PAGE: if (isPostPage) { // Add single-post class to canvas document.getElementById("canvas").classList="single-post"; // Add post-page class to page var checkPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("post-page"); clearInterval(checkPageExist); } }, 100); // Add the tag snd share nodes as a child of the meta node var checkShareExist = setInterval(function() { const share = document.getElementById("share"); const meta = document.querySelector(".meta"); const tags = document.querySelector(".tags"); if (meta && share && tags) { meta.appendChild(tags); meta.appendChild(share); clearInterval(checkShareExist); } }, 100); } // Post page // TAG PAGE: if (isTagPage) { // Add tag-page class to the page element var waitPageExist = setInterval(function() { const page = document.getElementById("page"); if (page) { page.classList.add("tag-page"); clearInterval(waitPageExist); } }, 100); } // Tag page // Create title, description, latest-post header on general pages: if(!isPostPage){ // Header Node: let headerNode = document.createElement('div'); headerNode.className = "header-container"; // Page title: let titleWrapperNode = document.createElement('div'); titleWrapperNode.className = "title-wrapper" let title = ""; if (isTagPage) { const tag = pathArray[pathArray.length -1]; // L25 title = "#"+tag; // Back Icon on tag page only: const backIcon = '<a href="https://www.adsbynimbus.com/tech-blog"><span class="back-icon"></span></a>'; let backIconNode = new DOMParser().parseFromString(backIcon, 'text/html').body.firstChild; titleWrapperNode.appendChild(backIconNode); } else { title = "TechByNimbus"; } const titleNode = new DOMParser().parseFromString('<h1 class="page-title"></h1>', 'text/html').body.firstChild; titleNode.innerHTML=title; titleWrapperNode.appendChild(titleNode); headerNode.appendChild(titleWrapperNode); // Description if (!isTagPage) { const description = '<div class="description"><h2>Our Engineering-First Approach to Creating a Publisher-First Platform</h2><p>Stories and insights from the engineering team behind Timehop and Nimbus, from ideation to profitability and everything in between.</p></div>'; let descriptionNode = new DOMParser().parseFromString(description, 'text/html').body.firstChild; headerNode.appendChild(descriptionNode); } // Latest Posts label let labelNode = new DOMParser().parseFromString('<div><label class="blog-label main-label">Latest Posts</label></div>', 'text/html').body.firstChild; headerNode.appendChild(labelNode); // Inject the headerNode as a first child of the article-list class: var waitArticleListExist = setInterval(function() { const articleList = document.querySelector(".article-list"); if (articleList) { articleList.prepend(headerNode); clearInterval(waitArticleListExist); } }, 100); } function resizeIframe(obj) { obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; obj.contentWindow.document.body.onclick = function(e) { if(e.target.classList[0] === "read-more"){ obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px'; } } } </script> <div class="first meta-row tags"> <span class="tags"><span class="tags-title">Tags</span> <a href="/tech-blog/tag/Timehop" rel="tag">Timehop</a>, <a href="/tech-blog/tag/Nimbus" rel="tag">Nimbus</a>, <a href="/tech-blog/tag/Culture" rel="tag">Culture</a>, <a href="/tech-blog/tag/OpenRTB" rel="tag">OpenRTB</a></span> </div> <div class="second meta-row"> <span class="squarespace-social-buttons inline-style" data-system-data-id="1648498353267-NGX4PMKUCT09275QK1XL" data-asset-url="https://images.squarespace-cdn.com/content/v1/5cfec03d965c11000125e9e1/1648498353267-NGX4PMKUCT09275QK1XL/nimbus.png" data-record-type="1" data-full-url="/tech-blog/ads-by-nimbus-memories-by-timehop" data-title="Ads by Nimbus, Memories by Timehop"></span> <span class="sqs-simple-like" data-item-id="5e6655e74ff63e2b452f58e1" data-like-count="0"> <span class="like-icon"></span> <span class="like-count"></span> </span> </div> </div> </footer> </article> <!--PAGINATION--> </div> <aside id="sidebar"><div class="sqs-layout sqs-grid-1 columns-1 empty" data-layout-label="Sidebar Content" data-type="block-field" id="sidebarBlocks"><div class="row sqs-row"><div class="col sqs-col-1 span-1"></div></div></div></aside> </section> <div class="sqs-layout sqs-grid-12 columns-12 empty" data-layout-label="Tech by Nimbus Footer Content" data-type="block-field" id="collection-5e1f8cf294e2641621dd85bb"><div class="row sqs-row"><div class="col sqs-col-12 span-12"></div></div></div> <!-- <div class="page-divider bottom-divider"></div> --> <div class="info-footer-wrapper clear"> <div class="info-footer"> <div class="sqs-layout sqs-grid-12 columns-12 empty" data-layout-label="Info Footer Content" data-type="block-field" data-updated-on="1560271403735" id="infoFooterBlock"><div class="row sqs-row"><div class="col sqs-col-12 span-12"></div></div></div> </div> </div> <footer id="footer" class="clear"> <div class="sqs-layout sqs-grid-12 columns-12" data-layout-label="Footer Content" data-type="block-field" data-updated-on="1710340682366" id="footerBlock"><div class="row sqs-row"><div class="col sqs-col-12 span-12"><div class="sqs-block code-block sqs-block-code" data-block-type="23" id="block-yui_3_17_2_1_1560533147783_83790"><div class="sqs-block-content"><div class="full-width-container" id="nimbus-footer"> <div class="footer-container"> <h2> Get Started with Nimbus </h2> <p> And watch your ad revenue grow... </p> <div id="button-footer" class="modal-btn yui3-widget yui3-block-base sqs-block-modelsync sqs-block-button sqs-block button-block sqs-block-editable yui3-dd-drop yui3-dd-draggable"><div id="yui_3_17_2_1_1560458968870_111515" class="sqs-block-button-content sqs-block-content"><div class="sqs-block-button-container--left" data-alignment="left" data-button-size="medium"> <a href="/demo" class="sqs-block-button-element--medium sqs-block-button-element">Request a demo</a> </div></div> </div> <div id="footer-navy"> <div class="follow"> follow us <span> <a href="https://twitter.com/adsbynimbus" target="_blank"> <img src="https://static1.squarespace.com/static/5cfec03d965c11000125e9e1/t/5d10dea049511800018c16e9/1561386656540/twitter-white.svg"> </a> </span> </div> <div class="stamp"> <span class="d">Copyright © <span id="year"></span> Nimbus Advertising Solutions Inc</span> <span class="d link"> <a href="https://jobs.lever.co/nimbus" target="_blank"> Jobs </a> </span> <span class="link"> <a href="https://www.adsbynimbus.com/privacy-policy"> privacy policy </a> </span> </div> </div> </div> </div> <script> // Footer - year: document.getElementById("year").innerHTML = new Date().getFullYear(); // Wrap header: var header = document.querySelector('header'); var wrapper = document.createElement('div'); wrapper.className = "header-wrapper"; header.parentNode.insertBefore(wrapper, header); wrapper.appendChild(header); // Add class to header with scrolling window.onscroll = function changeNav(){ var scrollPosY = window.pageYOffset; if(scrollPosY > 60){ header.classList.add("sticky"); wrapper.classList.add("sticky"); } if(scrollPosY === 0) { header.classList.remove("sticky"); wrapper.classList.remove("sticky"); } } // Add event listener to mobile menu click: const m = document.getElementById("mobileMenuLink"); m.firstElementChild.addEventListener('click', () => { document.getElementsByTagName("body")[0].classList.toggle("scroll-hidden"); }); // Remove footer demo button on "request a demo" page: if (window.location.href.includes("demo")){ var buttonFooter = document.getElementById("button-footer"); buttonFooter.style.display = "none"; var footer = document.getElementsByClassName("footer-container"); footer[0].style.padding = "50px 0 0 0"; } // Change canvas background to grey for Getting Started With Nimbus and Real Time Reporting if ((window.location.href.includes("getting-started-with-nimbus") || window.location.href.includes("real-time-reporting")) && screen.width > 735){ var canvas = document.getElementById("canvas"); canvas.style.backgroundColor="#f8f4f2" } if (screen.width > 735 ){ const nav = document.querySelectorAll(".main-nav"); nav[1].innerHTML = ` <ul class='main-nav'> <li onmouseenter="showSub('monetize')" onmouseleave="removeSub('monetize')" > Monetize with Nimbus <ul class='sub hidden' id='monetize'> <li><a href='https://www.adsbynimbus.com/demo'>Request a Demo</a></li> <li><a href='https://www.adsbynimbus.com/nimbus-pro'>Nimbus Pro</a></li> <li><a href='https://www.adsbynimbus.com/tumblr-case-study'>Case Study: Tumblr</a></li> <li><a href='https://www.adsbynimbus.com/weatherbug-case-study'>Case Study: Weatherbug</a></li> <li><a href='https://www.adsbynimbus.com/kidoodle-case-study'>Case Study: Kidoodle</a></li> <li><a href='https://www.adsbynimbus.com/imgur-case-study'>Case Study: Imgur</a></li> </ul> </li> <li onmouseenter="showSub('buy-inventory')" onmouseleave="removeSub('buy-inventory')">Buy Inventory <ul class='sub hidden' id='buy-inventory'> <li><a href='/demand-partners'>Request an Integration</a></li> <li><a href='/demand-loves-nimbus'>Why Nimbus?</a></li> </ul> </li> <li onmouseenter="showSub('learn-more')" onmouseleave="removeSub('learn-more')">Learn More <ul class='sub hidden' id='learn-more'> <li><a href='https://www.adsbynimbus.com/nimbus-learning-center'>Nimbus Learning Center</a></li> <li><a href='https://www.adsbynimbus.com/security-compliance'>Security & Compliance</a></li> <li><a href='https://www.adsbynimbus.com/tech-blog'>Blog</a></li> </ul> </li> <li class='external-link-button'><a href='https://dashboard.adsbynimbus.com/' target="_blank" >SIGN IN</a></li> </ul>` } function showSub(id){ document.getElementById(id).classList.remove('hidden'); } function removeSub(id){ document.getElementById(id).classList.add('hidden'); } </script></div></div></div></div></div> </footer> </div> <div></div> <script data-sqs-type="imageloader-bootstrapper">if(window.ImageLoader) window.ImageLoader.bootstrap({}, document);</script><script>Squarespace.afterBodyLoad(Y);</script> </body> </html>