[{"data":1,"prerenderedAt":593},["ShallowReactive",2],{"project-offline-first-pos-hr":3,"portfolio-hr-all-all":158,"testimonials-yml":578},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"slug":9,"year":10,"stack":11,"tags":20,"cover":26,"summary":27,"featured":28,"order":29,"body":30,"_type":152,"_id":153,"_source":154,"_file":155,"_stem":156,"_extension":157},"\u002Fportfolio\u002Foffline-first-pos.hr","portfolio",false,"","Offline-first POS za ugostiteljstvo","offline-first-pos","2024 - present",[12,13,14,15,16,17,18,19],"Kotlin","Vue","Node","Express","PostgreSQL","SQLite","Prisma","Stripe",[21,22,23,24,25],"POS","SaaS","Mobile","Hospitality","Offline-first","\u002Fimages\u002Fportfolio\u002Foffline-first-pos\u002Fcover.jpg","Mobile-first POS platforma za male tvrtke u ugostiteljstvu i maloprodaji. Radi offline po zadanom, fiskalno usklađena u više zemalja.",true,1,{"type":31,"children":32,"toc":146},"root",[33,42,48,53,58,64,75,85,95,100,110,120,125,131,136,141],{"type":34,"tag":35,"props":36,"children":38},"element","h2",{"id":37},"problem",[39],{"type":40,"value":41},"text","Problem",{"type":34,"tag":43,"props":44,"children":45},"p",{},[46],{"type":40,"value":47},"Većina POS sustava koji se prodaju malim tvrtkama dijeli iste mane. Zahtijevaju web dashboard za upravljanje svime što je važno, što podrazumijeva laptop u uredu, a ne telefon u džepu. Vežu operatera za vlastiti payment processor proizvođača. Naplaćuju premium cijenu i tu cijenu vežu uz duge ugovore. Isporučuju se s pokvarenim ili manjkavim funkcijama (inventar koji se ne slaže, izvještaji koji se ne zbrajaju). I gotovo univerzalno, traže internetsku vezu da bi obavili svoj pravi posao: primali plaćanja.",{"type":34,"tag":43,"props":49,"children":50},{},[51],{"type":40,"value":52},"Za malog operatera, kafić, bar, brijačnicu, lokalnu trgovinu, to su stvarni troškovi. Prekinuti wifi postaje propala prodaja. Promjena cijene proizvoda traži povratak kući za laptop. Vezanost za payment processora postaje trajan namet na svakoj transakciji.",{"type":34,"tag":43,"props":54,"children":55},{},[56],{"type":40,"value":57},"Ovaj proizvod izgrađen je da to popravi, za male tvrtke koje si ne mogu priuštiti trenje na kasi.",{"type":34,"tag":35,"props":59,"children":61},{"id":60},"pristup",[62],{"type":40,"value":63},"Pristup",{"type":34,"tag":43,"props":65,"children":66},{},[67,69],{"type":40,"value":68},"Proizvod je izgrađen oko tri svjesna izbora: ",{"type":34,"tag":70,"props":71,"children":72},"strong",{},[73],{"type":40,"value":74},"mobile-first upravljanje, offline-first rad i payment processor po vašem izboru.",{"type":34,"tag":43,"props":76,"children":77},{},[78,83],{"type":34,"tag":70,"props":79,"children":80},{},[81],{"type":40,"value":82},"Native Android za kasu i upravljanje.",{"type":40,"value":84}," Kasa i upravljački dashboard žive u istoj native Kotlin aplikaciji. Operateri mogu pokrenuti kasu, voditi inventar, mijenjati cijene, gledati analitiku i uvoditi osoblje, sve s telefona, na podu, između gostiju. Web dashboard postoji kao opcionalan dodatak za rad za stolom, ne kao ovisnost.",{"type":34,"tag":43,"props":86,"children":87},{},[88,93],{"type":34,"tag":70,"props":89,"children":90},{},[91],{"type":40,"value":92},"Offline-first po dizajnu.",{"type":40,"value":94}," Kasa radi bez internetske veze. Postavljanje zahtijeva vezu: admin se prijavi, dodijeli uređaj kasi i uređaj povuče sve što treba, proizvode, cijene, poreze, stolove, osoblje, fiskalnu konfiguraciju. Nakon toga, uređaj radi offline neograničeno. Računi, prodaje, kretanja zaliha, sve to lokalno ostaje u SQLiteu (preko Rooma) i sinkronizira se sa serverom čim se veza vrati.",{"type":34,"tag":43,"props":96,"children":97},{},[98],{"type":40,"value":99},"Sync sloj je neugledna inženjerska jezgra proizvoda. Rješava konflikte između uređaja, fiskalna pravila koja dopuštaju odgođenu fiskalizaciju (Hrvatska zahtijeva da se svaki račun fiskalizira \"što je prije moguće\", što je netrivijalan uvjet), i granicu između online-kad-je-moguće i offline-kad-je-potrebno bez gubitka podataka ili dvostrukih zapisa.",{"type":34,"tag":43,"props":101,"children":102},{},[103,108],{"type":34,"tag":70,"props":104,"children":105},{},[106],{"type":40,"value":107},"Payment processor po vašem izboru.",{"type":40,"value":109}," Većina POS vendora prisiljava operatera na vlastiti processor kartica. Ovaj integrira Stripe, Square, Teyu i SumUp iz kutije, s više njih u planu. Operateri zadržavaju postojeće odnose s bankama.",{"type":34,"tag":43,"props":111,"children":112},{},[113,118],{"type":34,"tag":70,"props":114,"children":115},{},[116],{"type":40,"value":117},"Multi-location i multi-country, po arhitekturi.",{"type":40,"value":119}," Poslovnice, skladišta, kase i inventar modeliraju stvarnu hijerarhiju. Jedna tvrtka može voditi više poslovnica, svaku s vlastitim skladištem i kasama. Inventar se prati na razini skladišta. Fiskalna usklađenost je pluggable po zemlji, trenutno podržava hrvatski i britanski fiskalni režim, a nove regije dodaju se kao fiskalni moduli, ne kao re-arhitektura.",{"type":34,"tag":43,"props":121,"children":122},{},[123],{"type":40,"value":124},"Hrvatska fiskalizacija izgrađena je prva namjerno. Hrvatski fiskalni zakon je među najstrožima poznatima: svaki račun mora biti kriptografski potpisan, prenesen poreznoj upravi i usuglašen, uključujući i offline-odgođene račune. Kad je Hrvatska bila riješena, dodavanje UK-a (jednostavnijeg režima) išlo je glatko. Arhitektura preokreće uobičajenu krivulju fiskalne boli.",{"type":34,"tag":35,"props":126,"children":128},{"id":127},"rezultat",[129],{"type":40,"value":130},"Rezultat",{"type":34,"tag":43,"props":132,"children":133},{},[134],{"type":40,"value":135},"Platforma je u završnoj QA fazi s pet pilot operatera u ugostiteljstvu i maloprodaji. Podržava dvije zemlje (Hrvatsku, UK), s multi-country arhitekturom dokazanom na težoj strani prvo. Aplikacija je u pilotu tri mjeseca bez ijednog pada. Onboarding je dvostupanjski proces unutar aplikacije, bez prodajnog poziva.",{"type":34,"tag":43,"props":137,"children":138},{},[139],{"type":40,"value":140},"Prvo prodajno partnerstvo je u tijeku, s partnerom koji planira voditi vlastiti lokal na istoj platformi. To je signal vjerodostojnosti koji bismo uzeli prije bilo koje marketinške stranice.",{"type":34,"tag":43,"props":142,"children":143},{},[144],{"type":40,"value":145},"Sljedeće: javno lansiranje, proširenje fiskalnog pokrića na sljedeće EU regije i uvođenje planiranih payment processora.",{"title":7,"searchDepth":147,"depth":147,"links":148},2,[149,150,151],{"id":37,"depth":147,"text":41},{"id":60,"depth":147,"text":63},{"id":127,"depth":147,"text":130},"markdown","content:portfolio:offline-first-pos.hr.md","content","portfolio\u002Foffline-first-pos.hr.md","portfolio\u002Foffline-first-pos.hr","md",[159,253,394],{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"slug":9,"year":10,"stack":160,"tags":161,"cover":26,"summary":27,"featured":28,"order":29,"body":162,"_type":152,"_id":153,"_source":154,"_file":155,"_stem":156,"_extension":157},[12,13,14,15,16,17,18,19],[21,22,23,24,25],{"type":31,"children":163,"toc":248},[164,168,172,176,180,184,192,200,208,212,220,228,232,236,240,244],{"type":34,"tag":35,"props":165,"children":166},{"id":37},[167],{"type":40,"value":41},{"type":34,"tag":43,"props":169,"children":170},{},[171],{"type":40,"value":47},{"type":34,"tag":43,"props":173,"children":174},{},[175],{"type":40,"value":52},{"type":34,"tag":43,"props":177,"children":178},{},[179],{"type":40,"value":57},{"type":34,"tag":35,"props":181,"children":182},{"id":60},[183],{"type":40,"value":63},{"type":34,"tag":43,"props":185,"children":186},{},[187,188],{"type":40,"value":68},{"type":34,"tag":70,"props":189,"children":190},{},[191],{"type":40,"value":74},{"type":34,"tag":43,"props":193,"children":194},{},[195,199],{"type":34,"tag":70,"props":196,"children":197},{},[198],{"type":40,"value":82},{"type":40,"value":84},{"type":34,"tag":43,"props":201,"children":202},{},[203,207],{"type":34,"tag":70,"props":204,"children":205},{},[206],{"type":40,"value":92},{"type":40,"value":94},{"type":34,"tag":43,"props":209,"children":210},{},[211],{"type":40,"value":99},{"type":34,"tag":43,"props":213,"children":214},{},[215,219],{"type":34,"tag":70,"props":216,"children":217},{},[218],{"type":40,"value":107},{"type":40,"value":109},{"type":34,"tag":43,"props":221,"children":222},{},[223,227],{"type":34,"tag":70,"props":224,"children":225},{},[226],{"type":40,"value":117},{"type":40,"value":119},{"type":34,"tag":43,"props":229,"children":230},{},[231],{"type":40,"value":124},{"type":34,"tag":35,"props":233,"children":234},{"id":127},[235],{"type":40,"value":130},{"type":34,"tag":43,"props":237,"children":238},{},[239],{"type":40,"value":135},{"type":34,"tag":43,"props":241,"children":242},{},[243],{"type":40,"value":140},{"type":34,"tag":43,"props":245,"children":246},{},[247],{"type":40,"value":145},{"title":7,"searchDepth":147,"depth":147,"links":249},[250,251,252],{"id":37,"depth":147,"text":41},{"id":60,"depth":147,"text":63},{"id":127,"depth":147,"text":130},{"_path":254,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":255,"description":7,"slug":256,"year":257,"stack":258,"tags":266,"cover":271,"summary":272,"featured":28,"order":147,"body":273,"_type":152,"_id":391,"_source":154,"_file":392,"_stem":393,"_extension":157},"\u002Fportfolio\u002Fvoice-ai-enterprise-telephony.hr","Voice-AI agent za enterprise telefoniju","voice-ai-enterprise-telephony","2026 - present",[259,260,261,262,263,13,16,264,265,18],"TypeScript","Fastify","WebSockets","Telnyx","Azure","pgvector","RAG",[267,268,22,269,270],"AI","Voice","Multi-tenant","Enterprise","\u002Fimages\u002Fportfolio\u002Fvoice-ai-enterprise-telephony\u002Fcover.jpg","Multi-tenant voice AI platforma za europsku softversku tvrtku koja opslužuje 20.000+ obrtničkih poduzeća. Obrađuje dolazne pozive od početka do kraja, na infrastrukturi usklađenoj s GDPR-om.",{"type":31,"children":274,"toc":386},[275,279,284,289,294,299,303,308,318,328,347,357,367,371,376,381],{"type":34,"tag":35,"props":276,"children":277},{"id":37},[278],{"type":40,"value":41},{"type":34,"tag":43,"props":280,"children":281},{},[282],{"type":40,"value":283},"Klijent je europska softverska tvrtka koja međunarodno opslužuje 20.000+ obrtničkih poduzeća, ličilaca, vodoinstalatera, električara, dekoratera. Tip obrta čiji vlasnici uglavnom sami obavljaju posao.",{"type":34,"tag":43,"props":285,"children":286},{},[287],{"type":40,"value":288},"Tu je ograničenje: svaki poziv na koji odgovore je vrijeme u kojem ne rade. Svaki propušteni poziv je ponuda koja ide konkurenciji. Generički call centri i IVR izbornici to nisu riješili: pozivatelji u obrtu postavljaju specifična pitanja (\"možete li ugraditi novi bojler do petka?\"), očekuju pravi razgovor i neće prolaziti kroz izbornike u stilu telefonskog stabla.",{"type":34,"tag":43,"props":290,"children":291},{},[292],{"type":40,"value":293},"Klijent je htio AI agenta koji može odgovarati na te pozive 24\u002F7, voditi prirodan razgovor, prikupljati zahtjeve za ponudom i povratnim pozivom, i ostati strogo na temi, preko tisuća neovisnih obrtničkih poduzeća, svako sa svojim uslugama, cijenama i bazom znanja.",{"type":34,"tag":43,"props":295,"children":296},{},[297],{"type":40,"value":298},"Brief je bio multi-tenant po definiciji. Izvedba je morala biti GDPR-čista, enterprise razine i upotrebljiva za netehničke krajnje korisnike.",{"type":34,"tag":35,"props":300,"children":301},{"id":60},[302],{"type":40,"value":63},{"type":34,"tag":43,"props":304,"children":305},{},[306],{"type":40,"value":307},"Specificirali smo cijelu arhitekturu i predložili izgradnju u četiri faze, gdje svaka faza nadograđuje prethodnu: baza podataka, modeli i apstrakcije definirani u Stage 1 tako da Stage 2-4 ne zahtijevaju re-arhitekturu. Prijedlog je prihvaćen u roku od 24 sata od poziva za predstavljanje.",{"type":34,"tag":43,"props":309,"children":310},{},[311,316],{"type":34,"tag":70,"props":312,"children":313},{},[314],{"type":40,"value":315},"GDPR kao pokretač arhitekture.",{"type":40,"value":317}," Svaka vanjska ovisnost procijenjena je prema principima rezidentnosti podataka i minimalne treće strane. Telnyx za telefoniju (developer-friendly, EU-region routing). Azure OpenAI za STT, LLM i TTS, uz korištenje Data Zone Standard kako bi svi modeli inferirali unutar EU, čak i kad Azure preraspoređuje load preko regija. Mailgunova EU regija za transakcijski email s sažecima poziva. Podaci ne napuštaju EU ni na jednom sloju stacka.",{"type":34,"tag":43,"props":319,"children":320},{},[321,326],{"type":34,"tag":70,"props":322,"children":323},{},[324],{"type":40,"value":325},"Real-time voice pipeline.",{"type":40,"value":327}," Fastify backend preko WebSocketsa obrađuje uživo audio stream: audio pozivatelja se transkribira, šalje LLM-u s relevantnim kontekstom tenanta, a odgovor se streama natrag kroz TTS, sve unutar latencijskih budgeta za prirodan razgovor. Voice activity detection (VAD), barge-in obrada, sprječavanje dvostrukog govora i detekcija granice \"razmišlja li pozivatelj ili je završio s govorom?\", sve to kalibrirano je empirijski, što je posao koji odlučuje hoće li agent zvučati prirodno ili robotski.",{"type":34,"tag":43,"props":329,"children":330},{},[331,336,338,345],{"type":34,"tag":70,"props":332,"children":333},{},[334],{"type":40,"value":335},"Tenant-scoped RAG nad bazom znanja.",{"type":40,"value":337}," Svaki tenant učitava vlastito znanje: PDF-ove, URL-ove, opise usluga. Sadržaj se chunka i embedda u indeks na ",{"type":34,"tag":339,"props":340,"children":342},"code",{"className":341},[],[343],{"type":40,"value":344},"pgvectoru",{"type":40,"value":346},". Pri pozivu, pitanje pozivatelja se uspoređuje s chunkovima tog tenanta preko cosine similarity, i samo najrelevantniji kontekst šalje se LLM-u. To čuva promptove malima (trošak), odgovore na temi (kvaliteta), a inpute strogo unutar tenanta (bez curenja između tenanta). Similarity threshold podešen je specifično za granicu trošak\u002Fkvaliteta.",{"type":34,"tag":43,"props":348,"children":349},{},[350,355],{"type":34,"tag":70,"props":351,"children":352},{},[353],{"type":40,"value":354},"Kompletan multi-tenant SaaS za upravljanje.",{"type":40,"value":356}," Dva dashboarda: super-admin pogled za upravljanje brendovima i tenantima klijenta, i tenant pogled za sama obrtnička poduzeća. RBAC s 4 uloge (super admin, brand admin, tenant admin, tenant user). Po-tenant konfiguracija AI pozdrava, GDPR obavijesti i CTA teksta, tri stvari koje agent kaže odmah po preuzimanju poziva. Radno vrijeme konfigurabilno po tenantu i prosljeđeno AI-u kao kontekst. Cjenovni model s uključenim minutama plus naplatom po minuti preko, izračunato i vidljivo po tenantu. Logovi poziva s punim transkriptima, AI-generiranim sažecima, klasifikacijama (zahtjev za ponudom, povratni poziv, općenito pitanje) i konfigurabilnim email obavijestima.",{"type":34,"tag":43,"props":358,"children":359},{},[360,365],{"type":34,"tag":70,"props":361,"children":362},{},[363],{"type":40,"value":364},"Izgrađeno za ono što dolazi.",{"type":40,"value":366}," Arhitektura je adapter-style kroz cijeli sustav: zamijeniš jedan LLM drugim, jedan STT\u002FTTS provajdera drugim, ubaciš bilo koji broj ERP-ova. Sustav je već pripremljen za ERP integraciju u kasnijoj fazi, što omogućuje pozive za provjeru statusa (\"kada se radi moj posao?\") i automatsko kreiranje radnih naloga. Interaktivne skripte automatiziraju Azure provisioning od kraja do kraja.",{"type":34,"tag":35,"props":368,"children":369},{"id":127},[370],{"type":40,"value":130},{"type":34,"tag":43,"props":372,"children":373},{},[374],{"type":40,"value":375},"Stage 1 izašao je u produkciju s AI agentom koji obrađuje stvarne dolazne pozive na dva jezika od početka. Do prvog demoa, klijent je imao 20 beta tenanta spremnih. Nakon završetka Stagea 1, klijent je odmah ubrzao Stage 2, mjesecima ispred originalnog rasporeda.",{"type":34,"tag":43,"props":377,"children":378},{},[379],{"type":40,"value":380},"Agent odgovara na pozive 24\u002F7, ostaje strogo na temi svakog tenantskog poslovanja, ne halucinira preko baze znanja tenanta, prikuplja zahtjeve za ponudom i povratnim pozivom, i prosljeđuje sažetke poziva pravim ljudima.",{"type":34,"tag":43,"props":382,"children":383},{},[384],{"type":40,"value":385},"Sljedeće faze: proširenje na dodatne zemlje, ERP integracija za pozive o statusu posla u stvarnom vremenu, i prošireno višejezično pokrivanje.",{"title":7,"searchDepth":147,"depth":147,"links":387},[388,389,390],{"id":37,"depth":147,"text":41},{"id":60,"depth":147,"text":63},{"id":127,"depth":147,"text":130},"content:portfolio:voice-ai-enterprise-telephony.hr.md","portfolio\u002Fvoice-ai-enterprise-telephony.hr.md","portfolio\u002Fvoice-ai-enterprise-telephony.hr",{"_path":395,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":396,"description":7,"slug":397,"year":398,"stack":399,"tags":406,"cover":410,"summary":411,"featured":28,"order":412,"body":413,"_type":152,"_id":575,"_source":154,"_file":576,"_stem":577,"_extension":157},"\u002Fportfolio\u002Fsentinel-trading-strategy-platform.hr","Sentinel - platforma za trading strategije","sentinel-trading-strategy-platform","2025 - present",[400,401,16,402,403,13,404,405],"Python","FastAPI","TimescaleDB","SQLAlchemy","Claude","Alpaca API",[407,408,22,267,409],"Quant","Trading","Time-series","\u002Fimages\u002Fportfolio\u002Fsentinel-trading-strategy-platform\u002Fcover.jpg","Platforma za sistematske tradere koji žele prototipirati, backtestati i izvršavati strategije uživo, uz multi-source composite scoring i isti code path od istraživanja do produkcije.",3,{"type":31,"children":414,"toc":570},[415,419,424,429,434,438,443,453,487,513,533,546,550,555,560,565],{"type":34,"tag":35,"props":416,"children":417},{"id":37},[418],{"type":40,"value":41},{"type":34,"tag":43,"props":420,"children":421},{},[422],{"type":40,"value":423},"Većina retail trading alata prisiljava na izbor. Koristiš backtesting framework: strategija živi u jednom mentalnom modelu, dizajniranom za reprodukciju povijesnih barova. Koristiš platformu za izvršavanje uživo: prepisuješ strategiju u drugom mentalnom modelu, s drugim pretpostavkama o naknadama, drugim tipovima narudžbi, drugim state machineima. Svaki rewrite je prilika da se ponašanje uživo tiho razlikuje od onoga što je backtest obećao.",{"type":34,"tag":43,"props":425,"children":426},{},[427],{"type":40,"value":428},"Platforme koje pokušavaju ujediniti oba (QuantConnect, MetaTrader, veći institucionalni alati) su ili preskupe, ili vezane uz određenog brokera, ili izgrađene oko strogih DSL-ova za strategije koji ne mogu izraziti multi-source agregaciju signala koja stvarnim sistematskim strategijama treba.",{"type":34,"tag":43,"props":430,"children":431},{},[432],{"type":40,"value":433},"Sentinel je izgrađen da ukloni rewrite. Od \"ideje\" do \"validirano protiv četiri godine povijesnih podataka\" trebalo bi proći jednu CLI komandu. Od validiranog do trading-a uživo na paper računu trebalo bi proći jedan config flip. A code path između ta dva stanja trebao bi biti isti code path.",{"type":34,"tag":35,"props":435,"children":436},{"id":60},[437],{"type":40,"value":63},{"type":34,"tag":43,"props":439,"children":440},{},[441],{"type":40,"value":442},"Sentinel je Python + FastAPI backend s Vue 3 dashboardom, na TimescaleDB. Tri arhitekturne odluke nose platformu.",{"type":34,"tag":43,"props":444,"children":445},{},[446,451],{"type":34,"tag":70,"props":447,"children":448},{},[449],{"type":40,"value":450},"Jedan execution engine, dva načina rada.",{"type":40,"value":452}," Zajednički execution modul modelira naknade, slippage, djelomična izvršavanja, bracket narudžbe (parent + take-profit + stop-loss kao jedan atomski submission) i izlazne razine. I live runner i backtest replay engine pozivaju isti modul. Jedina razlika između načina rada je izvor istine, Alpacin API za live, OHLCV bar data za backtest. Isti model naknada, isto cijepanje lotova, ista exit logika. Bez drifta.",{"type":34,"tag":43,"props":454,"children":455},{},[456,461,463,469,471,477,479,485],{"type":34,"tag":70,"props":457,"children":458},{},[459],{"type":40,"value":460},"Jedan signal store, dva načina pristupa.",{"type":40,"value":462}," Svaki signal, iz svakog izvora, za svaki asset, u svakom trenutku, živi u jednom TimescaleDB hypertableu indeksiranom po ",{"type":34,"tag":339,"props":464,"children":466},{"className":465},[],[467],{"type":40,"value":468},"(asset, source_id, ts)",{"type":40,"value":470},". Backtest ga upituje s ",{"type":34,"tag":339,"props":472,"children":474},{"className":473},[],[475],{"type":40,"value":476},"ts \u003C= X",{"type":40,"value":478}," kako bi se osigurala point-in-time točnost: nema curenja budućih podataka u povijesne odluke. Live ga upituje s ",{"type":34,"tag":339,"props":480,"children":482},{"className":481},[],[483],{"type":40,"value":484},"latest",{"type":40,"value":486},". Jedan podatkovni model služi oba načina rada; točnost backtesta i odlučivanje uživo dijele isti izvor istine.",{"type":34,"tag":43,"props":488,"children":489},{},[490,495,497,503,505,511],{"type":34,"tag":70,"props":491,"children":492},{},[493],{"type":40,"value":494},"Pure-function scoreri, kompozabilni signali.",{"type":40,"value":496}," Svaki izvor signala (RSI, MACD, fear-greed, Claudeov kalibrirani sentiment vijesti, itd.) je čista funkcija: za dani kontekst vrati tuple ",{"type":34,"tag":339,"props":498,"children":500},{"className":499},[],[501],{"type":40,"value":502},"(score u [-100, +100], confidence)",{"type":40,"value":504},". Composite je ",{"type":34,"tag":339,"props":506,"children":508},{"className":507},[],[509],{"type":40,"value":510},"Σ (source_score × weight × confidence\u002F100)",{"type":40,"value":512},", normaliziran prema pragovima po assetu. Dodavanje novog izvora je jedna scorer funkcija plus jedan config zapis, i odmah je dostupan i u backtestu i u live načinu rada.",{"type":34,"tag":43,"props":514,"children":515},{},[516,518,523,525,531],{"type":40,"value":517},"Claude integracija zaslužuje posebnu napomenu. Većina LLM-baziranog rada na sentimentu je klasifikacija (\"bullish\u002Fbearish\u002Fneutral\"): grubo, teško za vaganje, teško za debug. Sentinel koristi Claudea za ",{"type":34,"tag":70,"props":519,"children":520},{},[521],{"type":40,"value":522},"kalibrirano numeričko bodovanje",{"type":40,"value":524},": za dani batch novinskih naslova za asset, vrati strukturirani ",{"type":34,"tag":339,"props":526,"children":528},{"className":527},[],[529],{"type":40,"value":530},"{sentiment: -100..+100, confidence: 0..100, reasoning: string}",{"type":40,"value":532},". Reasoning string se sprema uz svaki score radi auditability, kad strategija reagira na sentiment vijesti, kasnije možeš pročitati zašto je model dao taj score.",{"type":34,"tag":43,"props":534,"children":535},{},[536,538,544],{"type":40,"value":537},"Operativno: GitHub Actions deploy na Hetzner za ~90 sekundi preko idempotentne deploy skripte. Postgres se dnevno backup-a na S3. HetrixTools monitoring sa Slack obavijestima. Tablica ",{"type":34,"tag":339,"props":539,"children":541},{"className":540},[],[542],{"type":40,"value":543},"source_health",{"type":40,"value":545}," prati vrijeme zadnjeg uspjeha i rolling error rate svake vanjske integracije, prikazano u dashboardu tako da se prekid vijesti ili RPC outage vidi odmah.",{"type":34,"tag":35,"props":547,"children":548},{"id":127},[549],{"type":40,"value":130},{"type":34,"tag":43,"props":551,"children":552},{},[553],{"type":40,"value":554},"Sentinel je u aktivnom razvoju i radi uživo u paper-trading modu protiv Alpaca API-ja. Prva strategija validirana kroz walk-forward analizu, Opening Range Breakout strategija, izvršava stvarne bracket narudžbe protiv trenutnih tržišnih podataka. Composite multi-source scoring radi preko četiri crypto i četiri equity tickera, s 8 vaganih izvora po assetu.",{"type":34,"tag":43,"props":556,"children":557},{},[558],{"type":40,"value":559},"Tri strategije su izgrađene i evaluirane do sad: ORB strategija (validirana, live), Mean Reversion (odbijena walk-forwardom i odložena) i Composite-stocks varijanta (validirana samo s MACD-om i odložena dok se ne podesi mix izvora). Odbijeni rezultati ostaju u inženjerskoj evidenciji, negativni rezultati su jednako informativni kao pozitivni za iteraciju strategije.",{"type":34,"tag":43,"props":561,"children":562},{},[563],{"type":40,"value":564},"Walk-forward validacija preko četverogodišnjeg prozora s dvanaest splitova i pune grid pretrage pragova traje otprilike pet minuta. Otprilike 38.000 redova signala generira se svakih 30 dana. Devet vanjskih integracija prati se uživo (FRED, Polygon, Etherscan, Helius RPC, news feedovi, Reddit, Alpaca, Solscan, LunarCrush), s prikazom zdravlja u dashboardu.",{"type":34,"tag":43,"props":566,"children":567},{},[568],{"type":40,"value":569},"Sljedeće: dodatne broker integracije, prošireni assetski razredi i program ranog pristupa za sistematske tradere.",{"title":7,"searchDepth":147,"depth":147,"links":571},[572,573,574],{"id":37,"depth":147,"text":41},{"id":60,"depth":147,"text":63},{"id":127,"depth":147,"text":130},"content:portfolio:sentinel-trading-strategy-platform.hr.md","portfolio\u002Fsentinel-trading-strategy-platform.hr.md","portfolio\u002Fsentinel-trading-strategy-platform.hr",[579,586],{"id":580,"name":581,"role":582,"company":583,"quote":584,"projectSlug":585,"featured":6},"jordan-pace-northwind","Jordan Pace","CTO","Northwind Logistics","They shipped in six weeks what our previous agency couldn't in six months. Clear-eyed, senior, no fluff.","northwind-routing",{"id":587,"name":588,"role":589,"company":590,"quote":591,"projectSlug":592,"featured":6},"mira-sato-ledgerline","Mira Sato","Head of Product","Ledgerline","Spectral Byte rebuilt our onboarding and conversion jumped almost overnight. They understood the business, not just the code.","ledgerline-onboarding",1780863208918]