{"id":163,"date":"2026-08-07T11:04:07","date_gmt":"2026-08-07T11:04:07","guid":{"rendered":"https:\/\/vectormatch.dev\/blog\/dusan-knezevic\/"},"modified":"2026-08-10T16:19:30","modified_gmt":"2026-08-10T16:19:30","slug":"dusan-knezevic","status":"publish","type":"page","link":"https:\/\/vectormatch.dev\/blog\/dusan-knezevic\/","title":{"rendered":"Du\u0161an Kne\u017eevi\u0107"},"content":{"rendered":"<p><!-- Author page: Du\u0161an Kne\u017eevi\u0107 \u2014 custom layout, not a blog post --><\/p>\n<style>\n.vm-author-page {<br \/>\n  max-width: 760px;<br \/>\n  margin: 0 auto;<br \/>\n  padding: 3rem 1.5rem 4rem;<br \/>\n}<br \/>\n.vm-author-hero {<br \/>\n  display: flex;<br \/>\n  flex-direction: column;<br \/>\n  align-items: center;<br \/>\n  text-align: center;<br \/>\n  gap: 1.25rem;<br \/>\n  margin-bottom: 3rem;<br \/>\n}<br \/>\n.vm-author-hero img {<br \/>\n  width: 180px;<br \/>\n  height: 180px;<br \/>\n  border-radius: 50%;<br \/>\n  object-fit: cover;<br \/>\n  border: 3px solid #8b5cf6;<br \/>\n  box-shadow: 0 0 0 6px rgba(124, 58, 237, 0.12), 0 4px 24px rgba(0, 0, 0, 0.4);<br \/>\n}<br \/>\n.vm-author-hero h1 {<br \/>\n  font-family: 'PT Serif', Georgia, serif;<br \/>\n  font-size: 2.25rem;<br \/>\n  font-weight: 700;<br \/>\n  color: #f5f5f7;<br \/>\n  margin: 0;<br \/>\n  line-height: 1.2;<br \/>\n}<br \/>\n.vm-author-hero .vm-author-role {<br \/>\n  font-family: 'Geist', sans-serif;<br \/>\n  font-size: 0.95rem;<br \/>\n  font-weight: 500;<br \/>\n  color: #8b5cf6;<br \/>\n  letter-spacing: 0.02em;<br \/>\n}<br \/>\n.vm-author-hero .vm-author-location {<br \/>\n  font-size: 0.85rem;<br \/>\n  color: #a1a1aa;<br \/>\n  display: flex;<br \/>\n  align-items: center;<br \/>\n  gap: 0.4rem;<br \/>\n}<br \/>\n.vm-author-hero .vm-author-location::before {<br \/>\n  content: \"\";<br \/>\n  width: 6px;<br \/>\n  height: 6px;<br \/>\n  border-radius: 50%;<br \/>\n  background: #34d399;<br \/>\n  display: inline-block;<br \/>\n}<br \/>\n.vm-author-bio {<br \/>\n  font-family: 'Geist', sans-serif;<br \/>\n  font-size: 1.0625rem;<br \/>\n  line-height: 1.8;<br \/>\n  color: #d4d4d8;<br \/>\n}<br \/>\n.vm-author-bio p {<br \/>\n  margin: 0 0 1.5rem;<br \/>\n}<br \/>\n.vm-author-bio p:first-of-type {<br \/>\n  font-size: 1.15rem;<br \/>\n  color: #f5f5f7;<br \/>\n  font-weight: 500;<br \/>\n}<br \/>\n.vm-author-bio strong {<br \/>\n  color: #f5f5f7;<br \/>\n  font-weight: 600;<br \/>\n}<br \/>\n.vm-author-bio a {<br \/>\n  color: #8b5cf6;<br \/>\n  text-decoration: underline;<br \/>\n  text-underline-offset: 2px;<br \/>\n  transition: color 0.2s ease;<br \/>\n}<br \/>\n.vm-author-bio a:hover {<br \/>\n  color: #34d399;<br \/>\n}<br \/>\n.vm-author-topics {<br \/>\n  margin: 2.5rem 0;<br \/>\n  padding: 1.75rem 2rem;<br \/>\n  background: #2a2a35;<br \/>\n  border: 1px solid #3f3f4a;<br \/>\n  border-radius: 0.875rem;<br \/>\n}<br \/>\n.vm-author-topics h2 {<br \/>\n  font-family: 'PT Serif', Georgia, serif;<br \/>\n  font-size: 1.15rem;<br \/>\n  font-weight: 700;<br \/>\n  color: #f5f5f7;<br \/>\n  margin: 0 0 1rem;<br \/>\n}<br \/>\n.vm-author-topics ul {<br \/>\n  list-style: none;<br \/>\n  margin: 0;<br \/>\n  padding: 0;<br \/>\n  display: flex;<br \/>\n  flex-direction: column;<br \/>\n  gap: 0.625rem;<br \/>\n}<br \/>\n.vm-author-topics li {<br \/>\n  font-size: 0.95rem;<br \/>\n  color: #d4d4d8;<br \/>\n  line-height: 1.6;<br \/>\n  padding-left: 1.5rem;<br \/>\n  position: relative;<br \/>\n}<br \/>\n.vm-author-topics li::before {<br \/>\n  content: \"\";<br \/>\n  position: absolute;<br \/>\n  left: 0;<br \/>\n  top: 0.5rem;<br \/>\n  width: 8px;<br \/>\n  height: 8px;<br \/>\n  border-radius: 2px;<br \/>\n  background: #7c3aed;<br \/>\n  transform: rotate(45deg);<br \/>\n}<br \/>\n.vm-author-links {<br \/>\n  display: flex;<br \/>\n  flex-wrap: wrap;<br \/>\n  gap: 0.75rem;<br \/>\n  margin: 2rem 0 1.5rem;<br \/>\n  justify-content: center;<br \/>\n}<br \/>\n.vm-author-links a {<br \/>\n  display: inline-flex;<br \/>\n  align-items: center;<br \/>\n  gap: 0.4rem;<br \/>\n  padding: 0.5rem 1.1rem;<br \/>\n  font-size: 0.875rem;<br \/>\n  font-weight: 500;<br \/>\n  font-family: 'Geist', sans-serif;<br \/>\n  color: #f5f5f7;<br \/>\n  background: #2a2a35;<br \/>\n  border: 1px solid #3f3f4a;<br \/>\n  border-radius: 9999px;<br \/>\n  text-decoration: none;<br \/>\n  transition: all 0.2s ease;<br \/>\n}<br \/>\n.vm-author-links a:hover {<br \/>\n  border-color: #8b5cf6;<br \/>\n  color: #8b5cf6;<br \/>\n  background: rgba(124, 58, 237, 0.08);<br \/>\n}<br \/>\n.vm-author-availability {<br \/>\n  display: inline-flex;<br \/>\n  align-items: center;<br \/>\n  gap: 0.5rem;<br \/>\n  padding: 0.5rem 1.25rem;<br \/>\n  font-size: 0.85rem;<br \/>\n  font-weight: 600;<br \/>\n  font-family: 'Geist', sans-serif;<br \/>\n  color: #34d399;<br \/>\n  background: rgba(52, 211, 153, 0.08);<br \/>\n  border: 1px solid rgba(52, 211, 153, 0.25);<br \/>\n  border-radius: 9999px;<br \/>\n  margin-top: 0.5rem;<br \/>\n}<br \/>\n.vm-author-availability::before {<br \/>\n  content: \"\";<br \/>\n  width: 8px;<br \/>\n  height: 8px;<br \/>\n  border-radius: 50%;<br \/>\n  background: #34d399;<br \/>\n  box-shadow: 0 0 8px rgba(52, 211, 153, 0.6);<br \/>\n  animation: vm-pulse 2s ease-in-out infinite;<br \/>\n}<br \/>\n@keyframes vm-pulse {<br \/>\n  0%, 100% { opacity: 1; }<br \/>\n  50% { opacity: 0.5; }<br \/>\n}<br \/>\n.vm-author-divider {<br \/>\n  height: 1px;<br \/>\n  background: #3f3f4a;<br \/>\n  margin: 2.5rem 0;<br \/>\n  border: none;<br \/>\n}<br \/>\n@media (max-width: 640px) {<br \/>\n  .vm-author-page { padding: 2rem 1rem 3rem; }<br \/>\n  .vm-author-hero img { width: 140px; height: 140px; }<br \/>\n  .vm-author-hero h1 { font-size: 1.75rem; }<br \/>\n  .vm-author-topics { padding: 1.25rem 1.5rem; }<br \/>\n  .vm-author-links { flex-direction: column; align-items: stretch; }<br \/>\n  .vm-author-links a { justify-content: center; }<br \/>\n}<br \/>\n<\/style>\n<div class=\"vm-author-page\">\n<div class=\"vm-author-hero\"><img decoding=\"async\" src=\"https:\/\/vectormatch.dev\/blog\/wp-content\/uploads\/2026\/08\/dusan-knezevic-author.jpg\" alt=\"Du\u0161an Kne\u017eevi\u0107 \u2014 Full-Stack Developer\" width=\"180\" height=\"180\" \/><\/p>\n<div class=\"vm-author-role\">Full-Stack Developer \u00b7 VectorMatch<\/div>\n<div class=\"vm-author-location\">Belgrade, Serbia (CET)<\/div>\n<\/div>\n<div class=\"vm-author-bio\">\n<p>I design and build VectorMatch end to end \u2014 the matching pipeline, the infrastructure underneath it, and this blog. The posts here are about things that broke in production and what they turned out to mean once I understood them.<\/p>\n<p>I have been writing for the web since 2008, starting with PHP and MySQL on high-traffic portals before moving to Node and React around 2017. I kept the server side the whole way rather than trading it for a frontend-only track. Before software, I spent seven years on the commercial side \u2014 running a country office for a medical-equipment distributor, then handling marketing and sales for a large manufacturer \u2014 and a period as a search quality rater for Google through Lionbridge, evaluating what the index returned across five Balkan markets against a published rubric.<\/p>\n<p>That last role matters more now than it did at the time. Deciding whether a machine can find something, and being honest about how confidently you can claim that, is the same problem in 2026 that it was in 2008. The machine just changed.<\/p>\n<\/div>\n<div class=\"vm-author-topics\">\n<h2>What I write about<\/h2>\n<ul>\n<li>Production failures in distributed systems \u2014 what broke, why the tests missed it, and what the fix generalises to.<\/li>\n<li>The economics of routing work between LLM models \u2014 when to use which, what it costs, and how to measure it.<\/li>\n<li>How to measure whether you are findable \u2014 with numbers reported as proportions, not as facts.<\/li>\n<\/ul>\n<\/div>\n<hr class=\"vm-author-divider\" \/>\n<div class=\"vm-author-links\"><a href=\"https:\/\/github.com\/knezdusan\" target=\"_blank\" rel=\"noopener\">GitHub<\/a><br \/>\n<a href=\"https:\/\/linkedin.com\/in\/dusanknezevic\" target=\"_blank\" rel=\"noopener\">LinkedIn<\/a><br \/>\n<a href=\"https:\/\/readsomnia.com\" target=\"_blank\" rel=\"noopener\">readsomnia.com<\/a><br \/>\n<a href=\"mailto:knez.dusan@gmail.com\">Email<\/a><\/div>\n<div style=\"text-align: center;\">\n<div class=\"vm-author-availability\">Open to remote contract work<\/div>\n<\/div>\n<\/div>\n<p><script type=\"application\/ld+json\"><br \/>\n{<br \/>\n  \"@context\": \"https:\/\/schema.org\",<br \/>\n  \"@type\": \"Person\",<br \/>\n  \"@id\": \"https:\/\/vectormatch.dev\/blog\/dusan-knezevic\/#person\",<br \/>\n  \"name\": \"Du\u0161an Kne\u017eevi\u0107\",<br \/>\n  \"url\": \"https:\/\/vectormatch.dev\/blog\/dusan-knezevic\/\",<br \/>\n  \"image\": \"https:\/\/vectormatch.dev\/blog\/wp-content\/uploads\/2026\/08\/dusan-knezevic-author.jpg\",<br \/>\n  \"jobTitle\": \"Full-Stack Developer\",<br \/>\n  \"worksFor\": {<br \/>\n    \"@type\": \"Organization\",<br \/>\n    \"name\": \"VectorMatch\"<br \/>\n  },<br \/>\n  \"address\": {<br \/>\n    \"@type\": \"PostalAddress\",<br \/>\n    \"addressLocality\": \"Belgrade\",<br \/>\n    \"addressCountry\": \"RS\"<br \/>\n  },<br \/>\n  \"knowsAbout\": [\"Distributed systems\", \"LLM pipelines\", \"Technical SEO\", \"Answer engine optimization\"],<br \/>\n  \"sameAs\": [<br \/>\n    \"https:\/\/github.com\/knezdusan\",<br \/>\n    \"https:\/\/linkedin.com\/in\/dusanknezevic\",<br \/>\n    \"https:\/\/readsomnia.com\"<br \/>\n  ]<br \/>\n}<br \/>\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Full-Stack Developer \u00b7 VectorMatch Belgrade, Serbia (CET) I design and build VectorMatch end to end \u2014 the matching pipeline, the infrastructure underneath it, and this blog. The posts here are about things that broke in production and what they turned out to mean once I understood them. I have been writing for the web since [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-163","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/pages\/163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/comments?post=163"}],"version-history":[{"count":5,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/pages\/163\/revisions"}],"predecessor-version":[{"id":172,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/pages\/163\/revisions\/172"}],"wp:attachment":[{"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/media?parent=163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}