<?php
/**
 * =====================================================
 * AI NEWS — ŠABLÓNA PRE NOVÝ ČLÁNOK
 * =====================================================
 * Postup:
 * 1. Skopírujte tento súbor do priečinka /ai-news/
 * 2. Premenujte ho podľa URL, ktorú chcete (napr. "moj-clanok.php")
 *    URL bude: 191tech.com/ai-news/moj-clanok
 * 3. Vyplňte $article pole nižšie
 * 4. Napíšte obsah článku do sekcie označenej "TU ZAČÍNA OBSAH"
 * =====================================================
 */

$article = [
    'title'    => 'Nemecký distribútor znížil účty za AI o 12 000 € mesačne pomocou MCP scoping-u',
    'excerpt'  => 'Nemecký B2B distribútor priemyselných súčiastok znížil spotrebu LLM tokenov o 45 % prostredníctvom Okta Identity-Scoped MCP. Zistite, ako dynamické ohraničenie kontextu šetrí tisíce eur.',
    'date'     => '2026-08-13',              // Dnes. Alebo konkrétny dátum: '2026-06-01'
    'author'   => '191tech',
    'category' => 'E-commerce a Maloobchod',       // Napr: E-commerce, Webdesign, Marketing, AI školenia
    'image'    => 'https://images.pexels.com/photos/6214389/pexels-photo-6214389.jpeg?auto=compress&cs=tinysrgb&fit=crop&h=627&w=1200',      // Cesta k obrázku článku (odporúčaný rozmer: 1200x630)
    'cta_text' => 'Mám záujem o konzultáciu', // Text hlavného CTA tlačidla
    'cta_link' => '/kontakt',                 // URL link CTA tlačidla
];

$page_title       = $article['title'] . ' | AI News 191tech';
$page_description = $article['excerpt'];
include dirname(__DIR__, 2) . '/parts/ai-page-head.php';
?>

<!-- ===== HERO ČLÁNKU ===== -->
<section class="ai-hero" style="min-height:auto; padding:140px 0 60px;">
  <div class="ai-container" style="max-width:860px;">
    <div style="display:flex; gap:12px; align-items:center; margin-bottom:24px; font-size:14px;">
      <a href="/ai-news" style="color:var(--ai-cyan); text-decoration:none;">← Späť na AI News</a>
      <span style="color:var(--ai-border);">|</span>
      <span style="color:var(--ai-purple); font-weight:600; text-transform:uppercase; letter-spacing:1px;"><?= htmlspecialchars($article['category']) ?></span>
      <span style="color:var(--ai-border);">|</span>
      <span style="color:var(--ai-text-muted);"><?= date('d.m.Y', strtotime($article['date'])) ?></span>
    </div>
    <h1 style="font-size:42px; line-height:1.2; margin-bottom:28px;"><?= htmlspecialchars($article['title']) ?></h1>
    <p style="font-size:20px; color:var(--ai-text-muted); line-height:1.6; margin-bottom:40px;"><?= htmlspecialchars($article['excerpt']) ?></p>

    <?php if(!empty($article['image'])): ?>
    <div style="border-radius:16px; overflow:hidden; border:1px solid var(--ai-border); margin-bottom:0;">
      <img src="<?= htmlspecialchars($article['image']) ?>" alt="<?= htmlspecialchars($article['title']) ?>"
           style="width:100%; height:auto; display:block; max-height:420px; object-fit:cover;">
    </div>
    <?php endif; ?>
  </div>
</section>

<!-- ===== OBSAH ČLÁNKU ===== -->
<section class="ai-section" style="padding-top:0;">
  <div class="ai-container" style="max-width:860px;">
    <div class="article-content">

      <!-- ════════════════════════════════════════════
           TU ZAČÍNA OBSAH ČLÁNKU
           Môžete použiť: <h2>, <h3>, <p>, <ul>, <ol>,
           <li>, <strong>, <em>, <a href="">, <blockquote>
      ════════════════════════════════════════════ -->

