<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Miha Hribar</title>
	<meta name="author" content="Miha Hribar">
	<meta name="description" content="Technology leader, freelancer and CTO helping companies scale through strategic solutions. Co-Founder of Toshl Finance, 500 Startups alumni transforming personal finance.">
	<meta name="keywords" content="restful, api, startup, LLMS, AI, Claude Code, Vibe Coding, mac keyboard layout">
	<link href="https://miha.hribar.org/atom.xml" rel="alternate" title="Miha Hribar" type="application/atom+xml">
	<link rel="preconnect" href="https://use.typekit.net" crossorigin>
	<script type="text/javascript" src="https://use.typekit.com/mje0zrn.js"></script>
	<script type="text/javascript">try{Typekit.load({async:true});}catch(e){}</script>
	<link rel="stylesheet" href="/css/default.css" type="text/css" media="screen, projection">
	<link rel="icon" type="image/x-icon" href="/favicon.ico">
	<meta property="og:locale" content="en_gb">
    <meta property="og:title" content="Miha Hribar">
    <meta property="og:url" content="https://miha.hribar.org/">
    <meta property="og:site_name" content="Miha Hribar">
    <meta property="og:type" content="website">
    <meta property="og:description" content="Technology leader, freelancer and CTO helping companies scale through strategic solutions. Co-Founder of Toshl Finance, 500 Startups alumni transforming personal finance.">
    <meta property="og:image" content="https://miha.hribar.org/images/me.jpg">
    <meta property="og:image:type" content="image/jpg">
    <meta property="og:image:width" content="400">
    <meta property="og:image:height" content="400">
    <meta name="twitter:card" content="summary">
    <meta name="twitter:site" content="@mihahribar">
    <meta name="twitter:url" content="https://miha.hribar.org/">
    <meta name="twitter:title" content="Miha Hribar">
    <meta name="twitter:description" content="Technology leader, freelancer and CTO helping companies scale through strategic solutions. Co-Founder of Toshl Finance, 500 Startups alumni transforming personal finance.">
    <meta name="twitter:image" content="https://miha.hribar.org/images/me.jpg">
</head>
<body>



<button id="theme-toggle" class="theme-toggle" aria-label="Toggle dark mode"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg></button>

<section id="about">
	<h1>Hej! I'm <a href="http://miha.hribar.org" rel="author">Miha Hribar</a>.</h1>
	<img src="/images/me.jpg" alt="Miha Hribar" />
	<p>I'm a dad, husband, perpetual tinkerer, and technology leader. As a freelancer and CTO of <a href="https://toshl.com">Toshl Finance</a> I build solutions that matter and last, all while exploring the endless possibilities of tech.</p>
	<h3><a href="/about">About</a> →</h3>
</section>

<section id="more">
	<h2>Recent posts</h2>
	<ul>
		
		<li>
			<h3><a href="/2025/08/the-ai-fixer/">The AI Fixer</a></h3>
			<p>When LLMs code unattended, they create beautiful disasters in record time. Enter the AI Winston Wolfs — specialized fixers who understand that more code means more bugs, and that someone will eventually have to be brought in to cleanup the crime scene.</p>
			<p class="meta">
				<time datetime="2025-08-23">23 Aug 2025</time>
				
					<em class="tag">AI Fixer</em>
				
					<em class="tag">Vibe Coding</em>
				
					<em class="tag">LLM</em>
				
					<em class="tag">AI</em>
				
			</p>
		</li>
		
		<li>
			<h3><a href="/2025/08/jack-of-all-trades-master-of-none-conductor-of-many/">Jack of All Trades, Master of None, Conductor of Many</a></h3>
			<p>While traditional wisdom favored deep specialists, LLMs are democratizing specialized knowledge. The new superpower isn't knowing everything about React or Kubernetes—it's knowing enough about many domains to effectively prompt, validate, and synthesize AI outputs across them.</p>
			<p class="meta">
				<time datetime="2025-08-17">17 Aug 2025</time>
				
					<em class="tag">Expert Generalist</em>
				
					<em class="tag">AI</em>
				
					<em class="tag">Vibe Coding</em>
				
					<em class="tag">Claude Code</em>
				
					<em class="tag">LLM</em>
				
			</p>
		</li>
		
		<li>
			<h3><a href="/2025/08/vibe-coding/">Vibe Coding</a></h3>
			<p>We went from debugging our own mistakes to debugging AI-generated code we barely understand, and somehow we're calling this progress. Welcome to vibe coding.</p>
			<p class="meta">
				<time datetime="2025-08-10">10 Aug 2025</time>
				
					<em class="tag">AI</em>
				
					<em class="tag">Vibe Coding</em>
				
					<em class="tag">Claude Code</em>
				
					<em class="tag">LLM</em>
				
			</p>
		</li>
		
		<li>
			<h3><a href="/2018/10/ios12-password-autofill-heuristics/">iOS12 Password AutoFill heuristics</a></h3>
			<p>Despite setting everything correctly, iOS would not show the correct login/signup suggestions. Turns out Apple is using heuristics to determine what to show to the user.</p>
			<p class="meta">
				<time datetime="2018-10-27">27 Oct 2018</time>
				
					<em class="tag">ios</em>
				
					<em class="tag">password</em>
				
					<em class="tag">autofill</em>
				
					<em class="tag">heuristics</em>
				
			</p>
		</li>
		
		<li><h3><a href="/archive">Archive</a> →</h3></li>
	</ul>
