1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,27540,e=>{e.v({className:"ibm_plex_mono_5741858f-module__-VIaXW__className",variable:"ibm_plex_mono_5741858f-module__-VIaXW__variable"})},79218,e=>{e.v({className:"ibm_plex_sans_adb7dc0a-module__aRyJcG__className",variable:"ibm_plex_sans_adb7dc0a-module__aRyJcG__variable"})},28298,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"useRouterBFCache",{enumerable:!0,get:function(){return o}});let n=e.r(71645);function o(e,t,a){let[o,r]=(0,n.useState)(()=>({tree:e,cacheNode:t,stateKey:a,next:null}));if(o.tree===e)return o;let l={tree:e,cacheNode:t,stateKey:a,next:null},i=1,s=o,u=l;for(;null!==s&&i<1;){if(s.stateKey===a){u.next=s.next;break}{i++;let e={tree:s.tree,cacheNode:s.cacheNode,stateKey:s.stateKey,next:null};u.next=e,u=e}s=s.next}return r(l),l}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},47257,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"ClientPageRoot",{enumerable:!0,get:function(){return u}});let n=e.r(43476),o=e.r(8372),r=e.r(71645),l=e.r(33906),i=e.r(61994),s=e.r(42903);function u({Component:e,serverProvidedParams:t}){let a,c;if(null!==t)a=t.searchParams,c=t.params;else{let e=(0,r.use)(o.LayoutRouterContext);c=null!==e?e.parentParams:{},a=(0,l.urlSearchParamsToParsedUrlQuery)((0,r.use)(i.SearchParamsContext))}let d=(0,s.createClientSearchParams)(a),f=(0,s.createClientParams)(c);return(0,n.jsx)(e,{params:f,searchParams:d})}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},92825,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"ClientSegmentRoot",{enumerable:!0,get:function(){return i}});let n=e.r(43476),o=e.r(8372),r=e.r(71645),l=e.r(42903);function i({Component:e,slots:t,serverProvidedParams:a}){let s;if(null!==a)s=a.params;else{let e=(0,r.use)(o.LayoutRouterContext);s=null!==e?e.parentParams:{}}let u=(0,l.createClientParams)(s);return(0,n.jsx)(e,{...t,params:u})}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},68017,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"HTTPAccessFallbackBoundary",{enumerable:!0,get:function(){return c}});let n=e.r(90809),o=e.r(43476),r=n._(e.r(71645)),l=e.r(90373),i=e.r(54394),s=e.r(8372);class u extends r.default.Component{constructor(e){super(e),this.state={triggeredStatus:void 0,previousPathname:e.pathname}}componentDidCatch(){}static getDerivedStateFromError(e){if((0,i.isHTTPAccessFallbackError)(e))return{triggeredStatus:(0,i.getAccessFallbackHTTPStatus)(e)};throw e}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.triggeredStatus?{triggeredStatus:void 0,previousPathname:e.pathname}:{triggeredStatus:t.triggeredStatus,previousPathname:e.pathname}}render(){let{notFound:e,forbidden:t,unauthorized:a,children:n}=this.props,{triggeredStatus:r}=this.state,l={[i.HTTPAccessErrorStatus.NOT_FOUND]:e,[i.HTTPAccessErrorStatus.FORBIDDEN]:t,[i.HTTPAccessErrorStatus.UNAUTHORIZED]:a};if(r){let s=r===i.HTTPAccessErrorStatus.NOT_FOUND&&e,u=r===i.HTTPAccessErrorStatus.FORBIDDEN&&t,c=r===i.HTTPAccessErrorStatus.UNAUTHORIZED&&a;return s||u||c?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"robots",content:"noindex"}),!1,l[r]]}):n}return n}}function c({notFound:e,forbidden:t,unauthorized:a,children:n}){let i=(0,l.useUntrackedPathname)(),d=(0,r.useContext)(s.MissingSlotContext);return e||t||a?(0,o.jsx)(u,{pathname:i,notFound:e,forbidden:t,unauthorized:a,missingSlots:d,children:n}):(0,o.jsx)(o.Fragment,{children:n})}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esMo
1dule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},22976,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var n={InstantValidationBoundaryContext:function(){return r},PlaceValidationBoundaryBelowThisLevel:function(){return l},RenderValidationBoundaryAtThisLevel:function(){return i},SlotMarker:function(){return s}};for(var o in n)Object.defineProperty(a,o,{enumerable:!0,get:n[o]});let r=null,l=null,i=null,s=null;("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},77694,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var n={InstantValidationBoundaryContext:function(){return r.InstantValidationBoundaryContext},PlaceValidationBoundaryBelowThisLevel:function(){return r.PlaceValidationBoundaryBelowThisLevel},RenderValidationBoundaryAtThisLevel:function(){return r.RenderValidationBoundaryAtThisLevel},SlotMarker:function(){return r.SlotMarker}};for(var o in n)Object.defineProperty(a,o,{enumerable:!0,get:n[o]});let r=e.r(22976);("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},39756,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0});var n={LoadingBoundaryProvider:function(){return C},default:function(){return S}};for(var o in n)Object.defineProperty(a,o,{enumerable:!0,get:n[o]});let r=e.r(55682),l=e.r(90809),i=e.r(43476),s=l._(e.r(71645)),u=r._(e.r(74080)),c=e.r(8372),d=e.r(1244),f=e.r(72383),m=e.r(91915),p=e.r(58442),g=e.r(68017);e.r(77694);let h=e.r(70725),y=e.r(28298);e.r(74180);let b=e.r(61994),v=e.r(33906),_=e.r(95871);u.default.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function P(e,t,a){let n=e.getClientRects();if(0===n.length)return 0;let o=1/0;for(let e=0;e<n.length;e++){let t=n[e];t.top<o&&(o=t.top)}return o>=a()&&o<=t?1:2}s.default.Component;let w=function(e){let t=s.default.useRef(null);return(0,s.useLayoutEffect)(()=>{let{focusAndScrollRef:a,cacheNode:n}=e,o=a.forceScroll?a.scrollRef:n.scrollRef;if(null===o||!o.current)return;let r=null,l=a.hashFragment;if(l){var i;if(null===(r="top"===(i=l)?document.body:document.getElementById(i)??document.getElementsByName(i)[0]??null)){o.current=!1,a.onlyHashChange=!1,a.hashFragment=null;return}}else r=t.current;if(null===r)return;let s=!1;(0,m.disableSmoothScrollDuringRouteTransition)(()=>{let e=document.documentElement,t=null,a=null,n=null,i=()=>{var a,o;let r,l;return null===n&&(a=e,o=t,n=!Number.isFinite(l=Number.parseFloat(r=getComputedStyle(a).scrollPaddingTop))||l<0?0:r.endsWith("px")?l:r.endsWith("%")?l/100*o:0),n};(l||(t=e.clientHeight,0!==(a=P(r,t,i))))&&((s=!0,o.current=!1,l)?r.scrollIntoView():1!==a&&(e.scrollTop=0,2===P(r,t,i)&&r.scrollIntoView()))},{dontForceLayout:!0,onlyHashChange:a.onlyHashChange}),s&&(a.onlyHashChange=!1,a.hashFragment=null)},void 0),(0,i.jsx)(s.Fragment,{ref:t,children:e.children})};function x({children:e,cacheNode:t}){let a=(0,s.useContext)(c.GlobalLayoutRouterContext);if(!a)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});return(0,i.jsx)(w,{focusAndScrollRef:a.focusAndScrollRef,cacheNode:t,children:e})}function j({tree:e,segmentPath:t,debugNameContext:a,cacheNode:n,params:o,url:r,isActive:l}){let u,f=(0,s.useContext)(c.GlobalLayoutRouterContext);if((0,s.useContext)(b.NavigationPromisesContext),!f)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});let m=null!==n?n:(0,s.use)(d.unresolvedThenable),p=null!==m.prefetchRsc?m.prefetchRsc:m.rsc,g=(0,s.useDeferredValue)(m.rsc,p);if((0,_.isDeferredRsc)(g)){let e=(0,s.use)(g);null===e&&(0,s.use)(d.unresolvedThenable),u=e}else null===g&&(0,s.use)(d.unresolvedThenable),u=g;let h=u;return(0,i.jsx)(c.LayoutRouterContext.Provider,{value:{parentTree:e,parentCacheNode:m,parentSegmentPath:t,parentParam
1s:o,parentLoadingData:null,debugNameContext:a,url:r,isActive:l},children:h})}function C({loading:e,children:t}){let a=(0,s.use)(c.LayoutRouterContext);return null===a?t:(0,i.jsx)(c.LayoutRouterContext.Provider,{value:{parentTree:a.parentTree,parentCacheNode:a.parentCacheNode,parentSegmentPath:a.parentSegmentPath,parentParams:a.parentParams,parentLoadingData:e,debugNameContext:a.debugNameContext,url:a.url,isActive:a.isActive},children:t})}function T({name:e,loading:t,children:a}){if(null!==t){let n=t[0],o=t[1],r=t[2];return(0,i.jsx)(s.Suspense,{name:e,fallback:(0,i.jsxs)(i.Fragment,{children:[o,r,n]}),children:a})}return(0,i.jsx)(i.Fragment,{children:a})}function S({parallelRouterKey:e,error:t,errorStyles:a,errorScripts:n,templateStyles:o,templateScripts:r,template:l,notFound:u,forbidden:m,unauthorized:b,segmentViewBoundaries:_}){let P=(0,s.useContext)(c.LayoutRouterContext);if(!P)throw Object.defineProperty(Error("invariant expected layout router to be mounted"),"__NEXT_ERROR_CODE",{value:"E56",enumerable:!1,configurable:!0});let{parentTree:w,parentCacheNode:C,parentSegmentPath:k,parentParams:A,parentLoadingData:O,url:I,isActive:R,debugNameContext:M}=P,B=w[0],N=null===k?[e]:k.concat([B,e]),E=w[1][e],D=C.slots;(void 0===E||null===D)&&(0,s.use)(d.unresolvedThenable);let F=E[0],L=D[e]??null,H=(0,h.createRouterCacheKey)(F,!0),U=(0,y.useRouterBFCache)(E,L,H),W=[];do{let e=U.tree,s=U.cacheNode,d=U.stateKey,h=e[0],y=A;if(Array.isArray(h)){let e=h[0],t=h[1],a=h[2],n=(0,v.getParamValueFromCacheKey)(t,a);null!==n&&(y={...A,[e]:n})}let _=function(e){if("/"===e)return"/";if("string"==typeof e)if("(__SLOT__)"===e)return;else return e+"/";return e[1]+"/"}(h),P=_??M,w=void 0===_?void 0:M,C=(0,i.jsxs)(x,{cacheNode:s,children:[(0,i.jsx)(f.ErrorBoundary,{errorComponent:t,errorStyles:a,errorScripts:n,children:(0,i.jsx)(T,{name:w,loading:O,children:(0,i.jsx)(g.HTTPAccessFallbackBoundary,{notFound:u,forbidden:m,unauthorized:b,children:(0,i.jsxs)(p.RedirectBoundary,{children:[(0,i.jsx)(j,{url:I,tree:e,params:y,cacheNode:s,segmentPath:N,debugNameContext:P,isActive:R&&d===H}),null]})})})}),null]}),S=(0,i.jsxs)(c.TemplateContext.Provider,{value:C,children:[o,r,l]},d);W.push(S),U=U.next}while(null!==U)return W}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},37457,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"default",{enumerable:!0,get:function(){return i}});let n=e.r(90809),o=e.r(43476),r=n._(e.r(71645)),l=e.r(8372);function i(){let e=(0,r.useContext)(l.TemplateContext);return(0,o.jsx)(o.Fragment,{children:e})}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},6831,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"createRenderParamsFromClient",{enumerable:!0,get:function(){return o}});let n=new WeakMap;function o(e){let t=n.get(e);if(t)return t;let a=Promise.resolve(e);return n.set(e,a),a}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},97689,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"createRenderParamsFromClient",{enumerable:!0,get:function(){return n}});let n=e.r(6831).createRenderParamsFromClient;("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},93504,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return o}});let n=new WeakMap;function o(e){let t=n.get(e);if(t)return t;
1let a=Promise.resolve(e);return n.set(e,a),a}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},66996,(e,t,a)=>{"use strict";e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return n}});let n=e.r(93504).createRenderSearchParamsFromClient;("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},42903,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});var n={createClientParams:function(){return r.createRenderParamsFromClient},createClientSearchParams:function(){return l.createRenderSearchParamsFromClient}};for(var o in n)Object.defineProperty(a,o,{enumerable:!0,get:n[o]});let r=e.r(97689),l=e.r(66996);("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},27201,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"IconMark",{enumerable:!0,get:function(){return o}});let n=e.r(43476),o=()=>"u">typeof window?null:(0,n.jsx)("meta",{name:"«nxt-icon»"})},91915,(e,t,a)=>{"use strict";function n(e,t={}){if(t.onlyHashChange)return void e();let a=document.documentElement;if("smooth"!==a.dataset.scrollBehavior)return void e();let o=a.style.scrollBehavior;a.style.scrollBehavior="auto",t.dontForceLayout||a.getClientRects(),e(),a.style.scrollBehavior=o}e.i(47167),Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"disableSmoothScrollDuringRouteTransition",{enumerable:!0,get:function(){return n}})},8556,e=>{"use strict";var t=e.i(43476),a=e.i(79218);let n={className:a.default.className,style:{fontFamily:"'IBM Plex Sans', 'IBM Plex Sans Fallback'",fontStyle:"normal"}};null!=a.default.variable&&(n.variable=a.default.variable);var o=e.i(27540);let r={className:o.default.className,style:{fontFamily:"'IBM Plex Mono', 'IBM Plex Mono Fallback'",fontStyle:"normal"}};null!=o.default.variable&&(r.variable=o.default.variable);var l=e.i(46696);e.i(85269);var i=e.i(71),s=e.i(45141),u=e.i(2607);let c={companyName:"ByteSauna Oy",companyStreet:"Mikonkatu 9",companyCity:"00100 HELSINKI",companyBilling:"003735532832",companyBroker:"Apix Messaging",companyBusinessId:"3553283-2",contactPhone:"+358 44 706 0880",contactEmail:"[email protected]",contactName:"Matias Heikkilä"};s.default.use(u.initReactI18next).init({fallbackLng:"en",interpolation:{escapeValue:!1},resources:{en:{translation:{...c,heroTitle:"Fast-moving software, forward-moving insight.",heroIngress:"Engineering for growth. Advisory for clarity.",contactDetailsTitle:"Contact",contactPosition:"Founder",email:"Email",phone:"Phone",address:"Mail",billing:"Billing",linkCopied:"Link copied",accountDetails:"Account details",pleaseLogInToParticipate:"Please log in to participate",youAreDoingThatTooMuch:"You are doing that too much, please try again later",upvotes:"upvotes",copied:"Copied!",somethingWentWrong:"Something went wrong, please try again later",upvote:"upvote",best:"Best",edited:"EDITED",loginTerms:" By logging in, you agree to our <a href='/tos' className='hover:underline text-primary cursor-pointer'>Terms of Service</a> and acknowledge that your data will be handled according to our <a href='/privacy' className='hover:underline text-primary cursor-pointer'>Privacy Policy</a>.",realNameNotice:"Your name will appear with your comment.",deleteComment:"Delete comment",newsletterSectionTitle:"Latest from the newsletter",deleteAccount:"Delete account",backToComments:"Back to comments",deleteAccountInfo:"Deleting your account will permanently remove all your data and any associated content. <strong>This action cannot be undone.</strong> Once deleted, your account and data cannot be recovered.",accountDetailsInfo:"Your account details are provided through social authentication and cannot be edited from this page.",cancelDeleteComment:"Cancel",deleteCommentConfirm:"Are you sure you want to delete your comment?",newest:"Newest",sortBy:"Sort by",updateComment:"Update comment",commentError:"Could not get comments",companyDetails:"Company details",aboutMeTitle:"Hello,",cancelEdit:"Cancel",pleaseLogIn:"To discuss, please log in using a social account.",aboutMeBody:[`I'm <strong>Matias Heikkil\xe4</strong> â a PhD technologist and 2 entrepreneur based in <strong>Helsinki, Finland</strong>. Over the 3 past decade, Iâve led and delivered complex, high-impact software and 4 AI projects across industries. My work centers on building robust, 5 thoughtful technology that solves real problems and moves 6 organizations forward.`,`Beyond delivery, I help leaders and team
6s navigate the fast-moving 7 intersection of technology, people, and strategy. I'm ambitious 8 about innovation, but grounded in critical thinking and practical 9 insight.`,"Letâs get in touch and have a chat!"],executiveCoachingTitle:"Executive AI Lab",author:"Author",authoredBy:"Article by",softwareDataAndAITitle:"Software, Data & AI",softwareDataAndAIAccent:"Custom engineering for modern teams",softwareDataAndAIIngress:`End-to-end software, data, and AI services 10 from an experienced full-stack engineer. I help teams build reliable 11 systems, automate workflows, and ship real products.`,softwareDataAndAIBullets:` 12 Full-stack web apps and APIs (e.g. React, Node, SQL, cloud) 13 14 Data pipelines, analytics, and integrations 15 16 AI agents, automations, and workflow optimization`,softwareDataAndAIBody:`Whether youâre launching a new product, 17 modernizing a legacy system, or looking to embed AI into your 18 operations, I can support your project from architecture to deployment. 19 Youâll work directly with me (no layers, no handoffs), just practical 20 engineering that moves your roadmap forward.`,advisoryTitle:"Advisory & Fractional CTO Support",advisoryAccent:"Guidance for products and teams",advisoryIngress:`I work with founders and leadership teams to make 21 clear, confident technology decisions, from product strategy and system 22 design to adopting AI where it truly adds value.`,advisoryBullets:` 23 Technical strategy and product roadmap input 24 25 Architecture reviews and modernization planning 26 27 AI opportunities, automation, and integration guidance`,advisoryBody:`Whether youâre scaling a product, improving reliability, 28 or exploring how AI fits into your business, I provide practical, 29 high-leverage support without the overhead of a full-time CTO. Youâll 30 get clear recommendations, steady technical direction, and a partner 31 who helps you move forward with confidence.`,executiveCoachingIngress:"Transforming executive vision into AI-driven excellence.",executiveCoachingBody:` 32 The Executive AI Lab is a one-on-one coaching program where you explore 33 artificial intelligence not as an abstract concept, but as a practical 34 tool. You will learn by doing, designing and deploying your own AI agent 35 tailored to your work and strategic goals. No coding experience is 36 needed; curiosity and leadership vision are enough. 37 38 Throughout the program, youâll gain a grounded understanding of how AI 39 systems think, act, and sometimes fail. Youâll move beyond buzzwords to 40 grasp how AI can truly augment your judgment, accelerate your workflows, 41 and strengthen your organizationâs digital capabilities. By the end, 42 youâll have a clearer sense of what it means to lead with AI, balancing 43 innovation with critical awareness and human insight. 44 `,executiveCoachingBullets:` 45 Four immersive sessions on AI leadership and strategy. 46 47 Design and deploy your first custom AI agent. 48 49 Lead innovation with clarity, confidence, and critical insight.`,devStudioTitle:"Development Intelligence Studio",devStudioIngress:"Shedding light on software team performance.",devStudioBody:` 50 The Development Intelligence Studio helps software teams see their 51 performance in a new light. Through a blend of data analysis, coaching, 52 and team reflection, we make development processes transparent and 53 reveal how code, collaboration, and delivery truly connect. 54 55 By analyzing Git activity, review patterns, and delivery rhythms, we 56 uncover meaningful insights into how work flows, where bottlenecks 57 emerge, and how value moves through the system. Teams learn to use this 58 knowledge to refine their practices, strengthen collaboration, and 59 accelerate innovation. 60 `,devStudioBullets:` 61 Turn development data into actionable insights. 62 63 Identify invisible bottlenecks and streamline delivery flow. 64 65 Strengthen collaboration and build a culture of continuous learning.
66 `,privacyTitle:"Privacy policy",discussion:"Discussion",letsTalk:"Let's talk",letsWork:"Let's work",letsBuild:"Let's build",delete:"Delete",edit:"Edit",addComment:"Add comment",contactDetails:"Contact details",bookAnIntro:"Book an intro",letsCollaborate:"Collaboration in action",linkedIn:"LinkedIn",linkedInUrl:"https://www.linkedin.com/in/matiasheikkila/",about:"About",conceptN:"<Concept #{{n}}>",execAndBoard:"For executives and board members",managerAndDirector:"For engineering managers and technical leaders",customRequestTitle:"Custom requests",allRightsReserved:"All rights reserved",privacyPolicy:"Privacy policy",cookieSettings:"Cookie settings",readTheNewsletter:"Read the newsletter",customRequestBody:` 67 Iâm available for tailored engagements such as keynote talks, executive 68 briefings, and custom workshops. 69 70 Every engagement begins with understanding your goals. From there, I 71 design a concept that blends insight, clarity, and practical relevance 72 ensuring your team leaves with ideas they can immediately apply. 73 Whether youâre looking for a thought-provoking presentation or a 74 hands-on strategy session, Iâm open to shaping something that fits your 75 vision and audience. 76 `,countMeIn:"Count me in",subscribe:"Subscribe",cancel:"Not now",subscriptionModalTitle:"Donât miss another post",subscriptionModalBody:"Deep cuts into tech, AI, and the industry shifts that actually matter, delivered into your inbox",subscriptionModalFooter:'We honour your inbox. Zero spam, unsubscribe anytime. Your data is handled according to our <a href="/privacy">Privacy Policy</a>.',yourEmail:"Your email address",emailPlaceholder:"[email protected]",invalidEmail:"Invalid email",login:"Log in",logout:"Log out",loginPageBody:"Logging in...",logoutPageBody:"You have been logged out.",letsStayInTouch:"Let's stay in touch",letsStayInTouchBody:`Subscribe to the newsletter for ideas that help you lead with focus 77 and navigate complexity in software, strategy, and AI. If youâre 78 looking to sharpen your teamâs next move, letâs schedule a call to 79 explore how we can turn insight into action.`,subscriptionSuccess:"Thanks! You will receive a confirmation email shortly.",subscriptionError:"Request failed, please try again later.",ok:"Okay",blogHeroTitle:"ByteSauna Newsletter",blogHeroIngress:"Deep cuts into AI, software, and the art of leading them well.",backToAllPosts:"â¬ ï¸ Back to all posts"}},fi:{translation:{...c,heroTitle:"Autan johtajia ajattelemaan kirkkaasti ja toimimaan varmasti."}}}});let d=s.default;var f=e.i(71645),m=e.i(62663);let p=()=>{if(m.acceptedCategory("analytics")){let t=document.createElement("script");function e(){dataLayer.push(arguments)}t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-SM4PX4D55Q",document.head.appendChild(t),window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-SM4PX4D55Q")}else{let e;e=["_ga","_gid","_gat","_gcl_au"],document.cookie.split(";").forEach(t=>{let a=t.split("=")[0].trim();(a.startsWith("_ga_")||e.includes(a))&&(document.cookie=`${a}=; Max-Age=0; path=/; domain=${window.location.hostname.replace(/^www\./,"")}`)})}},g=function(){return(0,f.useEffect)(()=>{m.run({categories:{necessary:{enabled:!0,readOnly:!0},analytics:{}},language:{default:"en",translations:{en:{consentModal:{title:"We use cookies",description:"We use cookies to improve your experience.",acceptAllBtn:"Accept all",acceptNecessaryBtn:"Reject non-essential",showPreferencesBtn:"Manage preferences"},preferencesModal:{title:"Cookie preferences",acceptAllBtn:"Accept all",acceptNecessaryBtn:"Reject non-essential",savePreferencesBtn:"Save choices",sections:[{title:"Our use of cookies",description:"We use cookies to personalize content and analyze traffic."},{title:"Strictly necessary cookies",description:"These cookies are required for basic site functionality.",linkedCategory:"necessary"},{title:"Analytics cookies",description:"Help us understand how the site is used so we can improve it.",linkedCategory:"analytics"}]}}}},onFirstConsent:()=>{p()},onConsent:()=>{p()},onChange:()=>{p()}})},[]),null};var h=e.i(52563),y=e.i(79397);let b=` 80 default-src 'self'; 81 base-uri 'self';
82 object-src 'none'; 83 frame-src 'self' https://login.bytesauna.com; 84 form-action 'self'; 85 img-src 'self' data:; 86 font-src 'self'; 87 style-src 'self' 'unsafe-inline'; 88 connect-src 'self' 89 https://api.iconify.design 90 https://api.simplesvg.com 91 https://api.unisvg.com 92 https://*.google-analytics.com 93 https://www.googletagmanager.com 94 ${y.default.commentURL} 95 ${y.default.auth0URL} 96 https://subscribe.bytesauna.com; 97 script-src 'self' 98 https://www.googletagmanager.com 99 https://www.google-analytics.com 100 ; 101 `;e.s(["default",0,function({children:e}){let a=new URL("/login/callback",window.location.origin).toString();return(0,t.jsx)(h.Auth0Provider,{domain:y.default.auth0URL,clientId:y.default.auth0ClientId,authorizationParams:{redirect_uri:a,audience:"comment.bytesauna.com",scope:"openid profile email"},cacheLocation:"localstorage",onRedirectCallback:e=>{let t=e?.returnTo||"/";window.location.replace(t)},children:(0,t.jsxs)(i.I18nextProvider,{i18n:d,children:[(0,t.jsx)(l.Toaster,{richColors:!0}),(0,t.jsx)(g,{}),(0,t.jsxs)("html",{lang:"en",children:[(0,t.jsxs)("head",{children:[(0,t.jsx)("link",{rel:"alternate",type:"application/rss+xml",title:"ByteSauna RSS Feed",href:"https://bytesauna.com/posts.rss"}),"prod"===y.default.env&&(0,t.jsx)("meta",{"http-equiv":"Content-Security-Policy",content:b}),(0,t.jsx)("meta",{property:"og:image",content:"https://bytesauna.com/logo.png"}),(0,t.jsx)("meta",{property:"og:image:width",content:"1200"}),(0,t.jsx)("meta",{property:"og:image:height",content:"630"})]}),(0,t.jsx)("body",{className:`${n.variable} ${r.variable} antialiased`,children:e})]})]})})}],8556)}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.