<p>Vynakladanie desiatok tisíc eur mesačne na zbytočné LLM tokeny pri B2B asistencii vyriešil nemecký distribútor priemyselných súčiastok nasadením rozhrania Okta Identity-Scoped Model Context Protocol (MCP). Tento architektúrny prístup osekáva kontext spracovávaný AI agentom výhradne na dáta a funkcie sprístupnené konkrétnemu prihlásenému používateľovi.</p><h2>Pôvodný stav a architektúrny problém</h2><p>Stredne veľký nemecký distribútor priemyselných komponentov spravuje B2B e-commerce platformu s viac ako 500 000 kaskádovo zložitejšími položkami a individuálnymi cenníkmi pre tisíce odberateľov. V snahe zrýchliť nákupný proces a odbremeniť zákaznícku podporu nasadil konverzačného asistenta postaveného na veľkých jazykových modeloch. Pôvodná naivná architektúra však pri každej zákazníckej otázke odosielala do kontextového okna LLM kompletnú systémovú schému, OpenAPI špecifikácie a prístupové rozhrania všetkých interných ERP, WMS a CRM modulov bez ohľadu na oprávnenia daného klienta.</p><h2>Ako funguje Okta Identity-Scoped MCP v praxi</h2><p>Riešenie spočíva v integrácii protokolu Model Context Protocol (MCP) prepojeného s identitným systémom Okta na úrovni prístupových tokenov. Pri nadviazaní relácie nákupným asistentom MCP server najprv overí identitu používateľa a jeho rolové oprávnenia pomocou OAuth2 a OIDC žetónov. Na základe získanej bezpečnostnej matice vygeneruje dynamickú, striktne redukovanú špecifikáciu MCP nástrojov (tools) a zdrojov (resources).</p><p>Ak prihlásený nákupca disponuje len prístupom k objednávaniu hydraulických systémov pre konkrétnu pobočku, MCP server do systémového promptu LLM agenta nepribalí schémy pre správu skladových zásob iných divízií, fakturačné moduly ani rozhrania pre elektrotechnický sortiment. Redukcia prebieha na úrovni proxy vrstvy ešte pred odoslaním požiadavky na LLM API endpoint.</p><p>Architektúra funguje v trojstupňovom cykle:</p><ul><li><strong>Autentifikácia a autorizácia:</strong> Zachytenie požiadavky a overenie identitného žetónu cez Okta Identity rozhranie.</li><li><strong>Dynamický scoping:</strong> Filtrovanie ponuky MCP nástrojov na základe priradených RBAC a ABAC práv prihláseného zákazníka.</li><li><strong>Odoslanie striktného promptu:</strong> Odovzdanie očisteného promptu s minimálnym množstvom JSON-RPC schém do LLM agenta, ktorý vykonáva výhradne povolené funkcie.</li></ul><div class="case-study-box"><h3>Príklad z praxe</h3><ul><li><strong>Firma:</strong> Stredne veľký B2B e-commerce distribútor priemyselných súčiastok, Nemecko</li><li><strong>AI riešenie:</strong> Okta Identity-Scoped MCP (Model Context Protocol) v kombinácii s LLM agentmi</li><li><strong>Problém:</strong> Vysoké náklady na LLM tokeny pri B2B nákupnom asistentovi, ktorý pri každom konverzačnom kroku načítaval kompletné schémy a funkcie všetkých interných systémov bez ohľadu na oprávnenia a potreby zákazníka</li><li><strong>Výsledok:</strong> Zníženie celkového objemu prenesených tokenov o 45 % a úspora viac ako 12 000 EUR mesačne na prevádzkových nákladoch AI agenta</li></ul></div><h2>Merateľné výsledky a prínosy</h2><p>Prechod na Okta Identity-Scoped MCP priniesol okamžité merateľné úspory vo výpočtových aj finančných zdrojoch spoločnosti:</p><ul><li><strong>Pokles tokenov o 45 %:</strong> Objem prenesených dát v rámci kontextového okna výrazne klesol vyradením irelevantných API schém.</li><li><strong>Úspora 12 000 EUR mesačne:</strong> Priame prevádzkové náklady na API volania LLM modelov sa znížili o viac ako 12 000 EUR za každý mesiac prevádzky.</li><li><strong>Zrýchlenie odozvy:</strong> Priemerná latencia odpovedí AI asistenta klesla z 3,8 sekundy na 1,4 sekundy vďaka menšiemu objemu spracovávaného kontextu.</li><li><strong>Eliminácia bezpečnostných rizík:</strong> Riziko úniku citlivých API schém a neoprávneného spúšťania interných funkčných volaní sa znížilo na nulu, keďže LLM agent nemá o neuplatniteľných nástrojoch žiadne vedomosti.</li></ul><h2>Pojem pre B2B e-commerce sektory</h2><p>Architektúra bez striktného ohraničenia kontextu vedie k neudržateľným nákladom a bezpečnostným rizikám pri škálovaní enterprise AI aplikácií. B2B e-commerce platformy disponujúce rozsiahlymi databázami a komplexnými prístupovými právami musia AI agentom poskytovať len tie dáta, ktoré daný používateľ skutočne potrebuje. Spojenie identitného riadenia s Model Context Protocol predstavuje udržateľný technický štandard pre podnikovú prevádzku AI agentov bez zbytočného finančného plytvania.</p>

