PageSourceSearch

https://www.navidmirnouri.com/

html navidmirnouri.com collected 2026-10-09 22:08:26 UTC 49,228 bytes, 1,232 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
7    <!-- SEO Meta Tags -->
8    <title>Navid Mirnouri — AI Systems Engineer</title>
9    <meta name="description" content="Navid Mirnouri — AI Systems Engineer working on agentic infrastructure, systems-level ML, and production ERP migrations. Based in Rasht, Iran.">
10    <meta name="keywords" content="Navid Mirnouri, AI Systems Engineer, Agentic AI, LangGraph, MCP, Vector Database, Odoo Migration, Python, C, Rasht, Iran">
11    <meta name="author" content="Navid Mirnouri">
12    <meta name="robots" content="index, follow">
13
14    <!-- Open Graph Meta Tags -->
15    <meta property="og:title" content="Navid Mirnouri — AI Systems Engineer">
16    <meta property="og:description" content="Agentic infrastructure, systems-level ML, and production ERP migrations. Case studies, open-source tooling, and writing.">
17    <meta property="og:type" content="website">
18    <meta property="og:url" content="https://navid72m.github.io">
19    <meta property="og:image" content="https://navid72m.github.io/profile-image.jpg">
20    <meta property="og:site_name" content="Navid Mirnouri">
21
22    <!-- Twitter Card Meta Tags -->
23    <meta name="twitter:card" content="summary_large_image">
24    <meta name="twitter:title" content="Navid Mirnouri — AI Systems Engineer">
25    <meta name="twitter:description" content="Agentic infrastructure, systems-level ML, and production ERP migrations.">
26    <meta name="twitter:image" content="https://navid72m.github.io/profile-image.jpg">
27
28    <!-- Canonical URL -->
29    <link rel="canonical" href="https://navid72m.github.io">
30    <link rel="alternate" type="application/rss+xml" title="Navid Mirnouri — Writing" href="/feed.xml">
31
32    <!-- Structured Data (JSON-LD) -->
33    
33<script type="application/ld+json">
34    {
35      "@context": "https://schema.org",
36      "@type": "Person",
37      "name": "Navid Mirnouri",
38      "jobTitle": "AI Systems Engineer",
39      "description": "AI Systems Engineer working on agentic infrastructure, systems-level ML, and production ERP migrations",
40      "url": "https://navid72m.github.io",
41      "email": "[email protected]",
42      "alumniOf": {
43        "@type": "EducationalOrganization",
44        "name": "Technical University of Munich"
45      },
46      "knowsAbout": [
47        "Artificial Intelligence",
48        "Agentic Systems",
49        "Machine Learning",
50        "Systems Programming",
51        "Vector Databases",
52        "Model Context Protocol",
53        "ERP Migration",
54        "Python Programming",
55        "C Programming"
56      ],
57      "sameAs": [
58        "https://linkedin.com/in/navid-mirnouri",
59        "https://github.com/navid72m",
60        "https://medium.com/@navid72m"
61      ]
62    }
63    </script>
63
64
65    <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 65-66
65
66    <script async src="https://www.googletagmanager.com/gtag/js?id=
66G-NJ4XLD7F9K
vendor: 16 bytes, lines 66-67
66"></script>
67    
67<script>
68      
vendor: 145 bytes, lines 68-71
68window.dataLayer = window.dataLayer || [];
69      function gtag(){dataLayer.push(arguments);}
70      gtag('js', new Date());
71      gtag('config', '
71G-NJ4XLD7F9K
vendor: 8 bytes, lines 71-72
71');
72    
72</script>
72
73
74    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
75    <link rel="preconnect" href="https://fonts.googleapis.com">
76    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
77    <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
78
79    <style>
80        :root {
81            --paper: #EEF0EA;
82            --panel: #F8F9F4;
83            --ink: #171B16;
84            --ink-soft: #545C4E;
85            --ink-faint: #8B9285;
86            --line: #CBD1C0;
87            --line-strong: #A6AE97;
88            --signal: #2B6E62;
89            --signal-soft: #DCE7E1;
90            --rust: #A85A2E;
91            --rust-soft: #F0DDCB;
92            --mono: 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
93            --sans: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, sans-serif;
94            --rail-w: 34px;
95            --maxw: 1120px;
96        }
97
98        * { margin: 0; padding: 0; box-sizing: border-box; }
99
100        html { scroll-behavior: smooth; }
101
102        body {
103            font-family: var(--sans);
104            background: var(--paper);
105            color: var(--ink);
106            line-height: 1.6;
107            overflow-x: hidden;
108            padding-left: var(--rail-w);
109        }
110
111        img { max-width: 100%; display: block; }
112
113        a { color: inherit; }
114
115        ::selection { background: var(--signal); color: var(--panel); }
116
117        :focus-visible {
118            outline: 2px solid var(--signal);
119            outline-offset: 3px;
120        }
121
122        /* ---------- Trace rail (signature element) ---------- */
123        .trace-rail {
124            position: fixed;
125            top: 0;
126            left: 0;
127            width: var(--rail-w);
128            height: 100%;
129            background: var(--panel);
130            border-right: 1px solid var(--line);
131            z-index: 1200;
132        }
133
134        .trace-rail::before {
135            content: '';
136            position: absolute;
137            left: 50%;
138            top: 0;
139            bottom: 0;
140            width: 0;
141            border-left: 1px dashed var(--line-strong);
142        }
143
144        .trace-fill {
145            position: absolute;
146            left: 50%;
147            top: 0;
148            width: 0;
149            height: 0%;
150            border-left: 2px solid var(--signal);
151            transition: height 0.08s linear;
152        }
153
154        .trace-fill::after {
155            content: '';
156            position: absolute;
157            bottom: -3px;
158            left: -3px;
159            width: 7px;
160            height: 7px;
161            background: var(--signal);
162        }
163
164        @media (max-width: 860px) {
165            body { padding-left: 0; }
166            .trace-rail { display: none; }
167        }
168
169        /* ---------- Utility ---------- */
170        .wrap {
171            max-width: var(--maxw);
172            margin: 0 auto;
173            padding: 0 2.25rem;
174        }
175
176        .eyebrow {
177            font-family: var(--mono);
178            font-size: 0.78rem;
179            letter-spacing: 0.08em;
180            color: var(--signal);
181            text-transform: uppercase;
182            display: flex;
183            align-items: center;
184            gap: 0.6rem;
185            margin-bottom: 0.9rem;
186        }
187
188        .eyebrow::before {
189            content: '';
190            width: 8px;
191            height: 8px;
192            background: var(--signal);
193            display: inline-block;
194        }
195
196        .section {
197            padding: 6.5rem 0;
198            border-top: 1px solid var(--line);
199        }
200
201        .section-head {
202            max-width: 640px;
203            margin-bottom: 3rem;
204        }
205
206        h1, h2, h3, h4 {
207            font-family: var(--mono);
208            font-weight: 600;
209            letter-spacing: -0.01em;
210            color: var(--ink);
211        }
212
213        .section-title {
214            font-size: clamp(1.6rem, 2.6vw, 2.15rem);
215            margin-bottom: 0.6rem;
216        }
217
218        .section-sub {
219            color: var(--ink-soft);
220            font-size: 1.02rem;
221            max-width: 52ch;
222        }
223
224        .btn {
225            font-family: var(--mono);
226            font-size: 0.9rem;
227            font-weight: 500;
228            display: inline-flex;
229            align-items: center;
230            gap: 0.5rem;
231            padding: 0.7rem 1.1rem;
232            border: 1px solid var(--ink);
233            background: transparent;
234            text-decoration: none;
235            color: var(--ink);
236            transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
237        }
238
239        .btn:hover { background: var(--ink); color: var(--paper); }
240
241        .btn.primary { background: var(--signal); border-color: var(--signal); color: var(--panel); }
242        .btn.primary:hover { background: var(--ink); border-color: var(--ink); }
243
244        /* ---------- Nav ---------- */
245        nav {
246            position: fixed;
247            top: 0;
248            left: var(--rail-w);
249            right: 0;
250            z-index: 1000;
251            background: rgba(238, 240, 234, 0.9);
252            backdrop-filter: blur(10px);
253            border-bottom: 1px solid var(--line);
254            transition: border-color 0.2s ease;
255        }
256
257        nav.scrolled { border-bottom-color: var(--line-strong); }
258
259        @media (max-width: 860px) { nav { left: 0; } }
260
261        .nav-inner {
262            max-width: var(--maxw);
263            margin: 0 auto;
264            padding: 0 2.25rem;
265            height: 58px;
266            display: flex;
267            align-items: center;
268            justify-content: space-between;
269            font-family: var(--mono);
270        }
271
272        .nav-logo {
273            font-size: 0.92rem;
274            font-weight: 500;
275            color: var(--ink);
276        }
277
278        .nav-logo .prompt { color: var(--signal); }
279
280        .nav-links {
281            display: flex;
282            list-style: none;
283            gap: 1.5rem;
284            font-size: 0.85rem;
285        }
286
287        .nav-links a {
288            text-decoration: none;
289            color: var(--ink-soft);
290            transition: color 0.15s ease;
291        }
292
293        .nav-links a:hover { color: var(--signal); }
294
295        @media (max-width: 640px) {
296            .nav-links { gap: 0.9rem; font-size: 0.75rem; }
297        }
298
299        /* ---------- Hero ---------- */
300        .hero {
301            padding: 9.5rem 0 5.5rem;
302        }
303
304        .hero-grid {
305            max-width: var(--maxw);
306            margin: 0 auto;
307            padding: 0 2.25rem;
308            display: grid;
309            grid-template-columns: 1.5fr 1fr;
310            gap: 3.5rem;
311            align-items: start;
312        }
313
314        .hero h1.display {
315            font-size: clamp(2.6rem, 6vw, 4.4rem);
316            line-height: 0.98;
317            letter-spacing: -0.02em;
318            margin-bottom: 1.4rem;
319        }
320
321        .role-line {
322            font-family: var(--mono);
323            font-size: 1.05rem;
324            color: var(--signal);
325            margin-bottom: 1.1rem;
326        }
327
328        .hero-desc {
329            max-width: 52ch;
330            color: var(--ink-soft);
331            font-size: 1.05rem;
332            margin-bottom: 2rem;
333        }
334
335        .status-line {
336            font-family: var(--mono);
337            font-size: 0.85rem;
338            color: var(--ink-soft);
339            margin-bottom: 2.2rem;
340        }
341
342        .status-line .signal-text { color: var(--signal); font-weight: 500; }
343
344        .cursor {
345            display: inline-block;
346            width: 7px;
347            height: 1em;
348            background: var(--signal);
349            margin-left: 2px;
350            vertical-align: text-bottom;
351            animation: blink 1.1s step-end infinite;
352        }
353
354        @keyframes blink { 50% { opacity: 0; } }
355
356        .cta-row { display: flex; gap: 0.9rem; flex-wrap: wrap; }
357
358        /* ID card */
359        .id-card {
360            background: var(--panel);
361            border: 1px solid var(--line-strong);
362            position: relative;
363            padding: 1.4rem;
364        }
365
366        .id-card::before, .id-card::after {
367            content: '';
368            position: absolute;
369            width: 14px;
370            height: 14px;
371            border: 2px solid var(--signal);
372        }
373
374        .id-card::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
375        .id-card::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
376
377        .id-card-photo {
378            width: 100%;
379            aspect-ratio: 1 / 1;
380            overflow: hidden;
381            border: 1px solid var(--line-strong);
382            margin-bottom: 1.1rem;
383            background: var(--line-soft, #E3E6DC);
384        }
385
386        .id-card-photo img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(35%); }
387
388        .id-specs { font-family: var(--mono); font-size: 0.82rem; }
389
390        .id-specs .row {
391            display: grid;
392            grid-template-columns: 4.4rem 1fr;
393            gap: 0.5rem;
394            padding: 0.45rem 0;
395            border-top: 1px dashed var(--line);
396        }
397
398        .id-specs .row:first-child { border-top: none; }
399
400        .id-specs dt { color: var(--ink-faint); text-transform: uppercase; letter-spacing: 0.04em; }
401        .id-specs dd { color: var(--ink); }
402
403        @media (max-width: 860px) {
404            .hero-grid { grid-template-columns: 1fr; }
405            .id-card { max-width: 320px; }
406        }
407
408        /* ---------- Stack / skills ---------- */
409        .stack-grid {
410            display: grid;
411            grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
412            gap: 2.4rem 2.6rem;
413        }
414
415        .stack-cat h3 {
416            font-size: 0.95rem;
417            display: flex;
418            align-items: center;
419            gap: 0.5rem;
420            margin-bottom: 0.9rem;
421            color: var(--ink);
422        }
423
424        .stack-cat h3 i { color: var(--signal); font-size: 0.85rem; }
425
426        .chip-row { display: flex; flex-wrap: wrap; gap: 0.5rem; }
427
428        .chip {
429            font-family: var(--mono);
430            font-size: 0.75rem;
431            padding: 0.35rem 0.6rem;
432            border: 1px solid var(--line-strong);
433            background: var(--panel);
434            color: var(--ink-soft);
435            transition: border-color 0.15s ease, color 0.15s ease;
436        }
437
438        .chip:hover { border-color: var(--signal); color: var(--signal); }
439
440        /* ---------- Projects ---------- */
441        .spec-grid {
442            display: grid;
443            grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
444            gap: 1.6rem;
445        }
446
447        .spec-card {
448            position: relative;
449            background: var(--panel);
450            border: 1px solid var(--line-strong);
451            padding: 1.6rem 1.6rem 1.4rem;
452            transition: transform 0.15s ease, border-color 0.15s ease;
453        }
454
455        .spec-card::before, .spec-card::after {
456            content: '';
457            position: absolute;
458            width: 10px;
459            height: 10px;
460            border: 2px solid var(--line-strong);
461            transition: border-color 0.15s ease;
462        }
463
464        .spec-card::before { top: -1px; left: -1px; border-right: none; border-bottom: none; }
465        .spec-card::after { bottom: -1px; right: -1px; border-left: none; border-top: none; }
466
467        .spec-card:hover {
468            transform: translateY(-3px);
469            border-color: var(--ink-faint);
470        }
471
472        .spec-card:hover::before, .spec-card:hover::after { border-color: var(--signal); }
473
474        .spec-head {
475            display: flex;
476            gap: 0.9rem;
477            align-items: baseline;
478            margin-bottom: 0.9rem;
479        }
480
481        .spec-index {
482            font-family: var(--mono);
483            font-size: 0.72rem;
484            color: var(--ink-faint);
485            border: 1px solid var(--line-strong);
486            padding: 0.1rem 0.4rem;
487        }
488
489        .spec-card h3 { font-size: 1.05rem; margin-bottom: 0.25rem; }
490
491        .spec-sub {
492            font-family: var(--mono);
493            font-size: 0.78rem;
494            color: var(--ink-faint);
495        }
496
497        .spec-desc {
498            color: var(--ink-soft);
499            font-size: 0.92rem;
500            margin-bottom: 1.1rem;
501        }
502
503        .spec-tags {
504            display: flex;
505            flex-wrap: wrap;
506            gap: 0.4rem;
507            margin-bottom: 1.2rem;
508        }
509
510        .spec-tags span {
511            font-family: var(--mono);
512            font-size: 0.68rem;
513            color: var(--ink-faint);
514            border: 1px solid var(--line);
515            padding: 0.2rem 0.45rem;
516        }
517
518        .spec-links {
519            display: flex;
520            flex-wrap: wrap;
521            gap: 1.1rem;
522            border-top: 1px dashed var(--line);
523            padding-top: 0.9rem;
524        }
525
526        .spec-links a {
527            font-family: var(--mono);
528            font-size: 0.8rem;
529            text-decoration: none;
530            color: var(--signal);
531            display: inline-flex;
532            align-items: center;
533            gap: 0.4rem;
534        }
535
536        .spec-links a::before { content: '$'; color: var(--ink-faint); }
537
538        .spec-links a:hover { text-decoration: underline; }
539
540        /* ---------- Research note ---------- */
541        .note-panel {
542            border: 1px solid var(--line-strong);
543            background: var(--panel);
544            padding: 2.4rem;
545        }
546
547        .note-panel h3 {
548            font-size: 1.2rem;
549            margin-bottom: 1.2rem;
550            font-family: var(--sans);
551            font-weight: 700;
552        }
553
554        .note-panel p { color: var(--ink-soft); margin-bottom: 1rem; font-size: 0.98rem; }
555
556        .note-highlights {
557            display: grid;
558            grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
559            gap: 1.2rem;
560            margin: 1.8rem 0;
561        }
562
563        .note-highlight {
564            border-top: 1px solid var(--line);
565            padding-top: 0.8rem;
566        }
567
568        .note-highlight h4 {
569            font-family: var(--mono);
570            font-size: 0.82rem;
571            color: var(--signal);
572            margin-bottom: 0.4rem;
573        }
574
575        .note-highlight p { font-size: 0.86rem; margin-bottom: 0; }
576
577        .note-quote {
578            font-style: italic;
579            border-left: 3px solid var(--signal);
580            padding-left: 1.4rem;
581            color: var(--ink-soft);
582            margin-top: 1.6rem;
583        }
584
585        /* ---------- Writing / blog ---------- */
586        .log-list { display: flex; flex-direction: column; }
587
588        .log-entry {
589            display: grid;
590            grid-template-columns: 9.5rem 1fr;
591            gap: 1.6rem;
592            padding: 1.6rem 0;
593            border-top: 1px solid var(--line);
594        }
595
596        .log-entry:last-child { border-bottom: 1px solid var(--line); }
597
598        .log-meta {
599            font-family: var(--mono);
600            font-size: 0.75rem;
601            color: var(--ink-faint);
602        }
603
604        .log-meta .tag {
605            display: inline-block;
606            margin-top: 0.5rem;
607            color: var(--rust);
608            border: 1px solid var(--rust-soft);
609            background: var(--rust-soft);
610            padding: 0.15rem 0.4rem;
611        }
612
613        .log-title {
614            font-family: var(--sans);
615            font-size: 1.08rem;
616            font-weight: 700;
617            margin-bottom: 0.5rem;
618        }
619
620        .log-excerpt { color: var(--ink-soft); font-size: 0.92rem; margin-bottom: 0.8rem; }
621
622        .log-footer {
623            display: flex;
624            justify-content: space-between;
625            align-items: center;
626            font-family: var(--mono);
627            font-size: 0.78rem;
628        }
629
630        .log-footer .read-time { color: var(--ink-faint); }
631
632        .log-link { text-decoration: none; color: var(--signal); }
633        .log-link:hover { text-decoration: underline; }
634
635        @media (max-width: 640px) {
636            .log-entry { grid-template-columns: 1fr; gap: 0.5rem; }
637        }
638
639        .log-cta { text-align: center; margin-top: 2.6rem; }
640
641        /* ---------- Contact ---------- */
642        .contact-grid {
643            display: grid;
644            grid-template-columns: 1fr 1.2fr;
645            gap: 2.5rem;
646        }
647
648        .contact-list .row {
649            display: grid;
650            grid-template-columns: 2rem 1fr;
651            gap: 0.8rem;
652            padding: 0.9rem 0;
653            border-top: 1px solid var(--line);
654            align-items: start;
655        }
656
657        .contact-list .row:first-child { border-top: none; }
658
659        .contact-list i { color: var(--signal); margin-top: 0.2rem; }
660
661        .contact-list h4 {
662            font-family: var(--mono);
663            font-size: 0.75rem;
664            color: var(--ink-faint);
665            text-transform: uppercase;
666            letter-spacing: 0.05em;
667            margin-bottom: 0.2rem;
668        }
669
670        .contact-panel {
671            background: var(--panel);
672            border: 1px solid var(--line-strong);
673            padding: 2.2rem;
674        }
675
676        .contact-panel h3 {
677            font-family: var(--sans);
678            font-size: 1.3rem;
679            margin-bottom: 0.8rem;
680        }
681
682        .contact-panel p { color: var(--ink-soft); margin-bottom: 1.6rem; font-size: 0.95rem; }
683
684        .social-row {
685            display: flex;
686            gap: 0.9rem;
687            margin-top: 2.6rem;
688        }
689
690        .social-row a {
691            width: 40px;
692            height: 40px;
693            display: flex;
694            align-items: center;
695            justify-content: center;
696            border: 1px solid var(--line-strong);
697            color: var(--ink-soft);
698            text-decoration: none;
699            transition: border-color 0.15s ease, color 0.15s ease;
700        }
701
702        .social-row a:hover { border-color: var(--signal); color: var(--signal); }
703
704        @media (max-width: 780px) {
705            .contact-grid { grid-template-columns: 1fr; }
706        }
707
708        /* ---------- Footer ---------- */
709        footer {
710            border-top: 1px solid var(--line);
711            padding: 2.4rem 0;
712            font-family: var(--mono);
713            font-size: 0.78rem;
714            color: var(--ink-faint);
715        }
716
717        /* ---------- Scroll reveal ---------- */
718        .reveal {
719            opacity: 0;
720            transform: translateY(16px);
721            transition: opacity 0.5s ease, transform 0.5s ease;
722        }
723
724        .reveal.visible { opacity: 1; transform: translateY(0); }
725
726        @media (prefers-reduced-motion: reduce) {
727            html { scroll-behavior: auto; }
728            .reveal { opacity: 1 !important; transform: none !important; transition: none !important; }
729            .cursor { animation: none; }
730            .spec-card:hover { transform: none; }
731        }
732    </style>
733</head>
734
735<body>
736    <div class="trace-rail" aria-hidden="true">
737        <div class="trace-fill" id="trace-fill"></div>
738    </div>
739
740    <nav id="navbar">
741        <div class="nav-inner">
742            <div class="nav-logo"><span class="prompt">navid@systems</span>:~$</div>
743            <ul class="nav-links">
744                <li><a href="#home">home</a></li>
745                <li><a href="#stack">stack</a></li>
746                <li><a href="#projects">projects</a></li>
747                <li><a href="#research">research</a></li>
748                <li><a href="#blog">writing</a></li>
749                <li><a href="#contact">contact</a></li>
750            </ul>
751        </div>
752    </nav>
753
754    <!-- Hero -->
755    <section id="home" class="hero">
756        <div class="hero-grid">
757            <div>
758                <p class="eyebrow">sec/00 — identity</p>
759                <h1 class="display">NAVID<br>MIRNOURI</h1>
760                <p class="role-line">
760AI Systems Engineer — Agentic Infrastructure &amp; Applied ML</p>
761                <p class="hero-desc">
762                    I build the infrastructure underneath AI systems — from a vector database written from scratch in C, to multi-agent frameworks that debug production ERP migrations. Based in Rasht, Iran.
763                </p>
764                <p class="status-line">STATUS: <span class="signal-text">open to select engagements</span><span class="cursor"></span></p>
765                <div class="cta-row">
766                    <a href="#projects" class="btn primary"><i class="fas fa-terminal"></i> View projects</a>
767                    <a href="#contact" class="btn"><i class="fas fa-envelope"></i> Get in touch</a>
768                </div>
769            </div>
770            <div class="id-card reveal">
771                <div class="id-card-photo">
772                    <img src="./index_files/photo_2025-05-24 15.25.38.jpeg" alt="Navid Mirnouri">
773                </div>
774                <dl class="id-specs">
775                    <div class="row"><dt>Name</dt><dd>Navid Mirnouri</dd></div>
776                    <div class="row"><dt>Role</dt><dd>AI Systems Engineer</dd></div>
777                    <div class="row"><dt>Base</dt><dd>Rasht, Iran</dd></div>
778                    <div class="row"><dt>Edu</dt><dd>M.Sc. Informatics, TUM</dd></div>
779                    <div class="row"><dt>Focus</dt><dd>Agentic infra · systems ML · ERP migration</dd></div>
780                </dl>
781            </div>
782        </div>
783    </section>
784
785    <!-- Stack -->
786    <section id="stack" class="section">
787        <div class="wrap">
788            <div class="section-head reveal">
789                <p class="eyebrow">sec/01 — stack</p>
790                <h2 class="section-title">Capability Matrix</h2>
791                <p class="section-sub">Technical range spanning systems programming, applied ML, and the infrastructure that connects them.</p>
792            </div>
793            <div class="stack-grid">
794                <div class="stack-cat reveal">
795                    <h3><i class="fas fa-brain"></i> AI / ML &amp; NLP</h3>
796                    <div class="chip-row">
797                        <span class="chip">Python</span>
798                        <span class="chip">PyTorch</span>
799                        <span class="chip">TensorFlow</span>
800                        <span class="chip">HuggingFace</span>
801                        <span class="chip">BERT</span>
802                        <span class="chip">GPT</span>
803                        <span class="chip">RAG</span>
804                        <span class="chip">RLHF</span>
805                    </div>
806                </div>
807                <div class="stack-cat reveal">
808                    <h3><i class="fas fa-diagram-project"></i> Agentic Systems</h3>
809                    <div class="chip-row">
810                        <span class="chip">LangGraph</span>
811                        <span class="chip">MCP</span>
812                        <span class="chip">Multi-Agent Orchestration</span>
813                        <span class="chip">Tool Use</span>
814                    </div>
815                </div>
816                <div class="stack-cat reveal">
817                    <h3><i class="fas fa-server"></i> Backend &amp; Systems</h3>
818                    <div class="chip-row">
819                        <span class="chip">Python</span>
820                        <span class="chip">Node.js</span>
821                        <span class="chip">Go</span>
822                        <span class="chip">C</span>
823                        <span class="chip">Docker</span>
824                        <span class="chip">PostgreSQL</span>
825                        <span class="chip">SQLite</span>
826                        <span class="chip">Redis</span>
827                    </div>
828                </div>
829                <div class="stack-cat reveal">
830                    <h3><i class="fas fa-microchip"></i> Low-Level &amp; Performance</h3>
831                    <div class="chip-row">
832                        <span class="chip">C11</span>
833                        <span class="chip">ARM NEON / SIMD</span>
834                        <span class="chip">HNSW / Vamana</span>
835                        <span class="chip">Roofline Analysis</span>
836                    </div>
837                </div>
838                <div class="stack-cat reveal">
839                    <h3><i class="fas fa-mobile-alt"></i> Frontend &amp; Mobile</h3>
840                    <div class="chip-row">
841                        <span class="chip">TypeScript</span>
842                        <span class="chip">React</span>
843                        <span class="chip">React Native</span>
844                        <span class="chip">HTML5 / CSS3</span>
845                    </div>
846                </div>
847                <div class="stack-cat reveal">
848                    <h3><i class="fas fa-cogs"></i> DevOps &amp; Tooling</h3>
849                    <div class="chip-row">
850                        <span class="chip">Docker</span>
851                        <span class="chip">Git</span>
852                        <span class="chip">Linux</span>
853                        <span class="chip">CI/CD</span>
854                        <span class="chip">Odoo / OpenUpgrade</span>
855                    </div>
856                </div>
857            </div>
858        </div>
859    </section>
860
861    <!-- Projects -->
862    <section id="projects" class="section">
863        <div class="wrap">
864            <div class="section-head reveal">
865                <p class="eyebrow">sec/02 — projects</p>
866                <h2 class="section-title">Featured Builds</h2>
867                <p class="section-sub">Production systems, research tooling, and open-source infrastructure.</p>
868            </div>
869            <div class="spec-grid">
870                <div class="spec-card reveal">
871                    <div class="spec-head">
872                        <span class="spec-index">P1</span>
873                        <div>
874                            <h3>🏗️ Odoo 17→19 Migration Pipeline</h3>
875                            <p class="spec-sub">Self-hosted ERP migration for a live production system</p>
876                        </div>
877                    </div>
878                    <p class="spec-desc">
879                        A self-hosted pipeline migrating a full Odoo 17 Enterprise deployment to version 19 — dual-hop schema migration, ORM-lifecycle-aware data transforms, and a 6-layer validation framework spanning structural integrity through a full HTTP surface crawl. Debugged by a 13-agent AI framework with persistent memory across sessions.
880                    </p>
881                    <div class="spec-tags">
882                        <span>Python</span><span>PostgreSQL</span><span>Odoo / OpenUpgrade</span><span>Docker</span>
883                    </div>
884                    <div class="spec-links">
885                        <a href="/blog/agent-memory-graph-odoo-migration.html">read case study</a>
886                        <a href="/blog/how-to-vibecode-at-scale.html">vibe-coding at scale</a>
887                    </div>
888                </div>
889
890                <div class="spec-card reveal">
891                    <div class="spec-head">
892                        <span class="spec-index">P2</span>
893                        <div>
894                            <h3>🧠 AI Agent Memory Graph</h3>
895                            <p class="spec-sub">Persistent structured memory for AI debugging agents</p>
896                        </div>
897                    </div>
898                    <p class="spec-desc">
899                        A SQLite-backed knowledge graph and CLI giving opencode debugging agents durable memory across sessions — typed nodes (issue, hypothesis, root_cause, repair_plan...) and a pure-heuristic dispatcher that routes work through an eight-stage triage-to-postmortem workflow.
900                    </p>
901                    <div class="spec-tags">
902                        <span>Python</span><span>SQLite</span><span>Graph Modeling</span><span>Agentic Tooling</span>
903                    </div>
904                    <div class="spec-links">
905                        <a href="/blog/agent-memory-graph-odoo-migration.html">read write-up</a>
906                    </div>
907                </div>
908
909                <div class="spec-card reveal">
910                    <div class="spec-head">
911                        <span class="spec-index">P3</span>
912                        <div>
913                            <h3>🔍 mcp-behave</h3>
914                            <p class="spec-sub">Runtime behavioral auditor for MCP servers</p>
915                        </div>
916                    </div>
917                    <p class="spec-desc">
918                        An strace-based tool that catches the gap between what an MCP server's tool descriptions claim and what its syscalls actually do. Supports stdio, SSE, and streamable-HTTP transports, with JSON output and a --fail-on flag for CI.
919                    </p>
920                    <div class="spec-tags">
921                        <span>Python</span><span>MCP</span><span>strace</span><span>CI Tooling</span>
922                    </div>
923                    <div class="spec-links">
924                        <a href="https://github.com/navid72m/mcp-behave" target="_blank">view code</a>
925                        <a href="https://mcp-behave-dashboard.vercel.app" target="_blank">live dashboard</a>
926                    </div>
927                </div>
928
929                <div class="spec-card reveal">
930                    <div class="spec-head">
931                        <span class="spec-index">P4</span>
932                        <div>
933                            <h3>⚡ vecdbc</h3>
934                            <p class="spec-sub">A vector database written from scratch in C11</p>
935                        </div>
936                    </div>
937                    <p class="spec-desc">
938                        HNSW and Vamana indexes built from scratch in C11, benchmarked against FAISS on SIFT1M and GIST1M with honestly-reported crossover points. Includes a hand-written ARM NEON ternary GEMM kernel (BitNet b1.58-style) reaching 40+ GOP/s.
939                    </p>
940                    <div class="spec-tags">
941                        <span>C11</span><span>HNSW / Vamana</span><span>ARM NEON</span><span>Systems Programming</span>
942                    </div>
943                    <div class="spec-links">
944                        <a href="https://github.com/navid72m/vectorDatabase" target="_blank">view code</a>
945                        <a href="https://pypi.org/project/vecdbc/" target="_blank">pypi</a>
946                    </div>
947                </div>
948
949                <div class="spec-card reveal">
950                    <div class="spec-head">
951                        <span class="spec-index">P5</span>
952                        <div>
953                            <h3>🕸️ AgentForge</h3>
954                            <p class="spec-sub">Generating runnable agentic systems from a prompt</p>
955                        </div>
956                    </div>
957                    <p class="spec-desc">
958                        A local-first framework built on LangGraph that turns a natural-language prompt into a runnable multi-agent system. Designed around one architectural thesis: a deterministic backstop over prompt hope.
959                    </p>
960                    <div class="spec-tags">
961                        <span>Python</span><span>LangGraph</span><span>Agentic Systems</span>
962                    </div>
963                    <div class="spec-links">
964                        <a href="https://github.com/navid72m/agentforge" target="_blank">view code</a>
965                        <a href="https://pypi.org/project/agentforge/" target="_blank">pypi</a>
966                    </div>
967                </div>
968
969                <div class="spec-card reveal">
970                    <div class="spec-head">
971                        <span class="spec-index">P6</span>
972                        <div>
973                            <h3>📚 AdaptiveRAG</h3>
974                            <p class="spec-sub">Self-configuring retrieval-augmented generation</p>
975                        </div>
976                    </div>
977                    <p class="spec-desc">
978                        A RAG pipeline built on LangGraph and Ollama that adapts its own retrieval strategy at query time, packaged and published for others to build on.
979                    </p>
980                    <div class="spec-tags">
981                        <span>Python</span><span>LangGraph</span><span>Ollama</span><span>RAG</span>
982                    </div>
983                    <div class="spec-links">
984                        <a href="https://github.com/navid72m/adaptiverag" target="_blank">view code</a>
985                        <a href="https://pypi.org/project/adaptiverag/" target="_blank">pypi</a>
986                    </div>
987                </div>
988            </div>
989        </div>
990    </section>
991
992    <!-- Research -->
993    <section id="research" class="section">
994        <div class="wrap">
995            <div class="section-head reveal">
996                <p class="eyebrow">sec/03 — research note</p>
997                <h2 class="section-title">Philosophy Meets Technology</h2>
998                <p class="section-sub">Exploring the intersection of consciousness, AI, and reality.</p>
999            </div>
1000            <div class="note-panel reveal">
1001                <h3>Consciousness, AI, and Reality: A Formal Perspective on Synthetic Minds and the Limits of Representation</h3>
1002                <p>
1003                    <strong>Core thesis:</strong> even if AI systems achieve consciousness, their — and our — grasp of reality remains incomplete, bounded by Gödel's incompleteness theorem. Adaptive minds, however, engage in meta-evolutionary processes, constructing ever-richer representations through the recursive pursuit of understanding.
1004                </p>
1005                <p>
1006                    This work explores how consciousness transcends representational limits through recursive self-modification, introducing a "Mesh of Realities" framework where reality consists of interconnected layers of formal systems, each with inherent incompleteness — and a "Trans-Reality Axiom Exchange" model where consciousness serves as a bridge-builder between those layers.
1007                </p>
1008                <div class="note-highlights">
1009                    <div class="note-highlight">
1010                        <h4>Meta-Evolutionary Consciousness</h4>
1011                        <p>A formal model of how minds transcend representational limits through recursive self-modification.</p>
1012                    </div>
1013                    <div class="note-highlight">
1014                        <h4>Mesh of Realities</h4>
1015                        <p>Reality as interconnected layers of formal systems, each with inherent incompleteness.</p>
1016                    </div>
1017                    <div class="note-highlight">
1018                        <h4>Trans-Reality Axiom Exchange</h4>
1019                        <p>Consciousness as a bridge-builder between formal layers of reality.</p>
1020                    </div>
1021                    <div class="note-highlight">
1022                        <h4>A Practical Gödel Workaround</h4>
1023                        <p>Dynamic axiom discovery across the mesh enables transcendence of local incompleteness.</p>
1024                    </div>
1025                </div>
1026                <p class="note-quote">
1027                    "Consciousness is not the static possession of knowledge, but the infinite, recursive pursuit of understanding — a process that reveals both the inexhaustibility of reality and the creative power of intelligent minds."
1028                </p>
1029            </div>
1030        </div>
1031    </section>
1032
1033    <!-- Writing -->
1034    <section id="blog" class="section">
1035        <div class="wrap">
1036            <div class="section-head reveal">
1037                <p class="eyebrow">sec/04 — writing</p>
1038                <h2 class="section-title">Log</h2>
1039                <p class="section-sub">Notes on agentic engineering, systems programming, and the philosophy of mind.</p>
1040            </div>
1041            <div class="log-list">
1042                <div class="log-entry reveal">
1043                    <div class="log-meta">
1044                        August 2026
1045                        <span class="tag">Reflections</span>
1046                    </div>
1047                    <div>
1048                        <h3 class="log-title">Patterns All the Way Down</h3>
1049                        <p class="log-excerpt">Why are there patterns everywhere in the universe — and what happens when the question folds back on itself?</p>
1050                        <div class="log-footer">
1051                            <span class="read-time">6 min read</span>
1052                            <a href="/blog/patterns-all-the-way-down.html" class="log-link">read more →</a>
1053                        </div>
1054                    </div>
1055                </div>
1056
1057                <div class="log-entry reveal">
1058                    <div class="log-meta">
1059                        August 2026
1060                        <span class="tag">Agentic Engineering</span>
1061                    </div>
1062                    <div>
1063                        <h3 class="log-title">How to Vibe-Code at Scale</h3>
1064                        <p class="log-excerpt">Every article I'd written until now was AI-generated. This one isn't &mdash; a look at how I nearly lost ownership of a 10,000-line Odoo migration codebase, and the one habit that got it back.</p>
1065                        <div class="log-footer">
1066                            <span class="read-time">5 min read</span>
1067                            <a href="/blog/how-to-vibecode-at-scale.html" class="log-link">read more →</a>
1068                        </div>
1069                    </div>
1070                </div>
1071
1072                <div class="log-entry reveal">
1073                    <div class="log-meta">
1074                        July 2026
1075                        <span class="tag">Agentic Engineering</span>
1076                    </div>
1077                    <div>
1078                        <h3 class="log-title">Giving Agents a Memory: A Knowledge Graph for an ERP Migration</h3>
1079                        <p class="log-excerpt">Debugging a two-hop Odoo 17→19 migration with a thirteen-agent AI framework kept hitting the same wall: every session started from zero. A SQLite knowledge graph and CLI — plus a hard-learned lesson about what "durable" actually requires — fixed that.</p>
1080                        <div class="log-footer">
1081                            <span class="read-time">15 min read</span>
1082                            <a href="/blog/agent-memory-graph-odoo-migration.html" class="log-link">read more →</a>
1083                        </div>
1084                    </div>
1085                </div>
1086
1087                <div class="log-entry reveal">
1088                    <div class="log-meta">
1089                        June 2, 2026
1090                        <span class="tag">Philosophy of Mind</span>
1091                    </div>
1092                    <div>
1093                        <h3 class="log-title">Can a Universe Explain Its Own Existence? A Fixed-Point Proposal</h3>
1094                        <p class="log-excerpt">A research note on formalizing the intuition of a self-producing world. If reality is a structure that generates itself, that's a fixed point of a generating operator — and mathematics already has theorems about when those exist and are unique.</p>
1095                        <div class="log-footer">
1096                            <span class="read-time">12 min read</span>
1097                            <a href="/blog/fixed-point-universe.html" class="log-link">read more →</a>
1098                        </div>
1099                    </div>
1100                </div>
1101
1102                <div class="log-entry reveal">
1103                    <div class="log-meta">
1104                        2026
1105                        <span class="tag">Agentic Engineering</span>
1106                    </div>
1107                    <div>
1108                        <h3 class="log-title">Auditing What MCP Servers Actually Do</h3>
1109                        <p class="log-excerpt">Tool descriptions are marketing copy — they don't tell you what a server actually does at the syscall level. Why I built mcp-behave, an strace-based runtime auditor, and what it turned up.</p>
1110                        <div class="log-footer">
1111                            <span class="read-time">7 min read</span>
1112                            <a href="https://github.com/navid72m/mcp-behave" class="log-link" target="_blank">read more →</a>
1113                        </div>
1114                    </div>
1115                </div>
1116
1117                <div class="log-entry reveal">
1118                    <div class="log-meta">
1119                        2026
1120                        <span class="tag">Systems Programming</span>
1121                    </div>
1122                    <div>
1123                        <h3 class="log-title">Building a Vector Database From Scratch in C — and Being Honest About the Benchmarks</h3>
1124                        <p class="log-excerpt">HNSW, Vamana, and a hand-written ARM NEON kernel: what it took to get vecdbc competitive with FAISS, where it actually wins, and where it still loses.</p>
1125                        <div class="log-footer">
1126                            <span class="read-time">9 min read</span>
1127                            <a href="https://github.com/navid72m/vectorDatabase" class="log-link" target="_blank">read more →</a>
1128                        </div>
1129                    </div>
1130                </div>
1131            </div>
1132            <div class="log-cta reveal">
1133                <a href="https://medium.com/@navid72m" target="_blank" class="btn"><i class="fab fa-medium"></i> More posts on Medium</a>
1134                <a href="/feed.xml" class="btn" style="margin-left: 0.9rem;"><i class="fas fa-rss"></i> RSS feed</a>
1135            </div>
1136        </div>
1137    </section>
1138
1139    <!-- Contact -->
1140    <section id="contact" class="section">
1141        <div class="wrap">
1142            <div class="section-head reveal">
1143                <p class="eyebrow">sec/05 — contact</p>
1144                <h2 class="section-title">Let's Connect</h2>
1145                <p class="section-sub">Open to opportunities in agentic AI infrastructure, systems-level ML, and research collaboration.</p>
1146            </div>
1147            <div class="contact-grid">
1148                <div class="contact-list reveal">
1149                    <div class="row">
1150                        <i class="fas fa-envelope"></i>
1151                        <div>
1152                            <h4>Email</h4>
1153                            <p>[email protected]</p>
1154                        </div>
1155                    </div>
1156                    <div class="row">
1157                        <i class="fas fa-clock"></i>
1158                        <div>
1159                            <h4>Timezone</h4>
1160                            <p>IRST (UTC+3:30) — Rasht, Iran</p>
1161                        </div>
1162                    </div>
1163                </div>
1164                <div class="contact-panel reveal">
1165                    <h3>Ready to collaborate?</h3>
1166                    <p>
1167                        I'm always interested in discussing new opportunities, research collaborations, or conversations about agentic AI infrastructure. Whether you're looking for a systems-level ML engineer or someone who can bridge theory and practice, let's connect.
1168                    </p>
1169                    <div class="cta-row">
1170                        <a href="mailto:[email protected]" class="btn primary"><i class="fas fa-envelope"></i> Send email</a>
1171                        <a href="https://linkedin.com/in/navid-mirnouri" target="_blank" class="btn"><i class="fab fa-linkedin"></i> LinkedIn</a>
1172                    </div>
1173                </div>
1174            </div>
1175            <div class="social-row reveal">
1176                <a href="https://linkedin.com/in/navid-mirnouri" target="_blank" aria-label="LinkedIn"><i class="fab fa-linkedin-in"></i></a>
1177                <a href="https://github.com/navid72m" target="_blank" aria-label="GitHub"><i class="fab fa-github"></i></a>
1178                <a href="mailto:[email protected]" aria-label="Email"><i class="fas fa-envelope"></i></a>
1179                <a href="https://medium.com/@navid72m" target="_blank" aria-label="Medium"><i class="fab fa-medium"></i></a>
1180            </div>
1181        </div>
1182    </section>
1183
1184    <footer>
1185        <div class="wrap">
1186            <p id="footer-year">&copy; 2026 Navid Mirnouri.</p>
1187        </div>
1188    </footer>
1189
1190    
1190<script>
1191        // Smooth scroll for in-page links
1192        document.querySelectorAll('a[href^="#"]').forEach(anchor => {
1193            anchor.addEventListener('click', function (e) {
1194                const target = document.querySelector(this.getAttribute('href'));
1195                if (target) {
1196                    e.preventDefault();
1197                    target.scrollIntoView({ behavior: 'smooth', block: 'start' });
1198                }
1199            });
1200        });
1201
1202        // Navbar border on scroll
1203        const navbar = document.getElementById('navbar');
1204        window.addEventListener('scroll', () => {
1205            navbar.classList.toggle('scrolled', window.scrollY > 40);
1206        });
1207
1208        // Trace rail fill = scroll progress
1209        const traceFill = document.getElementById('trace-fill');
1210        window.addEventListener('scroll', () => {
1211            const scrollHeight = document.documentElement.scrollHeight - window.innerHeight;
1212            const scrolled = scrollHeight > 0 ? (window.scrollY / scrollHeight) * 100 : 0;
1213            traceFill.style.height = scrolled + '%';
1214        });
1215
1216        // Fade/rise on scroll into view
1217        const observer = new IntersectionObserver((entries) => {
1218            entries.forEach(entry => {
1219                if (entry.isIntersecting) {
1220                    entry.target.classList.add('visible');
1221                    observer.unobserve(entry.target);
1222                }
1223            });
1224        }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });
1225
1226        document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
1227
1228        // Footer year
1229        document.getElementById('footer-year').textContent = `© ${new Date().getFullYear()} Navid Mirnouri.`;
1230    </script>
1230
1231</body>
1232</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.