1<!DOCTYPE html> 2<html lang="en" data-color-scheme="light"> 3<head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <title>AI - Denis Hartl</title> 7 8 <meta name="HandheldFriendly" content="True"> 9 <meta name="MobileOptimized" content="320"> 10 11 <link rel="preconnect" href="https://fonts.bunny.net" crossorigin> 12 <link rel="dns-prefetch" href="https://fonts.bunny.net"> 13 <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin> 14 <link rel="dns-prefetch" href="https://cdn.jsdelivr.net"> 15 16 <link rel="preload" href="/assets/built/styles.css?v=MLT2xNU-yAsOSfF9" as="style"> 17 18 <meta name="theme-color" content="#2872fa"> 19 20 <style> 21 :root{--color-accent:#2872fa;--color-background:#fff;--color-foreground:#000} 22 [data-color-scheme="dark"]{--color-background:#1F2023;--color-foreground:#fff} 23 html{background-color:var(--color-background)} 24 body{margin:0;background-color:var(--color-background);color:var(--color-foreground)} 25 </style> 26 27
27<script> 28 document.documentElement.setAttribute('data-accent-color-original', '#2872fa'); 29 document.documentElement.setAttribute('data-contrast-adjustment', 'true'); 30 document.documentElement.setAttribute('data-default-color-scheme', 'system' || 'system'); 31 </script>
31 32 33
33<script>(function(){const c=document.documentElement,k=localStorage.getItem("alpine-dark-mode"),M=c.getAttribute("data-default-color-scheme")||"system",y=window.matchMedia("(prefers-color-scheme: dark)").matches;let h;if(k?h=k:M==="system"?h=y?"dark":"light":h=M,c.setAttribute("data-color-scheme",h),h==="dark"){c.classList.add("dark-mode","dark"),c.style.backgroundColor="#1c1917";const t=c.getAttribute("data-contrast-adjustment")==="true",n=c.getAttribute("data-accent-color-original");if(t&&n){const r=C(n);r!==n&&c.style.setProperty("--color-accent",r)}}else c.classList.remove("dark-mode","dark"),c.style.backgroundColor="#ffffff";function g(t){const n=t.replace("#","");return{r:parseInt(n.substring(0,2),16),g:parseInt(n.substring(2,4),16),b:parseInt(n.substring(4,6),16)}}function p(t){const n=t.r/255<=.03928?t.r/255/12.92:Math.pow((t.r/255+.055)/1.055,2.4),r=t.g/255<=.03928?t.g/255/12.92:Math.pow((t.g/255+.055)/1.055,2.4),e=t.b/255<=.03928?t.b/255/12.92:Math.pow((t.b/255+.055)/1.055,2.4);return .2126*n+.7152*r+.0722*e}function x(t,n){const r=p(g(t)),e=p(g(n));return(Math.max(r,e)+.05)/(Math.min(r,e)+.05)}function A(t){const n=g(t),r=n.r/255,e=n.g/255,o=n.b/255,a=Math.max(r,e,o),i=Math.min(r,e,o);let d=0,f=0,s=(a+i)/2;if(a!==i){const l=a-i;switch(f=s>.5?l/(2-a-i):l/(a+i),a){case r:d=((e-o)/l+(e<o?6:0))/6;break;case e:d=((o-r)/l+2)/6;break;case o:d=((r-e)/l+4)/6;break}}return{h:d*360,s:f*100,l:s*100}}function w(t){const n=t.h/360,r=t.s/100,e=t.l/100;let o,a,i;if(r===0)o=a=i=e;else{const f=(m,b,u)=>(u<0&&(u+=1),u>1&&(u-=1),u<.16666666666666666?m+(b-m)*6*u:u<.5?b:u<.6666666666666666?m+(b-m)*(.6666666666666666-u)*6:m),s=e<.5?e*(1+r):e+r-e*r,l=2*e-s;o=f(l,s,n+1/3),a=f(l,s,n),i=f(l,s,n-1/3)}const d=f=>{const s=Math.round(f*255).toString(16);return s.length===1?"0"+s:s};return"#"+d(o)+d(a)+d(i)}function C(t){const n="#1F2023";if(x(t,n)>=4.5)return t;let e=A(t),o=0;for(;o<20&&x(w(e),n)<4.5;)e.l=Math.min(100,e.l+5),o++;return w(e)}})();</script>
33 34 35 <link rel="canonical" href="https://www.denishartl.com/tag/ai/"> 36 <meta name="referrer" content="origin-when-cross-origin"> 37 38 <meta property="og:site_name" content="Denis Hartl"> 39 <meta property="og:type" content="website"> 40 <meta property="og:title" content="AI - Denis Hartl"> 41 <meta property="og:description" content="Coding, vibing and experimenting. Sharing it on the internet, our favourite place."> 42 <meta property="og:url" content="https://www.denishartl.com/tag/ai/"> 43 <meta property="og:image" content="https://www.denishartl.com/content/images/size/w1200/2026/06/pexels-markusspiske-1089438.jpg"> 44 <meta name="twitter:card" content="summary_large_image"> 45 <meta name="twitter:title" content="AI - Denis Hartl"> 46 <meta name="twitter:description" content="Coding, vibing and experimenting. Sharing it on the internet, our favourite place."> 47 <meta name="twitter:url" content="https://www.denishartl.com/tag/ai/"> 48 <meta name="twitter:image" content="https://www.denishartl.com/content/images/size/w1200/2026/06/pexels-markusspiske-1089438.jpg"> 49 <meta property="og:image:width" content="1200"> 50 <meta property="og:image:height" content="800"> 51 52
52<script type="application/ld+json"> 53{ 54 "@context": "https://schema.org", 55 "@type": "Series", 56 "publisher": { 57 "@type": "Organization", 58 "name": "Denis Hartl", 59 "url": "https://www.denishartl.com/", 60 "logo": { 61 "@type": "ImageObject", 62 "url": "https://www.denishartl.com/favicon.ico", 63 "width": 48, 64 "height": 48 65 } 66 }, 67 "url": "https://www.denishartl.com/tag/ai/", 68 "name": "AI", 69 "mainEntityOfPage": "https://www.denishartl.com/tag/ai/" 70} 71 </script>
71 72 73 <meta name="generator" content="Ghost 6.67"> 74 <link rel="alternate" type="application/rss+xml" title="Denis Hartl" href="https://www.denishartl.com/rss/"> 75
75<script defer src="https://www.denishartl.com/content/files/ghost-apps/portal/portal.min.js" data-i18n="true" data-ghost="https://www.denishartl.com/" data-key="dc0305a02c7bbd51ca1855e8da" data-api="https://www.denishartl.com/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
75<style id="gh-members-styles">.gh-post-upgrade-cta-content, 76.gh-post-upgrade-cta { 77 display: flex; 78 flex-direction: column; 79 align-items: center; 80 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 81 text-align: center; 82 width: 100%; 83 color: #ffffff; 84 font-size: 16px; 85} 86 87.gh-post-upgrade-cta-content { 88 border-radius: 8px; 89 padding: 40px 4vw; 90} 91 92.gh-post-upgrade-cta h2 { 93 color: #ffffff; 94 font-size: 28px; 95 letter-spacing: -0.2px; 96 margin: 0; 97 padding: 0; 98} 99 100.gh-post-upgrade-cta p { 101 margin: 20px 0 0; 102 padding: 0; 103} 104 105.gh-post-upgrade-cta small { 106 font-size: 16px; 107 letter-spacing: -0.2px; 108} 109 110.gh-post-upgrade-cta a { 111 color: #ffffff; 112 cursor: pointer; 113 font-weight: 500; 114 box-shadow: none; 115 text-decoration: underline; 116} 117 118.gh-post-upgrade-cta a:hover { 119 color: #ffffff; 120 opacity: 0.8; 121 box-shadow: none; 122 text-decoration: underline; 123} 124 125.gh-post-upgrade-cta a.gh-btn { 126 display: block; 127 background: #ffffff; 128 text-decoration: none; 129 margin: 28px 0 0; 130 padding: 8px 18px; 131 border-radius: 4px; 132 font-size: 16px; 133 font-weight: 600; 134} 135 136.gh-post-upgrade-cta a.gh-btn:hover { 137 opacity: 0.92; 138}</style> 139
139<script defer src="https://www.denishartl.com/content/files/ghost-apps/sodo-search/sodo-search.min.js" data-key="dc0305a02c7bbd51ca1855e8da" data-styles="https://www.denishartl.com/content/files/ghost-apps/sodo-search/main.css" data-sodo-search="https://www.denishartl.com/" data-locale="en" crossorigin="anonymous"></script>
139 140 141 <link href="https://www.denishartl.com/webmentions/receive/" rel="webmention"> 142
142<script defer src="/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
142 143 <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=WwnU9jw5ancNC8Gc"> 144
144<script defer src="/public/comment-counts.min.js?v=oFYkaGLdiMqB8VN9" data-ghost-comments-counts-api="https://www.denishartl.com/members/api/comments/counts/"></script>
144 145
145<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
145 146
146<script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://www.denishartl.com/.ghost/analytics/api/v1/page_hit" tb_site_uuid="8d970b1c-ffde-4d53-b8e0-ed2c66210858" tb_post_uuid="undefined" tb_post_type="null" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script>
146<style>:root {--ghost-accent-color: #2872fa;}</style> 147 148 <link rel="stylesheet" href="/assets/built/styles.css?v=MLT2xNU-yAsOSfF9"> 149</head> 150<body class="tag-template tag-ai"> 151 <a href="#main" class="skip-link">Skip to main content</a> 152 153 <div class="site-wrapper"> 154 <header role="banner" class="site-header header-minimal"> 155 <div class="container mx-auto px-4 py-8 max-w-4xl"> 156 <div class="header-content flex items-center justify-between"> 157 <div class="site-branding site-brand"> 158 <a href="https://www.denishartl.com" class="site-title site-title-link text-xl font-bold no-underline text-[var(--color-contrast)]"> 159 Denis Hartl 160 </a> 161 </div> 162 163 <div class="header-actions flex items-center gap-4"> 164 <button 165 class="nav-toggle menu-toggle md:hidden p-2 -mr-2 rounded-md text-[var(--color-foreground)] hover:bg-[var(--color-background-200)]" 166 aria-label="Toggle navigation menu" 167 aria-expanded="false" 168 > 169 <svg class="menu-icon w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 170 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/> 171 </svg> 172 <svg class="close-icon w-6 h-6 hidden" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 173 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/> 174 </svg> 175 </button> 176 177 <nav role="navigation" aria-label="Main navigation" class="site-nav"> 178 <ul class="nav-list flex gap-6 items-center m-0 p-0 list-none"> 179 <li class="nav-item"> 180 <a href="/" class="nav-link no-underline font-medium text-[var(--color-foreground)] hover:text-[var(--color-accent)]"> 181 Home 182 </a> 183 </li> 184 <li class="nav-item"> 185 <a href="/contact/" class="nav-link no-underline font-medium text-[var(--color-foreground)] hover:text-[var(--color-accent)]"> 186 Contact 187 </a> 188 </li> 189 <li class="nav-item"> 190 <a href="/about/" class="nav-link no-underline font-medium text-[var(--color-foreground)] hover:text-[var(--color-accent)]"> 191 About 192 </a> 193 </li> 194 195 196 <li class="nav-item"> 197 <button 198 data-ghost-search 199 aria-label="Search" 200 class="nav-link search-button no-underline font-medium flex items-center justify-center text-[var(--color-foreground)] hover:text-[var(--color-accent)]"> 201 <i class="ri-search-line" aria-hidden="true"></i> 202 </button> 203 </li> 204 205 <li class="nav-item"> 206 <button 207 data-dark-mode-toggle 208 aria-label="Toggle dark mode" 209 class="nav-link no-underline font-medium flex items-center justify-center text-[var(--color-foreground)] hover:text-[var(--color-accent)]"> 210 <i class="ri-moon-line dark-mode-icon-moon" aria-hidden="true"></i> 211 <i class="ri-sun-line dark-mode-icon-sun hidden" aria-hidden="true"></i> 212 </button> 213 </li> 214 </ul> 215</nav> 216 </div> 217 </div> 218 </div> 219</header> 220 221 <main id="main" role="main" tabindex="-1" class="site-main"> 222 223<div class="container mx-auto px-4 py-12 max-w-4xl"> 224 <header class="tag-header archive-header mb-12"> 225 <h1 class="tag-title archive-title text-4xl md:text-5xl font-bold mb-4" style="color: var(--color-contrast);"> 226 AI 227 </h1> 228 <p class="tag-count post-count text-sm mt-4" style="color: var(--color-foreground); opacity: 0.6;"> 229 11 posts 230 </p> 231 </header> 232 233 <div class="post-list tag-posts"> 234 235<article class="post tag-ai tag-claude-code tag-grafana featured post-card mb-12 pb-12 border-b last:border-b-0 featured-post" style="border-color: var(--color-border);"> 236 237 <header class="post-card-header"> 238 <div class="featured-indicator flex items-center gap-1.5 mb-3 text-sm font-medium" style="color: var(--color-accent);"> 239 <svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true"> 240 <path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
240 241 </svg> 242 <span>Featured</span> 243 </div> 244 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 245 <a href="/grafana-dashboards-claude-code/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 246 Building Dashboards with Grafana MCP and Claude Code 247 </a> 248 </h2> 249 250 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 251 252 <time class="post-date post-card-date" datetime="2026-06-10"> 253 Jun 10, 2026 254 </time> 255 256 <span class="post-reading-time post-card-reading-time">11 min read</span> 257 </div> 258 259 260 <div class="post-tags flex flex-wrap gap-2 mb-6"> 261 <a 262 href="/tag/ai/" 263 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 264 style="color: var(--color-foreground); background-color: var(--color-background-200);" 265 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 266 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 267 > 268 AI 269 </a> 270 <a 271 href="/tag/claude-code/" 272 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 273 style="color: var(--color-foreground); background-color: var(--color-background-200);" 274 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 275 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 276 > 277 Claude Code 278 </a> 279 <a 280 href="/tag/grafana/" 281 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 282 style="color: var(--color-foreground); background-color: var(--color-background-200);" 283 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 284 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 285 > 286 Grafana 287 </a> 288 </div> 289 </header> 290 291 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 292 <p class="excerpt-content">Building Grafana dashboards by hand is tedious. Here's how I use Claude Code and the Grafana MCP to generate them, then provision from GitHub.â¦</p> 293 </div> 294 295 <footer class="post-card-footer"> 296 <a href="/grafana-dashboards-claude-code/" class="read-more read-more-link inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 297 <span class="read-more-text">Read more</span> 298 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 299 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 300 </svg> 301 </a> 302 </footer> 303</article> 304 305 306<article class="post tag-ai tag-azure post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 307 308 <header class="post-card-header"> 309 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 310 <a href="/local-yolo-training-azure-ml/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 311 Tracking local YOLO model training in Azure ML Workspace 312 </a> 313 </h2> 314 315 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 316 317 <time class="post-date post-card-date" datetime="2026-07-02"> 318 Jul 2, 2026 319 </time> 320
321 <span class="post-reading-time post-card-reading-time">19 min read</span> 322 </div> 323 324 325 <div class="post-tags flex flex-wrap gap-2 mb-6"> 326 <a 327 href="/tag/ai/" 328 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 329 style="color: var(--color-foreground); background-color: var(--color-background-200);" 330 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 331 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 332 > 333 AI 334 </a> 335 <a 336 href="/tag/azure/" 337 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 338 style="color: var(--color-foreground); background-color: var(--color-background-200);" 339 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 340 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 341 > 342 Azure 343 </a> 344 </div> 345 </header> 346 347 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 348 <p class="excerpt-content">Learn to track local YOLO training runs in Azure ML Workspace with MLflow, including dataset versioning, model registry, and champion/challenger picks.â¦</p> 349 </div> 350 351 <footer class="post-card-footer"> 352 <a href="/local-yolo-training-azure-ml/" class="read-more read-more-link inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 353 <span class="read-more-text">Read more</span> 354 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 355 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 356 </svg> 357 </a> 358 </footer> 359</article> 360 361<article class="post tag-ai tag-personal post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 362 363 <header class="post-card-header"> 364 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 365 <a href="/ai-made-me-feel-miserable/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 366 AI made me miserable 367 </a> 368 </h2> 369 370 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 371 372 <time class="post-date post-card-date" datetime="2026-06-25"> 373 Jun 25, 2026 374 </time> 375 376 <span class="post-reading-time post-card-reading-time">9 min read</span> 377 </div> 378 379 380 <div class="post-tags flex flex-wrap gap-2 mb-6"> 381 <a 382 href="/tag/ai/" 383 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 384 style="color: var(--color-foreground); background-color: var(--color-background-200);" 385 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 386 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 387 > 388 AI 389 </a> 390 <a 391 href="/tag/personal/" 392 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 393 style="color: var(--color-foreground); background-color: var(--color-background-200);" 394 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 395 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 396 > 397 Personal 398 </a> 399 </div> 400 </header> 401 402 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 403 <p class="excerpt-content">Using AI all day left me drained and unfulfilled. Read how it made me miserable and the things I am doing to get out of it.â¦</p> 404 </div> 405 406 <footer class="post-card-footer"> 407 <a href="/ai-made-me-feel-miserable/" class="read-more read-more-link
407inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 408 <span class="read-more-text">Read more</span> 409 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 410 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 411 </svg> 412 </a> 413 </footer> 414</article> 415 416<article class="post tag-ai-posture-detection tag-ai tag-nvidia-jetson post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 417 418 <header class="post-card-header"> 419 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 420 <a href="/yolo-posture-detection-continuous-learning/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 421 AI Sitting Posture Detection with NVIDIA Jetson Orin Nano: Continuous Learning and Improvement (Part 3) 422 </a> 423 </h2> 424 425 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 426 427 <time class="post-date post-card-date" datetime="2026-01-24"> 428 Jan 24, 2026 429 </time> 430 431 <span class="post-reading-time post-card-reading-time">20 min read</span> 432 </div> 433 434 435 <div class="post-tags flex flex-wrap gap-2 mb-6"> 436 <a 437 href="/tag/ai-posture-detection/" 438 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 439 style="color: var(--color-foreground); background-color: var(--color-background-200);" 440 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 441 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 442 > 443 AI posture detection 444 </a> 445 <a 446 href="/tag/ai/" 447 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 448 style="color: var(--color-foreground); background-color: var(--color-background-200);" 449 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 450 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 451 > 452 AI 453 </a> 454 <a 455 href="/tag/nvidia-jetson/" 456 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 457 style="color: var(--color-foreground); background-color: var(--color-background-200);" 458 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 459 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 460 > 461 NVIDIA Jetson 462 </a> 463 </div> 464 </header> 465 466 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 467 <p class="excerpt-content">Learn how to implement continuous model improvement for YOLO-based posture detection on the Jetson Orin Nanoâfrom logging predictions to automated retraining.â¦</p> 468 </div> 469 470 <footer class="post-card-footer"> 471 <a href="/yolo-posture-detection-continuous-learning/" class="read-more read-more-link inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 472 <span class="read-more-text">Read more</span> 473 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 474 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 475 </svg> 476 </a> 477 </footer> 478</article> 479 480<article class="post tag-ai tag-ai-posture-detection tag-nvidia-jetson post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 481 482 <header class="post-card-header"> 483 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 484 <a href="/yolo-11-retraining-continuous-learning/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 485 Comparing YOLO 11 Retraining Strategies for Continuous Learning 486 </a> 487 </h2> 488 489 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 490 491 <time class="post-date post-card-date" datetime="2026-01-17"> 492 Jan 17, 2026 493 </time> 494
495 <span class="post-reading-time post-card-reading-time">10 min read</span> 496 </div> 497 498 499 <div class="post-tags flex flex-wrap gap-2 mb-6"> 500 <a 501 href="/tag/ai/" 502 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 503 style="color: var(--color-foreground); background-color: var(--color-background-200);" 504 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 505 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 506 > 507 AI 508 </a> 509 <a 510 href="/tag/ai-posture-detection/" 511 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 512 style="color: var(--color-foreground); background-color: var(--color-background-200);" 513 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 514 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 515 > 516 AI posture detection 517 </a> 518 <a 519 href="/tag/nvidia-jetson/" 520 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 521 style="color: var(--color-foreground); background-color: var(--color-background-200);" 522 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 523 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 524 > 525 NVIDIA Jetson 526 </a> 527 </div> 528 </header> 529 530 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 531 <p class="excerpt-content">I tested four different YOLO 11 retraining strategies for continuous learningâand the results surprised me. Fine-tuning with frozen backbone layers achieved the best accuracy while using 70% less RAM than full retraining.â¦</p> 532 </div> 533 534 <footer class="post-card-footer"> 535 <a href="/yolo-11-retraining-continuous-learning/" class="read-more read-more-link inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 536 <span class="read-more-text">Read more</span> 537 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 538 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 539 </svg> 540 </a> 541 </footer> 542</article> 543 544<article class="post tag-ai-posture-detection tag-ai tag-nvidia-jetson post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 545 546 <header class="post-card-header"> 547 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 548 <a href="/jetson-posture-detection-fastapi-alerting/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 549 AI Sitting Posture Detection with NVIDIA Jetson Orin Nano: Web UI and Alerting (Part 2) 550 </a> 551 </h2> 552 553 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 554 555 <time class="post-date post-card-date" datetime="2026-01-08"> 556 Jan 8, 2026 557 </time> 558 559 <span class="post-reading-time post-card-reading-time">15 min read</span> 560 </div> 561 562 563 <div class="post-tags flex flex-wrap gap-2 mb-6"> 564 <a 565 href="/tag/ai-posture-detection/" 566 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 567 style="color: var(--color-foreground); background-color: var(--color-background-200);" 568 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 569 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 570 > 571 AI posture detection 572 </a> 573 <a 574 href="/tag/ai/" 575 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 576 style="color: var(--color-foreground); background-color: var(--color-background-200);" 577 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 578 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 579 > 580 AI 581 </a> 582 <a 583 href="/tag/nvidia-jetson/" 584 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 585 style="color: var(--color-foreground); background-color: var(--color-background-200);" 586 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 587 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 588 > 589 NVIDIA Jetson 590 </a> 591 </div> 592 </header> 593 594 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 595 <p class="excerpt-content">Deploy your YOLO posture model on Jetson Orin Nano using FastAPI. Build a websocket web UI, alerting system, and MacOS app. Full source code included.â¦</p> 596 </div> 597 598 <footer class="post-card-footer"> 599 <a href="/jetson-posture-detection-fastapi-alerting/" class="read-more read-more-link
599inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 600 <span class="read-more-text">Read more</span> 601 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 602 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 603 </svg> 604 </a> 605 </footer> 606</article> 607 608<article class="post tag-ai-posture-detection tag-ai tag-nvidia-jetson post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 609 610 <header class="post-card-header"> 611 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 612 <a href="/yolo-posture-detection-jetson-orin-nano/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 613 AI Sitting Posture Detection with NVIDIA Jetson Orin Nano: Model Training and Preparation (Part 1) 614 </a> 615 </h2> 616 617 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 618 619 <time class="post-date post-card-date" datetime="2026-01-02"> 620 Jan 2, 2026 621 </time> 622 623 <span class="post-reading-time post-card-reading-time">21 min read</span> 624 </div> 625 626 627 <div class="post-tags flex flex-wrap gap-2 mb-6"> 628 <a 629 href="/tag/ai-posture-detection/" 630 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 631 style="color: var(--color-foreground); background-color: var(--color-background-200);" 632 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 633 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 634 > 635 AI posture detection 636 </a> 637 <a 638 href="/tag/ai/" 639 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 640 style="color: var(--color-foreground); background-color: var(--color-background-200);" 641 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 642 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 643 > 644 AI 645 </a> 646 <a 647 href="/tag/nvidia-jetson/" 648 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 649 style="color: var(--color-foreground); background-color: var(--color-background-200);" 650 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 651 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 652 > 653 NVIDIA Jetson 654 </a> 655 </div> 656 </header> 657 658 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 659 <p class="excerpt-content">Train a custom YOLO model for sitting posture detection on Jetson Orin Nano. Includes data collection, training, TensorRT optimization, and full GitHub code.â¦</p> 660 </div> 661 662 <footer class="post-card-footer"> 663 <a href="/yolo-posture-detection-jetson-orin-nano/" class="read-more read-more-link inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 664 <span class="read-more-text">Read more</span> 665 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 666 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 667 </svg> 668 </a> 669 </footer> 670</article> 671 672<article class="post tag-ai tag-nvidia-jetson post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 673 674 <header class="post-card-header"> 675 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 676 <a href="/nvidia-jetson-orin-nano-getting-started-with-yolo/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 677 NVIDIA Jetson Orin Nano: Getting Started with YOLO 678 </a> 679 </h2> 680 681 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 682 683 <time class="post-date post-card-date" datetime="2025-12-22"> 684 Dec 22, 2025 685 </time> 686
687 <span class="post-reading-time post-card-reading-time">11 min read</span> 688 </div> 689 690 691 <div class="post-tags flex flex-wrap gap-2 mb-6"> 692 <a 693 href="/tag/ai/" 694 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 695 style="color: var(--color-foreground); background-color: var(--color-background-200);" 696 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 697 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 698 > 699 AI 700 </a> 701 <a 702 href="/tag/nvidia-jetson/" 703 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 704 style="color: var(--color-foreground); background-color: var(--color-background-200);" 705 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 706 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 707 > 708 NVIDIA Jetson 709 </a> 710 </div> 711 </header> 712 713 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 714 <p class="excerpt-content">A beginner's guide to running YOLO on the NVIDIA Jetson Orin Nano. Covers setup challenges, camera streaming in Jupyter, and hands-on examples of object detection, segmentation, classification, and pose estimation.â¦</p> 715 </div> 716 717 <footer class="post-card-footer"> 718 <a href="/nvidia-jetson-orin-nano-getting-started-with-yolo/" class="read-more read-more-link inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 719 <span class="read-more-text">Read more</span> 720 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 721 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 722 </svg> 723 </a> 724 </footer> 725</article> 726 727<article class="post tag-ai tag-nvidia-jetson post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 728 729 <header class="post-card-header"> 730 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 731 <a href="/nvidia-jetson-orin-nano-first-impressions-initial-setup/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 732 NVIDIA Jetson Orin Nano: First Impressions & Initial Setup 733 </a> 734 </h2> 735 736 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 737 738 <time class="post-date post-card-date" datetime="2025-12-16"> 739 Dec 16, 2025 740 </time> 741 742 <span class="post-reading-time post-card-reading-time">11 min read</span> 743 </div> 744 745 746 <div class="post-tags flex flex-wrap gap-2 mb-6"> 747 <a 748 href="/tag/ai/" 749 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 750 style="color: var(--color-foreground); background-color: var(--color-background-200);" 751 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 752 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 753 > 754 AI 755 </a> 756 <a 757 href="/tag/nvidia-jetson/" 758 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 759 style="color: var(--color-foreground); background-color: var(--color-background-200);" 760 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 761 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 762 > 763 NVIDIA Jetson 764 </a> 765 </div> 766 </header> 767 768 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 769 <p class="excerpt-content">First impressions and complete setup guide for the NVIDIA Jetson Orin Nano Developer Kit. Covers hardware assembly, SSD and camera installation, SDK manager troubleshooting, and remote access configuration.â¦</p> 770 </div> 771 772 <footer class="post-card-footer"> 773 <a href="/nvidia-jetson-orin-nano-first-impressions-initial-setup/" class="read-more read-more-link
773inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 774 <span class="read-more-text">Read more</span> 775 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 776 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 777 </svg> 778 </a> 779 </footer> 780</article> 781 782<article class="post tag-ai post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 783 784 <header class="post-card-header"> 785 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 786 <a href="/exploring-collaborative-ai-coding-agents/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 787 Exploring collaborative AI Coding Agents 788 </a> 789 </h2> 790 791 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 792 793 <time class="post-date post-card-date" datetime="2025-11-30"> 794 Nov 30, 2025 795 </time> 796 797 <span class="post-reading-time post-card-reading-time">19 min read</span> 798 </div> 799 800 801 <div class="post-tags flex flex-wrap gap-2 mb-6"> 802 <a 803 href="/tag/ai/" 804 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 805 style="color: var(--color-foreground); background-color: var(--color-background-200);" 806 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 807 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 808 > 809 AI 810 </a> 811 </div> 812 </header> 813 814 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 815 <p class="excerpt-content">An experiment with manually orchestrating multiple Claude Code agentsâArchitect, Engineer, and Documenterâto build a chess web app. Covers planning, workflow, prompts, and lessons learned about working with collaborative AI coding agents.â¦</p> 816 </div> 817 818 <footer class="post-card-footer"> 819 <a href="/exploring-collaborative-ai-coding-agents/" class="read-more read-more-link inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 820 <span class="read-more-text">Read more</span> 821 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 822 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 823 </svg> 824 </a> 825 </footer> 826</article> 827 828<article class="post tag-ai post-card mb-12 pb-12 border-b last:border-b-0 " style="border-color: var(--color-border);"> 829 830 <header class="post-card-header"> 831 <h2 class="post-card-title post-title text-2xl md:text-3xl font-bold leading-tight mb-3"> 832 <a href="/how-to-get-free-tokens-for-the-openai-api/" class="post-card-title-link no-underline" style="color: var(--color-contrast);"> 833 How to get free tokens for the OpenAI API 834 </a> 835 </h2> 836 837 <div class="post-card-meta post-meta flex flex-wrap items-center gap-3 text-sm mb-4" style="color: var(--color-foreground); opacity: 0.7;"> 838 839 <time class="post-date post-card-date" datetime="2025-11-03"> 840 Nov 3, 2025 841 </time> 842 843 <span class="post-reading-time post-card-reading-time">4 min read</span> 844 </div> 845 846 847 <div class="post-tags flex flex-wrap gap-2 mb-6"> 848 <a 849 href="/tag/ai/" 850 class="tag inline-block px-3 py-1 text-sm rounded-full no-underline transition-colors" 851 style="color: var(--color-foreground); background-color: var(--color-background-200);" 852 onmouseover="this.style.color='var(--color-accent)'; this.style.backgroundColor='var(--color-background-300)';" 853 onmouseout="this.style.color='var(--color-foreground)'; this.style.backgroundColor='var(--color-background-200)';" 854 > 855 AI 856 </a> 857 </div> 858 </header> 859 860 <div class="post-card-excerpt post-excerpt leading-relaxed mb-4" style="color: var(--color-foreground);"> 861 <p class="excerpt-content">Get daily free tokens for the OpenAI API by enabling data sharing. Learn about eligibility requirements, token limits by model, and the trade-offs you should know before opting in.â¦</p> 862 </div> 863 864 <footer class="post-card-footer"> 865 <a href="/how-to-get-free-tokens-for-the-openai-api/" class="read-more read-more-link
865inline-flex items-center text-accent-600 dark:text-accent-400 hover:text-accent-700 dark:hover:text-accent-300 font-medium no-underline group"> 866 <span class="read-more-text">Read more</span> 867 <svg class="read-more-icon w-4 h-4 ml-1 transition-transform duration-200 ease-out group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"> 868 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/> 869 </svg> 870 </a> 871 </footer> 872</article> 873 </div> 874 875 <nav class="pagination" role="navigation"> 876 <div class="pagination-wrapper"> 877 878 <span class="pagination-info"> 879 Page 1 of 1 880 </span> 881 882 </div> 883</nav> 884 885</div> 886 887 </main> 888 889 <footer role="contentinfo" class="site-footer"> 890 <div class="container mx-auto px-4 py-12 max-w-4xl"> 891 <div class="footer-subscribe subscribe-section mb-8 pb-16 border-b" style="border-color: var(--color-border);"> 892 <div class="subscribe-content max-w-2xl mx-auto text-center"> 893 <h3 class="subscribe-heading text-xl font-semibold mb-2" style="color: var(--color-contrast);"> 894 Subscribe to Denis Hartl 895 </h3> 896 <p class="subscribe-description mb-4" style="color: var(--color-foreground);">Sign up for more like this</p> 897 898 <form data-members-form="subscribe" class="subscribe-form max-w-md mx-auto"> 899 <div class="flex flex-col sm:flex-row gap-2"> 900 <label for="footer-email-nonpost" class="sr-only">Your email address</label> 901 <input id="footer-email-nonpost" type="email" data-members-email 902 placeholder="Your email address" required 903 class="flex-1 px-4 py-2 rounded-md focus:outline-none focus:ring-2" 904 style="border: 1px solid var(--color-border); background-color: var(--color-background); color: var(--color-foreground); --tw-ring-color: var(--color-accent);"> 905 <button type="submit" class="px-6 py-2 rounded-md font-medium whitespace-nowrap" 906 style="background-color: var(--color-accent); color: var(--color-accent-foreground);"> 907 Subscribe 908 </button> 909 </div> 910 <p data-members-error></p> 911 <p data-members-feedback>Thank you for subscribing! Please check your email to confirm your subscription.</p> 912 </form> 913 </div> 914 </div> 915 916 <nav class="footer-nav secondary-nav mb-8" role="navigation" aria-label="Secondary navigation"> 917 <ul class="flex flex-wrap justify-center gap-x-6 gap-y-2 list-none m-0 p-0"> 918 <li> 919 <a href="https://github.com/denishartl" class="footer-nav-link text-sm transition-colors" 920 style="color: var(--color-foreground);"> 921 GitHub 922 </a> 923 </li> 924 <li> 925 <a href="https://www.linkedin.com/in/denis-hartl-45a331226/" class="footer-nav-link text-sm transition-colors" 926 style="color: var(--color-foreground);"> 927 LinkedIn 928 </a> 929 </li> 930 <li> 931 <a href="/impressum/" class="footer-nav-link text-sm transition-colors" 932 style="color: var(--color-foreground);"> 933 Impressum 934 </a> 935 </li> 936 <li> 937 <a href="/privacy-policy/" class="footer-nav-link text-sm transition-colors" 938 style="color: var(--color-foreground);"> 939 Privacy Policy 940 </a> 941 </li> 942 </ul> 943 </nav> 944 945 <div class="footer-content footer-credits text-center text-sm" style="color: var(--color-foreground);"> 946 <p class="copyright mb-2"> 947 © 2026 <a href="https://www.denishartl.com" class="site-link" 948 style="color: var(--color-contrast);">Denis Hartl</a> 949 </p> 950 <p class="powered-by"> 951 Published with <a href="https://ghost.org" target="_blank" rel="noopener" class="ghost-link" 952 style="color: var(--color-foreground);">Ghost</a> 953 · 954 Theme by <a href="https://www.magicpages.co" target="_blank" rel="noopener" class="theme-link" 955 style="color: var(--color-foreground);">Magic 956 Pages</a> 957 </p> 958 </div> 959 960 </div> 961</footer> </div> 962 963 964 965
965<script>(function(){var s=document.documentElement.getAttribute("data-color-scheme"),c=document.querySelector('script[src*="comments-ui"]');if(c&&s)c.setAttribute("data-color-scheme",s)})();</script>
965 966 967
967<script src="/assets/built/main.js?v=FFG_Chuo94Uk1G0J" defer></script>
967 968</body> 969</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.