<!-- ════════════════════════════════════════════
           KONIEC OBSAHU ČLÁNKU
      ════════════════════════════════════════════ -->

    </div>

    <!-- CTA Banner vo vnútri článku -->
    <div class="ai-highlight-box" style="margin-top:56px; text-align:center;">
      <div class="ai-label" style="margin:0 auto 16px; display:table;">Zaujíma vás toto téma?</div>
      <h3 style="font-size:26px;">Hovoríme o tom <span class="ai-gradient-text">osobne</span></h3>
      <p style="margin-bottom:24px;">Kontaktujte nás na bezplatnú konzultáciu — analyzujeme možnosti AI pre vašu firmu.</p>
      <a href="<?= htmlspecialchars($article['cta_link']) ?>" class="ai-btn ai-btn-primary ai-btn-lg"><?= htmlspecialchars($article['cta_text']) ?></a>
    </div>
  </div>
</section>

<!-- ===== NEWSLETTER ===== -->
<section class="ai-section" style="background:var(--ai-bg2);">
  <div class="ai-container" style="max-width:700px; text-align:center;">
    <div class="ai-label ai-label-purple" style="margin:0 auto 16px; display:table;">AI News Newsletter</div>
    <h2>Podobné tipy priamo do <span class="ai-gradient-text-2">e-mailu</span></h2>
    <p style="margin-bottom:30px;">Prihláste sa na odber — každý týždeň pošleme najdôležitejšie AI novinky pre vaše podnikanie.</p>
    <form id="nlForm" style="display:flex; gap:12px; flex-wrap:wrap; justify-content:center;">
      <input type="text" name="website" style="display:none;" tabindex="-1" autocomplete="off">
      
      <select name="category" required style="padding:14px 20px; border-radius:8px; border:1px solid var(--ai-border); background:var(--ai-card); color:var(--ai-text); font-family:'Inter',sans-serif; outline:none; min-width:180px;">
        <option value="">Zvoľte odvetvie</option>
        <option value="Všetky odvetvia">Všetky odvetvia</option>
        <option value="Marketing a Predaj">Marketing a Predaj</option>
        <option value="E-commerce a Maloobchod">E-commerce a Maloobchod</option>
        <option value="Priemysel a Výroba">Priemysel a Výroba</option>
        <option value="Logistika a Doprava">Logistika a Doprava</option>
        <option value="Financie a Účtovníctvo">Financie a Účtovníctvo</option>
        <option value="HR a Administratíva">HR a Administratíva</option>
        <option value="Služby a Iné">Služby a Iné</option>
      </select>

      <input type="email" name="email" required placeholder="Váš pracovný e-mail"
        style="flex-grow:1; min-width:240px; padding:14px 20px; border-radius:8px; border:1px solid var(--ai-border); background:var(--ai-card); color:var(--ai-text); font-family:'Inter',sans-serif; outline:none;">
      <button type="submit" class="ai-btn ai-btn-primary" style="border:none; cursor:pointer;">Odoberať novinky</button>
    </form>
    <div id="nlMsg" style="margin-top:16px; font-weight:600; display:none;"></div>
  </div>
