{"id":21451,"date":"2026-10-05T17:09:09","date_gmt":"2026-10-05T15:09:09","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?page_id=21451"},"modified":"2026-10-05T17:09:09","modified_gmt":"2026-10-05T15:09:09","slug":"ai-usage-budget-calculator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/","title":{"rendered":"Kalkulator bud\u017cetu zu\u017cycia AI"},"content":{"rendered":"<style>\n.lw-saas{color:var(--text-primary);min-width:0}\n.lw-saas *{box-sizing:border-box}\n.lw-saas h2,.lw-saas h3,.profile-panel:has(.lw-saas) .profile-name{overflow-wrap:anywhere;hyphens:auto}\n.lw-saas .saas-note{padding:16px;border-left:3px solid var(--accent);background:var(--bg-panel);color:var(--text-secondary)}\n.lw-saas fieldset{border:1px solid var(--border);border-radius:10px;padding:18px;margin:20px 0;min-width:0;background:var(--bg-panel)}\n.lw-saas legend{padding:0 8px;font-weight:700;color:var(--text-primary)}\n.lw-saas .saas-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}\n.lw-saas label{display:block;font-size:.9rem;color:var(--text-secondary)}\n.lw-saas input{display:block;width:100%;padding:11px;margin-top:6px;border:1px solid var(--border);border-radius:6px;background:var(--bg-body);color:var(--text-primary);font:inherit}\n.lw-saas input:focus-visible,.lw-saas button:focus-visible,.lw-saas a:focus-visible{outline:3px solid var(--accent);outline-offset:3px}\n.lw-saas input[aria-invalid=true]{border:2px solid var(--accent)}\n.lw-saas .saas-actions{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0}\n.lw-saas button:disabled{opacity:.45;cursor:default;transform:none}\n.lw-saas [data-status]{color:var(--text-primary);font-weight:600}\n.lw-saas .saas-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n.lw-saas .saas-metrics div{padding:16px;border:1px solid var(--border);border-radius:8px;background:var(--bg-panel)}\n.lw-saas dt{color:var(--text-secondary);font-size:.85rem}\n.lw-saas dd{margin:8px 0 0;font-size:1.35rem;font-weight:700;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}\n.lw-saas .saas-table-wrap{max-width:100%;overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:8px}\n.lw-saas table{border-collapse:collapse;width:100%;font-size:.86rem}\n.lw-saas table th,.lw-saas table td{width:auto!important;padding:12px;min-width:120px;word-break:normal;overflow-wrap:normal;text-align:right;border-bottom:1px solid var(--border);color:var(--text-primary);white-space:normal}\n.lw-saas table th{background:var(--bg-panel)}\n.lw-saas table th[scope=row],.lw-saas table thead th:first-child{position:sticky;left:0;z-index:1;border-right:1px solid var(--border)}\n.lw-saas caption{text-align:left;padding:12px;font-weight:700;color:var(--text-primary)}\n.lw-saas .saas-chart{margin:20px 0;color:var(--accent)}\n.lw-saas .saas-chart svg{display:block;width:100%;height:auto}\n.lw-saas figcaption{color:var(--text-secondary);font-size:.85rem}\n.lw-saas .saas-related{display:flex;gap:10px;flex-wrap:wrap;list-style:none;padding:0}\n.lw-saas .saas-related li{list-style:none;margin:0}\n.lw-saas .saas-related a{display:block;border:1px solid var(--border);border-radius:6px;padding:8px 12px}\n.site-container main:has(.lw-saas) .profile-panel{flex:1 1 0;max-width:none;min-width:0}\n.site-container main:has(.lw-saas) .info-panel{flex:0 0 220px;max-width:220px}\n@media(max-width:900px){.site-container main:has(.lw-saas) .profile-panel,.site-container main:has(.lw-saas) .info-panel{flex:auto;width:100%;max-width:100%}}\n@media(max-width:540px){.lw-saas .saas-fields,.lw-saas .saas-metrics{grid-template-columns:1fr}.lw-saas fieldset{padding:12px}}\n<\/style>\n<p><script>(function(scope){'use strict';\nconst number=raw=>{const s=String(raw??'').trim().replace(\/\\s\/g,'').replace(',','.');return \/^(?:\\d+(?:\\.\\d*)?|\\.\\d+)$\/.test(s)&&Number.isFinite(Number(s))?Number(s):NaN;};\nfunction acquisition(v){const leads=v.visits*v.signup\/100,activated=leads*v.activation\/100,payers=activated*v.paid\/100,cost=v.spend+v.hours*v.hour,margin=v.price-v.variable,rate=v.signup\/100*v.activation\/100*v.paid\/100,cac=payers>0?cost\/payers:null;\nreturn {summary:{leads,activated,payers,acquisitionCost:cost,cac,payback:cac!==null&&margin>0?cac\/margin:null,requiredVisits:v.target===0?0:rate>0?Math.ceil(v.target\/rate):null},columns:['paidRate','payers','cac','payback','contribution'],rows:[0.5,1,1.5].map(x=>{const pct=Math.min(100,v.paid*x),n=activated*pct\/100,c=n>0?cost\/n:null;return [pct,n,c,c!==null&&margin>0?c\/margin:null,n*margin];})};}\nfunction cashflow(v){let monthly=v.customers,cash=v.cash,first=null;const cohorts=[],rows=[],annualPrice=v.price*12*(1-v.discount\/100);let minimum=v.cash;\nfor(let month=1;month<=v.months;month++){monthly=monthly*(1-v.churn\/100)+v.newCustomers*(1-v.annualShare\/100);let renewed=0;\nfor(const cohort of cohorts){if((month-cohort.start)%12===0){cohort.n*=v.renewal\/100;renewed+=cohort.n;}}\nconst fresh=v.newCustomers*v.annualShare\/100;cohorts.push({start:month,n:fresh});const annual=cohorts.reduce((sum,c)=>sum+c.n,0),annualBills=renewed+fresh;\nconst receipts=monthly*v.price+annualBills*annualPrice,refunds=receipts*v.refunds\/100,fees=receipts*v.fee\/100+(monthly+annualBills)*v.flat;\nconst outflow=fees+(monthly+annual)*v.variable+v.fixed+(month===1?v.setup:0),net=receipts-refunds-outflow;cash+=net;minimum=Math.min(minimum,cash);if(cash<0&#038;&#038;first===null)first=month;\nrows.push([month,monthly,annual,receipts,refunds,outflow,net,cash,monthly*v.price+annual*annualPrice\/12]);}\nreturn {summary:{finalCash:cash,minimumCash:Math.min(...rows.map(r=>r[7])),firstShortfall:first===null?'none':first,finalMRR:rows.at(-1)[8]},columns:['month','monthlyCustomers','annualCustomers','receipts','refunds','outflow','netCash','closingCash','mrr'],rows};}\nfunction aibudget(v){const attempt=(v.inputTokens*((1-v.cached\/100)*v.inputRate+v.cached\/100*v.cacheRate)+v.outputTokens*v.outputRate)\/1e6+v.overhead,request=attempt*(1+v.retries\/100),usable=v.budget*(1-v.reserve\/100);\nreturn {summary:{attemptCost:attempt,requestCost:request,usableBudget:usable,safeRequests:request>0?Math.floor(usable\/request):'unbounded'},columns:['scenario','requests','attemptsTotal','perCustomer','totalCost','remaining'],rows:[1,2,v.spike].map(x=>{const n=v.requests*x,cost=n*request;return [x+'\u00d7',n,n*v.customers*(1+v.retries\/100),cost,cost*v.customers,usable-cost];})};}\nfunction support(v){const perPerson=v.hours*v.utilization\/100;\nconst calc=rate=>{const tickets=v.customers*v.tickets*(1-rate\/100),hours=tickets*v.minutes\/60*(1+v.reopen\/100),staff=Math.ceil(hours\/perPerson);return {tickets,hours,staff};};const main=calc(v.selfserve),capacity=v.staff*perPerson,cost=v.staff*v.hours*v.hour+v.fixed;\nreturn {summary:{tickets:main.tickets,requiredHours:main.hours,capacity,neededStaff:main.staff,spareHours:capacity-main.hours,teamCost:cost,perCustomerSupport:v.customers>0?cost\/v.customers:null},columns:['avoidRate','tickets','requiredHours','neededStaff','requiredStaffCost'],rows:[0,v.selfserve,Math.min(100,v.selfserve+20)].map(rate=>{const r=calc(rate);return [rate,r.tickets,r.hours,r.staff,r.staff*v.hours*v.hour+v.fixed];})};}\nconst api={number,acquisition,cashflow,aibudget,support};if(typeof module!=='undefined'&&module.exports)module.exports=api;else scope.LWSaasMath=api;\n})(typeof window!=='undefined'?window:globalThis);<\/script><\/p>\n<div class=\"lw-saas\" id=\"saas-aibudget\">\n<p>Por\u00f3wnanie koszt\u00f3w token\u00f3w, ponowie\u0144 i szczytowego u\u017cycia z miesi\u0119cznym bud\u017cetem koszt\u00f3w na klienta.<\/p>\n<p class=\"saas-note\">Wszystkie kwoty w tej samej walucie, bez VAT. Przyk\u0142adowe warto\u015bci to za\u0142o\u017cenia, a nie cenniki dostawc\u00f3w. Dane i obliczenia pozostaj\u0105 w przegl\u0105darce.<\/p>\n<p><a href=\"\/blog\/pl\/narzedzia\/#saas\">Wszystkie narz\u0119dzia SaaS<\/a><\/p>\n<form novalidate>\n<fieldset>\n<legend>Wsp\u00f3lne za\u0142o\u017cenia<\/legend>\n<div class=\"saas-fields\">\n<label for=\"saas-aibudget-customers\">Aktywni klienci<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-customers\" name=\"customers\" value=\"100\"><\/label><br \/>\n<label for=\"saas-aibudget-requests\">Pierwotne zapytania na klienta \/ miesi\u0105c<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-requests\" name=\"requests\" value=\"500\"><\/label><br \/>\n<label for=\"saas-aibudget-inputTokens\">Tokeny wej\u015bciowe na pr\u00f3b\u0119<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-inputTokens\" name=\"inputTokens\" value=\"2000\"><\/label><br \/>\n<label for=\"saas-aibudget-outputTokens\">Tokeny wyj\u015bciowe na pr\u00f3b\u0119<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-outputTokens\" name=\"outputTokens\" value=\"500\"><\/label><br \/>\n<label for=\"saas-aibudget-cached\">Rzeczywisty udzia\u0142 odczyt\u00f3w cache w tokenach wej\u015bciowych (%)<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-cached\" name=\"cached\" value=\"25\"><\/label><br \/>\n<label for=\"saas-aibudget-inputRate\">Cena miliona zwyk\u0142ych token\u00f3w wej\u015bciowych<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-inputRate\" name=\"inputRate\" value=\"3\"><\/label><br \/>\n<label for=\"saas-aibudget-cacheRate\">Cena miliona token\u00f3w odczytu cache<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-cacheRate\" name=\"cacheRate\" value=\"0.3\"><\/label><br \/>\n<label for=\"saas-aibudget-outputRate\">Cena miliona token\u00f3w wyj\u015bciowych<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-outputRate\" name=\"outputRate\" value=\"15\"><\/label><br \/>\n<label for=\"saas-aibudget-overhead\">Dodatkowy koszt pr\u00f3by<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-overhead\" name=\"overhead\" value=\"0.001\"><\/label><br \/>\n<label for=\"saas-aibudget-retries\">Dodatkowe ponowienia (%)<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-retries\" name=\"retries\" value=\"10\"><\/label><br \/>\n<label for=\"saas-aibudget-budget\">Miesi\u0119czny bud\u017cet koszt\u00f3w AI na klienta<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-budget\" name=\"budget\" value=\"15\"><\/label><br \/>\n<label for=\"saas-aibudget-reserve\">Rezerwa bezpiecze\u0144stwa bud\u017cetu (%)<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-reserve\" name=\"reserve\" value=\"20\"><\/label><br \/>\n<label for=\"saas-aibudget-spike\">Mno\u017cnik u\u017cycia w scenariuszu szczytowym<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-aibudget-spike\" name=\"spike\" value=\"3\"><\/label>\n<\/div>\n<\/fieldset>\n<div class=\"saas-actions\"><button type=\"submit\">Oblicz<\/button><button type=\"button\" data-reset>Warto\u015bci przyk\u0142adowe<\/button><\/div>\n<\/form>\n<p role=\"alert\" data-status id=\"saas-aibudget-status\">\n<div data-result data-rc-private data-mp-mask aria-live=\"polite\" aria-atomic=\"false\"><\/div>\n<p><button type=\"button\" data-csv disabled>Pobierz CSV<\/button><\/p>\n<h2>Model oblicze\u0144 i za\u0142o\u017cenia<\/h2>\n<p>Koszt pr\u00f3by = tokeny wej\u015bciowe \/ milion \u00d7 wa\u017cona cena wej\u015bcia + tokeny wyj\u015bciowe \/ milion \u00d7 cena wyj\u015bcia + koszt dodatkowy. Wa\u017cona cena wej\u015bcia uwzgl\u0119dnia tylko rzeczywiste odczyty cache. Koszt pierwotnego zapytania = koszt pr\u00f3by \u00d7 (1 + udzia\u0142 dodatkowych ponowie\u0144). Dost\u0119pny bud\u017cet = bud\u017cet \u00d7 (1 \u2212 rezerwa). Limit oznacza liczb\u0119 pierwotnych zapyta\u0144 zaokr\u0105glon\u0105 w d\u00f3\u0142 do dost\u0119pnego bud\u017cetu. Tabela przedstawia zwyk\u0142e, podw\u00f3jne i szczytowe u\u017cycie. Ceny s\u0105 hipotetycznymi za\u0142o\u017ceniami, bez aktualnych taryf dostawc\u00f3w. Dop\u0142aty za zapis cache, jednostki multimodalne i zewn\u0119trzne narz\u0119dzia wymagaj\u0105 kosztu dodatkowego lub osobnej kalkulacji.<\/p>\n<h2>Pozosta\u0142e narz\u0119dzia SaaS<\/h2>\n<ul class=\"saas-related\">\n<li><a href=\"\/blog\/pl\/narzedzia\/saas-profitability-calculator\/\">Kalkulator rentowno\u015bci SaaS<\/a><\/li>\n<li><a href=\"\/blog\/pl\/narzedzia\/saas-pricing-model-simulator\/\">Symulator modeli cenowych SaaS<\/a><\/li>\n<li><a href=\"\/blog\/pl\/narzedzia\/automation-cost-comparator\/\">Por\u00f3wnanie koszt\u00f3w automatyzacji<\/a><\/li>\n<li><a href=\"\/blog\/pl\/narzedzia\/mrr-churn-simulator\/\">Kalkulator MRR i churn<\/a><\/li>\n<li><a href=\"\/blog\/pl\/narzedzia\/digital-product-profit-calculator\/\">Kalkulator zysku produkt\u00f3w cyfrowych<\/a><\/li>\n<li><a href=\"\/blog\/pl\/narzedzia\/saas-customer-acquisition-calculator\/\">Kalkulator pozyskiwania klient\u00f3w SaaS<\/a><\/li>\n<li><a href=\"\/blog\/pl\/narzedzia\/saas-cashflow-runway-simulator\/\">Symulator p\u0142ynno\u015bci i runway SaaS<\/a><\/li>\n<li><a href=\"\/blog\/pl\/narzedzia\/saas-support-capacity-planner\/\">Planer wydajno\u015bci wsparcia SaaS<\/a><\/li>\n<\/ul>\n<h2>\u0179r\u00f3d\u0142a i definicje<\/h2>\n<ul>\n<li><a href=\"https:\/\/platform.claude.com\/docs\/en\/api\/rate-limits\" rel=\"noopener\">Anthropic: rate limits<\/a><\/li>\n<li><a href=\"https:\/\/platform.claude.com\/docs\/en\/build-with-claude\/prompt-caching\" rel=\"noopener\">Anthropic: prompt caching<\/a><\/li>\n<\/ul>\n<div class=\"lw-faq\">\n<h2>FAQ<\/h2>\n<h3>Czy dane wej\u015bciowe s\u0105 przesy\u0142ane?<\/h3>\n<p>Kalkulator przetwarza dane lokalnie w przegl\u0105darce. Pliki CSV r\u00f3wnie\u017c powstaj\u0105 lokalnie. Strona nie zapisuje danych scenariusza na serwerze.<\/p>\n<h3>Jakie ograniczenia ma model?<\/h3>\n<p>Kalkulator nie egzekwuje limit\u00f3w technicznych. Tokeny i ponowienia s\u0105 warto\u015bciami \u015brednimi. Scenariusz bez koszt\u00f3w nie ma sko\u0144czonego limitu kosztowego; rzeczywiste limity, r\u00f3wnoleg\u0142o\u015b\u0107 i ochrona przed nadu\u017cyciami wymagaj\u0105 osobnego wdro\u017cenia.<\/p>\n<\/div>\n<p><script type=\"application\/json\" data-config>{\"kind\": \"aibudget\", \"slug\": \"ai-usage-budget-calculator\", \"title\": \"Kalkulator bud\u017cetu zu\u017cycia AI\", \"locale\": \"pl-PL\", \"fields\": [{\"key\": \"customers\", \"value\": 100, \"label\": \"Aktywni klienci\", \"min\": 0, \"max\": 1000000000.0, \"integer\": true, \"group\": \"common\"}, {\"key\": \"requests\", \"value\": 500, \"label\": \"Pierwotne zapytania na klienta \/ miesi\u0105c\", \"min\": 0, \"max\": 1000000000.0, \"integer\": true, \"group\": \"common\"}, {\"key\": \"inputTokens\", \"value\": 2000, \"label\": \"Tokeny wej\u015bciowe na pr\u00f3b\u0119\", \"min\": 0, \"max\": 1000000000.0, \"integer\": true, \"group\": \"common\"}, {\"key\": \"outputTokens\", \"value\": 500, \"label\": \"Tokeny wyj\u015bciowe na pr\u00f3b\u0119\", \"min\": 0, \"max\": 1000000000.0, \"integer\": true, \"group\": \"common\"}, {\"key\": \"cached\", \"value\": 25, \"label\": \"Rzeczywisty udzia\u0142 odczyt\u00f3w cache w tokenach wej\u015bciowych (%)\", \"min\": 0, \"max\": 100, \"integer\": false, \"group\": \"common\"}, {\"key\": \"inputRate\", \"value\": 3, \"label\": \"Cena miliona zwyk\u0142ych token\u00f3w wej\u015bciowych\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"cacheRate\", \"value\": 0.3, \"label\": \"Cena miliona token\u00f3w odczytu cache\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"outputRate\", \"value\": 15, \"label\": \"Cena miliona token\u00f3w wyj\u015bciowych\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"overhead\", \"value\": 0.001, \"label\": \"Dodatkowy koszt pr\u00f3by\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"retries\", \"value\": 10, \"label\": \"Dodatkowe ponowienia (%)\", \"min\": 0, \"max\": 1000, \"integer\": false, \"group\": \"common\"}, {\"key\": \"budget\", \"value\": 15, \"label\": \"Miesi\u0119czny bud\u017cet koszt\u00f3w AI na klienta\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"reserve\", \"value\": 20, \"label\": \"Rezerwa bezpiecze\u0144stwa bud\u017cetu (%)\", \"min\": 0, \"max\": 100, \"integer\": false, \"group\": \"common\"}, {\"key\": \"spike\", \"value\": 3, \"label\": \"Mno\u017cnik u\u017cycia w scenariuszu szczytowym\", \"min\": 1, \"max\": 100, \"integer\": false, \"group\": \"common\"}], \"labels\": {\"revenue\": \"Przych\u00f3d miesi\u0119czny\", \"cost\": \"Koszt miesi\u0119czny\", \"profit\": \"Zysk miesi\u0119czny\", \"margin\": \"Mar\u017ca pokrycia na klienta \/ sprzeda\u017c\", \"breakEven\": \"Pr\u00f3g rentowno\u015bci: klienci \/ sprzeda\u017ce\", \"minimumPrice\": \"Cena netto pokrywaj\u0105ca koszty\", \"scenario\": \"Wolumen\", \"customers\": \"Klienci\", \"sales\": \"Sprzeda\u017ce\", \"attempts\": \"Pr\u00f3by miesi\u0119cznie\", \"outcomes\": \"Oczekiwane udane wyniki\", \"packs\": \"Pakiety kredyt\u00f3w miesi\u0119cznie\", \"model\": \"Model cenowy\", \"fees\": \"Op\u0142aty p\u0142atnicze\", \"operatingCost\": \"Koszty pr\u00f3b i koszty sta\u0142e\", \"subscription\": \"Abonament\", \"credits\": \"Pakiety kredyt\u00f3w\", \"outcome\": \"Op\u0142ata za wynik\", \"platform\": \"Platforma\", \"billableUnits\": \"Jednostki rozliczeniowe\", \"fixedPlanHosting\": \"Plan i hosting\", \"overage\": \"Koszt nadwy\u017cki\", \"maintenance\": \"Koszt utrzymania\", \"setupMonthly\": \"Wdro\u017cenie miesi\u0119cznie\", \"apiCost\": \"Koszt zewn\u0119trznego API\", \"total\": \"Koszt \u0142\u0105czny miesi\u0119cznie\", \"perRun\": \"Koszt pierwotnego uruchomienia\", \"n8n\": \"n8n\", \"make\": \"Make\", \"code\": \"W\u0142asny kod\", \"initialMRR\": \"Pocz\u0105tkowy MRR\", \"finalMRR\": \"Ko\u0144cowy MRR\", \"annualRunRate\": \"Ko\u0144cowy ARR (MRR \u00d7 12)\", \"finalCustomers\": \"Oczekiwana ko\u0144cowa liczba klient\u00f3w\", \"month\": \"Miesi\u0105c\", \"openingMRR\": \"MRR na pocz\u0105tku miesi\u0105ca\", \"lostMRR\": \"MRR utracony przez rezygnacje\", \"newMRR\": \"Nowy MRR\", \"expansionMRR\": \"Wzrost MRR\", \"contractionMRR\": \"Spadek MRR\", \"closingMRR\": \"MRR na koniec miesi\u0105ca\", \"customersExpected\": \"Oczekiwana liczba klient\u00f3w\", \"nrr\": \"NRR bez nowych klient\u00f3w\", \"grossRevenue\": \"Przych\u00f3d przed zwrotami\", \"refundValue\": \"Zwroty\", \"retainedRevenue\": \"Zachowany przych\u00f3d\", \"leads\": \"Rejestracje \/ pro\u015bby o demo\", \"activated\": \"Aktywowani potencjalni klienci\", \"payers\": \"Oczekiwani nowi p\u0142ac\u0105cy\", \"acquisitionCost\": \"Nak\u0142ad pozyskania\", \"cac\": \"Koszt nowego klienta (CAC)\", \"payback\": \"Zwrot w miesi\u0105cach\", \"requiredVisits\": \"Wizyty wymagane do celu\", \"paidRate\": \"Udzia\u0142 p\u0142atno\u015bci (%)\", \"contribution\": \"Miesi\u0119czna mar\u017ca pokrycia nowych klient\u00f3w\", \"finalCash\": \"Saldo ko\u0144cowe\", \"minimumCash\": \"Najni\u017csze saldo miesi\u0119czne\", \"firstShortfall\": \"Pierwszy miesi\u0105c z ujemnym saldem\", \"none\": \"Brak ujemnego salda miesi\u0119cznego\", \"monthlyCustomers\": \"Klienci miesi\u0119czni\", \"annualCustomers\": \"Klienci roczni\", \"receipts\": \"Wp\u0142ywy\", \"refunds\": \"Zwroty\", \"outflow\": \"Op\u0142aty i wydatki dzia\u0142alno\u015bci\", \"netCash\": \"Przep\u0142yw netto\", \"closingCash\": \"Saldo ko\u0144ca miesi\u0105ca\", \"mrr\": \"MRR aktywnych um\u00f3w\", \"attemptCost\": \"Koszt pr\u00f3by\", \"requestCost\": \"Koszt pierwotnego zapytania\", \"usableBudget\": \"Dost\u0119pny bud\u017cet na klienta\", \"safeRequests\": \"Limit kosztowy: pierwotne zapytania \/ klienta\", \"unbounded\": \"Brak sko\u0144czonego limitu kosztowego\", \"requests\": \"Zapytania na klienta\", \"attemptsTotal\": \"Pr\u00f3by \u0142\u0105cznie\", \"perCustomer\": \"Koszt AI na klienta\", \"totalCost\": \"\u0141\u0105czny koszt AI\", \"remaining\": \"Pozosta\u0142y dost\u0119pny bud\u017cet na klienta\", \"tickets\": \"Pozosta\u0142e zg\u0142oszenia\", \"requiredHours\": \"Wymagane godziny obs\u0142ugi\", \"capacity\": \"Dost\u0119pne godziny obs\u0142ugi\", \"neededStaff\": \"Wymagane osoby\", \"spareHours\": \"Wolne godziny \/ ujemny niedob\u00f3r\", \"teamCost\": \"Miesi\u0119czny koszt zaplanowanego zespo\u0142u\", \"perCustomerSupport\": \"Koszt zespo\u0142u na klienta\", \"avoidRate\": \"Udzia\u0142 samoobs\u0142ugi (%)\", \"requiredStaffCost\": \"Koszt wymaganego zespo\u0142u\"}, \"ui\": {\"calculate\": \"Oblicz\", \"reset\": \"Warto\u015bci przyk\u0142adowe\", \"csv\": \"Pobierz CSV\", \"results\": \"Wynik\", \"table\": \"Scenariusze i obliczenia\", \"unavailable\": \"Brak mo\u017cliwo\u015bci obliczenia\", \"invalid\": \"Nieprawid\u0142owa warto\u015b\u0107. Dozwolony zakres pola\", \"integer\": \"(liczba ca\u0142kowita)\", \"shares\": \"Trzy udzia\u0142y klient\u00f3w musz\u0105 sumowa\u0107 si\u0119 do 100%.\", \"overflow\": \"Dane prowadz\u0105 do zbyt du\u017cych warto\u015bci.\", \"changed\": \"Dane zmienione. Nowe obliczenie aktualizuje wynik.\", \"undefinedHelp\": \"Kalkulator nie egzekwuje limit\u00f3w technicznych. Tokeny i ponowienia s\u0105 warto\u015bciami \u015brednimi. Scenariusz bez koszt\u00f3w nie ma sko\u0144czonego limitu kosztowego; rzeczywiste limity, r\u00f3wnoleg\u0142o\u015b\u0107 i ochrona przed nadu\u017cyciami wymagaj\u0105 osobnego wdro\u017cenia.\", \"title\": \"Narz\u0119dzie\", \"assumptions\": \"Za\u0142o\u017cenia\", \"chart\": \"Zmiana MRR; dok\u0142adne warto\u015bci w tabeli\", \"pricingChart\": \"Zysk miesi\u0119czny wed\u0142ug modelu cenowego; dok\u0142adne warto\u015bci w tabeli\", \"method\": \"Model oblicze\u0144 i za\u0142o\u017cenia\", \"sources\": \"\u0179r\u00f3d\u0142a i definicje\", \"faq1\": \"Czy dane wej\u015bciowe s\u0105 przesy\u0142ane?\", \"faq1a\": \"Kalkulator przetwarza dane lokalnie w przegl\u0105darce. Pliki CSV r\u00f3wnie\u017c powstaj\u0105 lokalnie. Strona nie zapisuje danych scenariusza na serwerze.\", \"faq2\": \"Jakie ograniczenia ma model?\", \"related\": \"Pozosta\u0142e narz\u0119dzia SaaS\", \"all\": \"Wszystkie narz\u0119dzia SaaS\"}}<\/script><\/div>\n<p><script>(function(){\n'use strict';\nconst root=document.currentScript.previousElementSibling;\nconst c=JSON.parse(root.querySelector('[data-config]').textContent);\nif(root.dataset.ready)return;root.dataset.ready='1';\nconst form=root.querySelector('form'), result=root.querySelector('[data-result]'), status=root.querySelector('[data-status]'), download=root.querySelector('[data-csv]');\nlet exportRows=null;\nconst fmt=new Intl.NumberFormat(c.locale,{maximumFractionDigits:2});\nconst countFmt=new Intl.NumberFormat(c.locale,{maximumFractionDigits:2});\nconst preciseFmt=new Intl.NumberFormat(c.locale,{maximumFractionDigits:6});\nconst safeMinimum=value=>Math.ceil(value*100)\/100;\nconst e=(tag,text)=>{const n=document.createElement(tag);if(text!==undefined)n.textContent=text;return n;};\nconst label=k=>c.labels[k]||k;\nfunction display(value,key){\n if(value===null)return c.ui.unavailable;\n if(typeof value==='string')return label(value);\n if(key==='minimumPrice')value=safeMinimum(value);\n if(['attemptCost','requestCost','perRun','margin'].includes(key))return preciseFmt.format(value);\n return (['customers','sales','attempts','outcomes','packs','breakEven','finalCustomers','customersExpected','billableUnits','month'].includes(key)?countFmt:fmt).format(value)+(key==='nrr'?' %':'');\n}\nfunction calculate(){\n status.textContent='';result.replaceChildren();download.disabled=true;exportRows=null;\n root.querySelectorAll('[aria-invalid]').forEach(n=>{n.removeAttribute('aria-invalid');n.removeAttribute('aria-describedby');});\n const v={};let bad=null;\n for(const f of c.fields){\n  const input=form.elements.namedItem(f.key), n=LWSaasMath.number(input.value);\n  if(!Number.isFinite(n)||n<f.min||n>f.max||(f.integer&&!Number.isInteger(n))){\n   input.setAttribute('aria-invalid','true');input.setAttribute('aria-describedby',status.id);\n   if(!bad)bad={input,field:f};\n  }v[f.key]=n;\n }\n if(bad){\n  status.textContent=c.ui.invalid+' '+bad.field.label+': '+bad.field.min+'\u2013'+bad.field.max+(bad.field.integer?' '+c.ui.integer:'');\n  bad.input.focus();return;\n }\n let data;\n try{data=LWSaasMath[c.kind](v);}catch(error){status.textContent=c.ui.shares;return;}\n const values=[...Object.values(data.summary),...data.rows.flat()];\n if(values.some(n=>typeof n==='number'&&!Number.isFinite(n))){status.textContent=c.ui.overflow;return;}\n const h=e('h2',c.ui.results);result.append(h);\n const cards=e('dl');cards.className='saas-metrics';\n for(const [key,value]of Object.entries(data.summary)){\n  const box=e('div');box.append(e('dt',label(key)),e('dd',display(value,key)));cards.append(box);\n }result.append(cards);\n if(c.kind==='mrr'||c.kind==='pricing'){\n  const index=c.kind==='mrr'?6:4;\n  const points=data.rows.map(row=>row[index]);\n  const chart=e('figure');chart.className='saas-chart';\n  const svg=document.createElementNS('http:\/\/www.w3.org\/2000\/svg','svg');\n  svg.setAttribute('viewBox','0 0 600 160');svg.setAttribute('role','img');svg.setAttribute('aria-label',c.ui.chart);\n  const max=Math.max(1,...points.map(Math.abs));\n  if(c.kind==='mrr'){\n   const path=document.createElementNS(svg.namespaceURI,'polyline');\n   path.setAttribute('points',points.map((n,i)=>(20+i*560\/Math.max(1,points.length-1))+','+(140-n\/max*120)).join(' '));\n   path.setAttribute('fill','none');path.setAttribute('stroke','currentColor');path.setAttribute('stroke-width','3');svg.append(path);\n  }else{\n   for(let i=0;i<points.length;i++){\n    const rect=document.createElementNS(svg.namespaceURI,'rect');\n    rect.setAttribute('x',30+i*195);rect.setAttribute('width','140');\n    rect.setAttribute('y',points[i]>=0?80-points[i]\/max*60:80);\n    rect.setAttribute('height',Math.abs(points[i])\/max*60);rect.setAttribute('fill','currentColor');\n    const title=document.createElementNS(svg.namespaceURI,'title');title.textContent=label(data.rows[i][0])+': '+display(points[i],'profit');rect.append(title);svg.append(rect);\n   }\n   const axis=document.createElementNS(svg.namespaceURI,'path');axis.setAttribute('d','M20 80H580');axis.setAttribute('stroke','currentColor');svg.append(axis);\n  }\n  chart.append(svg,e('figcaption',c.ui.chart));result.append(chart);\n }\n const scroll=e('div');scroll.className='saas-table-wrap';scroll.tabIndex=0;\n scroll.setAttribute('role','region');scroll.setAttribute('aria-label',c.ui.table);\n const table=e('table');table.append(e('caption',c.ui.table));\n const head=e('thead'), hr=e('tr');\n data.columns.forEach(k=>{const th=e('th',label(k));th.scope='col';hr.append(th);});head.append(hr);table.append(head);\n const body=e('tbody');\n data.rows.forEach(row=>{const tr=e('tr');row.forEach((value,i)=>{const cell=e(i===0?'th':'td',display(value,data.columns[i]));if(i===0)cell.scope='row';tr.append(cell);});body.append(tr);});\n table.append(body);scroll.append(table);result.append(scroll);\n if(Object.values(data.summary).includes(null)||data.rows.flat().includes(null))result.append(e('p',c.ui.undefinedHelp));\n exportRows=[[c.ui.title,c.title],[c.ui.assumptions]];\n for(const f of c.fields)exportRows.push([f.label,v[f.key]]);\n exportRows.push([],['',c.ui.results]);\n for(const [key,value]of Object.entries(data.summary))exportRows.push([label(key),value===null?c.ui.unavailable:key==='minimumPrice'?safeMinimum(value):value]);\n exportRows.push([],data.columns.map(label),...data.rows.map(row=>row.map(x=>typeof x==='string'?label(x):x===null?c.ui.unavailable:x)));\n download.disabled=false;\n root.dispatchEvent(new CustomEvent('saas-calculated',{detail:data}));\n}\nform.addEventListener('submit',event=>{event.preventDefault();calculate();});\nform.addEventListener('input',()=>{exportRows=null;download.disabled=true;status.textContent=c.ui.changed;result.replaceChildren();});\nroot.querySelector('[data-reset]').addEventListener('click',()=>{form.reset();calculate();});\ndownload.addEventListener('click',()=>{\n if(!exportRows)return;\n const csv='\\uFEFF'+exportRows.map(row=>row.map(x=>'\"'+String(x).replace(\/\"\/g,'\"\"')+'\"').join(';')).join('\\r\\n');\n const url=URL.createObjectURL(new Blob([csv],{type:'text\/csv;charset=utf-8'}));\n const a=e('a');a.href=url;a.download=c.slug+'.csv';root.append(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(url),1000);\n});\nroot._saasCalculate=calculate;\ncalculate();\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por\u00f3wnanie koszt\u00f3w token\u00f3w, ponowie\u0144 i szczytowego u\u017cycia z miesi\u0119cznym bud\u017cetem koszt\u00f3w na klienta.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9284,"menu_order":8,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[93056],"class_list":["post-21451","page","type-page","status-publish","hentry","tag-saas-tools-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kalkulator bud\u017cetu zu\u017cycia AI | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Por\u00f3wnanie koszt\u00f3w token\u00f3w, ponowie\u0144 i szczytowego u\u017cycia z miesi\u0119cznym bud\u017cetem koszt\u00f3w na klienta.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kalkulator bud\u017cetu zu\u017cycia AI | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Por\u00f3wnanie koszt\u00f3w token\u00f3w, ponowie\u0144 i szczytowego u\u017cycia z miesi\u0119cznym bud\u017cetem koszt\u00f3w na klienta.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/ai-usage-budget-calculator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/ai-usage-budget-calculator\\\/\",\"name\":\"Kalkulator bud\u017cetu zu\u017cycia AI | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-05T15:09:09+00:00\",\"description\":\"Por\u00f3wnanie koszt\u00f3w token\u00f3w, ponowie\u0144 i szczytowego u\u017cycia z miesi\u0119cznym bud\u017cetem koszt\u00f3w na klienta.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/ai-usage-budget-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/ai-usage-budget-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/narzedzia\\\/ai-usage-budget-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-3\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kalkulator bud\u017cetu zu\u017cycia AI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kalkulator bud\u017cetu zu\u017cycia AI | Lukas Wojcik","description":"Por\u00f3wnanie koszt\u00f3w token\u00f3w, ponowie\u0144 i szczytowego u\u017cycia z miesi\u0119cznym bud\u017cetem koszt\u00f3w na klienta.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Kalkulator bud\u017cetu zu\u017cycia AI | Lukas Wojcik","og_description":"Por\u00f3wnanie koszt\u00f3w token\u00f3w, ponowie\u0144 i szczytowego u\u017cycia z miesi\u0119cznym bud\u017cetem koszt\u00f3w na klienta.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/","name":"Kalkulator bud\u017cetu zu\u017cycia AI | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-10-05T15:09:09+00:00","description":"Por\u00f3wnanie koszt\u00f3w token\u00f3w, ponowie\u0144 i szczytowego u\u017cycia z miesi\u0119cznym bud\u017cetem koszt\u00f3w na klienta.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/narzedzia\/ai-usage-budget-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-3\/"},{"@type":"ListItem","position":3,"name":"Kalkulator bud\u017cetu zu\u017cycia AI"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/21451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=21451"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/21451\/revisions"}],"predecessor-version":[{"id":21463,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/21451\/revisions\/21463"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9284"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=21451"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=21451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}