CINXE.COM
Outfit7 - Medium
<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>Outfit7 - Medium</title><link rel="canonical" href="https://medium.com/outfit7"><link id="feedLink" rel="alternate" type="application/rss+xml" title="RSS" href="https://medium.com/feed/outfit7"><meta name="robots" content="index,follow"><meta name="title" content="Outfit7 - Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="The inside scoop on development, engineering & tech innovation @ Outfit7."><meta name="keywords" content="TECHNOLOGY, ENGINEERING, SOFTWARE DEVELOPMENT, GAME DEVELOPMENT, PROGRAMMING"><meta name="theme-color" content="#000000"><meta property="og:title" content="Outfit7 – Medium"><meta property="twitter:title" content="Outfit7 – Medium"><meta property="og:url" content="https://medium.com/outfit7"><meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*dCIQWfMya9g57UUL2ZzrJQ.png"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="The inside scoop on development, engineering & tech innovation @ Outfit7."><meta name="twitter:description" content="The inside scoop on development, engineering & tech innovation @ Outfit7."><meta name="twitter:image:src" content="https://cdn-images-1.medium.com/max/1200/1*dCIQWfMya9g57UUL2ZzrJQ.png"><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta property="medium-com:creator" content="https://medium.com/@tech-at-outfit7"><meta name="twitter:site" content="@Medium"><meta property="og:site_name" content="Medium"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://outfit7"><meta property="al:ios:app_name" content="Medium"><meta property="al:ios:app_store_id" content="828256236"><meta property="al:android:package" content="com.medium.reader"><meta property="al:android:app_name" content="Medium"><meta property="al:ios:url" content="medium://outfit7"><meta property="al:android:url" content="medium://outfit7"><meta property="al:web:url" content="https://medium.com/outfit7"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/outfit7" /><script type="application/ld+json">{"@context": "http://schema.org", "@graph": [{"@type": "WebSite", "url": "https:\/\/medium.com", "name": "Medium", "alternateName": "Medium is a community of readers and writers offering unique perspectives on ideas large and small."},{"@type": "Organization", "url": "https:\/\/medium.com\/outfit7", "name": "Outfit7"}]}</script><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.ouwh4uMviI3QQWIjxRhkHA.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*dCIQWfMya9g57UUL2ZzrJQ.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*dCIQWfMya9g57UUL2ZzrJQ.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*dCIQWfMya9g57UUL2ZzrJQ.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*dCIQWfMya9g57UUL2ZzrJQ.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillBlack u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/outfit7%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Foutfit7&source=--------------------------nav_reg&operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/outfit7" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Foutfit7&source=--------------------------nav_reg&operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/outfit7" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-height65 u-xs-height56"></div><div class="collectionHeader js-collectionHeaderContainer u-relative collectionHeader--layoutMedium collectionHeader--alignmentLeft collectionHeader--withLogo collectionHeader--withBackground collectionHeader--colorBehaviorBold collectionHeader--withNavigation collectionHeader--editorLayoutTitleAndLogo is-modeView u-tintBgColor"><div class="collectionHeader-aspectRatioTable"><div class="collectionHeader-aspectRatioContent u-backgroundSizeCover js-collectionHeaderBackground" style="background-image: url("https://cdn-images-1.medium.com/max/2400/1*lduq8q-DAzZbQ9GtDcLBvw.png"); background-position: 53.57142857142857% 95.83333333333333% !important;"><div class="collectionHeader-overlayBackground u-height100vh"></div><header class="collectionHeader-heroAndInlineNav u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto u-foreground js-collectionHeader"><div class="collectionHeader-hero js-collectionHeaderHero u-clearfix u-imageSpectrum"><div class="collectionHeader-heroInner"><div class="collectionHeader-logo js-collectionHeaderLogo" style="max-width: 490px;"><a class="link u-baseColor--link" href="https://medium.com/outfit7" title="Go to Outfit7" aria-label="Go to Outfit7"><div class="u-relative u-marginAuto"><div style="padding-bottom: 13.433559650824442%"></div><img class="collectionHeader-logoImage js-collectionHeaderLogoImage" src="https://cdn-images-1.medium.com/max/980/1*rsxLbtYH2VSNPlCVkyXhSw@2x.png" data-image-id="1*rsxLbtYH2VSNPlCVkyXhSw@2x.png" data-width="2062" data-height="277" /></div></a></div><div class="collectionHeader-nameAndDescription"><a class="link link--noUnderline u-baseColor--link" href="https://medium.com/outfit7" title="Go to Outfit7" aria-label="Go to Outfit7"><h1 class="collectionHeader-name js-collectionName u-foreground u-baseColor--textDark u-paddingBottom4 u-lineHeightTightest u-contentSansBold u-fontSize40 u-xs-fontSize32">The inside scoop on development, engineering & tech innovation</h1></a></div></div></div></header></div><div class="collectionHeader-aspectRatioCell"><div class="collectionHeader-aspectRatioFullWidth"></div></div></div><div class="collectionHeader-blockNav"><div class="u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto"><nav class="collectionHeader-nav u-clearfix js-collectionHeaderNav u-lineHeight40 u-overflowHiddenY u-tintSpectrum"><div class="buttonSet u-flex1 u-noWrap u-overflowX u-paddingBottom100 u-xs-marginRight15"><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/outfit7/latest">All</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/outfit7/game-dev/home">Game Dev</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/outfit7/qa/home">QA</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/outfit7/the-outfit7-tech-blog-13e11ddd19e7">About</a></li><span class="u-borderLeft1 u-paddingLeft22 u-xs-paddingLeft12 u-baseColor--borderLight"></span><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 is-external"><a class="link link--darkenOnHover u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://outfit7.com/careers/jobs?field=technology&utm_source=social&utm_medium=medium&utm_campaign=tech-jobs" rel="nofollow noopener" target="_blank">Jobs</a></li></div><div class="buttonSet u-textAlignRight u-marginLeft18 u-flex0 u-noWrap"><label class="button button--small button--chromeless button--withIcon button--withSvgIcon inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal" title="Search Outfit7"><span class="svgIcon svgIcon--search svgIcon--25px u-baseColor--iconLight"><svg class="svgIcon-use" width="25" height="25" ><path d="M20.067 18.933l-4.157-4.157a6 6 0 10-.884.884l4.157 4.157a.624.624 0 10.884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z"/></svg></span><input class="js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent" type="search" placeholder="Search Outfit7" required="true" data-collection-id="6ec626d5ad62" /></label><a class="button button--light button--chromeless is-touchIconBlackPulse u-baseColor--buttonLight button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="//facebook.com/outfit7" title="Visit “Outfit7” on Facebook" aria-label="Visit “Outfit7” on Facebook" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--facebookFilled svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" ><path d="M21 12.646C21 7.65 16.97 3.6 12 3.6s-9 4.05-9 9.046a9.026 9.026 0 007.59 8.924v-6.376H8.395V12.64h2.193v-1.88c0-2.186 1.328-3.375 3.267-3.375.93 0 1.728.07 1.96.1V9.77H14.47c-1.055 0-1.26.503-1.26 1.242v1.63h2.517l-.33 2.554H13.21V21.6c4.398-.597 7.79-4.373 7.79-8.954"/></svg></span></span></a><a class="button button--light button--chromeless is-touchIconBlackPulse u-baseColor--buttonLight button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="https://instagram.com/outfit7" title="Visit “Outfit7” on Instagram" aria-label="Visit “Outfit7” on Instagram" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--instagram svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" ><path d="M12.497 5.531c2.27 0 2.536.01 3.433.05.83.038 1.279.176 1.579.294.398.156.681.338.978.635.297.296.482.58.634.978.115.3.257.749.294 1.578.04.897.05 1.164.05 3.434 0 2.27-.01 2.537-.05 3.434-.037.83-.176 1.278-.294 1.578a2.637 2.637 0 01-.634.979 2.61 2.61 0 01-.978.634c-.3.114-.749.256-1.579.293-.897.04-1.163.05-3.433.05-2.27 0-2.537-.01-3.434-.05-.83-.037-1.278-.175-1.579-.293a2.638 2.638 0 01-.978-.634 2.596 2.596 0 01-.634-.979c-.115-.3-.256-.748-.293-1.578-.04-.897-.051-1.164-.051-3.434 0-2.27.01-2.537.05-3.434.038-.83.176-1.278.294-1.578.155-.398.337-.682.634-.978a2.6 2.6 0 01.978-.635c.3-.114.75-.256 1.579-.293.897-.044 1.164-.05 3.434-.05zm0-1.531c-2.307 0-2.598.01-3.505.05-.904.041-1.521.186-2.06.395-.56.216-1.033.51-1.505.982a4.214 4.214 0 00-.982 1.504c-.209.54-.354 1.157-.394 2.064C4.01 9.9 4 10.19 4 12.497c0 2.307.01 2.597.05 3.504.041.904.186 1.521.395 2.064.216.56.51 1.033.982 1.505s.948.762 1.504.981c.54.21 1.157.355 2.064.395.908.04 1.195.05 3.505.05 2.31 0 2.597-.01 3.505-.05.904-.04 1.52-.186 2.064-.395a4.14 4.14 0 001.504-.981c.472-.472.762-.948.982-1.505.209-.54.354-1.157.394-2.064.04-.907.051-1.194.051-3.504s-.01-2.598-.05-3.505c-.041-.904-.186-1.521-.395-2.064a4.142 4.142 0 00-.982-1.505 4.215 4.215 0 00-1.504-.981c-.54-.21-1.157-.354-2.064-.395C15.094 4.01 14.804 4 12.497 4z"/><path d="M12.496 8.132a4.365 4.365 0 000 8.73 4.367 4.367 0 004.365-4.365 4.367 4.367 0 00-4.365-4.365zm0 7.198a2.833 2.833 0 110-5.666 2.833 2.833 0 010 5.666z"/><path d="M17.034 8.979a1.019 1.019 0 100-2.038 1.019 1.019 0 000 2.038z"/></svg></span></span></a><button class="button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton is-smallPill" data-action="sign-up-prompt" data-sign-in-action="toggle-follow-collection" data-requires-token="true" data-redirect="https://medium.com/_/subscribe/collection/outfit7" data-action-source="pub_header----6ec626d5ad62----------------------follow_pub" data-collection-id="6ec626d5ad62"><span class="button-label js-buttonLabel">Follow</span></button></div></nav></div></div></div><div class="u-marginBottom40 js-collectionStream"><div class="streamItem streamItem--section js-streamItem"><div class="u-marginTop30 u-xs-marginTop0 u-marginBottom15 u-maxWidth1032 u-marginAuto"><div class="u-table u-width100pct u-height450 u-xs-minHeight350"><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-height450 u-xs-minHeight350" data-source="collection_home---2------0-----------------------" data-post-id="b317a75e1447" data-index="0"><div class="u-baseColor--textDark u-height450 u-xs-minHeight350"><a href="https://medium.com/outfit7/new-home-for-outfit7-tech-articles-b317a75e1447?source=collection_home---2------0-----------------------" data-post-id="b317a75e1447" data-source="collection_home---2------0-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/1*Omir8OiKC9D30ujLb-QrSQ.jpeg"); background-position: 50% 50% !important;"><span class="u-textScreenReader">New home for Outfit7 tech articles</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15 u-right40Percent u-md-right0"><a class="" href="https://medium.com/outfit7/new-home-for-outfit7-tech-articles-b317a75e1447?source=collection_home---2------0-----------------------" data-action-source="collection_home---2------0-----------------------" data-post-id="b317a75e1447"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize44"><div class="">New home for Outfit7 tech articles</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="">Hey, tech enthusiasts!</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@jure.gorinsek_80693" data-action="show-user-card" data-action-value="3215f0e451af" data-action-type="hover" data-user-id="3215f0e451af" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*n3730i_0LsgcubhV" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jure Gorinsek"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@jure.gorinsek_80693" data-action="show-user-card" data-action-value="3215f0e451af" data-action-type="hover" data-user-id="3215f0e451af" dir="auto">Jure Gorinsek</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-09-26T12:16:37.939Z">Sep 26</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="2 min read"></span></div></div></div></div></div></div></div></div></div></div></div><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><header class="heading heading--borderedBottom u-fontSize18 u-contentSansThin" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title heading-title--dark heading-title--lineHeightTight u-fontSize18 u-contentSansThin">Stories worth reading</span></div></div></header><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------0-----------------------" data-post-id="13e11ddd19e7" data-index="0"><div class="u-lineHeightBase postItem"><a href="https://medium.com/outfit7/the-outfit7-tech-blog-13e11ddd19e7?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/outfit7/the-outfit7-tech-blog-13e11ddd19e7?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*rviJN0y367MrE2fx"); background-position: 50% 50% !important;"><span class="u-textScreenReader">The Outfit7 Tech Blog</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/outfit7/the-outfit7-tech-blog-13e11ddd19e7?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="13e11ddd19e7"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">The Outfit7 Tech Blog</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Hello, world! That line’s been printed to console by every programmer at least once in their lifetime. And it’s also an appropriate way to…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@jon.premik" data-action="show-user-card" data-action-value="83a93acabf8c" data-action-type="hover" data-user-id="83a93acabf8c" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*IL2ob1GA8JYVBtWVim8kwg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jon Premik"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@jon.premik" data-action="show-user-card" data-action-value="83a93acabf8c" data-action-type="hover" data-user-id="83a93acabf8c" dir="auto">Jon Premik</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2022-11-09T14:03:43.118Z">Nov 9, 2022</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="1 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------1-----------------------" data-post-id="14b640e2757b" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/outfit7/building-the-ultimate-mobile-game-engine-starlite-14b640e2757b?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/outfit7/building-the-ultimate-mobile-game-engine-starlite-14b640e2757b?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*d9Zk7nRSza7P9wnjEbMOXQ.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Building the Ultimate Mobile Game Engine: Starlite</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/outfit7/building-the-ultimate-mobile-game-engine-starlite-14b640e2757b?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="14b640e2757b"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Building the Ultimate Mobile Game Engine: Starlite</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">The making of our game engine, Starlite, why we did it, and the impressive results.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@crt.kristl" data-action="show-user-card" data-action-value="b9d3e3fbf665" data-action-type="hover" data-user-id="b9d3e3fbf665" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*52vDhSjGYB9cVy6U" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Črt Kristl"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@crt.kristl" data-action="show-user-card" data-action-value="b9d3e3fbf665" data-action-type="hover" data-user-id="b9d3e3fbf665" dir="auto">Črt Kristl</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-06-01T08:14:11.723Z">Jun 1, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="1 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------2-----------------------" data-post-id="1a44213a12bf" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/outfit7/cracking-the-monolith-a-journey-to-continuous-deployment-1a44213a12bf?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/outfit7/cracking-the-monolith-a-journey-to-continuous-deployment-1a44213a12bf?source=collection_home---4------2-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*orCHpijf_4Az1U6IbPX0gQ.jpeg"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Cracking the Monolith: A Journey to Continuous Deployment</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/outfit7/cracking-the-monolith-a-journey-to-continuous-deployment-1a44213a12bf?source=collection_home---4------2-----------------------" data-action-source="collection_home---4------2-----------------------" data-post-id="1a44213a12bf"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Cracking the Monolith: A Journey to Continuous Deployment</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">TL;DR: At the Outfit7 platform team we are strong believers in agile development principles and recognize that fast and automated…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@mitja.bezensek_98237" data-action="show-user-card" data-action-value="95ecd7ef38ba" data-action-type="hover" data-user-id="95ecd7ef38ba" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*3VkJ01vMUfVDBJYX.jpg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Mitja Bezenšek"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@mitja.bezensek_98237" data-action="show-user-card" data-action-value="95ecd7ef38ba" data-action-type="hover" data-user-id="95ecd7ef38ba" dir="auto">Mitja Bezenšek</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-10-16T08:13:35.805Z">Oct 16, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="8 min read"></span></div></div></div></div></div></div></div></section></div><div class="streamItem streamItem--section js-streamItem"><div class="u-marginTop30 u-xs-marginTop0 u-marginBottom15 u-maxWidth1032 u-marginAuto"><div class="u-table u-width100pct u-height350 u-xs-minHeight350"><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-paddingRight15 u-height350 u-xs-minHeight350" data-source="collection_home---2------0-----------------------" data-post-id="46cf06181893" data-index="0"><div class="u-baseColor--textDark u-height350 u-xs-minHeight350"><a href="https://medium.com/outfit7/the-my-talking-angela-2-hair-system-46cf06181893?source=collection_home---2------0-----------------------" data-post-id="46cf06181893" data-source="collection_home---2------0-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*QeoWDJ4qQhrCS_Ei"); background-position: 50% 50% !important;"><span class="u-textScreenReader">The My Talking Angela 2 Hair System</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15 u-right40Percent u-md-right0"><a class="" href="https://medium.com/outfit7/the-my-talking-angela-2-hair-system-46cf06181893?source=collection_home---2------0-----------------------" data-action-source="collection_home---2------0-----------------------" data-post-id="46cf06181893"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">The My Talking Angela 2 Hair System</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">The making of an easy-to-configure hair system for our hit game, including what it took to make it, and how everything came together.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@aleksander.gregorka" data-action="show-user-card" data-action-value="565c34edb417" data-action-type="hover" data-user-id="565c34edb417" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*cAYUfjr9zj796olrnlP1eg.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Aleksander Gregorka"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@aleksander.gregorka" data-action="show-user-card" data-action-value="565c34edb417" data-action-type="hover" data-user-id="565c34edb417" dir="auto">Aleksander Gregorka</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2022-11-16T16:19:34.780Z">Nov 16, 2022</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="13 min read"></span></div></div></div></div></div></div></div></div><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-height350 u-xs-height250 u-width40pct " data-source="collection_home---2------1-----------------------" data-post-id="1e5c4a50b6c8" data-index="1"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/outfit7/kicking-the-habit-jenkins-detox-in-production-1e5c4a50b6c8?source=collection_home---2------1-----------------------" data-post-id="1e5c4a50b6c8" data-source="collection_home---2------1-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*JQsjnND9Wcgtk2nE"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Kicking the habit: Jenkins detox in production</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15"><a class="" href="https://medium.com/outfit7/kicking-the-habit-jenkins-detox-in-production-1e5c4a50b6c8?source=collection_home---2------1-----------------------" data-action-source="collection_home---2------1-----------------------" data-post-id="1e5c4a50b6c8"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">Kicking the habit: Jenkins detox in production</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">Moving the O7 game build system into the cloud opened up new possibilities for individual game development teams around scaling…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@matic.miklavcic" data-action="show-user-card" data-action-value="1b04d7f0fde6" data-action-type="hover" data-user-id="1b04d7f0fde6" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*PhI0qcA7b7tgksQB.jpg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Matic Miklavčič"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@matic.miklavcic" data-action="show-user-card" data-action-value="1b04d7f0fde6" data-action-type="hover" data-user-id="1b04d7f0fde6" dir="auto">Matic Miklavčič</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-03-02T09:27:55.154Z">Mar 2, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="11 min read"></span></div></div></div></div></div></div></div></div></div><div class="u-table u-width100pct u-height350 u-xs-height250"><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-paddingRight15 u-height350 u-xs-height250 u-width40pct " data-source="collection_home---2------2-----------------------" data-post-id="c5fa1610d786" data-index="2"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/outfit7/the-billion-events-infrastructure-c5fa1610d786?source=collection_home---2------2-----------------------" data-post-id="c5fa1610d786" data-source="collection_home---2------2-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*YpS6May9aFFtbR0D"); background-position: 50% 50% !important;"><span class="u-textScreenReader">The Billion Events Infrastructure</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15"><a class="" href="https://medium.com/outfit7/the-billion-events-infrastructure-c5fa1610d786?source=collection_home---2------2-----------------------" data-action-source="collection_home---2------2-----------------------" data-post-id="c5fa1610d786"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">The Billion Events Infrastructure</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">Outfit7 is, at its core, a data-driven company. Collecting and analyzing performance metrics from our games holds a lot of…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@tilen.kavcic_63182" data-action="show-user-card" data-action-value="c7d7326118b3" data-action-type="hover" data-user-id="c7d7326118b3" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*huBuE1NwJmzOfK05" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Tilen Kavcic"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@tilen.kavcic_63182" data-action="show-user-card" data-action-value="c7d7326118b3" data-action-type="hover" data-user-id="c7d7326118b3" dir="auto">Tilen Kavcic</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2022-12-13T14:32:10.838Z">Dec 13, 2022</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div></div></div></div><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-height350 u-xs-height250" data-source="collection_home---2------3-----------------------" data-post-id="ce93b31b61bd" data-index="3"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/outfit7/creating-a-custom-animation-system-for-unity-ce93b31b61bd?source=collection_home---2------3-----------------------" data-post-id="ce93b31b61bd" data-source="collection_home---2------3-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*TbmS5EonHW_ICYg3"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Creating a custom animation system for Unity</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15 u-right40Percent u-md-right0"><a class="" href="https://medium.com/outfit7/creating-a-custom-animation-system-for-unity-ce93b31b61bd?source=collection_home---2------3-----------------------" data-action-source="collection_home---2------3-----------------------" data-post-id="ce93b31b61bd"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">Creating a custom animation system for Unity</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">TL;DR: Making a custom animation system to reduce the size of assets by 50% and solving all the problems that come with it.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@blaz.tomazic" data-action="show-user-card" data-action-value="5d16f8c96c79" data-action-type="hover" data-user-id="5d16f8c96c79" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*o7nAdO_BYV_0AkMg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Blaž Tomažič"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@blaz.tomazic" data-action="show-user-card" data-action-value="5d16f8c96c79" data-action-type="hover" data-user-id="5d16f8c96c79" dir="auto">Blaž Tomažič</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-07-10T08:52:39.704Z">Jul 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="16 min read"></span></div></div></div></div></div></div></div></div></div><div class="u-table u-width100pct u-height350 u-xs-height250"><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-paddingRight15 u-height350 u-xs-height250" data-source="collection_home---2------4-----------------------" data-post-id="876685f9ed1" data-index="4"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/outfit7/how-we-built-the-compliance-library-on-a-modern-web-framework-876685f9ed1?source=collection_home---2------4-----------------------" data-post-id="876685f9ed1" data-source="collection_home---2------4-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*ILixSBT_BE2a1oyi"); background-position: 50% 50% !important;"><span class="u-textScreenReader">How we built the Compliance library on a modern web framework</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15 u-right40Percent u-md-right0"><a class="" href="https://medium.com/outfit7/how-we-built-the-compliance-library-on-a-modern-web-framework-876685f9ed1?source=collection_home---2------4-----------------------" data-action-source="collection_home---2------4-----------------------" data-post-id="876685f9ed1"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">How we built the Compliance library on a modern web framework</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">How we built the Compliance library on Vue 2 with full offline autonomy and 100% device compatibility.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@primoz.bevk" data-action="show-user-card" data-action-value="752fffec2a47" data-action-type="hover" data-user-id="752fffec2a47" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*Yfeh63vu0fLIS6yfY7UEkw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Primož Bevk"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@primoz.bevk" data-action="show-user-card" data-action-value="752fffec2a47" data-action-type="hover" data-user-id="752fffec2a47" dir="auto">Primož Bevk</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-01-11T13:02:33.857Z">Jan 11, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="1 min read"></span></div></div></div></div></div></div></div></div><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-height350 u-xs-height250 u-width40pct " data-source="collection_home---2------5-----------------------" data-post-id="66e045b2da0" data-index="5"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/outfit7/from-kubernetes-to-a-fully-managed-serverless-platform-66e045b2da0?source=collection_home---2------5-----------------------" data-post-id="66e045b2da0" data-source="collection_home---2------5-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*yZS5LliLtWg1rQKR"); background-position: 50% 50% !important;"><span class="u-textScreenReader">From Kubernetes to a fully managed, serverless platform</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15"><a class="" href="https://medium.com/outfit7/from-kubernetes-to-a-fully-managed-serverless-platform-66e045b2da0?source=collection_home---2------5-----------------------" data-action-source="collection_home---2------5-----------------------" data-post-id="66e045b2da0"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">From Kubernetes to a fully managed, serverless platform</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">Find out how we migrated our ad real-time bidding service from a self-managed Kubernetes cluster to a fully managed Google Cloud…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@bostjan.lasnik" data-action="show-user-card" data-action-value="b53717573314" data-action-type="hover" data-user-id="b53717573314" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*ak1uGpAhFENR62rH8VLdQA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Boštjan Lasnik"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@bostjan.lasnik" data-action="show-user-card" data-action-value="b53717573314" data-action-type="hover" data-user-id="b53717573314" dir="auto">Boštjan Lasnik</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-04-06T08:53:05.891Z">Apr 6, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div></div></div></div></div></div></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #858484 !important;} .u-accentColor--borderNormal {border-color: #858484 !important;} .u-accentColor--borderDark {border-color: #737171 !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #858484 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #858484 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #737171 !important;} .u-accentColor--textNormal {color: #737171 !important;} .u-accentColor--hoverTextNormal:hover {color: #737171 !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #696868 !important;} .u-accentColor--textDark {color: #696868 !important;} .u-accentColor--backgroundLight {background-color: #858484 !important;} .u-accentColor--backgroundNormal {background-color: #858484 !important;} .u-accentColor--backgroundDark {background-color: #737171 !important;} .u-accentColor--buttonDark {border-color: #737171 !important; color: #696868 !important;} .u-accentColor--buttonDark:hover {border-color: #696868 !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #737171 !important; fill: #737171 !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #858484 !important; color: #737171 !important;} .u-accentColor--buttonNormal:hover {border-color: #737171 !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #858484 !important; fill: #858484 !important;} .u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #737171 !important; border-color: #737171 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #858484 !important; border-color: #858484 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #737171 !important;}.u-tintBgColor {background-color: rgba(17, 17, 17, 1) !important;}.u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(17, 17, 17, 1) 0%, rgba(17, 17, 17, 0) 100%) !important;}.u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(17, 17, 17, 0) 0%, rgba(17, 17, 17, 1) 100%) !important;} .u-tintSpectrum .u-baseColor--borderLight {border-color: #939292 !important;} .u-tintSpectrum .u-baseColor--borderNormal {border-color: #BDBBBB !important;} .u-tintSpectrum .u-baseColor--borderDark {border-color: #E5E2E2 !important;} .u-tintSpectrum .u-baseColor--iconLight .svgIcon,.u-tintSpectrum .u-baseColor--iconLight.svgIcon {fill: #939292 !important;} .u-tintSpectrum .u-baseColor--iconNormal .svgIcon,.u-tintSpectrum .u-baseColor--iconNormal.svgIcon {fill: #BDBBBB !important;} .u-tintSpectrum .u-baseColor--iconDark .svgIcon,.u-tintSpectrum .u-baseColor--iconDark.svgIcon {fill: #E5E2E2 !important;} .u-tintSpectrum .u-baseColor--textNormal {color: #BDBBBB !important;} .u-tintSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--textDark {color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--textDarker {color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--backgroundLight {background-color: #939292 !important;} .u-tintSpectrum .u-baseColor--backgroundNormal {background-color: #BDBBBB !important;} .u-tintSpectrum .u-baseColor--backgroundDark {background-color: #E5E2E2 !important;} .u-tintSpectrum .u-baseColor--buttonLight {border-color: #939292 !important; color: #939292 !important;} .u-tintSpectrum .u-baseColor--buttonLight:hover {border-color: #939292 !important;} .u-tintSpectrum .u-baseColor--buttonLight .icon:before,.u-tintSpectrum .u-baseColor--buttonLight .svgIcon {color: #939292 !important; fill: #939292 !important;} .u-tintSpectrum .u-baseColor--buttonDark {border-color: #E5E2E2 !important; color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--buttonDark:hover {border-color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--buttonDark .icon:before,.u-tintSpectrum .u-baseColor--buttonDark .svgIcon {color: #E5E2E2 !important; fill: #E5E2E2 !important;} .u-tintSpectrum .u-baseColor--buttonNormal {border-color: #BDBBBB !important; color: #BDBBBB !important;} .u-tintSpectrum .u-baseColor--buttonNormal:hover {border-color: #E5E2E2 !important;} .u-tintSpectrum .u-baseColor--buttonNormal .icon:before,.u-tintSpectrum .u-baseColor--buttonNormal .svgIcon {color: #BDBBBB !important; fill: #BDBBBB !important;} .u-tintSpectrum .u-baseColor--buttonDark.button--filled,.u-tintSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: #E5E2E2 !important; border-color: #E5E2E2 !important; color: rgba(17, 17, 17, 1) !important; fill: rgba(17, 17, 17, 1) !important;} .u-tintSpectrum .u-baseColor--buttonNormal.button--filled,.u-tintSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: #BDBBBB !important; border-color: #BDBBBB !important; color: rgba(17, 17, 17, 1) !important; fill: rgba(17, 17, 17, 1) !important;} .u-tintSpectrum .u-baseColor--link {color: #BDBBBB !important;} .u-tintSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--link.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--darken:active {color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--link.link--dark {color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:active {color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--link.link--darker {color: #F8F5F5 !important;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: #939292;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: #939292;} .u-tintSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: #939292;} .u-tintSpectrum .ui-h1,.u-tintSpectrum .ui-h2,.u-tintSpectrum .ui-h3,.u-tintSpectrum .ui-h4,.u-tintSpectrum .ui-brand1,.u-tintSpectrum .ui-brand2,.u-tintSpectrum .ui-captionStrong {color: #F8F5F5 !important; fill: #F8F5F5 !important;} .u-tintSpectrum .ui-body,.u-tintSpectrum .ui-caps {color: #F8F5F5 !important; fill: #F8F5F5 !important;} .u-tintSpectrum .ui-summary,.u-tintSpectrum .ui-caption {color: #939292 !important; fill: #939292 !important;} .u-tintSpectrum .u-accentColor--borderLight {border-color: #939292 !important;} .u-tintSpectrum .u-accentColor--borderNormal {border-color: #BDBBBB !important;} .u-tintSpectrum .u-accentColor--borderDark {border-color: #E5E2E2 !important;} .u-tintSpectrum .u-accentColor--iconLight .svgIcon,.u-tintSpectrum .u-accentColor--iconLight.svgIcon {fill: #939292 !important;} .u-tintSpectrum .u-accentColor--iconNormal .svgIcon,.u-tintSpectrum .u-accentColor--iconNormal.svgIcon {fill: #BDBBBB !important;} .u-tintSpectrum .u-accentColor--iconDark .svgIcon,.u-tintSpectrum .u-accentColor--iconDark.svgIcon {fill: #E5E2E2 !important;} .u-tintSpectrum .u-accentColor--textNormal {color: #BDBBBB !important;} .u-tintSpectrum .u-accentColor--hoverTextNormal:hover {color: #BDBBBB !important;} .u-tintSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #F8F5F5 !important;} .u-tintSpectrum .u-accentColor--textDark {color: #F8F5F5 !important;} .u-tintSpectrum .u-accentColor--backgroundLight {background-color: #939292 !important;} .u-tintSpectrum .u-accentColor--backgroundNormal {background-color: #BDBBBB !important;} .u-tintSpectrum .u-accentColor--backgroundDark {background-color: #E5E2E2 !important;} .u-tintSpectrum .u-accentColor--buttonDark {border-color: #E5E2E2 !important; color: #F8F5F5 !important;} .u-tintSpectrum .u-accentColor--buttonDark:hover {border-color: #F8F5F5 !important;} .u-tintSpectrum .u-accentColor--buttonDark .icon:before,.u-tintSpectrum .u-accentColor--buttonDark .svgIcon{color: #E5E2E2 !important; fill: #E5E2E2 !important;} .u-tintSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #BDBBBB !important; color: #BDBBBB !important;} .u-tintSpectrum .u-accentColor--buttonNormal:hover {border-color: #E5E2E2 !important;} .u-tintSpectrum .u-accentColor--buttonNormal .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal .svgIcon{color: #BDBBBB !important; fill: #BDBBBB !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(17, 17, 17, 1) !important; fill: rgba(17, 17, 17, 1) !important;} .u-tintSpectrum .u-accentColor--buttonDark.button--filled,.u-tintSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-tintSpectrum .u-accentColor--fillWhenActive.is-active {background-color: #E5E2E2 !important; border-color: #E5E2E2 !important; color: rgba(17, 17, 17, 1) !important; fill: rgba(17, 17, 17, 1) !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-tintSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #BDBBBB !important; border-color: #BDBBBB !important; color: rgba(17, 17, 17, 1) !important; fill: rgba(17, 17, 17, 1) !important;} .u-tintSpectrum .postArticle.is-withAccentColors .markup--user,.u-tintSpectrum .postArticle.is-withAccentColors .markup--query {color: #BDBBBB !important;} .u-accentColor--highlightFaint {background-color: rgba(243, 240, 239, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(225, 223, 222, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(243, 240, 239, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(243, 240, 239, 1), rgba(243, 240, 239, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(233, 231, 230, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(233, 231, 230, 1), rgba(233, 231, 230, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(225, 223, 222, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(225, 223, 222, 1), rgba(225, 223, 222, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(225, 223, 222, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(225, 223, 222, 1), rgba(225, 223, 222, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(225, 223, 222, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(225, 223, 222, 1), rgba(225, 223, 222, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style><div class="js-collectionFooter u-tintBgColor u-hide"><div class="container u-maxWidth1040"><div class="u-marginTop10 u-paddingTop10 u-paddingBottom30 u-tintSpectrum"><div class="linkSet u-clearfix"><div class="u-floatRight u-textColorNormal u-baseColor--textNormal u-xs-floatLeft"><a class="button button--chromeless u-baseColor--buttonNormal u-marginLeft15 u-lineHeight35 u-xs-block u-xs-marginLeft0" href="https://medium.com/outfit7/about" title="About Outfit7" aria-label="About Outfit7">About Outfit7</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/outfit7/latest" title="Latest Stories for Outfit7" aria-label="Latest Stories for Outfit7">Latest Stories</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/outfit7/archive" title="Archive for Outfit7" aria-label="Archive for Outfit7">Archive</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/about">About Medium</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f">Terms</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9">Privacy</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/business">Teams</a></div></div></div></div></div></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://medium.com","buildLabel":"20241126-1740-root","currentUser":{"userId":"lo_f6c5b8341172","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.95z8xpkUEidhPbIWsh2BVw.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.zqOu8dxaQRtqDyChHdOWlQ.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.y0UkxCxPBUbLlduk5XbwLQ.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.eZhPgaD8AglnbC5Rzxqvhg.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.XeRjm4FlHTBOsUvoOQ6Ppg.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.r9MSvtAmj0CMkyIC0CCCbA.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.AiXyuYj3AvxRA1-7HEyP9Q.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.fsLyLvZO4VZXL_zb4RXgeg.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.6Dyc-nVN2MDV_AM9XDAZug.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.rUyrVjlTpUj61voxnZosQw.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.2I2tXSo7-rbez_WYXfga0Q.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1732709686972:1775f2aafc1d","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"enable_abandoned_cart_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bayesian_average_pub_search":true,"enable_bg_post_post":true,"enable_billing_frequency_on_step2":"group_1","enable_boost_nia_v01":true,"enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_diversification_rex":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_explicit_signals":true,"enable_explicit_signals_updated_post_previews":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_iceland_forced_android":true,"enable_import":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_post_bottom_responses":true,"enable_post_bottom_responses_input":true,"enable_pp_country_expansion":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_publication_hierarchy_web":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_tribute_landing_page":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":"3","onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.95z8xpkUEidhPbIWsh2BVw.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"Collection":{"6ec626d5ad62":{"id":"6ec626d5ad62","name":"Outfit7","slug":"outfit7","tags":["TECHNOLOGY","ENGINEERING","SOFTWARE DEVELOPMENT","GAME DEVELOPMENT","PROGRAMMING"],"creatorId":"ebaddf6e1f2a","description":"The inside scoop on development, engineering & tech innovation @ Outfit7.","shortDescription":"The inside scoop on development, engineering & tech…","image":{"imageId":"1*dCIQWfMya9g57UUL2ZzrJQ.png","filter":"","backgroundSize":"","originalWidth":10952,"originalHeight":10952,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":53,"activeAt":1727352998013},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*nTxl_7KgWQYo8PfVROUK_A.png","filter":"","backgroundSize":"","originalWidth":4566,"originalHeight":4566,"strategy":"resample","height":0,"width":0},"facebookPageName":"outfit7","collectionMastheadId":"ee5d0b65bfc","sections":[{"type":2,"collectionHeaderMetadata":{"title":"The inside scoop on development, engineering & tech innovation","description":"","backgroundImage":{"id":"1*lduq8q-DAzZbQ9GtDcLBvw.png","originalWidth":5857,"originalHeight":998,"focusPercentX":53.57142857142857,"focusPercentY":95.83333333333333},"logoImage":{"id":"1*rsxLbtYH2VSNPlCVkyXhSw@2x.png","originalWidth":2062,"originalHeight":277,"alt":"Outfit7"},"alignment":2,"layout":5}},{"type":1,"postListMetadata":{"source":1,"layout":2,"number":1,"postIds":[]}},{"type":1,"postListMetadata":{"source":2,"layout":4,"number":3,"postIds":[],"sectionHeader":"Stories worth reading"}},{"type":1,"postListMetadata":{"source":3,"layout":2,"number":10,"postIds":["46cf06181893","1e5c4a50b6c8","c5fa1610d786","ce93b31b61bd","876685f9ed1","66e045b2da0"]}}],"tintColor":"#FF111111","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF858484","point":0},{"color":"#FF7C7B7B","point":0.1},{"color":"#FF737171","point":0.2},{"color":"#FF696868","point":0.3},{"color":"#FF5F5E5E","point":0.4},{"color":"#FF555454","point":0.5},{"color":"#FF4A4949","point":0.6},{"color":"#FF3F3E3E","point":0.7},{"color":"#FF343333","point":0.8},{"color":"#FF272727","point":0.9},{"color":"#FF1A1A1A","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF111111","point":0},{"color":"#FF313131","point":0.1},{"color":"#FF4D4C4C","point":0.2},{"color":"#FF666565","point":0.3},{"color":"#FF7D7C7C","point":0.4},{"color":"#FF939292","point":0.5},{"color":"#FFA9A7A7","point":0.6},{"color":"#FFBDBBBB","point":0.7},{"color":"#FFD2CFCF","point":0.8},{"color":"#FFE5E2E2","point":0.9},{"color":"#FFF8F5F5","point":1}],"backgroundColor":"#FF111111"},"highlightSpectrum":{"colorPoints":[{"color":"#FFF5F2F1","point":0},{"color":"#FFF3F0EF","point":0.1},{"color":"#FFF1EEEE","point":0.2},{"color":"#FFEFECEC","point":0.3},{"color":"#FFEDEAEA","point":0.4},{"color":"#FFEBE8E8","point":0.5},{"color":"#FFE9E7E6","point":0.6},{"color":"#FFE7E5E4","point":0.7},{"color":"#FFE5E3E2","point":0.8},{"color":"#FFE3E1E0","point":0.9},{"color":"#FFE1DFDE","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF9E9C9C","point":0},{"color":"#FFA6A5A4","point":0.1},{"color":"#FFAFADAD","point":0.2},{"color":"#FFB7B6B5","point":0.3},{"color":"#FFC0BEBD","point":0.4},{"color":"#FFC8C6C6","point":0.5},{"color":"#FFD0CECE","point":0.6},{"color":"#FFD9D6D6","point":0.7},{"color":"#FFE1DEDD","point":0.8},{"color":"#FFE9E6E5","point":0.9},{"color":"#FFF0EEED","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":8,"title":"All","url":"https://medium.com/outfit7/latest"},{"type":4,"title":"Game Dev","url":"https://medium.com/outfit7/game-dev/home","topicId":"d7f7473196df","source":"topicId"},{"type":4,"title":"QA","url":"https://medium.com/outfit7/qa/home","topicId":"29a5e7ebfcfc","source":"topicId"},{"type":2,"title":"About","postId":"13e11ddd19e7","url":"https://medium.com/outfit7/the-outfit7-tech-blog-13e11ddd19e7","source":"postId"},{"type":3,"title":"Jobs","url":"https://outfit7.com/careers/jobs?field=technology&utm_source=social&utm_medium=medium&utm_campaign=tech-jobs"}],"colorBehavior":2,"collectionFeatures":[30],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"The inside scoop on development, engineering & tech innovation","description":"","backgroundImage":{"id":"1*lduq8q-DAzZbQ9GtDcLBvw.png","originalWidth":5857,"originalHeight":998,"focusPercentX":53.57142857142857,"focusPercentY":95.83333333333333},"logoImage":{"id":"1*rsxLbtYH2VSNPlCVkyXhSw@2x.png","originalWidth":2062,"originalHeight":277,"alt":"Outfit7"},"alignment":2,"layout":5},"subscriberCount":53,"tagline":"Our playground, your game.","instagramUsername":"outfit7","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"1*GJaVmaUaWCbCnxCoWDGxpw.png","filter":"","backgroundSize":"","originalWidth":1500,"originalHeight":749,"strategy":"resample","height":0,"width":0},"type":"Collection"}},"User":{"3215f0e451af":{"userId":"3215f0e451af","name":"Jure Gorinsek","username":"jure.gorinsek_80693","createdAt":1712220254385,"imageId":"0*n3730i_0LsgcubhV","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"83a93acabf8c":{"userId":"83a93acabf8c","name":"Jon Premik","username":"jon.premik","createdAt":1553612603109,"imageId":"1*IL2ob1GA8JYVBtWVim8kwg.jpeg","backgroundImageId":"","bio":"Senior Backend Engineer. Director of Technology. Tech Enthusiast. Proud dad. Dog person. Food & Travel.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,21,29,2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"b9d3e3fbf665":{"userId":"b9d3e3fbf665","name":"Črt Kristl","username":"crt.kristl","createdAt":1685362589171,"imageId":"0*52vDhSjGYB9cVy6U","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"95ecd7ef38ba":{"userId":"95ecd7ef38ba","name":"Mitja Bezenšek","username":"mitja.bezensek_98237","createdAt":1585722546485,"imageId":"0*3VkJ01vMUfVDBJYX.jpg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,12,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"565c34edb417":{"userId":"565c34edb417","name":"Aleksander Gregorka","username":"aleksander.gregorka","createdAt":1668504942978,"imageId":"1*cAYUfjr9zj796olrnlP1eg.png","backgroundImageId":"","bio":"Senior Software Engineer, Game Developer, Maker of Things.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"1b04d7f0fde6":{"userId":"1b04d7f0fde6","name":"Matic Miklavčič","username":"matic.miklavcic","createdAt":1550061764787,"imageId":"0*PhI0qcA7b7tgksQB.jpg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"c7d7326118b3":{"userId":"c7d7326118b3","name":"Tilen Kavcic","username":"tilen.kavcic_63182","createdAt":1596789297279,"imageId":"0*huBuE1NwJmzOfK05","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"5d16f8c96c79":{"userId":"5d16f8c96c79","name":"Blaž Tomažič","username":"blaz.tomazic","createdAt":1688381785699,"imageId":"0*o7nAdO_BYV_0AkMg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en","type":"User"},"752fffec2a47":{"userId":"752fffec2a47","name":"Primož Bevk","username":"primoz.bevk","createdAt":1673439624268,"imageId":"1*Yfeh63vu0fLIS6yfY7UEkw.jpeg","backgroundImageId":"","bio":"Senior Lead Software Engineer, Web Developer, Gamer","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[19,2,29],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"b53717573314":{"userId":"b53717573314","name":"Boštjan Lasnik","username":"bostjan.lasnik","createdAt":1680610147320,"imageId":"1*ak1uGpAhFENR62rH8VLdQA.jpeg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2,29,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"}},"Post":{"b317a75e1447":{"id":"b317a75e1447","versionId":"7d2e10f6923a","creatorId":"3215f0e451af","homeCollectionId":"6ec626d5ad62","title":"New home for Outfit7 tech articles","detectedLanguage":"en","latestVersion":"7d2e10f6923a","latestPublishedVersion":"7d2e10f6923a","hasUnpublishedEdits":false,"latestRev":46,"createdAt":1727339886177,"updatedAt":1731729215202,"acceptedAt":0,"firstPublishedAt":1727352997939,"latestPublishedAt":1727355819112,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Hey, tech enthusiasts!","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Omir8OiKC9D30ujLb-QrSQ.jpeg","filter":"","backgroundSize":"","originalWidth":1200,"originalHeight":675,"strategy":"resample","height":0,"width":0},"wordCount":243,"imageCount":1,"readingTime":1.1169811320754717,"subtitle":"Hey, tech enthusiasts!","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":2,"isBookmarked":false,"tags":[],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://outfit7.com","alts":[],"httpStatus":200},{"url":"https://outfit7.com/blog/tech?utm_source=social&utm_medium=medium&utm_campaign=redirect","alts":[],"httpStatus":200},{"url":"https://outfit7.com/careers","alts":[],"httpStatus":200},{"url":"https://outfit7.com/blog/news/talking-tom-and-friends-1-for-global-downloads-10-years-in-a-row","alts":[],"httpStatus":200},{"url":"https://talkingtomandfriends.com/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1727355819412},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":51,"sectionCount":1,"readingList":0,"topics":[]},"coverless":true,"slug":"new-home-for-outfit7-tech-articles","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"new-home-for-outfit7-tech-articles-b317a75e1447","previewContent":{"bodyModel":{"paragraphs":[{"name":"4bb7","type":3,"text":"New home for Outfit7 tech articles","markups":[],"alignment":1},{"name":"d96d","type":4,"text":"","markups":[],"layout":9,"metadata":{"id":"1*Omir8OiKC9D30ujLb-QrSQ.jpeg","originalWidth":1200,"originalHeight":675}},{"name":"8d6b","type":1,"text":"Hey, tech enthusiasts!","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Hey, tech enthusiasts!"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"4bb7","type":3,"text":"New home for Outfit7 tech articles","markups":[]},{"name":"d96d","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*Omir8OiKC9D30ujLb-QrSQ.jpeg","originalWidth":1200,"originalHeight":675}},{"name":"8d6b","type":1,"text":"Hey, tech enthusiasts!","markups":[]},{"name":"a90d","type":1,"text":"We’ve got exciting news! At Outfit7, we always strive to improve how we connect with our passionate tech community. That’s why we’re moving all the articles from Medium to our new Outfit7 Tech Blog on our official website. If you’ve been following us since our first post…","markups":[{"type":3,"start":180,"end":197,"href":"https://outfit7.com/blog/tech?utm_source=social&utm_medium=medium&utm_campaign=redirect","title":"","rel":"","anchorType":0},{"type":3,"start":204,"end":221,"href":"https://outfit7.com","title":"","rel":"","anchorType":0},{"type":3,"start":314,"end":335,"href":"https://talkingtomandfriends.com/","title":"","rel":"","anchorType":0},{"type":3,"start":626,"end":673,"href":"https://outfit7.com/blog/news/talking-tom-and-friends-1-for-global-downloads-10-years-in-a-row","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"910b","startIndex":0}]},"isFullContent":false,"subtitle":"Hey, tech enthusiasts!"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"13e11ddd19e7":{"id":"13e11ddd19e7","versionId":"265f97881f17","creatorId":"83a93acabf8c","homeCollectionId":"6ec626d5ad62","title":"The Outfit7 Tech Blog","detectedLanguage":"en","latestVersion":"265f97881f17","latestPublishedVersion":"265f97881f17","hasUnpublishedEdits":false,"latestRev":155,"createdAt":1668001586423,"updatedAt":1727364283768,"acceptedAt":0,"firstPublishedAt":1668002623118,"latestPublishedAt":1727353251035,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Hello, world! That line’s been printed to console by every programmer at least once in their lifetime. And it’s also an appropriate way to…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*rviJN0y367MrE2fx","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":838,"strategy":"resample","height":0,"width":0},"wordCount":49,"imageCount":1,"readingTime":0.3849056603773585,"subtitle":"Hello, world! That line’s been printed to console by every programmer at least once in their lifetime. And it’s also an appropriate way to…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":23,"isBookmarked":false,"tags":[{"slug":"tech-blog","name":"Tech Blog","postCount":882,"metadata":{"postCount":882,"coverImage":{"id":"1*2WV5AOMwP-tRPslH2O1zmg.png","originalWidth":834,"originalHeight":688,"isFeatured":true}},"type":"Tag"},{"slug":"technology","name":"Technology","postCount":2704379,"metadata":{"postCount":2704379,"coverImage":{"id":"1*yH2cmH1uhoFpR7HIseOAsw.jpeg"}},"type":"Tag"},{"slug":"game-development","name":"Game Development","postCount":54919,"metadata":{"postCount":54919,"coverImage":{"id":"1*8u1zOu-4hwukClkplCOHSQ.jpeg","originalWidth":994,"originalHeight":742,"isFeatured":true}},"type":"Tag"},{"slug":"engineering-blog","name":"Engineering Blog","postCount":114,"metadata":{"postCount":114,"coverImage":{"id":"1*hFBpDSrh_nL7eeJICzJLRg.png","originalWidth":1200,"originalHeight":630,"isFeatured":true}},"type":"Tag"},{"slug":"software-development","name":"Software Development","postCount":326803,"metadata":{"postCount":326803,"coverImage":{"id":"1*t5dwn8IabnCdEpoO-6Toog.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Kubernetes"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://outfit7.com/blog/tech/the-outfit7-tech-blog?utm_source=social&utm_medium=medium&utm_campaign=hello-world","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1727353251467},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":106,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"the-outfit7-tech-blog","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"the-outfit7-tech-blog-13e11ddd19e7","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*rviJN0y367MrE2fx","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"The Outfit7 Tech Blog","alignment":1},{"name":"previewSubtitle","type":13,"text":"Hello, world! That line’s been printed to console by every programmer at least…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Hello, world! That line’s been printed to console by every programmer at least once in their lifetime. And it’s also an appropriate way to…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"8f38","type":3,"text":"The Outfit7 Tech Blog","markups":[]},{"name":"19f4","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*rviJN0y367MrE2fx","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"6330","type":1,"text":"This article is now available on the Outfit7 Tech Blog!","markups":[{"type":1,"start":0,"end":55}]},{"name":"03ae","type":1,"text":"We’ve moved this content to our website’s official Outfit7 Tech Blog. \nYou can now find the full article here.","markups":[{"type":3,"start":105,"end":109,"href":"https://outfit7.com/blog/tech/the-outfit7-tech-blog?utm_source=social&utm_medium=medium&utm_campaign=hello-world","title":"","rel":"","anchorType":0},{"type":1,"start":51,"end":68}]},{"name":"09ef","type":1,"text":"Visit our new blog for more tech insights, mobile game development tips, and software engineering stories!","markups":[]}],"sections":[{"name":"6476","startIndex":0}]},"isFullContent":true,"subtitle":"Hello, world! That line’s been printed to console by every programmer at least once in their lifetime. And it’s also an appropriate way to…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":true,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"14b640e2757b":{"id":"14b640e2757b","versionId":"7ec6219856f6","creatorId":"b9d3e3fbf665","homeCollectionId":"6ec626d5ad62","title":"Building the Ultimate Mobile Game Engine: Starlite","detectedLanguage":"en","latestVersion":"7ec6219856f6","latestPublishedVersion":"7ec6219856f6","hasUnpublishedEdits":false,"latestRev":1868,"createdAt":1685363107668,"updatedAt":1727353485383,"acceptedAt":0,"firstPublishedAt":1685607251723,"latestPublishedAt":1727353477514,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"The making of our game engine, Starlite, why we did it, and the impressive results.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*d9Zk7nRSza7P9wnjEbMOXQ.png","filter":"","backgroundSize":"","originalWidth":1920,"originalHeight":1005,"strategy":"resample","height":0,"width":0},"wordCount":52,"imageCount":1,"readingTime":0.39622641509433965,"subtitle":"The making of our game engine, Starlite, why we did it, and the impressive results.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":11,"isBookmarked":false,"tags":[{"slug":"game-engine","name":"Game Engine","postCount":587,"metadata":{"postCount":587,"coverImage":{"id":"0*uWlk-ojUiO_wJe9-.png","originalWidth":759,"originalHeight":427,"isFeatured":true}},"type":"Tag"},{"slug":"game-development","name":"Game Development","postCount":54919,"metadata":{"postCount":54919,"coverImage":{"id":"1*8u1zOu-4hwukClkplCOHSQ.jpeg","originalWidth":994,"originalHeight":742,"isFeatured":true}},"type":"Tag"},{"slug":"game-engine-and-editor","name":"Game Engine And Editor","postCount":1,"metadata":{"postCount":1,"coverImage":{"id":"1*d9Zk7nRSza7P9wnjEbMOXQ.png","originalWidth":1920,"originalHeight":1005,"isFeatured":true}},"type":"Tag"},{"slug":"development","name":"Development","postCount":112909,"metadata":{"postCount":112909,"coverImage":{"id":"1*DPw7pNo7fvA9rwpQ2vsvDg.jpeg","originalWidth":5940,"originalHeight":4455,"isFeatured":true}},"type":"Tag"},{"slug":"cross-platform","name":"Cross Platform","postCount":3804,"metadata":{"postCount":3804,"coverImage":{"id":"1*pMpW21OOuo7x5fpRUAYqRA.png","originalWidth":916,"originalHeight":577,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://outfit7.com/blog/tech/building-the-ultimate-mobile-game-engine-starlite?utm_source=social&utm_medium=medium&utm_campaign=starlite","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1727353478069},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":39,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"building-the-ultimate-mobile-game-engine-starlite","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"building-the-ultimate-mobile-game-engine-starlite-14b640e2757b","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*d9Zk7nRSza7P9wnjEbMOXQ.png","originalWidth":1920,"originalHeight":1005,"isFeatured":true}},{"name":"6d84","type":3,"text":"Building the Ultimate Mobile Game Engine: Starlite","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"The making of our game engine, Starlite, why we did it, and the impressive results."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"6d84","type":3,"text":"Building the Ultimate Mobile Game Engine: Starlite","markups":[]},{"name":"ceaf","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*d9Zk7nRSza7P9wnjEbMOXQ.png","originalWidth":1920,"originalHeight":1005,"isFeatured":true}},{"name":"48a7","type":1,"text":"This article is now available on the Outfit7 Tech Blog!","markups":[{"type":1,"start":0,"end":55}]},{"name":"e992","type":1,"text":"We’ve moved this content to our website’s official Outfit7 Tech Blog.\nYou can now find the full article here.","markups":[{"type":3,"start":104,"end":108,"href":"https://outfit7.com/blog/tech/building-the-ultimate-mobile-game-engine-starlite?utm_source=social&utm_medium=medium&utm_campaign=starlite","title":"","rel":"","anchorType":0},{"type":1,"start":51,"end":68}]},{"name":"fe3d","type":1,"text":"Visit our new blog for more tech insights, mobile game development tips, and software engineering stories!","markups":[]}],"sections":[{"name":"5534","startIndex":0}]},"isFullContent":true,"subtitle":"The making of our game engine, Starlite, why we did it, and the impressive results."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":true,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"1a44213a12bf":{"id":"1a44213a12bf","versionId":"b85cc81595ea","creatorId":"95ecd7ef38ba","homeCollectionId":"6ec626d5ad62","title":"Cracking the Monolith: A Journey to Continuous Deployment","detectedLanguage":"en","latestVersion":"b85cc81595ea","latestPublishedVersion":"b85cc81595ea","hasUnpublishedEdits":false,"latestRev":271,"createdAt":1696852509856,"updatedAt":1697444314729,"acceptedAt":0,"firstPublishedAt":1697444015805,"latestPublishedAt":1697444311085,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"TL;DR: At the Outfit7 platform team we are strong believers in agile development principles and recognize that fast and automated…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*orCHpijf_4Az1U6IbPX0gQ.jpeg","filter":"","backgroundSize":"","originalWidth":1920,"originalHeight":1005,"strategy":"resample","height":0,"width":0},"wordCount":1712,"imageCount":7,"readingTime":7.510377358490566,"subtitle":"TL;DR: At the Outfit7 platform team we are strong believers in agile development principles and recognize that fast and automated…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":9,"isBookmarked":false,"tags":[{"slug":"devops","name":"DevOps","postCount":101777,"metadata":{"postCount":101777,"coverImage":{"id":"1*BqVsCBa2mLv1UWQrdhjX5w.png","originalWidth":1500,"originalHeight":750,"isFeatured":true,"alt":"How I Am Using a Lifetime 100% Free Server"}},"type":"Tag"},{"slug":"continuous-deployment","name":"Continuous Deployment","postCount":1659,"metadata":{"postCount":1659,"coverImage":{"id":"1*p-yW2S5P-UozoqxJAIIDXw.jpeg","originalWidth":3967,"originalHeight":2973,"isFeatured":true}},"type":"Tag"},{"slug":"continuous-delivery","name":"Continuous Delivery","postCount":4679,"metadata":{"postCount":4679,"coverImage":{"id":"1*JDKxmDwriUdVxUSyMwaFyA.png","originalWidth":839,"originalHeight":412,"isFeatured":true}},"type":"Tag"},{"slug":"cloud","name":"Cloud","postCount":47127,"metadata":{"postCount":47127,"coverImage":{"id":"1*MBbxmlYdhaEM-lmLYBbKdQ.jpeg","originalWidth":1024,"originalHeight":1024}},"type":"Tag"},{"slug":"continuous-integration","name":"Continuous Integration","postCount":8603,"metadata":{"postCount":8603,"coverImage":{"id":"1*JDKxmDwriUdVxUSyMwaFyA.png","originalWidth":839,"originalHeight":412,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://itrevolution.com/product/the-phoenix-project/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1697444311208},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":35,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"cracking-the-monolith-a-journey-to-continuous-deployment","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"cracking-the-monolith-a-journey-to-continuous-deployment-1a44213a12bf","previewContent":{"bodyModel":{"paragraphs":[{"name":"34d2","type":3,"text":"Cracking the Monolith: A Journey to Continuous Deployment","markups":[],"alignment":1},{"name":"0d43","type":1,"text":"TL;DR: At the Outfit7 platform team we are strong believers in agile development principles and recognize that fast and automated deployments are essential. We’ll see how we made this happen by transforming our deployment process…","markups":[{"type":2,"start":0,"end":229}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"TL;DR: At the Outfit7 platform team we are strong believers in agile development principles and recognize that fast and automated…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"34d2","type":3,"text":"Cracking the Monolith: A Journey to Continuous Deployment","markups":[]},{"name":"0d43","type":1,"text":"TL;DR: At the Outfit7 platform team we are strong believers in agile development principles and recognize that fast and automated deployments are essential. We’ll see how we made this happen by transforming our deployment process moving from a manual deployment pipeline to fully automated continuous deployment.","markups":[{"type":2,"start":0,"end":312}]},{"name":"7df0","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*orCHpijf_4Az1U6IbPX0gQ.jpeg","originalWidth":1920,"originalHeight":1005}},{"name":"8b29","type":1,"text":"Hi, I’m Mitja Bezenšek…","markups":[]}],"sections":[{"name":"05f5","startIndex":0}]},"isFullContent":false,"subtitle":"TL;DR: At the Outfit7 platform team we are strong believers in agile development principles and recognize that fast and automated…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"46cf06181893":{"id":"46cf06181893","versionId":"fe52d6145399","creatorId":"565c34edb417","homeCollectionId":"6ec626d5ad62","title":"The My Talking Angela 2 Hair System","detectedLanguage":"en","latestVersion":"fe52d6145399","latestPublishedVersion":"fe52d6145399","hasUnpublishedEdits":false,"latestRev":738,"createdAt":1668505019661,"updatedAt":1668689403145,"acceptedAt":0,"firstPublishedAt":1668615574780,"latestPublishedAt":1668684025148,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"The making of an easy-to-configure hair system for our hit game, including what it took to make it, and how everything came together.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*QeoWDJ4qQhrCS_Ei","filter":"","backgroundSize":"","originalWidth":1003,"originalHeight":634,"strategy":"resample","height":0,"width":0},"wordCount":2746,"imageCount":27,"readingTime":12.462264150943396,"subtitle":"The making of an easy-to-configure hair system for our hit game, including what it took to make it, and how everything came together.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":18,"isBookmarked":false,"tags":[{"slug":"game-development","name":"Game Development","postCount":54919,"metadata":{"postCount":54919,"coverImage":{"id":"1*8u1zOu-4hwukClkplCOHSQ.jpeg","originalWidth":994,"originalHeight":742,"isFeatured":true}},"type":"Tag"},{"slug":"procedural-animation","name":"Procedural Animation","postCount":11,"metadata":{"postCount":11,"coverImage":{"id":"1*xPhpduadwFt1k89-69ES_A.gif","originalWidth":782,"originalHeight":500,"isFeatured":true}},"type":"Tag"},{"slug":"simulation","name":"Simulation","postCount":5929,"metadata":{"postCount":5929,"coverImage":{"id":"1*XRsoQUnkx5wQs7YAmaJfMQ.png","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"mobile-games","name":"Mobile Games","postCount":7468,"metadata":{"postCount":7468,"coverImage":{"id":"1*w3o5dfASyR0zVa5EKoMx3w.png","originalWidth":1200,"originalHeight":628}},"type":"Tag"},{"slug":"rendering","name":"Rendering","postCount":2121,"metadata":{"postCount":2121,"coverImage":{"id":"0*CFbGs9nU6YYTj7zc","originalWidth":4515,"originalHeight":3010,"isFeatured":true,"unsplashPhotoId":"UYsBCu9RP3Y"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://en.wikipedia.org/wiki/UV_mapping","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Verlet_integration","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Skeletal_animation#Technique","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1668684025513},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":86,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"the-my-talking-angela-2-hair-system","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"the-my-talking-angela-2-hair-system-46cf06181893","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*QeoWDJ4qQhrCS_Ei","originalWidth":1003,"originalHeight":634,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"The My Talking Angela 2 Hair System","alignment":1},{"name":"previewSubtitle","type":13,"text":"The making of an easy-to-configure hair system for our hit game…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"The making of an easy-to-configure hair system for our hit game, including what it took to make it, and how everything came together."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"decb52b64abf","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"5dd9","type":3,"text":"The My Talking Angela 2 Hair System","markups":[]},{"name":"4d01","type":1,"text":"TL;DR: The making of an easy-to-configure hair system for our hit game, including what it took to make it, and how everything came together. With all the hairy details.","markups":[{"type":1,"start":0,"end":6},{"type":2,"start":0,"end":168}]},{"name":"38c1","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*QeoWDJ4qQhrCS_Ei","originalWidth":1003,"originalHeight":634,"isFeatured":true}},{"name":"25a9","type":1,"text":"I’m Aleksander Gregorka and I’m a Senior Software Engineer at Outfit7. I’ve been with the company since 2014, and during that…","markups":[]}],"sections":[{"name":"b04d","startIndex":0}]},"isFullContent":false,"subtitle":"The making of an easy-to-configure hair system for our hit game, including what it took to make it, and how everything came together."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"1e5c4a50b6c8":{"id":"1e5c4a50b6c8","versionId":"cb6d767449b8","creatorId":"1b04d7f0fde6","homeCollectionId":"6ec626d5ad62","title":"Kicking the habit: Jenkins detox in production","detectedLanguage":"en","latestVersion":"cb6d767449b8","latestPublishedVersion":"cb6d767449b8","hasUnpublishedEdits":false,"latestRev":130,"createdAt":1677149676072,"updatedAt":1677749278559,"acceptedAt":0,"firstPublishedAt":1677749275154,"latestPublishedAt":1677749275154,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Moving the O7 game build system into the cloud opened up new possibilities for individual game development teams around scaling…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*JQsjnND9Wcgtk2nE","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":838,"strategy":"resample","height":0,"width":0},"wordCount":2451,"imageCount":5,"readingTime":10.08238993710692,"subtitle":"Moving the O7 game build system into the cloud opened up new possibilities for individual game development teams around scaling…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":7,"isBookmarked":false,"tags":[{"slug":"game-development","name":"Game Development","postCount":54919,"metadata":{"postCount":54919,"coverImage":{"id":"1*8u1zOu-4hwukClkplCOHSQ.jpeg","originalWidth":994,"originalHeight":742,"isFeatured":true}},"type":"Tag"},{"slug":"game-build","name":"Game Build","postCount":12,"metadata":{"postCount":12,"coverImage":{"id":"1*o4f3YGNDEo4MEG2mNLCYTQ.jpeg","originalWidth":2560,"originalHeight":1440,"isFeatured":true}},"type":"Tag"},{"slug":"devops","name":"DevOps","postCount":101777,"metadata":{"postCount":101777,"coverImage":{"id":"1*BqVsCBa2mLv1UWQrdhjX5w.png","originalWidth":1500,"originalHeight":750,"isFeatured":true,"alt":"How I Am Using a Lifetime 100% Free Server"}},"type":"Tag"},{"slug":"jenkins","name":"Jenkins","postCount":7961,"metadata":{"postCount":7961,"coverImage":{"id":"0*2tGd1uAFhZf5TjSY","originalWidth":1024,"originalHeight":1024}},"type":"Tag"},{"slug":"ci-cd-pipeline","name":"Ci Cd Pipeline","postCount":8075,"metadata":{"postCount":8075,"coverImage":{"id":"1*rbxEZb3wYOabrlm-pcJq6Q.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[],"version":"0.3","generatedAt":1677749275326},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":19,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"kicking-the-habit-jenkins-detox-in-production","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"kicking-the-habit-jenkins-detox-in-production-1e5c4a50b6c8","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*JQsjnND9Wcgtk2nE","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Kicking the habit: Jenkins detox in production","alignment":1},{"name":"previewSubtitle","type":13,"text":"Moving the O7 game build system into the cloud opened…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Moving the O7 game build system into the cloud opened up new possibilities for individual game development teams around scaling…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"52cc","type":3,"text":"Kicking the habit: Jenkins detox in production","markups":[]},{"name":"2636","type":1,"text":"TL;DR: Moving the O7 game build system into the cloud opened up new possibilities for individual game development teams around scaling, testing and fixing bugs. We improved build times, reduced system complexity, increased stability, and most importantly, increased the number of builds, ensuring finer-grained testing and bug tracking. Best of…","markups":[{"type":1,"start":0,"end":7}]}],"sections":[{"name":"213e","startIndex":0}]},"isFullContent":false,"subtitle":"Moving the O7 game build system into the cloud opened up new possibilities for individual game development teams around scaling…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"c5fa1610d786":{"id":"c5fa1610d786","versionId":"e585aa5e6f5b","creatorId":"c7d7326118b3","homeCollectionId":"6ec626d5ad62","title":"The Billion Events Infrastructure","detectedLanguage":"en","latestVersion":"e585aa5e6f5b","latestPublishedVersion":"e585aa5e6f5b","hasUnpublishedEdits":false,"latestRev":123,"createdAt":1669902905640,"updatedAt":1671011407042,"acceptedAt":0,"firstPublishedAt":1670941930838,"latestPublishedAt":1671007140356,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Outfit7 is, at its core, a data-driven company. Collecting and analyzing performance metrics from our games holds a lot of…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*YpS6May9aFFtbR0D","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":838,"strategy":"resample","height":0,"width":0},"wordCount":1221,"imageCount":2,"readingTime":4.990880503144655,"subtitle":"Outfit7 is, at its core, a data-driven company. Collecting and analyzing performance metrics from our games holds a lot of…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":13,"isBookmarked":false,"tags":[{"slug":"backend","name":"Backend","postCount":14156,"metadata":{"postCount":14156,"coverImage":{"id":"0*RId-pcLBNTGiAjbj","originalWidth":1792,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"data-engineering","name":"Data Engineering","postCount":38469,"metadata":{"postCount":38469,"coverImage":{"id":"1*wJurAMzy5rcdibdSdeD7gg.png","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"google-cloud-platform","name":"Google Cloud Platform","postCount":25682,"metadata":{"postCount":25682,"coverImage":{"id":"1*NqaXh8wC2RJuyYc2gbJURA.png","originalWidth":1280,"originalHeight":720}},"type":"Tag"},{"slug":"analytics","name":"Analytics","postCount":51192,"metadata":{"postCount":51192,"coverImage":{"id":"1*Lqx5Zg187zZY1UewaG7Q7Q.jpeg","originalWidth":4200,"originalHeight":2800,"isFeatured":true}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":448088,"metadata":{"postCount":448088,"coverImage":{"id":"1*t5dwn8IabnCdEpoO-6Toog.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Kubernetes"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[],"version":"0.3","generatedAt":1671007140495},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":20,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"the-billion-events-infrastructure","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"the-billion-events-infrastructure-c5fa1610d786","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*YpS6May9aFFtbR0D","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"The Billion Events Infrastructure","alignment":1},{"name":"previewSubtitle","type":13,"text":"Outfit7 is, at its core, a data-driven company. Collecting and…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Outfit7 is, at its core, a data-driven company. Collecting and analyzing performance metrics from our games holds a lot of…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"decb52b64abf","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"02c9","type":3,"text":"The Billion Events Infrastructure","markups":[]},{"name":"858a","type":1,"text":"TL;DR: Outfit7 is, at its core, a data-driven company. Collecting and analyzing performance metrics from our games holds a lot of interesting challenges. In this article, I’ll explore our infrastructure design decisions and what we have learned along the way.","markups":[{"type":1,"start":0,"end":7},{"type":2,"start":0,"end":259}]},{"name":"a879","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*YpS6May9aFFtbR0D","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"3ee6","type":1,"text":"Hi, my name is Tilen Kavčič. I’m one of the…","markups":[]}],"sections":[{"name":"fdb0","startIndex":0}]},"isFullContent":false,"subtitle":"Outfit7 is, at its core, a data-driven company. Collecting and analyzing performance metrics from our games holds a lot of…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"ce93b31b61bd":{"id":"ce93b31b61bd","versionId":"8b1be5fa05be","creatorId":"5d16f8c96c79","homeCollectionId":"6ec626d5ad62","title":"Creating a custom animation system for Unity","detectedLanguage":"en","latestVersion":"8b1be5fa05be","latestPublishedVersion":"8b1be5fa05be","hasUnpublishedEdits":false,"latestRev":1452,"createdAt":1688707151758,"updatedAt":1689554691229,"acceptedAt":0,"firstPublishedAt":1688979159704,"latestPublishedAt":1688979159704,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"TL;DR: Making a custom animation system to reduce the size of assets by 50% and solving all the problems that come with it.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*TbmS5EonHW_ICYg3","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":838,"strategy":"resample","height":0,"width":0},"wordCount":3845,"imageCount":14,"readingTime":15.95943396226415,"subtitle":"TL;DR: Making a custom animation system to reduce the size of assets by 50% and solving all the problems that come with it.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":13,"isBookmarked":false,"tags":[{"slug":"unity3d","name":"Unity3d","postCount":12215,"metadata":{"postCount":12215,"coverImage":{"id":"1*BWzfIVHzz_4IdTVW1642Pw.png","originalWidth":1792,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"animation","name":"Animation","postCount":27653,"metadata":{"postCount":27653,"coverImage":{"id":"1*Vq-TrgxveQeOyiBvQ-PJlQ@2x.jpeg","originalWidth":3240,"originalHeight":4860,"isFeatured":true}},"type":"Tag"},{"slug":"csharp","name":"Csharp","postCount":16047,"metadata":{"postCount":16047,"coverImage":{"id":"1*f1UGZW1RWOv14pYv5VtYtw.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"mobile-game-development","name":"Mobile Game Development","postCount":1637,"metadata":{"postCount":1637,"coverImage":{"id":"1*mIBo4xLRx3E5uEOs45aVKw.png","originalWidth":681,"originalHeight":380,"isFeatured":true,"alt":"Game Development"}},"type":"Tag"},{"slug":"game-development","name":"Game Development","postCount":54919,"metadata":{"postCount":54919,"coverImage":{"id":"1*8u1zOu-4hwukClkplCOHSQ.jpeg","originalWidth":994,"originalHeight":742,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://guillaumeblanc.github.io/ozz-animation/documentation/animation_offline/","alts":[],"httpStatus":200},{"url":"https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2","alts":[{"type":3,"url":"medium://p/5d3fcba23ce2"},{"type":2,"url":"medium://p/5d3fcba23ce2"}],"httpStatus":200},{"url":"https://outfit7.com/","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Linear_interpolation#Interpolation_of_a_data_set","alts":[],"httpStatus":200},{"url":"https://cmake.org/","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Half-precision_floating-point_format","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Multiplicative_inverse","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Inverse_function","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Quaternion#Conjugation,_the_norm,_and_reciprocal","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Skeletal_animation","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Animations.IAnimationJob.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Unity.Collections.NativeArray_1.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/AnimationClip.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Animator.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Animation.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Playables.PlayableBehaviour.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/AnimationUtility.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Transform.Find.html","alts":[],"httpStatus":200},{"url":"https://play.google.com/store/apps/details?id=com.outfit7.mytalkingangela2","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Animations.AnimationStream.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Unity.Collections.LowLevel.Unsafe.UnsafeUtility.Malloc.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Animations.AnimatorJobExtensions.html","alts":[],"httpStatus":200},{"url":"https://docs.unity3d.com/ScriptReference/Playables.PlayableGraph.html","alts":[],"httpStatus":200},{"url":"https://github.com/facebook/zstd","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/app-bundle#size_restrictions","alts":[],"httpStatus":200},{"url":"https://github.com/guillaumeblanc/ozz-animation/blob/1014cb5b80687b4ee99bd1b454aeaf4ba491d4c6/samples/millipede/sample_millipede.cc#L179-L201","alts":[],"httpStatus":200},{"url":"https://github.com/guillaumeblanc/ozz-animation","alts":[],"httpStatus":200},{"url":"https://play.google.com/store/apps/details?id=com.outfit7.mytalkingangelafree","alts":[],"httpStatus":200},{"url":"https://medium.com/outfit7/building-the-ultimate-mobile-game-engine-starlite-14b640e2757b","alts":[{"type":3,"url":"medium://p/14b640e2757b"},{"type":2,"url":"medium://p/14b640e2757b"}],"httpStatus":200},{"url":"https://blog.unity.com/technology/animation-c-jobs","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1688979161163},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":74,"sectionCount":4,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"creating-a-custom-animation-system-for-unity","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"creating-a-custom-animation-system-for-unity-ce93b31b61bd","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*TbmS5EonHW_ICYg3","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"0796","type":3,"text":"Creating a custom animation system for Unity","markups":[],"alignment":1},{"name":"598f","type":1,"text":"TL;DR: Making a custom animation system to reduce the size of assets by 50% and…","markups":[{"type":1,"start":0,"end":6}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"TL;DR: Making a custom animation system to reduce the size of assets by 50% and solving all the problems that come with it."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"0796","type":3,"text":"Creating a custom animation system for Unity","markups":[]},{"name":"ed3a","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*TbmS5EonHW_ICYg3","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"598f","type":1,"text":"TL;DR: Making a custom animation system to reduce the size of assets by 50% and solving all the problems that come with it.","markups":[{"type":1,"start":0,"end":6}]},{"name":"24f5","type":6,"text":"I’m Blaž Tomažič, a Senior Software Engineer at Outfit7. I’ve been developing with the company for five years, working mostly on low-level parts of game development. I…","markups":[{"type":3,"start":48,"end":55,"href":"https://outfit7.com/","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"f79e","startIndex":0}]},"isFullContent":false,"subtitle":"TL;DR: Making a custom animation system to reduce the size of assets by 50% and solving all the problems that come with it."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"876685f9ed1":{"id":"876685f9ed1","versionId":"ec626276cf3f","creatorId":"752fffec2a47","homeCollectionId":"6ec626d5ad62","title":"How we built the Compliance library on a modern web framework","detectedLanguage":"en","latestVersion":"ec626276cf3f","latestPublishedVersion":"ec626276cf3f","hasUnpublishedEdits":false,"latestRev":229,"createdAt":1673439653592,"updatedAt":1727364300160,"acceptedAt":0,"firstPublishedAt":1673442153857,"latestPublishedAt":1727353725417,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"How we built the Compliance library on Vue 2 with full offline autonomy and 100% device compatibility.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*ILixSBT_BE2a1oyi","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":838,"strategy":"resample","height":0,"width":0},"wordCount":56,"imageCount":1,"readingTime":0.41132075471698115,"subtitle":"How we built the Compliance library on Vue 2 with full offline autonomy and 100% device compatibility.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":11,"isBookmarked":false,"tags":[{"slug":"web-development","name":"Web Development","postCount":309588,"metadata":{"postCount":309588,"coverImage":{"id":"0*BWgW4D8rAVDpAXEb","originalWidth":2600,"originalHeight":1485,"isFeatured":true}},"type":"Tag"},{"slug":"compliance","name":"Compliance","postCount":11238,"metadata":{"postCount":11238,"coverImage":{"id":"0*MnZtr2kCxDfOVBG4.jpg","originalWidth":1280,"originalHeight":769,"isFeatured":true}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":448088,"metadata":{"postCount":448088,"coverImage":{"id":"1*t5dwn8IabnCdEpoO-6Toog.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Kubernetes"}},"type":"Tag"},{"slug":"vuejs","name":"Vuejs","postCount":15385,"metadata":{"postCount":15385,"coverImage":{"id":"0*1piA6kdzxAsnMeoD.jpeg","originalWidth":900,"originalHeight":550,"isFeatured":true}},"type":"Tag"},{"slug":"javascript","name":"JavaScript","postCount":285856,"metadata":{"postCount":285856,"coverImage":{"id":"0*BTaIEoMZlgOipidp","originalWidth":6016,"originalHeight":4016,"isFeatured":true,"unsplashPhotoId":"qDY9ahp0Mto"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://outfit7.com/blog/tech/how-we-built-the-compliance-library-on-a-modern-web-framework?utm_source=social&utm_medium=medium&utm_campaign=compliance","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1727353726150},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":61,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"how-we-built-the-compliance-library-on-a-modern-web-framework","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"how-we-built-the-compliance-library-on-a-modern-web-framework-876685f9ed1","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*ILixSBT_BE2a1oyi","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"e2c1","type":3,"text":"How we built the Compliance library on a modern web framework","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"How we built the Compliance library on Vue 2 with full offline autonomy and 100% device compatibility."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"e2c1","type":3,"text":"How we built the Compliance library on a modern web framework","markups":[]},{"name":"8938","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*ILixSBT_BE2a1oyi","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"396c","type":1,"text":"This article is now available on the Outfit7 Tech Blog!","markups":[{"type":1,"start":0,"end":55}]},{"name":"b0c0","type":1,"text":"We’ve moved this content to our website’s official Outfit7 Tech Blog. \nYou can now find the full article here.","markups":[{"type":3,"start":105,"end":109,"href":"https://outfit7.com/blog/tech/how-we-built-the-compliance-library-on-a-modern-web-framework?utm_source=social&utm_medium=medium&utm_campaign=compliance","title":"","rel":"","anchorType":0},{"type":1,"start":51,"end":68}]},{"name":"e999","type":1,"text":"Visit our new blog for more tech insights, mobile game development tips, and software engineering stories!","markups":[]}],"sections":[{"name":"7202","startIndex":0}]},"isFullContent":true,"subtitle":"How we built the Compliance library on Vue 2 with full offline autonomy and 100% device compatibility."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":true,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"66e045b2da0":{"id":"66e045b2da0","versionId":"18ea943a6213","creatorId":"b53717573314","homeCollectionId":"6ec626d5ad62","title":"From Kubernetes to a fully managed, serverless platform","detectedLanguage":"en","latestVersion":"18ea943a6213","latestPublishedVersion":"18ea943a6213","hasUnpublishedEdits":false,"latestRev":166,"createdAt":1680610241100,"updatedAt":1680771189799,"acceptedAt":0,"firstPublishedAt":1680771185891,"latestPublishedAt":1680771185891,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Find out how we migrated our ad real-time bidding service from a self-managed Kubernetes cluster to a fully managed Google Cloud…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*yZS5LliLtWg1rQKR","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":838,"strategy":"resample","height":0,"width":0},"wordCount":1271,"imageCount":6,"readingTime":5.746226415094339,"subtitle":"Find out how we migrated our ad real-time bidding service from a self-managed Kubernetes cluster to a fully managed Google Cloud…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":9,"isBookmarked":false,"tags":[{"slug":"backend","name":"Backend","postCount":14156,"metadata":{"postCount":14156,"coverImage":{"id":"0*RId-pcLBNTGiAjbj","originalWidth":1792,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"google-cloud-platform","name":"Google Cloud Platform","postCount":25682,"metadata":{"postCount":25682,"coverImage":{"id":"1*NqaXh8wC2RJuyYc2gbJURA.png","originalWidth":1280,"originalHeight":720}},"type":"Tag"},{"slug":"knative","name":"Knative","postCount":304,"metadata":{"postCount":304,"coverImage":{"id":"1*xkWgyUBG-6BmzLD4buU_HA.png","originalWidth":682,"originalHeight":380,"isFeatured":true}},"type":"Tag"},{"slug":"google-cloud-run","name":"Google Cloud Run","postCount":898,"metadata":{"postCount":898,"coverImage":{"id":"1*nik4K-mAwJ3ZqwAbDSXCCA.png","originalWidth":1178,"originalHeight":714,"isFeatured":true}},"type":"Tag"},{"slug":"serverless","name":"Serverless","postCount":18243,"metadata":{"postCount":18243,"coverImage":{"id":"0*S21oqkkXXCRLbrkN","originalWidth":5842,"originalHeight":3895,"isFeatured":true,"unsplashPhotoId":"YI_9SivVt_s"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_service","alts":[],"httpStatus":200},{"url":"https://circleci.com/developer/orbs/orb/circleci/gcp-cloud-run","alts":[],"httpStatus":200},{"url":"https://cloud.google.com/blog/products/serverless/cloud-run-gets-always-on-cpu-allocation","alts":[],"httpStatus":200},{"url":"https://cloud.google.com/run/cud","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1680771186409},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":18,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"from-kubernetes-to-a-fully-managed-serverless-platform","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"from-kubernetes-to-a-fully-managed-serverless-platform-66e045b2da0","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*yZS5LliLtWg1rQKR","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"532c","type":3,"text":"From Kubernetes to a fully managed, serverless platform","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Find out how we migrated our ad real-time bidding service from a self-managed Kubernetes cluster to a fully managed Google Cloud…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"6ec626d5ad62","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"532c","type":3,"text":"From Kubernetes to a fully managed, serverless platform","markups":[]},{"name":"becb","type":1,"text":"TL;DR: Find out how we migrated our ad real-time bidding service from a self-managed Kubernetes cluster to a fully managed Google Cloud Run.","markups":[{"type":1,"start":0,"end":6},{"type":2,"start":7,"end":140}]},{"name":"5a28","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*yZS5LliLtWg1rQKR","originalWidth":1600,"originalHeight":838,"isFeatured":true}},{"name":"5472","type":1,"text":"Howdy! My name is Boštjan Lasnik and I’m a member of the Ad Technology backend team at Outfit7. I primarily develop and maintain the tools, services and…","markups":[]}],"sections":[{"name":"0c23","startIndex":0}]},"isFullContent":false,"subtitle":"Find out how we migrated our ad real-time bidding service from a self-managed Kubernetes cluster to a fully managed Google Cloud…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{"path":"/_/api/collections/6ec626d5ad62/stream","next":{"to":"1727352997939","ignoredIds":["13e11ddd19e7","14b640e2757b","1a44213a12bf"],"page":4}},"collection":{"id":"6ec626d5ad62","name":"Outfit7","slug":"outfit7","tags":["TECHNOLOGY","ENGINEERING","SOFTWARE DEVELOPMENT","GAME DEVELOPMENT","PROGRAMMING"],"creatorId":"ebaddf6e1f2a","description":"The inside scoop on development, engineering & tech innovation @ Outfit7.","shortDescription":"The inside scoop on development, engineering & tech…","image":{"imageId":"1*dCIQWfMya9g57UUL2ZzrJQ.png","filter":"","backgroundSize":"","originalWidth":10952,"originalHeight":10952,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":53,"activeAt":1727352998013},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*nTxl_7KgWQYo8PfVROUK_A.png","filter":"","backgroundSize":"","originalWidth":4566,"originalHeight":4566,"strategy":"resample","height":0,"width":0},"facebookPageName":"outfit7","collectionMastheadId":"ee5d0b65bfc","sections":[{"type":2,"collectionHeaderMetadata":{"title":"The inside scoop on development, engineering & tech innovation","description":"","backgroundImage":{"id":"1*lduq8q-DAzZbQ9GtDcLBvw.png","originalWidth":5857,"originalHeight":998,"focusPercentX":53.57142857142857,"focusPercentY":95.83333333333333},"logoImage":{"id":"1*rsxLbtYH2VSNPlCVkyXhSw@2x.png","originalWidth":2062,"originalHeight":277,"alt":"Outfit7"},"alignment":2,"layout":5}},{"type":1,"postListMetadata":{"source":1,"layout":2,"number":1,"postIds":["b317a75e1447"]}},{"type":1,"postListMetadata":{"source":2,"layout":4,"number":3,"postIds":["13e11ddd19e7","14b640e2757b","1a44213a12bf"],"sectionHeader":"Stories worth reading"}},{"type":1,"postListMetadata":{"source":3,"layout":2,"number":10,"postIds":["46cf06181893","1e5c4a50b6c8","c5fa1610d786","ce93b31b61bd","876685f9ed1","66e045b2da0"]}}],"tintColor":"#FF111111","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF858484","point":0},{"color":"#FF7C7B7B","point":0.1},{"color":"#FF737171","point":0.2},{"color":"#FF696868","point":0.3},{"color":"#FF5F5E5E","point":0.4},{"color":"#FF555454","point":0.5},{"color":"#FF4A4949","point":0.6},{"color":"#FF3F3E3E","point":0.7},{"color":"#FF343333","point":0.8},{"color":"#FF272727","point":0.9},{"color":"#FF1A1A1A","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF111111","point":0},{"color":"#FF313131","point":0.1},{"color":"#FF4D4C4C","point":0.2},{"color":"#FF666565","point":0.3},{"color":"#FF7D7C7C","point":0.4},{"color":"#FF939292","point":0.5},{"color":"#FFA9A7A7","point":0.6},{"color":"#FFBDBBBB","point":0.7},{"color":"#FFD2CFCF","point":0.8},{"color":"#FFE5E2E2","point":0.9},{"color":"#FFF8F5F5","point":1}],"backgroundColor":"#FF111111"},"highlightSpectrum":{"colorPoints":[{"color":"#FFF5F2F1","point":0},{"color":"#FFF3F0EF","point":0.1},{"color":"#FFF1EEEE","point":0.2},{"color":"#FFEFECEC","point":0.3},{"color":"#FFEDEAEA","point":0.4},{"color":"#FFEBE8E8","point":0.5},{"color":"#FFE9E7E6","point":0.6},{"color":"#FFE7E5E4","point":0.7},{"color":"#FFE5E3E2","point":0.8},{"color":"#FFE3E1E0","point":0.9},{"color":"#FFE1DFDE","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF9E9C9C","point":0},{"color":"#FFA6A5A4","point":0.1},{"color":"#FFAFADAD","point":0.2},{"color":"#FFB7B6B5","point":0.3},{"color":"#FFC0BEBD","point":0.4},{"color":"#FFC8C6C6","point":0.5},{"color":"#FFD0CECE","point":0.6},{"color":"#FFD9D6D6","point":0.7},{"color":"#FFE1DEDD","point":0.8},{"color":"#FFE9E6E5","point":0.9},{"color":"#FFF0EEED","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":8,"title":"All","url":"https://medium.com/outfit7/latest"},{"type":4,"title":"Game Dev","url":"https://medium.com/outfit7/game-dev/home","topicId":"d7f7473196df","source":"topicId"},{"type":4,"title":"QA","url":"https://medium.com/outfit7/qa/home","topicId":"29a5e7ebfcfc","source":"topicId"},{"type":2,"title":"About","postId":"13e11ddd19e7","url":"https://medium.com/outfit7/the-outfit7-tech-blog-13e11ddd19e7","source":"postId"},{"type":3,"title":"Jobs","url":"https://outfit7.com/careers/jobs?field=technology&utm_source=social&utm_medium=medium&utm_campaign=tech-jobs"}],"colorBehavior":2,"collectionFeatures":[30],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"The inside scoop on development, engineering & tech innovation","description":"","backgroundImage":{"id":"1*lduq8q-DAzZbQ9GtDcLBvw.png","originalWidth":5857,"originalHeight":998,"focusPercentX":53.57142857142857,"focusPercentY":95.83333333333333},"logoImage":{"id":"1*rsxLbtYH2VSNPlCVkyXhSw@2x.png","originalWidth":2062,"originalHeight":277,"alt":"Outfit7"},"alignment":2,"layout":5},"subscriberCount":53,"tagline":"Our playground, your game.","instagramUsername":"outfit7","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"1*GJaVmaUaWCbCnxCoWDGxpw.png","filter":"","backgroundSize":"","originalWidth":1500,"originalHeight":749,"strategy":"resample","height":0,"width":0},"type":"Collection"},"header":{"title":"The inside scoop on development, engineering & tech innovation","description":"","backgroundImage":{"id":"1*lduq8q-DAzZbQ9GtDcLBvw.png","originalWidth":5857,"originalHeight":998,"focusPercentX":53.57142857142857,"focusPercentY":95.83333333333333},"logoImage":{"id":"1*rsxLbtYH2VSNPlCVkyXhSw@2x.png","originalWidth":2062,"originalHeight":277,"alt":"Outfit7"},"alignment":2,"layout":5},"streamItems":[{"createdAt":1732709687067,"randomId":"58dc15886010","section":{"items":[{"post":{"postId":"b317a75e1447"},"itemType":"post"}],"layout":2},"itemType":"section","type":"StreamItem"},{"createdAt":1732709687067,"randomId":"648a4fdb66c5","section":{"items":[{"post":{"postId":"13e11ddd19e7"},"itemType":"post"},{"post":{"postId":"14b640e2757b"},"itemType":"post"},{"post":{"postId":"1a44213a12bf"},"itemType":"post"}],"layout":4,"heading":{"fallbackTitle":"Stories worth reading","headingBasic":{"title":"Stories worth reading"},"headingType":"headingBasic"}},"itemType":"section","type":"StreamItem"},{"createdAt":1732709687067,"randomId":"2e22f7335a46","section":{"items":[{"post":{"postId":"46cf06181893"},"itemType":"post"},{"post":{"postId":"1e5c4a50b6c8"},"itemType":"post"},{"post":{"postId":"c5fa1610d786"},"itemType":"post"},{"post":{"postId":"ce93b31b61bd"},"itemType":"post"},{"post":{"postId":"876685f9ed1"},"itemType":"post"},{"post":{"postId":"66e045b2da0"},"itemType":"post"}],"layout":2},"itemType":"section","type":"StreamItem"}]}) // ]]></script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8e920a366876ce3a',t:'MTczMjcwOTY4Ny4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>