</section>

<script>
document.getElementById('nlForm').addEventListener('submit', function(e) {
  e.preventDefault();
  const fd = new FormData(this), msg = document.getElementById('nlMsg');
  fetch('/subscribe.php', { method:'POST', body:fd })
    .then(r => r.json())
    .then(d => {
      msg.style.display = 'block';
      msg.style.color = d.status === 'success' ? 'var(--ai-green)' : '#ef4444';
      msg.textContent = d.message;
      if(d.status === 'success') {
          this.reset();
          localStorage.setItem('ai_newsletter_subscribed', '1');
      }
    }).catch(() => {
      msg.style.display = 'block';
      msg.style.color = '#ef4444';
      msg.textContent = 'Nastala chyba. Skúste to prosím neskôr.';
    });
});
</script>

<!-- ===== NEWSLETTER POPUP ===== -->
<div id="aiPopup" style="display:none; position:fixed; bottom:30px; right:30px; max-width:400px; background:var(--ai-card); border:1px solid var(--ai-border); border-radius:16px; box-shadow:0 20px 40px rgba(0,0,0,0.1); z-index:9999; padding:32px; font-family:'Inter',sans-serif;">
  <button id="aiPopupClose" style="position:absolute; top:16px; right:16px; background:none; border:none; font-size:24px; cursor:pointer; color:var(--ai-text-muted); line-height:1;">&times;</button>
  <div class="ai-label ai-label-purple" style="margin-bottom:12px; display:inline-block;">AI News Newsletter</div>
  <h3 style="margin-top:0; font-size:20px; color:var(--ai-text); margin-bottom:8px;">Získajte náskok s AI</h3>
  <p style="color:var(--ai-text-muted); font-size:15px; line-height:1.6; margin-bottom:20px;">Vyberte si vaše odvetvie a pošleme vám len tie najrelevantnejšie AI tipy a novinky.</p>
  
  <form id="nlPopupForm" style="display:flex; flex-direction:column; gap:12px;">
    <input type="text" name="website" style="display:none;" tabindex="-1" autocomplete="off">
    <select name="category" required style="padding:12px 16px; border-radius:8px; border:1px solid var(--ai-border); background:var(--ai-bg); color:var(--ai-text); outline:none; font-size:15px;">
      <option value="">Zvoľte odvetvie</option>
      <option value="Všetky odvetvia">Všetky odvetvia</option>
      <option value="Marketing a Predaj">Marketing a Predaj</option>
      <option value="E-commerce a Maloobchod">E-commerce a Maloobchod</option>
      <option value="Priemysel a Výroba">Priemysel a Výroba</option>
      <option value="Logistika a Doprava">Logistika a Doprava</option>
      <option value="Financie a Účtovníctvo">Financie a Účtovníctvo</option>
      <option value="HR a Administratíva">HR a Administratíva</option>
      <option value="Služby a Iné">Služby a Iné</option>
    </select>
    <input type="email" name="email" required placeholder="Váš pracovný e-mail" style="padding:12px 16px; border-radius:8px; border:1px solid var(--ai-border); background:var(--ai-bg); color:var(--ai-text); outline:none; font-size:15px;">
    <button type="submit" class="ai-btn ai-btn-primary" style="width:100%; border:none; cursor:pointer; padding:12px;">Odoberať novinky</button>
  </form>
  <div id="nlPopupMsg" style="margin-top:12px; font-weight:600; font-size:14px; display:none;"></div>
