[{"data":1,"prerenderedAt":785},["ShallowReactive",2],{"portfolio-en":3},[4,123,230,327,424,522,645],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"summary":11,"slug":12,"code":13,"label":14,"tags":15,"challenge":19,"approach":20,"outcome":21,"seo":22,"body":25,"_type":116,"_id":117,"_source":118,"_file":119,"_stem":120,"_extension":121,"sitemap":122},"\u002Fen\u002Fportfolio\u002Fai-crm","portfolio",false,"","AI inside an existing CRM","This is a method note: it describes how we approach this kind of problem, not a write-up of a named client.","How we approach adding predictions to a CRM a team already uses — without simply automating the existing mess.","ai-crm","M-01","AI · CRM",[16,17,18],"Artificial intelligence","CRM","Data","A team has years of history in its CRM but no way to know which relationship needs attention right now. \"Let's add AI\" often means a model bolted onto messy data — which tends to accelerate the mess, not fix it.","We start from the decision the team actually makes each week, not from the model. We get the data honest first, pick the smallest useful signal, keep a human in the loop, and measure against what the team would have done anyway.","Done right, the suggestions are explainable, so the team trusts and uses them. The model earns its place instead of staying a demo. Wrong assumptions about the data surface early and cheaply, not in production.",{"title":23,"description":24},"AI inside an existing CRM — method note | Ag3","How Ag3 approaches adding predictions to an existing CRM: honest data first, the smallest useful signal, a human in the loop.",{"type":26,"children":27,"toc":110},"root",[28,35,42,47,53,99,105],{"type":29,"tag":30,"props":31,"children":32},"element","p",{},[33],{"type":34,"value":10},"text",{"type":29,"tag":36,"props":37,"children":39},"h2",{"id":38},"where-it-really-starts",[40],{"type":34,"value":41},"Where it really starts",{"type":29,"tag":30,"props":43,"children":44},{},[45],{"type":34,"value":46},"A request to \"add AI to the CRM\" is almost always a request for something more grounded: knowing which account is worth a call today. The model is the last step, not the first. Before it sits a question the team already solves from memory every week.",{"type":29,"tag":36,"props":48,"children":50},{"id":49},"how-we-approach-it",[51],{"type":34,"value":52},"How we approach it",{"type":29,"tag":54,"props":55,"children":56},"ul",{},[57,69,79,89],{"type":29,"tag":58,"props":59,"children":60},"li",{},[61,67],{"type":29,"tag":62,"props":63,"children":64},"strong",{},[65],{"type":34,"value":66},"The decision first.",{"type":34,"value":68}," We map who decides, when, and on what basis — then ask what could actually help them.",{"type":29,"tag":58,"props":70,"children":71},{},[72,77],{"type":29,"tag":62,"props":73,"children":74},{},[75],{"type":34,"value":76},"Data that tells the truth.",{"type":34,"value":78}," Duplicate records, empty fields and manual shortcuts show up immediately, and we clean them before training anything.",{"type":29,"tag":58,"props":80,"children":81},{},[82,87],{"type":29,"tag":62,"props":83,"children":84},{},[85],{"type":34,"value":86},"The smallest useful signal.",{"type":34,"value":88}," A simple, explainable model the team trusts beats a black box that is often right and never says why.",{"type":29,"tag":58,"props":90,"children":91},{},[92,97],{"type":29,"tag":62,"props":93,"children":94},{},[95],{"type":34,"value":96},"A human stays in the loop.",{"type":34,"value":98}," The system suggests, a person decides. Every suggestion carries its reason.",{"type":29,"tag":36,"props":100,"children":102},{"id":101},"what-changes",[103],{"type":34,"value":104},"What changes",{"type":29,"tag":30,"props":106,"children":107},{},[108],{"type":34,"value":109},"Suggestions become part of the weekly routine rather than one more app nobody opens. The team sees why something is recommended and trusts it. Where the data isn't good enough, that surfaces early and cheaply — not after an expensive rollout.",{"title":8,"searchDepth":111,"depth":111,"links":112},2,[113,114,115],{"id":38,"depth":111,"text":41},{"id":49,"depth":111,"text":52},{"id":101,"depth":111,"text":104},"markdown","content:en:portfolio:ai-crm.md","content","en\u002Fportfolio\u002Fai-crm.md","en\u002Fportfolio\u002Fai-crm","md",{"loc":5},{"_path":124,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":125,"description":10,"summary":126,"slug":127,"code":128,"label":129,"tags":130,"challenge":134,"approach":135,"outcome":136,"seo":137,"body":140,"_type":116,"_id":226,"_source":118,"_file":227,"_stem":228,"_extension":121,"sitemap":229},"\u002Fen\u002Fportfolio\u002Fcyber-audit","Security review and hardening","How we approach it when a company isn't sure where it's exposed — and wants real safety, not just a report.","cyber-audit","M-02","Security",[131,132,133],"Cybersecurity","Review","Compliance","A company handles sensitive data but isn't sure where it's exposed. A checklist audit produces a PDF, not safety.","We map what is actually reachable from the outside, threat-model from the attacker's point of view, fix the few things that matter most, and leave the team able to keep it safe on its own.","Done right, there are fewer ways in, the team understands its own attack surface, and the fixes hold up after we're gone.",{"title":138,"description":139},"Security review and hardening — method note | Ag3","How Ag3 approaches a security review: what's reachable, threat modelling, fixes that hold — instead of a PDF report.",{"type":26,"children":141,"toc":221},[142,146,152,165,169,212,216],{"type":29,"tag":30,"props":143,"children":144},{},[145],{"type":34,"value":10},{"type":29,"tag":36,"props":147,"children":149},{"id":148},"a-report-is-not-safety",[150],{"type":34,"value":151},"A report is not safety",{"type":29,"tag":30,"props":153,"children":154},{},[155,157,163],{"type":34,"value":156},"A checklist tells you what ",{"type":29,"tag":158,"props":159,"children":160},"em",{},[161],{"type":34,"value":162},"should",{"type":34,"value":164}," be in place. It doesn't tell you the path someone would actually take to your data. So we start with a map, not a list.",{"type":29,"tag":36,"props":166,"children":167},{"id":49},[168],{"type":34,"value":52},{"type":29,"tag":54,"props":170,"children":171},{},[172,182,192,202],{"type":29,"tag":58,"props":173,"children":174},{},[175,180],{"type":29,"tag":62,"props":176,"children":177},{},[178],{"type":34,"value":179},"What's reachable.",{"type":34,"value":181}," We inventory what is genuinely visible and reachable from the internet — often more than the team assumes.",{"type":29,"tag":58,"props":183,"children":184},{},[185,190],{"type":29,"tag":62,"props":186,"children":187},{},[188],{"type":34,"value":189},"From the attacker's side.",{"type":34,"value":191}," We threat-model a few plausible attacks end to end, instead of scoring individual controls in isolation.",{"type":29,"tag":58,"props":193,"children":194},{},[195,200],{"type":29,"tag":62,"props":196,"children":197},{},[198],{"type":34,"value":199},"The few things first.",{"type":34,"value":201}," We fix the paths that matter most before working through the long tail of minor findings.",{"type":29,"tag":58,"props":203,"children":204},{},[205,210],{"type":29,"tag":62,"props":206,"children":207},{},[208],{"type":34,"value":209},"Built to hold.",{"type":34,"value":211}," We equip the team to spot new risk itself — security is a process, not a one-off event.",{"type":29,"tag":36,"props":213,"children":214},{"id":101},[215],{"type":34,"value":104},{"type":29,"tag":30,"props":217,"children":218},{},[219],{"type":34,"value":220},"The attack surface shrinks to what's genuinely needed. The team sees its system the way an attacker does for the first time, and knows what to protect and why. When the system next changes, they can judge whether that change is safe.",{"title":8,"searchDepth":111,"depth":111,"links":222},[223,224,225],{"id":148,"depth":111,"text":151},{"id":49,"depth":111,"text":52},{"id":101,"depth":111,"text":104},"content:en:portfolio:cyber-audit.md","en\u002Fportfolio\u002Fcyber-audit.md","en\u002Fportfolio\u002Fcyber-audit",{"loc":124},{"_path":231,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":232,"description":10,"summary":233,"slug":234,"code":235,"label":18,"tags":236,"challenge":239,"approach":240,"outcome":241,"seo":242,"body":245,"_type":116,"_id":323,"_source":118,"_file":324,"_stem":325,"_extension":121,"sitemap":326},"\u002Fen\u002Fportfolio\u002Fdata-lakes","Bringing scattered data together","How we approach it when data lives in ten systems and every question means a manual export — and nobody trusts the numbers.","data-lakes","M-03",[18,237,238],"Analytics","Architecture","Data is scattered across several systems. Every business question means a manual export and reconciling spreadsheets — and two reports give two different numbers.","We model the questions before choosing storage. We build one source of truth that fills incrementally, and keep it reachable by the people who ask the questions.","Done right, answers take minutes instead of days, and the same question always returns the same number. The team decides from data because it finally trusts it.",{"title":243,"description":244},"Bringing scattered data together — method note | Ag3","How Ag3 approaches unifying scattered data: questions first, one source of truth, incremental — instead of one more data silo.",{"type":26,"children":246,"toc":318},[247,251,257,262,266,309,313],{"type":29,"tag":30,"props":248,"children":249},{},[250],{"type":34,"value":10},{"type":29,"tag":36,"props":252,"children":254},{"id":253},"the-problem-isnt-storage",[255],{"type":34,"value":256},"The problem isn't storage",{"type":29,"tag":30,"props":258,"children":259},{},[260],{"type":34,"value":261},"\"We need a data lake\" is often the answer to the wrong question. The real trouble isn't where to put the data — it's that nobody can reliably answer a simple business question without half a day of reconciling exports by hand.",{"type":29,"tag":36,"props":263,"children":264},{"id":49},[265],{"type":34,"value":52},{"type":29,"tag":54,"props":267,"children":268},{},[269,279,289,299],{"type":29,"tag":58,"props":270,"children":271},{},[272,277],{"type":29,"tag":62,"props":273,"children":274},{},[275],{"type":34,"value":276},"Questions first.",{"type":34,"value":278}," We map the decisions the data should support. The model follows the questions, not the other way round.",{"type":29,"tag":58,"props":280,"children":281},{},[282,287],{"type":29,"tag":62,"props":283,"children":284},{},[285],{"type":34,"value":286},"One source of truth.",{"type":34,"value":288}," One agreed definition for each concept — \"active customer,\" \"revenue\" — so two reports can no longer contradict each other.",{"type":29,"tag":58,"props":290,"children":291},{},[292,297],{"type":29,"tag":62,"props":293,"children":294},{},[295],{"type":34,"value":296},"Incremental.",{"type":34,"value":298}," We connect the sources that matter most first and deliver value as we go, not after a long silence.",{"type":29,"tag":58,"props":300,"children":301},{},[302,307],{"type":29,"tag":62,"props":303,"children":304},{},[305],{"type":34,"value":306},"Reachable.",{"type":34,"value":308}," The result stays queryable with tools the team already knows — it doesn't require a new department.",{"type":29,"tag":36,"props":310,"children":311},{"id":101},[312],{"type":34,"value":104},{"type":29,"tag":30,"props":314,"children":315},{},[316],{"type":34,"value":317},"Questions that used to take days get answered in minutes. The same definition holds everywhere, so arguments about \"whose number is right\" disappear. Decisions lean on the data because the data is finally trustworthy.",{"title":8,"searchDepth":111,"depth":111,"links":319},[320,321,322],{"id":253,"depth":111,"text":256},{"id":49,"depth":111,"text":52},{"id":101,"depth":111,"text":104},"content:en:portfolio:data-lakes.md","en\u002Fportfolio\u002Fdata-lakes.md","en\u002Fportfolio\u002Fdata-lakes",{"loc":231},{"_path":328,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":329,"description":10,"summary":330,"slug":331,"code":332,"label":333,"tags":334,"challenge":336,"approach":337,"outcome":338,"seo":339,"body":342,"_type":116,"_id":420,"_source":118,"_file":421,"_stem":422,"_extension":121,"sitemap":423},"\u002Fen\u002Fportfolio\u002Flegacy-modernization","Modernizing a legacy system","How we approach a system that runs the business but everyone is afraid to change — without the risk of a full rewrite.","legacy-modernization","M-04","Modernization",[333,238,335],"Risk","A system runs the business but is old and fragile. Every change is risky, and a full rewrite tends to stall or blow up halfway through.","We keep the system running. We carve off pieces one at a time and replace them (the strangler pattern), with tests serving as a safety net throughout.","Done right, change stops being scary. Releases become boring in the good sense, and risk is split into small, manageable steps instead of one big leap.",{"title":340,"description":341},"Modernizing a legacy system — method note | Ag3","How Ag3 approaches modernizing a legacy system: incremental replacement instead of a risky big-bang rewrite.",{"type":26,"children":343,"toc":415},[344,348,354,359,363,406,410],{"type":29,"tag":30,"props":345,"children":346},{},[347],{"type":34,"value":10},{"type":29,"tag":36,"props":349,"children":351},{"id":350},"why-not-the-big-rewrite",[352],{"type":34,"value":353},"Why not the big rewrite",{"type":29,"tag":30,"props":355,"children":356},{},[357],{"type":34,"value":358},"A full rewrite sounds like a clean break, but in practice it means months where the old system is still running and the new one isn't ready. The business can't stand still that long. So we keep the old one alive and change it from the inside.",{"type":29,"tag":36,"props":360,"children":361},{"id":49},[362],{"type":34,"value":52},{"type":29,"tag":54,"props":364,"children":365},{},[366,376,386,396],{"type":29,"tag":58,"props":367,"children":368},{},[369,374],{"type":29,"tag":62,"props":370,"children":371},{},[372],{"type":34,"value":373},"Understand what it really does first.",{"type":34,"value":375}," There's usually behaviour written down nowhere that someone's job depends on.",{"type":29,"tag":58,"props":377,"children":378},{},[379,384],{"type":29,"tag":62,"props":380,"children":381},{},[382],{"type":34,"value":383},"A safety net.",{"type":34,"value":385}," Before moving anything, we lock existing behaviour behind tests so we notice if we break something.",{"type":29,"tag":58,"props":387,"children":388},{},[389,394],{"type":29,"tag":62,"props":390,"children":391},{},[392],{"type":34,"value":393},"Cut by cut.",{"type":34,"value":395}," We carve off one self-contained capability, replace it, and only then move to the next. The old system runs the whole time.",{"type":29,"tag":58,"props":397,"children":398},{},[399,404],{"type":29,"tag":62,"props":400,"children":401},{},[402],{"type":34,"value":403},"Every step delivered.",{"type":34,"value":405}," Each phase ends in production, not in a branch waiting for a big day.",{"type":29,"tag":36,"props":407,"children":408},{"id":101},[409],{"type":34,"value":104},{"type":29,"tag":30,"props":411,"children":412},{},[413],{"type":34,"value":414},"The fear of change fades. The team can release more often and more calmly, because risk is split into small steps. Technical debt goes down continuously instead of waiting for a rewrite that never comes.",{"title":8,"searchDepth":111,"depth":111,"links":416},[417,418,419],{"id":350,"depth":111,"text":353},{"id":49,"depth":111,"text":52},{"id":101,"depth":111,"text":104},"content:en:portfolio:legacy-modernization.md","en\u002Fportfolio\u002Flegacy-modernization.md","en\u002Fportfolio\u002Flegacy-modernization",{"loc":328},{"_path":425,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":426,"description":10,"summary":427,"slug":428,"code":429,"label":430,"tags":431,"challenge":434,"approach":435,"outcome":436,"seo":437,"body":440,"_type":116,"_id":518,"_source":118,"_file":519,"_stem":520,"_extension":121,"sitemap":521},"\u002Fen\u002Fportfolio\u002Flogistics-platform","A real-time operations platform","How we approach it when operations hang on a system that can't keep up with the live picture — and people fall back on spreadsheets.","logistics-platform","M-05","Real-time",[430,432,433],"Platform","Operations","Operations rely on a system that can't keep up with the live picture. People work around it with spreadsheets and phone calls, and errors and delays pile up.","We model the events, not the screens. We choose boring, reliable infrastructure, make the live view trustworthy, and design the system to degrade gracefully under load rather than fall over.","Done right, there is one screen everyone trusts. Coordination runs without phone calls, and under spikes or outages the system stays usable even if reduced.",{"title":438,"description":439},"A real-time operations platform — method note | Ag3","How Ag3 approaches a real-time operations platform: model the events, reliable infrastructure, graceful degradation under load.",{"type":26,"children":441,"toc":513},[442,446,452,457,461,504,508],{"type":29,"tag":30,"props":443,"children":444},{},[445],{"type":34,"value":10},{"type":29,"tag":36,"props":447,"children":449},{"id":448},"one-screen-everyone-trusts",[450],{"type":34,"value":451},"One screen everyone trusts",{"type":29,"tag":30,"props":453,"children":454},{},[455],{"type":34,"value":456},"When a system can't keep up with what's happening, operations build their own truth — in spreadsheets, messages and calls. The goal isn't just a faster system; it's one view reliable enough that the team stops contradicting it with private notes.",{"type":29,"tag":36,"props":458,"children":459},{"id":49},[460],{"type":34,"value":52},{"type":29,"tag":54,"props":462,"children":463},{},[464,474,484,494],{"type":29,"tag":58,"props":465,"children":466},{},[467,472],{"type":29,"tag":62,"props":468,"children":469},{},[470],{"type":34,"value":471},"Events, not screens.",{"type":34,"value":473}," We understand the flow of real-world events first; the interface follows from that model rather than driving it.",{"type":29,"tag":58,"props":475,"children":476},{},[477,482],{"type":29,"tag":62,"props":478,"children":479},{},[480],{"type":34,"value":481},"Boring infrastructure.",{"type":34,"value":483}," We pick proven, reliable building blocks. In real-time operations, \"boring\" is a compliment.",{"type":29,"tag":58,"props":485,"children":486},{},[487,492],{"type":29,"tag":62,"props":488,"children":489},{},[490],{"type":34,"value":491},"A trustworthy live view.",{"type":34,"value":493}," We make it clear when data is fresh and when it's stale — an uncertain fresh picture is more dangerous than an honest delay.",{"type":29,"tag":58,"props":495,"children":496},{},[497,502],{"type":29,"tag":62,"props":498,"children":499},{},[500],{"type":34,"value":501},"Graceful degradation.",{"type":34,"value":503}," Under a spike or an outage the system does less, but it never goes silent.",{"type":29,"tag":36,"props":505,"children":506},{"id":101},[507],{"type":34,"value":104},{"type":29,"tag":30,"props":509,"children":510},{},[511],{"type":34,"value":512},"The coordination spreadsheets and calls disappear, replaced by a view the team trusts. Operations respond to what's happening instead of reconstructing it after the fact. Under load the system stays usable, even when it isn't perfect.",{"title":8,"searchDepth":111,"depth":111,"links":514},[515,516,517],{"id":448,"depth":111,"text":451},{"id":49,"depth":111,"text":52},{"id":101,"depth":111,"text":104},"content:en:portfolio:logistics-platform.md","en\u002Fportfolio\u002Flogistics-platform.md","en\u002Fportfolio\u002Flogistics-platform",{"loc":425},{"_path":523,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":524,"description":525,"summary":526,"slug":527,"code":528,"kind":529,"client":530,"role":531,"url":532,"label":533,"tags":534,"challenge":538,"approach":539,"outcome":540,"seo":541,"body":544,"_type":116,"_id":641,"_source":118,"_file":642,"_stem":643,"_extension":121,"sitemap":644},"\u002Fen\u002Fportfolio\u002Frazvojnik","A public budget you can test-drive","A live project for Razvojnik, an institute for independent, evidence-based analysis of public policy.","An interactive public-finance calculator for Razvojnik: change a tax or a spending line and watch Slovenia's state budget respond, through 2030.","razvojnik","W-01","work","Razvojnik, inštitut","Design & development","https:\u002F\u002Fwww.razvojnik.si\u002Fsimulacija-proracuna","Web · Public finance",[535,536,537,18],"Web app","Public finance","Simulation","Slovenia's state budget is argued over constantly, yet almost no one outside the Ministry of Finance can see how the numbers fit together. Razvojnik wanted a tool that lets journalists, policymakers and citizens change a single tax or spending line and see the consequences for the whole budget.","We turned the state budget into an interactive model. Every lever — income-tax brackets, social-contribution caps, VAT, corporate tax, spending targets by sector — recalculates the balance in real time. The methodology and assumptions are documented and exportable, so the numbers can be checked, not just trusted.","Anyone can now act as finance minister: adjust the levers, compare pre-built reform scenarios, and download the underlying calculations. Public-finance debate gets a shared, transparent reference instead of competing back-of-envelope claims.",{"title":542,"description":543},"Razvojnik budget simulation — public-finance calculator | Ag3","How Ag3 built an interactive public-finance calculator for Razvojnik: adjust taxes and spending and see Slovenia's state-budget balance recalculate through 2030.",{"type":26,"children":545,"toc":636},[546,562,568,601,607,625,631],{"type":29,"tag":30,"props":547,"children":548},{},[549,551,560],{"type":34,"value":550},"A live project for ",{"type":29,"tag":552,"props":553,"children":557},"a",{"href":554,"rel":555},"https:\u002F\u002Fwww.razvojnik.si",[556],"nofollow",[558],{"type":34,"value":559},"Razvojnik",{"type":34,"value":561},", an institute for independent, evidence-based analysis of public policy.",{"type":29,"tag":36,"props":563,"children":565},{"id":564},"what-it-does",[566],{"type":34,"value":567},"What it does",{"type":29,"tag":54,"props":569,"children":570},{},[571,581,591],{"type":29,"tag":58,"props":572,"children":573},{},[574,579],{"type":29,"tag":62,"props":575,"children":576},{},[577],{"type":34,"value":578},"Adjust the revenue side",{"type":34,"value":580}," — income-tax rates and brackets, general allowances, social-contribution rates and caps, corporate income tax (DDPO), VAT, and employer\u002Femployee contributions.",{"type":29,"tag":58,"props":582,"children":583},{},[584,589],{"type":29,"tag":62,"props":585,"children":586},{},[587],{"type":34,"value":588},"Adjust the expenditure side",{"type":34,"value":590}," — spending targets and growth paths by sector, and deficit or surplus goals.",{"type":29,"tag":58,"props":592,"children":593},{},[594,599],{"type":29,"tag":62,"props":595,"children":596},{},[597],{"type":34,"value":598},"See the balance move",{"type":34,"value":600}," — the projected state-budget balance through 2030 recalculates as you change any lever.",{"type":29,"tag":36,"props":602,"children":604},{"id":603},"built-for-scrutiny",[605],{"type":34,"value":606},"Built for scrutiny",{"type":29,"tag":54,"props":608,"children":609},{},[610,615,620],{"type":29,"tag":58,"props":611,"children":612},{},[613],{"type":34,"value":614},"Four ready-made scenarios — the current system plus three published reform proposals — as starting points.",{"type":29,"tag":58,"props":616,"children":617},{},[618],{"type":34,"value":619},"Every scenario is editable; nothing is a black box.",{"type":29,"tag":58,"props":621,"children":622},{},[623],{"type":34,"value":624},"Full methodology and downloadable calculations, with the linear-model assumptions stated plainly rather than hidden.",{"type":29,"tag":36,"props":626,"children":628},{"id":627},"why-it-matters",[629],{"type":34,"value":630},"Why it matters",{"type":29,"tag":30,"props":632,"children":633},{},[634],{"type":34,"value":635},"A budget is far easier to argue about than to understand. Making the trade-offs tangible — raise this, cut that, watch the balance move — turns an abstract debate into something anyone can actually test.",{"title":8,"searchDepth":111,"depth":111,"links":637},[638,639,640],{"id":564,"depth":111,"text":567},{"id":603,"depth":111,"text":606},{"id":627,"depth":111,"text":630},"content:en:portfolio:razvojnik.md","en\u002Fportfolio\u002Frazvojnik.md","en\u002Fportfolio\u002Frazvojnik",{"loc":523},{"_path":646,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":647,"description":648,"summary":649,"slug":650,"code":651,"kind":529,"client":652,"role":531,"label":653,"tags":654,"challenge":660,"approach":661,"outcome":662,"seo":663,"body":666,"_type":116,"_id":781,"_source":118,"_file":782,"_stem":783,"_extension":121,"sitemap":784},"\u002Fen\u002Fportfolio\u002Fsencila-senica","An operating system for a window factory","A custom operating system built for Senčila Senica d.o.o., a manufacturer of PVC windows.","The system that runs production, installation, stock and reporting for a PVC-window manufacturer — wired directly into the KLAES and Stijene tools the floor already uses.","sencila-senica","W-02","Senčila Senica d.o.o.","Software · Manufacturing",[655,656,657,658,659],"Manufacturing","Integrations","Planning","Warehouse","Reporting","A growing PVC-window manufacturer ran production, installation, stock and reporting across disconnected tools and spreadsheets. Orders designed in KLAES and produced on Stijene lived in separate worlds, so planning the floor and the fitting crews meant re-keying data and trusting memory.","We built one system that sits on top of the tools already in use. It reads orders straight from KLAES and the Stijene production line, then drives planning, tracking, stock and reporting from a single source of truth — connecting what works rather than replacing it.","Production and installation are planned and tracked in one place, stock reflects what's really on the shelves, and management sees the numbers without assembling them by hand. The factory runs on its own software instead of around it.",{"title":664,"description":665},"Production system for Senčila Senica — KLAES & Stijene integration | Ag3","How Ag3 built the operating system for a PVC-window manufacturer: production and installation planning, warehouse management and reporting, integrated with KLAES and Stijene.",{"type":26,"children":667,"toc":776},[668,679,685,728,734,767,771],{"type":29,"tag":30,"props":669,"children":670},{},[671,673,677],{"type":34,"value":672},"A custom operating system built for ",{"type":29,"tag":62,"props":674,"children":675},{},[676],{"type":34,"value":652},{"type":34,"value":678},", a manufacturer of PVC windows.",{"type":29,"tag":36,"props":680,"children":682},{"id":681},"what-it-runs",[683],{"type":34,"value":684},"What it runs",{"type":29,"tag":54,"props":686,"children":687},{},[688,698,708,718],{"type":29,"tag":58,"props":689,"children":690},{},[691,696],{"type":29,"tag":62,"props":692,"children":693},{},[694],{"type":34,"value":695},"Production planning & tracking",{"type":34,"value":697}," — schedule the shop floor and follow each order from cut to finished unit.",{"type":29,"tag":58,"props":699,"children":700},{},[701,706],{"type":29,"tag":62,"props":702,"children":703},{},[704],{"type":34,"value":705},"Installation planning & tracking",{"type":34,"value":707}," — plan fitting crews and dates, and track every job through to completion.",{"type":29,"tag":58,"props":709,"children":710},{},[711,716],{"type":29,"tag":62,"props":712,"children":713},{},[714],{"type":34,"value":715},"Warehouse management",{"type":34,"value":717}," — real-time stock of profiles, glass and hardware, tied to what production consumes.",{"type":29,"tag":58,"props":719,"children":720},{},[721,726],{"type":29,"tag":62,"props":722,"children":723},{},[724],{"type":34,"value":725},"Analytics & reporting",{"type":34,"value":727}," — throughput, lead times and workload in views management actually uses.",{"type":29,"tag":36,"props":729,"children":731},{"id":730},"wired-into-the-floor",[732],{"type":34,"value":733},"Wired into the floor",{"type":29,"tag":54,"props":735,"children":736},{},[737,747,757],{"type":29,"tag":58,"props":738,"children":739},{},[740,745],{"type":29,"tag":62,"props":741,"children":742},{},[743],{"type":34,"value":744},"KLAES",{"type":34,"value":746}," — window and door orders flow in from the design and costing system, with no re-keying.",{"type":29,"tag":58,"props":748,"children":749},{},[750,755],{"type":29,"tag":62,"props":751,"children":752},{},[753],{"type":34,"value":754},"Stijene",{"type":34,"value":756}," — the system connects to the production line so plans reflect what the machines are actually doing.",{"type":29,"tag":58,"props":758,"children":759},{},[760,765],{"type":29,"tag":62,"props":761,"children":762},{},[763],{"type":34,"value":764},"One source of truth",{"type":34,"value":766}," — office and shop floor read the same live data.",{"type":29,"tag":36,"props":768,"children":769},{"id":627},[770],{"type":34,"value":630},{"type":29,"tag":30,"props":772,"children":773},{},[774],{"type":34,"value":775},"Manufacturing software fails when it fights the machines. By integrating with KLAES and Stijene instead of duplicating them, the system fit how the factory already works from day one — and then made it faster.",{"title":8,"searchDepth":111,"depth":111,"links":777},[778,779,780],{"id":681,"depth":111,"text":684},{"id":730,"depth":111,"text":733},{"id":627,"depth":111,"text":630},"content:en:portfolio:sencila-senica.md","en\u002Fportfolio\u002Fsencila-senica.md","en\u002Fportfolio\u002Fsencila-senica",{"loc":646},1784880622348]