</section>

<section id="books">
	<h2>Recent books I've read</h2>
	<ul>
		
		<li class="book-item">
			<a href="https://www.goodreads.com/book/show/251102114-laws-of-software-engineering" target="_blank">
				<img src="/images/books/laws-of-software-engineering.jpeg" alt="Laws of Software Engineering" />
			</a>
		</li>
		
		<li class="book-item">
			<a href="https://www.goodreads.com/book/show/60233239-the-butcher-s-masquerade" target="_blank">
				<img src="/images/books/the-butchers-masquerade.jpeg" alt="The Butcher's Masquerade" />
			</a>
		</li>
		
		<li class="book-item">
			<a href="https://www.goodreads.com/book/show/57905101-the-gate-of-the-feral-gods" target="_blank">
				<img src="/images/books/the-gate-of-the-feral-gods.jpeg" alt="The Gate of the Feral Gods" />
			</a>
		</li>
		
		<li class="book-item">
			<a href="https://www.goodreads.com/book/show/57001971-the-dungeon-anarchist-s-cookbook" target="_blank">
				<img src="/images/books/anarchists-cookbook.jpeg" alt="The Dungeon Anarchist's Cookbook" />
			</a>
		</li>
		
	</ul>
	<h3><a href="/books">Books</a> →</h3>
</section>


<script>
document.addEventListener('DOMContentLoaded', function() {
    const images = document.querySelectorAll('article img[alt]:not([alt=""])');

    images.forEach(function(img) {
        const caption = document.createElement('caption');
        caption.className = 'image-caption';
        caption.textContent = img.alt;

        img.parentNode.insertBefore(caption, img.nextSibling);
    });

    // Theme toggle functionality
    const themeToggle = document.getElementById('theme-toggle');
    const root = document.documentElement;

    // Check for saved theme preference or default to system preference
    const savedTheme = localStorage.getItem('theme');
    const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;

    // Initialize theme
    if (savedTheme) {
        root.setAttribute('data-theme', savedTheme);
        updateToggleIcon(savedTheme);
    } else if (systemPrefersDark) {
        root.setAttribute('data-theme', 'dark');
        updateToggleIcon('dark');
    } else {
        root.setAttribute('data-theme', 'light');
        updateToggleIcon('light');
    }

    // Theme toggle event
    themeToggle.addEventListener('click', function() {
        const currentTheme = root.getAttribute('data-theme');
        let newTheme;

        if (currentTheme === 'dark') {
            newTheme = 'light';
            root.setAttribute('data-theme', 'light');
        } else {
            newTheme = 'dark';
            root.setAttribute('data-theme', 'dark');
        }

        localStorage.setItem('theme', newTheme);
        updateToggleIcon(newTheme);
    });

    function updateToggleIcon(theme) {
        if (theme === 'dark') {
            // Sun SVG for switching to light
            themeToggle.innerHTML = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>';
            themeToggle.setAttribute('aria-label', 'Switch to light mode');
        } else {
            // Moon SVG for switching to dark
            themeToggle.innerHTML = '<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>';
            themeToggle.setAttribute('aria-label', 'Switch to dark mode');
        }
    }

    // Listen for system theme changes
    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) {
        if (!localStorage.getItem('theme')) {
            const newTheme = e.matches ? 'dark' : 'light';
            root.setAttribute('data-theme', newTheme);
            updateToggleIcon(newTheme);
        }
    });
});
</script>
<script data-goatcounter="https://mihahribar.goatcounter.com/count" async src="//gc.zgo.at/count.js"></script>

<footer>
	<section>
		<h2>whoami</h2>
		<p>Hi! I'm Miha. I <a href="https://linkedin.com/in/mihahribar">freelance</a>, I <a href="https://toshl.com">tinker</a>. I <a href="https://github.com/mihahribar">code</a>. I <a href="/books">read</a>.</p>
	</section>
	<section>
		<h2>ls -l</h2>
		<p><a href="/">home</a> | <a href="/about">about</a> | <a href="/books">books</a> | <a href="/archive">archive</a> | <a href="/cv">cv</a></p>
	</section>
</footer>
</body>
</html>