</div>

<script>
// Logika popupu
document.addEventListener('DOMContentLoaded', function() {
    if (!localStorage.getItem('ai_newsletter_subscribed') && !sessionStorage.getItem('ai_popup_closed')) {
        setTimeout(() => {
            document.getElementById('aiPopup').style.display = 'block';
        }, 5000); // Zobrazí sa po 5 sekundách
    }

    document.getElementById('aiPopupClose').addEventListener('click', function() {
        document.getElementById('aiPopup').style.display = 'none';
        sessionStorage.setItem('ai_popup_closed', '1');
    });

    document.getElementById('nlPopupForm').addEventListener('submit', function(e) {
        e.preventDefault();
        const fd = new FormData(this), msg = document.getElementById('nlPopupMsg');
        const btn = this.querySelector('button');
        btn.textContent = 'Odosielam...';
        btn.disabled = true;

        fetch('/subscribe.php', { method:'POST', body:fd })
          .then(r => r.json())
          .then(d => {
            msg.style.display = 'block';
            msg.style.color = d.status === 'success' ? 'var(--ai-green)' : '#ef4444';
            msg.textContent = d.message;
            if(d.status === 'success') {
                this.reset();
                localStorage.setItem('ai_newsletter_subscribed', '1');
                setTimeout(() => document.getElementById('aiPopup').style.display = 'none', 3000);
            } else {
                btn.textContent = 'Odoberať novinky';
                btn.disabled = false;
            }
          }).catch(() => {
            msg.style.display = 'block';
            msg.style.color = '#ef4444';
            msg.textContent = 'Nastala chyba. Skúste to prosím neskôr.';
            btn.textContent = 'Odoberať novinky';
            btn.disabled = false;
          });
    });
});
</script>

<style>
.article-content { font-size:17px; line-height:1.8; color:var(--ai-text-muted); }
.article-content h2 { font-size:28px; color:var(--ai-text); margin:48px 0 20px; padding-top:8px; border-top:1px solid var(--ai-border); }
.article-content h3 { font-size:22px; color:var(--ai-text); margin:32px 0 14px; }
.article-content p  { margin-bottom:24px; color:var(--ai-text-muted); }
.article-content a  { color:var(--ai-cyan); text-decoration:underline; }
.article-content ul, .article-content ol { margin-bottom:24px; padding-left:22px; }
.article-content li { margin-bottom:10px; }
.article-content blockquote {
  border-left:4px solid var(--ai-cyan);
  background:rgba(0,243,255,0.06);
  padding:22px 28px; font-size:20px;
  font-style:italic; margin:40px 0;
  border-radius:0 10px 10px 0; color:var(--ai-text);
}
.article-content strong { color:var(--ai-text); }

/* ── Case Study Box ─────────────────────────────── */
.case-study-box {
  background: var(--ai-bg3);
  border: 1px solid var(--ai-border);
  border-left: 4px solid var(--ai-cyan);
  border-radius: 12px;
  padding: 28px 32px;
  margin: 40px 0;
}
.case-study-box h3 {
  font-size: 14px !important;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 1.5px;
  color: var(--ai-cyan) !important;
  margin: 0 0 16px !important;
  padding: 0 !important;
  border: none !important;
}
.case-study-box ul {
  margin: 0 !important;
  padding-left: 0 !important;
  list-style: none;
}
.case-study-box li {
  padding: 6px 0;
  border-bottom: 1px solid var(--ai-border);
  font-size: 15px;
  color: var(--ai-text-muted);
}
.case-study-box li:last-child { border-bottom: none; }
.case-study-box li strong { color: var(--ai-text); margin-right: 6px; }
</style>

<?php include dirname(__DIR__, 2) . '/parts/ai-page-foot.php'; ?>
