1<!DOCTYPE html><html lang="en" class="scroll-smooth"><head><meta charSet="utf-8"/>
1<script>!function(){try {var d=document.documentElement.classList;d.remove('light','dark');var e=localStorage.getItem('theme');d.add('dark');if("system"===e||(!e&&false)){var t="(prefers-color-scheme: dark)",m=window.matchMedia(t);m.media!==t||m.matches?d.add('dark'):d.add('light')}else if(e) d.add(e)}catch(e){}}()</script>
1<meta content="width=device-width, initial-scale=1" name="viewport"/><title>Chris Oguntolu â Cloud & GenAI Platform Engineer</title><meta name="robots" content="follow, index"/><meta name="description" content="Personal site of Chris Oguntolu, Cloud & GenAI Platform Engineer. Notes, book reviews and a novel on GenAI, cloud architecture and digital transformation."/><meta name="author" content="Chris Oguntolu"/><meta property="og:url" content="https://chrisurf.com/"/><meta property="og:type" content="website"/><meta property="og:site_name" content="chrisurf â Chris Oguntolu · Cloud & GenAI Platform Engineer"/><meta property="og:description" content="Personal site of Chris Oguntolu, Cloud & GenAI Platform Engineer. Notes, book reviews and a novel on GenAI, cloud architecture and digital transformation."/><meta property="og:title" content="Chris Oguntolu â Cloud & GenAI Platform Engineer"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="https://chrisurf.com/static/images/avatar.png"/><meta property="og:image:width" content="1024"/><meta property="og:image:height" content="1024"/><meta property="og:image:alt" content="Chris Oguntolu â Cloud & GenAI Platform Engineer"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@chrisoguntolu"/><meta name="twitter:creator" content="@chrisoguntolu"/><meta name="twitter:title" content="Chris Oguntolu â Cloud & GenAI Platform Engineer"/><meta name="twitter:description" content="Personal site of Chris Oguntolu, Cloud & GenAI Platform Engineer. Notes, book reviews and a novel on GenAI, cloud architecture and digital transformation."/><meta name="twitter:image" content="https://chrisurf.com/static/images/avatar.png"/><meta name="twitter:image:alt" content="Chris Oguntolu â Cloud & GenAI Platform Engineer"/><link rel="canonical" href="https://chrisurf.com/"/><link rel="preload" as="image" href="/static/images/avatar.png"/><meta name="next-head-count" content="26"/><link rel="apple-touch-icon" sizes="76x76" href="/static/favicons/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="/static/favicons/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/static/favicons/favicon-16x16.png"/><link rel="manifest" href="/static/favicons/site.webmanifest"/><link rel="mask-icon" href="/static/favicons/safari-pinned-tab.svg" color="#5bbad5"/><meta name="msapplication-TileColor" content="#000000"/><meta name="theme-color" media="(prefers-color-scheme: light)" content="#fff"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#000"/><link rel="alternate" type="application/rss+xml" href="/feed.xml"/><link rel="preload" href="/_next/static/css/27d031ba392e992e.css" as="style"/><link rel="stylesheet" href="/_next/static/css/27d031ba392e992e.css" data-n-g=""/><noscript data-n-css=""></noscript>
1<script defer="" nomodule="" src="/_next/static/chunks/polyfills-5cd94c89d3acac5f.js"></script>
1<script src="/_next/static/chunks/webpack-df0dab30790084d2.js" defer=""></script>
1<script src="/_next/static/chunks/main-b031baadb3616723.js" defer=""></script>
1<script src="/_next/static/chunks/pages/_app-fdd722fef42b1652.js" defer=""></script>
1<script src="/_next/static/chunks/675-64a821d6ab4fd557.js" defer=""></script>
1<script src="/_next/static/chunks/140-90c61fcbaba01ab0.js" defer=""></script>
1<script src="/_next/static/chunks/355-0ae6f233fccc0983.js" defer=""></script>
1<script src="/_next/static/chunks/55-f44365c92eed50d3.js" defer=""></script>
1<script src="/_next/static/chunks/712-2ff03864350ad6f5.js" defer=""></script>
1<script src="/_next/static/chunks/pages/index-f2d16d97779b0c70.js" defer=""></script>
1<script src="/_next/static/2bRGBxdPgSKDJdjs8vW2z/_buildManifest.js" defer=""></script>
1<script src="/_next/static/2bRGBxdPgSKDJdjs8vW2z/_ssgManifest.js" defer=""></script>
1<script src="/_next/static/2bRGBxdPgSKDJdjs8vW2z/_middlewareManifest.js" defer=""></script>
1</head><body class="text-black antialiased dark:text-white"><div id="__next" data-reactroot=""><div class="flex min-h-screen flex-col"><header class="glass-header sticky top-0 z-40 w-full transition-all duration-300 "><div class="mx-auto max-w-3xl px-4 sm:px-6 xl:max-w-5xl xl:px-0"><div class="flex items-center justify-between py-2 md:py-2.5"><a aria-label="chrisurf" class="group flex items-center" href="/"><div class="mr-3 h-12 w-12 transition-transform duration-300 group-hover:scale-110 sm:h-14 sm:w-14"><img src="/static/images/logo.png" alt="chrisurf logo" width="56" height="56" class="block h-full w-full object-contain"/></div><span class="gradient-text hidden text-xl font-bold tracking-tight sm:block">chrisurf</span></a><div class="flex items-center gap-1"><nav class="hidden items-center gap-1 sm:flex"><a class="relative inline-flex items-center gap-1.5 rounded-full px-4 py-2 text-sm font-medium transition-all duration-200 text-gray-700 hover:bg-gray-100/70 hover:text-primary-600 dark:text-gray-300 dark:hover:bg-gray-800/60 dark:hover:text-primary-300" href="/books"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open h-4 w-4" aria-hidden="true"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg><span>Books</span></a><div class="relative"><button type="button" aria-haspopup="menu" aria-expanded="false" class="relative inline-flex items-center gap-1.5 rounded-full px-4 py-2 text-sm font-medium transition-all duration-200 text-gray-700 hover:bg-gray-100/70 hover:text-primary-600 dark:text-gray-300 dark:hover:bg-gray-800/60 dark:hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wrench h-4 w-4" aria-hidden="true"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z"></path></svg><span>Tools</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down h-3.5 w-3.5 transition-transform duration-200" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div role="menu" class="absolute right-0 z-50 mt-2 w-80 origin-top-right transform transition-all duration-200 pointer-events-none -translate-y-1 scale-95 opacity-0"><div class="overflow-hidden rounded-2xl border border-gray-200/70 bg-white shadow-xl shadow-black/10 dark:border-gray-800/70 dark:bg-gray-900 dark:shadow-black/40"><ul class="flex flex-col gap-0.5 p-2"><li><a class="group flex items-start gap-3 rounded-xl px-3 py-2.5 transition-all hover:bg-gray-100/70 dark:hover:bg-gray-800/60" href="/ai-models"><span class="mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg transition-colors bg-gray-100/80 text-gray-600 group-hover:bg-primary-500/20 group-hover:text-primary-600 dark:bg-gray-800/80 dark:text-gray-300 dark:group-hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu h-4 w-4" aria-hidden="true"><path d="M12 20v2"></path><path d="M12 2v2"></path><path d="M17 20v2"></path><path d="M17 2v2"></path><path d="M2 12h2"></path><path d="M2 17h2"></path><path d="M2 7h2"></path><path d="M20 12h2"></path><path d="M20 17h2"></path><path d="M20 7h2"></path><path d="M7 20v2"></path><path d="M7 2v2"></path><rect x="4" y="4" width="16" height="16" rx="2"></rect><rect x="8" y="8" width="8" height="8" rx="1"></rect></svg></span><span class="min-w-0 flex-1"><span class="block text-sm font-semibold text-gray-900 dark:text-gray-100">
1AI Model Picker</span><span class="mt-0.5 block text-xs leading-snug text-gray-500 dark:text-gray-400">Capability & pricing matrix for the frontier LLMs</span></span></a></li><li><a class="group flex items-start gap-3 rounded-xl px-3 py-2.5 transition-all hover:bg-gray-100/70 dark:hover:bg-gray-800/60" href="/llm-cost"><span class="mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg transition-colors bg-gray-100/80 text-gray-600 group-hover:bg-primary-500/20 group-hover:text-primary-600 dark:bg-gray-800/80 dark:text-gray-300 dark:group-hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calculator h-4 w-4" aria-hidden="true"><rect width="16" height="20" x="4" y="2" rx="2"></rect><line x1="8" x2="16" y1="6" y2="6"></line><line x1="16" x2="16" y1="14" y2="18"></line><path d="M16 10h.01"></path><path d="M12 10h.01"></path><path d="M8 10h.01"></path><path d="M12 14h.01"></path><path d="M8 14h.01"></path><path d="M12 18h.01"></path><path d="M8 18h.01"></path></svg></span><span class="min-w-0 flex-1"><span class="block text-sm font-semibold text-gray-900 dark:text-gray-100">LLM Cost Estimator</span><span class="mt-0.5 block text-xs leading-snug text-gray-500 dark:text-gray-400">Count tokens, compare cost across every model</span></span></a></li><li><a class="group flex items-start gap-3 rounded-xl px-3 py-2.5 transition-all hover:bg-gray-100/70 dark:hover:bg-gray-800/60" href="/prompts"><span class="mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg transition-colors bg-gray-100/80 text-gray-600 group-hover:bg-primary-500/20 group-hover:text-primary-600 dark:bg-gray-800/80 dark:text-gray-300 dark:group-hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb h-4 w-4" aria-hidden="true"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg></span><span class="min-w-0 flex-1"><span class="block text-sm font-semibold text-gray-900 dark:text-gray-100">Prompt Library</span><span class="mt-0.5 block text-xs leading-snug text-gray-500 dark:text-gray-400">Engineering prompt templates with variable inputs</span></span></a></li><li><a class="group flex items-start gap-3 rounded-xl px-3 py-2.5 transition-all hover:bg-gray-100/70 dark:hover:bg-gray-800/60" href="/jwt-decoder"><span class="mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg transition-colors bg-gray-100/80 text-gray-600 group-hover:bg-primary-500/20 group-hover:text-primary-600 dark:bg-gray-800/80 dark:text-gray-300 dark:group-hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-key-round h-4 w-4" aria-hidden="true"><path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"></path><circle cx="16.5" cy="7.5" r=".5" fill="currentColor"></circle></svg></span><span class="min-w-0 flex-1"><span class="block text-sm font-semibold text-gray-900 dark:text-gray-100">JWT Decoder</span><span class="mt-0.5 block text-xs leading-snug text-gray-500 dark:text-gray-400">Inspect JWT tokens â runs 100% in your browser</span></span></a></li><li><a class="group flex items-start gap-3 rounded-xl px-3 py-2.5 transition-all hover:bg-gray-100/70 dark:hover:bg-gray-800/60" href="/regex-tester"><span class="mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg transition-colors bg-gray-100/80 text-gray-600 group-hover:bg-primary-500/20 group-hover:text-primary-600 dark:bg-gray-800/80 dark:text-gray-300 dark:group-hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-regex h-4 w-4" aria-hidden="true"><path d="M17 3v10"></path><path d="m12.67 5.5 8.66 5"></path><path d="m12.67 10.5 8.66-5"></path><path d="M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z"></path></svg></span><span class="min-w-0 flex-1"><span class="block text-sm font-semibold text-gray-900 dark:text-gray-100">Regex Tester</span><span class="mt-0.5 block text-xs leading-snug text-gray-500 dark:text-gray-400">Live tester plus curated pattern library for engineers</span></span></a></li><li><a class="group flex items-start gap-3 rounded-xl px-3 py-2.5 transition-all hover:bg-gray-100/70 dark:hover:bg-gray-800/60" href="/format-converter"><span class="mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg transition-colors bg-gray-100/80 text-gray-600 group-hover:bg-primary-500/20 group-hover:text-primary-600 dark:bg-gray-800/80 dark:text-gray-300 dark:group-hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-replace h-4 w-4" aria-hidden="true"><path d="M14 4a1 1 0 0 1 1-1"></path><path d="M15 10a1 1 0 0 1-1-1"></path><path d="M21 4a1 1 0 0 0-1-1"></path><path d="M21 9a1 1 0 0 1-1 1"></path><path d="m3 7 3 3 3-3"></path><path d="M6 10V5a2 2 0 0 1 2-2h2"></path><rect x="3" y="14" width="7" height="7" rx="1"></rect></svg></span><span class="min-w-0 flex-1"><span class="block text-sm font-semibold text-gray-900 dark:text-gray-100">Format Converter</span><span class="mt-0.5 block text-xs leading-snug text-gray-500 dark:text-gray-400">Convert between HCL, JSON and YAML in any direction</span></span></a></li><li><a class="group flex items-start gap-3 rounded-xl px-3 py-2.5 transition-all hover:bg-gray-100/70 dark:hover:bg-gray-800/60" href="/subnet-calc"><span class="mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg transition-colors bg-gray-100/80 text-gray-600 group-hover:bg-primary-500/20 group-hover:text-primary-600 dark:bg-gray-800/80 dark:text-gray-300 dark:group-hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network h-4 w-4" aria-hidden="true"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg></span><span class="min-w-0 flex-1"><span class="block text-sm font-semibold text-gray-900 dark:text-gray-100">Subnet Calculator</span><span class="mt-0.5 block text-xs leading-snug text-gray-500 dark:text-gray-400">Visual IP subnet & CIDR planning with split/join</span></span></a></li></ul></div></div></div><a class="relative inline-flex items-center gap-1.5 rounded-full px-4 py-2 text-sm font-medium transition-all duration-200 text-gray-700 hover:bg-gray-100/70 hover:text-primary-600 dark:text-gray-300 dark:hover:bg-gray-800/60 dark:hover:text-primary-300" href="/about"><span>Me</span></a></nav><button aria-label="Toggle Dark Mode" type="button" class="ml-1.5 inline-flex h-9 w-9 items-center justify-center rounded-full border border-gray-300/70 bg-white/70 text-gray-700 backdrop-blur transition-all hover:border-primary-400/60 hover:bg-white hover:text-primary-600 dark:border-gray-700/70 dark:bg-gray-800/70 dark:text-gray-200 dark:hover:border-primary-400/40 dark:hover:bg-gray-800 dark:hover:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4"><path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"></path></svg></button><div class="sm:hidden"><button type="button" class="ml-1.5 inline-flex h-9 w-9 items-center justify-center rounded-full border border-gray-300/70 bg-white/70 backdrop-blur transition-colors hover:bg-white dark:border-gray-700/70 dark:bg-gray-800/70 dark:hover:bg-gray-800" aria-label="Toggle Menu" aria-expanded="false"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-5 w-5 text-gray-800 dark:text-gray-100"><path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"></path></svg></button></div></div></div></div></header><main class="relative flex-1"><div class="mx-auto max-w-3xl px-4 sm:px-6 xl:max-w-5xl xl:px-0"><div class="space-y-10"><div class="space-y-4 pb-2 pt-10 md:pt-16"><span class="inline-flex items-center gap-2 rounded-full border font-medium backdrop-blur transition-colors px-3 py-1 text-xs border-primary-500/30 bg-primary-500/10 text-primary-700 dark:border-primary-400/30 dark:bg-primary-400/10 dark:text-primary-200 uppercase tracking-widest "><span>
1Hands-on by nature</span></span><p class="text-base text-gray-600 dark:text-gray-300 sm:text-lg">Hi, I'm <!-- -->Chris Oguntolu<!-- -->.</p><h1 class="break-words text-4xl font-extrabold leading-[1.1] tracking-tight sm:text-5xl md:text-6xl"><span class="gradient-text block">Cloud & GenAI</span><span class="gradient-text-alt block">Platform Engineer</span></h1><p class="max-w-2xl text-lg leading-8 text-gray-600 dark:text-gray-300 sm:text-xl">25 years of hands-on IT â from systems and networks to cloud platforms and GenAI.</p><p class="text-base font-medium text-gray-700 dark:text-gray-200">I don't just design platforms. I build them.</p><div class="pt-2"></div></div><div class="items-start gap-8 xl:grid xl:grid-cols-3"><div class="flex flex-col items-center gap-3 rounded-3xl border border-gray-200/70 bg-white/60 p-8 text-center backdrop-blur-xl dark:border-gray-800/70 dark:bg-gray-900/50"><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative;max-width:100%"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;max-width:100%"><img style="display:block;max-width:100%;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0" alt="" aria-hidden="true" src="data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%27192%27%20height=%27192%27/%3e"/></span><img alt="Chris Oguntolu avatar" src="/static/images/avatar.png" decoding="async" data-nimg="intrinsic" class="h-48 w-48 rounded-full" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/></span><h3 class="pt-2 text-2xl font-bold tracking-tight">Chris Oguntolu</h3><div class="text-sm text-gray-500 dark:text-gray-400">Cloud & GenAI Platform Engineer</div><div class="text-sm text-gray-500 dark:text-gray-400">Freelancer</div><div class="flex space-x-3 pt-4"><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="mailto:[email protected]"><span class="sr-only">mail</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-8 w-8"><path d="M2.003 5.884 10 9.882l7.997-3.998A2 2 0 0 0 16 4H4a2 2 0 0 0-1.997 1.884z"></path><path d="m18 8.118-8 4-8-4V14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8.118z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://github.com/chrisurf"><span class="sr-only">github</span><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-8 w-8"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/chris-oguntolu/"><span class="sr-only">linkedin</span><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-8 w-8"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://twitter.com/chrisoguntolu"><span class="sr-only">twitter</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-8 w-8"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path></svg></a></div></div><div class="prose prose-lg mt-8 max-w-none pb-8 dark:prose-dark xl:col-span-2 xl:mt-0"><p>I've been building things with computers for more than 25 years â from databases and networks to cloud platforms and GenAI. Today, I work at the intersection of Softw
1are Architecture, Cloud Architecture, GenAI and Consulting, but I've always stayed close to the technology itself. Much of my career has been spent understanding how systems work from the inside out, building them, breaking them, fixing them and making them reliable enough to run in production. That experience shapes how I approach architecture today: the decisions I make have to work in the real world â secure, reliable and economical at scale, not just look good on a slide.</p><p>My career has taken me across four international cities, beginning in Hamburg, where I built my technical foundation. I studied computer science and started my career working close to the systems themselves, moving through roles in web development, networking and system administration. Those early years gave me something that has stayed with me ever since: a curiosity about how things work and a preference for learning by doing.</p><p>From Hamburg, my path took me to London, where I moved deeper into the world of international IT and financial technology. Working with market-data systems and technology used by banks and financial institutions gave me a first-hand understanding of what it means to build and support systems where reliability, security and precision are not optional. It was also a period in which I continued to move between technology and the people and businesses depending on it â a combination that would later become an important part of my work as an architect and consultant.</p><p>Geneva became the next chapter. There, my work expanded beyond purely technical roles into business and account management, while I continued to stay closely connected to technology and s
1oftware. I worked with financial services and corporate clients, translating complex requirements into practical technical solutions. Outside of work, Geneva also gave me the opportunity to pursue some of the things that keep me grounded â wakesurfing in summer and snowboarding in winter. Both have taught me a useful lesson that applies equally well to technology: you learn by doing, you adapt quickly, and sometimes you have to be comfortable being outside your comfort zone.</p><p>For the past several years, Zurich has been both my professional base and home. Here, my work has increasingly focused on cloud architecture, platform engineering and digital transformation, working across AWS, GCP and Azure and increasingly into Generative AI. Today, I build the platforms and infrastructure that AI applications run on â from cloud landing zones, Kubernetes and Infrastructure as Code to AI platforms, agentic workflows, RAG and MCP. The technology keeps changing, but the underlying principle hasn't: understand the problem, build something useful, and make it work reliably in the real world.</p><p>That same mindset extends beyond client work. After more than twenty-five years of building systems, one habit has stayed with me: when the tool I need doesn't exist, I build it. This has led to a number of personal and open-source projects, including <a target="_blank" rel="noopener noreferrer" href="https://community.obsidian.md/plugins/voice">Voice</a>, a text-to-speech reader for Obsidian that is now used by tens of thousands of people, as well as projects such as Git History and an end-to-end encrypted CouchDB sync solution. All of these projects are publicly available and MIT-licensed. Building, shipping and supporting software that people actually rely on keeps me grounded as an architect: what I design has to work in production, not just look good on a slide.</p><p>That proximity to technology and AI also led somewhere I hadn't originally expected: writing a novel. <a href="/books/smart-glasses"><em>Smart Glasses: Is It a Mistake?</em></a> is a short piece of urban Reality Sci-Fi about an IT consultant in Zurich who buys a pair of AR glasses that quietly start finishing his sentences â until he is no longer sure which thoughts are still his own. I wrote it partly as an experiment and partly as a bridge: a way to explore AI from a perspective that goes beyond architecture diagrams, technical papers and product presentations, and to ask what happens when technology becomes so integrated into our lives that we stop noticing its influence.</p><p>That is the perspective I bring to my work today: decades of hands-on experience, a constant curiosity about what comes next, and a belief that the best way to understand technology is still to build with it.</p></div></div><section class="space-y-6 pb-8"><div class="space-y-3"><span class="inline-flex items-center gap-2 rounded-full border font-medium backdrop-blur transition-colors px-3 py-1 text-xs border-primary-500/30 bg-primary-500/10 text-primary-700 dark:border-primary-400/30 dark:bg-primary-400/10 dark:text-primary-200 uppercase tracking-widest "><span>Open Source</span></span><h2 class="text-2xl font-bold tracking-tight text-gray-900 dark:text-gray-100 sm:text-3xl">Plugins for the Obsidian community</h2><p class="max-w-2xl text-base leading-7 text-gray-600 dark:text-gray-300">After 25 years in technology I still build the tools I am missing myself. Each of these solves a problem I ran into in my own vault â shipped, maintained and free, installed straight from Obsidian's community plugin browser.</p></div><article class="group flex flex-col rounded-3xl border border-gray-200/70 bg-white/60 backdrop-blur-xl transition-colors hover:border-primary-500/40 dark:border-gray-800/70 dark:bg-gray-900/50 dark:hover:border-primary-400/40 p-6 sm:p-8"><div class="flex items-start justify-between gap-4"><div class="flex items-center gap-3"><span class="flex h-11 w-11 items-center justify-center rounded-2xl border border-primary-500/30 bg-primary-500/10 text-primary-600 dark:border-primary-400/30 dark:bg-primary-400/10 dark:text-primary-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-volume2 lucide-volume-2 h-5 w-5" aria-hidden="true"><path d="M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"></path><path d="M16 9a5 5 0 0 1 0 6"></path><path d="M19.364 18.364a9 9 0 0 0 0-12.728"></path></svg></span><div><h3 class="text-xl font-bold tracking-tight text-gray-900 dark:text-gray-100">Voice</h3><p class="text-xs uppercase tracking-widest text-gray-500 dark:text-gray-400">Obsidian plugin</p></div></div><div class="text-right"><div class="text-2xl font-bold tabular-nums text-gray-900 dark:text-gray-100 sm:text-3xl">40,637</div><div class="text-xs uppercase tracking-widest text-gray-500 dark:text-gray-400">downloads</div></div></div><p class="mt-4 text-base leading-7 text-gray-600 dark:text-gray-300">Listen to your notes as natural speech. Read them aloud, play a whole vault like an audiobook, or download MP3s and listen offline on mobile.</p><div class="mt-6 flex flex-wrap items-center gap-x-4 gap-y-2 text-sm text-gray-500 dark:text-gray-400"><span class="inline-flex items-center gap-1.5" title="GitHub stars"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star h-3.5 w-3.5" aria-hidden="true"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"></path></svg><span>88</span><span class="sr-only">GitHub stars</span></span><span aria-hidden="true">·</span><span>TypeScript</span><span aria-hidden="true">·</span><span>MIT</span><span class="ml-auto flex items-center gap-3"><a target="_blank" rel="noopener noreferrer" href="https://community.obsidian.md/plugins/voice" class="inline-flex items-center gap-1 font-medium text-primary-600 hover:text-primary-500 dark:text-primary-400">Obsidian<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right h-3.5 w-3.5" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a><a target="_blank" rel="noopener noreferrer" href="https://github.com/chrisurf/obsidian-voice" class="inline-flex items-center gap-1 font-medium text-gray-600 hover:text-primary-500 dark:text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-github h-3.5 w-3.5" aria-hidden="true"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path><path d="M9 18c-4.51 2-5-2-7-2"></path></svg>Source</a></span></div></article><div class="grid gap-4 sm:grid-cols-2"><a target="_blank" rel="noopener noreferrer" href="https://community.obsidian.md/plugins/git-history" class="group flex flex-col rounded-3xl border border-gray-200/70 bg-white/60 backdrop-blur-xl transition-colors hover:border-primary-500/40 dark:border-gray-800/70 dark:bg-gray-900/50 dark:hover:border-primary-400/40 p-6"><div class="flex items-center justify-between gap-3"><div class="flex items-center gap-2.5"><span class="flex h-9 w-9 items-center justify-center rounded-xl border border-gray-200/70 bg-white/60 text-gray-600 dark:border-gray-700/60 dark:bg-gray-900/60 dark:text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-branch h-4 w-4" aria-hidden="true"><line x1="6" x2="6" y1="3" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path></svg></span>
1<h3 class="font-bold tracking-tight text-gray-900 dark:text-gray-100">Git History</h3></div><span class="inline-flex items-center gap-1.5 text-sm tabular-nums text-gray-500 dark:text-gray-400"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download h-3.5 w-3.5" aria-hidden="true"><path d="M12 15V3"></path><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><path d="m7 10 5 5 5-5"></path></svg>969</span></div><p class="mt-3 text-sm leading-6 text-gray-600 dark:text-gray-300">Git inside Obsidian: interactive commit graph, source control panel and diff viewer â no terminal required.</p></a><a target="_blank" rel="noopener noreferrer" href="https://community.obsidian.md/plugins/couchdb-sync" class="group flex flex-col rounded-3xl border border-gray-200/70 bg-white/60 backdrop-blur-xl transition-colors hover:border-primary-500/40 dark:border-gray-800/70 dark:bg-gray-900/50 dark:hover:border-primary-400/40 p-6"><div class="flex items-center justify-between gap-3"><div class="flex items-center gap-2.5"><span class="flex h-9 w-9 items-center justify-center rounded-xl border border-gray-200/70 bg-white/60 text-gray-600 dark:border-gray-700/60 dark:bg-gray-900/60 dark:text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check h-4 w-4" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg></span><h3 class="font-bold tracking-tight text-gray-900 dark:text-gray-100">CouchDB Sync</h3></div><span class="inline-flex items-center gap-1.5 text-sm tabular-nums text-gray-500 dark:text-gray-400"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download h-3.5 w-3.5" aria-hidden="true"><path d="M12 15V3"></path><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><path d="m7 10 5 5 5-5"></path></svg>686</span></div><p class="mt-3 text-sm leading-6 text-gray-600 dark:text-gray-300">Live sync against a self-hosted CouchDB. AES-256-GCM encrypts note content and metadata before anything leaves your device.</p></a></div><p class="flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-gray-500 dark:text-gray-400"><span>42,292<!-- --> downloads across the Obsidian community, and counting.</span><a target="_blank" rel="noopener noreferrer" href="https://github.com/chrisurf" class="inline-flex items-center gap-1 font-medium text-primary-600 hover:text-primary-500 dark:text-primary-400">More on GitHub<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right h-3.5 w-3.5" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></p></section></div></div></main><footer class="mt-20"><div class="mx-auto max-w-3xl px-4 sm:px-6 xl:max-w-5xl xl:px-0"><div class="border-t border-gray-200/60 pt-10 pb-8 dark:border-gray-800/60"><div class="flex flex-col items-center gap-4"><div class="flex space-x-4"><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="mailto:[email protected]"><span class="sr-only">mail</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-6 w-6"><path d="M2.003 5.884 10 9.882l7.997-3.998A2 2 0 0 0 16 4H4a2 2 0 0 0-1.997 1.884z"></path><path d="m18 8.118-8 4-8-4V14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8.118z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://github.com/chrisurf"><span class="sr-only">github</span><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-6 w-6"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://facebook.com/chris.oguntolu"><span class="sr-only">facebook</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-6 w-6"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://youtube.com/@chrisurf9"><span class="sr-only">youtube</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-6 w-6"><path d="M23.499 6.203a3.008 3.008 0 0 0-2.089-2.089c-1.87-.501-9.4-.501-9.4-.501s-7.509-.01-9.399.501a3.008 3.008 0 0 0-2.088 2.09A31.258 31.26 0 0 0 0 12.01a31.258 31.26 0 0 0 .523 5.785 3.008 3.008 0 0 0 2.088 2.089c1.869.502 9.4.502 9.4.502s7.508 0 9.399-.502a3.008 3.008 0 0 0 2.089-2.09 31.258 31.26 0 0 0 .5-5.784 31.258 31.26 0 0 0-.5-5.808zm-13.891 9.4V8.407l6.266 3.604z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/chris-oguntolu/"><span class="sr-only">linkedin</span><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-6 w-6"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg></a><a class="text-sm text-gray-500 transition hover:text-gray-600" target="_blank" rel="noopener noreferrer" href="https://twitter.com/chrisoguntolu"><span class="sr-only">twitter</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="fill-current text-gray-700 hover:text-blue-500 dark:text-gray-200 dark:hover:text-blue-400 h-6 w-6"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path></svg></a></div><div class="flex flex-wrap items-center justify-center gap-x-2 text-sm text-gray-500 dark:text-gray-400"><span>Chris Oguntolu</span><span aria-hidden="true">·</span><span>© 2026</span><span aria-hidden="true">·</span><a class="transition-colors hover:text-primary-600 dark:hover:text-primary-300" href="/">chrisurf â Chris Oguntolu · Cloud & GenAI Platform Engineer</a></div><div class="text-xs text-gray-400 dark:text-gray-500">ð Made with love in ð¨ð</div></div></div></div></footer></div></div>
1<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"authorDetails":{"mdxSource":"var Component=(()=\u003e{var c=Object.create;var i=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var s=e=\u003ei(e,\"__esModule\",{value:!0});var p=(e,n)=\u003e()=\u003e(n||e((n={exports:{}}).exports,n),n.exports),g=(e,n)=\u003e{s(e);for(var o in n)i(e,o,{get:n[o],enumerable:!0})},y=(e,n,o)=\u003e{if(n\u0026\u0026typeof n==\"object\"||typeof n==\"function\")for(let a of d(n))!m.call(e,a)\u0026\u0026a!==\"default\"\u0026\u0026i(e,a,{get:()=\u003en[a],enumerable:!(o=h(n,a))||o.enumerable});return e},w=e=\u003ey(s(i(e!=null?c(u(e)):{},\"default\",e\u0026\u0026e.__esModule\u0026\u0026\"default\"in e?{get:()=\u003ee.default,enumerable:!0}:{value:e,enumerable:!0})),e);var l=p((x,r)=\u003e{r.exports=_jsx_runtime});var I={};g(I,{default:()=\u003ek,frontmatter:()=\u003eb});var t=w(l()),b={name:\"Chris Oguntolu\",avatar:\"/static/images/avatar.png\",occupation:\"Cloud \u0026 GenAI Platform Engineer\",company:\"Freelancer\",email:\"[email protected]\",twitter:\"https://twitter.com/chrisoguntolu\",linkedin:\"https://www.linkedin.com/in/chris-oguntolu/\",github:\"https://github.com/chrisurf\"};function f(e={}){let{wrapper:n}=e.components||{};return n?(0,t.jsx)(n,Object.assign({},e,{children:(0,t.jsx)(o,{})})):o();function o(){let a=Object.assign({p:\"p\",a:\"a\",em:\"em\"},e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:\"I've been building things with computers for more than 25 years \\u2014 from databases and networks to cloud platforms and GenAI. Today, I work at the intersection of Software Architecture, Cloud Architecture, GenAI and Consulting, but I've always stayed close to the technology itself. Much of my career has been spent understanding how systems work from the inside out, building them, breaking them, fixing them and making them reliable enough to run in production. That experience shapes how I approach architecture today: the decisions I make have to work in the real world \\u2014 secure, reliable and economical at scale, not just look good on a slide.\"}),(0,t.jsx)(a.p,{children:\"My career has taken me across four international cities, beginning in Hamburg, where I built my technical foundation. I studied computer science and started my career working close to the systems themselves, moving through roles in web development, networking and system administration. Those early years gave me something that has stayed with me ever since: a curiosity about how things work and a preference for learning by doing.\"}),(0,t.jsx)(a.p,{children:\"From Hamburg, my path took me to London, where I moved deeper into the world of international IT and financial technology. Working with market-data systems and technology used by banks and financial institutions gave me a first-hand understanding of what it means to build and support systems where reliability, security and precision are not optional. It was also a period in which I continued to move between technology and the people and businesses depending on it \\u2014 a combination that would later become an important part of my work as an architect and consultant.\"}),(0,t.jsx)(a.p,{children:\"Geneva became the next chapter. There, my work expanded beyond purely technical roles into business and account management, while I continued to stay closely connected to technology and s
1oftware. I worked with financial services and corporate clients, translating complex requirements into practical technical solutions. Outside of work, Geneva also gave me the opportunity to pursue some of the things that keep me grounded \\u2014 wakesurfing in summer and snowboarding in winter. Both have taught me a useful lesson that applies equally well to technology: you learn by doing, you adapt quickly, and sometimes you have to be comfortable being outside your comfort zone.\"}),(0,t.jsx)(a.p,{children:\"For the past several years, Zurich has been both my professional base and home. Here, my work has increasingly focused on cloud architecture, platform engineering and digital transformation, working across AWS, GCP and Azure and increasingly into Generative AI. Today, I build the platforms and infrastructure that AI applications run on \\u2014 from cloud landing zones, Kubernetes and Infrastructure as Code to AI platforms, agentic workflows, RAG and MCP. The technology keeps changing, but the underlying principle hasn't: understand the problem, build something useful, and make it work reliably in the real world.\"}),(0,t.jsxs)(a.p,{children:[\"That same mindset extends beyond client work. After more than twenty-five years of building systems, one habit has stayed with me: when the tool I need doesn't exist, I build it. This has led to a number of personal and open-source projects, including \",(0,t.jsx)(a.a,{href:\"https://community.obsidian.md/plugins/voice\",children:\"Voice\"}),\", a text-to-speech reader for Obsidian that is now used by tens of thousands of people, as well as projects such as Git History and an end-to-end encrypted CouchDB sync solution. All of these projects are publicly available and MIT-licensed. Building, shipping and supporting software that people actually rely on keeps me grounded as an architect: what I design has to work in production, not just look good on a slide.\"]}),(0,t.jsxs)(a.p,{children:[\"That proximity to technology and AI also led somewhere I hadn't originally expected: writing a novel. \",(0,t.jsx)(a.a,{href:\"/books/smart-glasses\",children:(0,t.jsx)(a.em,{children:\"Smart Glasses: Is It a Mistake?\"})}),\" is a short piece of urban Reality Sci-Fi about an IT consultant in Zurich who buys a pair of AR glasses that quietly start finishing his sentences \\u2014 until he is no longer sure which thoughts are still his own. I wrote it partly as an experiment and partly as a bridge: a way to explore AI from a perspective that goes beyond architecture diagrams, technical papers and product presentations, and to ask what happens when technology becomes so integrated into our lives that we stop noticing its influence.\"]}),(0,t.jsx)(a.p,{children:\"That is the perspective I bring to my work today: decades of hands-on experience, a constant curiosity about what comes next, and a belief that the best way to understand technology is still to build with it.\"})]})}}var k=f;return I;})();\n;return Component;","toc":[],"frontMatter":{"readingTime":{"text":"4 min read","minutes":3.77,"time":226200,"words":754},"slug":["default"],"fileName":"default.md","name":"Chris Oguntolu","avatar":"/static/images/avatar.png","occupation":"Cloud \u0026 GenAI Platform Engineer","company":"Freelancer","email":"[email protected]","twitter":"https://twitter.com/chrisoguntolu","linkedin":"https://www.linkedin.com/in/chris-oguntolu/","github":"https://github.com/chrisurf","date":null}},"openSource":[{"id":"voice","name":"Voice","icon":"Volume2","featured":true,"repo":"chrisurf/obsidian-voice","description":"Listen to your notes as natural speech. Read them aloud, play a whole vault like an audiobook, or download MP3s and listen offline on mobile.","language":"TypeScript","license":"MIT","downloads":40637,"stars":88},{"id":"git-history","name":"Git History","icon":"GitBranch","repo":"chrisurf/obsidian-git-history","description":"Git inside Obsidian: interactive commit graph, source control panel and diff viewer â no terminal required.","language":"TypeScript","license":"MIT","downloads":969,"stars":2},{"id":"couchdb-sync","name":"CouchDB Sync","icon":"ShieldCheck","repo":"chrisurf/obsidian-cauchdb-sync","description":"Live sync against a self-hosted CouchDB. AES-256-GCM encrypts note content and metadata before anything leaves your device.","language":"TypeScript","license":"MIT","downloads":686,"stars":1}]},"__N_SSG":true},"page":"/","query":{},"buildId":"2bRGBxdPgSKDJdjs8vW2z","isFallback":false,"gsp":true,"scriptLoader":[]}</script>
1</body></html>
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.