{"id":9994,"date":"2026-04-17T15:00:02","date_gmt":"2026-04-17T13:00:02","guid":{"rendered":"https:\/\/www.codecon.sk\/?p=9994"},"modified":"2026-05-25T15:24:21","modified_gmt":"2026-05-25T13:24:21","slug":"taming-a-forecasting-web-app","status":"publish","type":"post","link":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/","title":{"rendered":"Taming a Forecasting Web App"},"content":{"rendered":"<p>The project is <a href=\"https:\/\/viewer.egafor.eu\/egafor-viewer\/\">egafor.eu<\/a>, consisting of two parts: a publicly accessible <strong>Angular\/NestJS<\/strong> application for viewing forecasts for general aviation over Central and Southeastern Europe, and a professional part designed for meteorologists, who use it as a collaborative environment for creating and adjusting forecasts. It had become a bit of a time capsule; because it lives in our company\u2019s monorepo, it shares the codebase with modern IBL products, but the application itself had not been updated in years, except for a few small critical or security fixes. Once deployed into operations, the system proved to be stable and highly usable. Because it met users\u2019 needs well, it did not require many custom extensions or significant changes for quite a long time. It was time to bring it into the present.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9525\" src=\"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.29.23-300x216.png\" alt=\"mapa - foto\" width=\"1049\" height=\"755\" srcset=\"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.29.23-300x216.png 300w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.29.23-1024x736.png 1024w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.29.23-768x552.png 768w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.29.23.png 1230w\" sizes=\"auto, (max-width: 1049px) 100vw, 1049px\" \/><\/p>\n<p><strong>Migration<\/strong><br \/>\nLooking back, there were two main challenges when migrating the code to the latest IBL standards.<\/p>\n<p>The first problem was that the application was living in a pre-strict world. Our current policy at <strong>IBL<\/strong> is to have strict mode enabled for all <strong>TypeScript<\/strong> code. So, the plan was to enable strict mode and try to compile. As expected, a sea of errors popped up. While most of them were quick fixes, some forced me to rethink the code logic. Instead of writing types such as string | undefined just to satisfy the compiler, it is often better to analyze the code flow and change it, if possible. By moving a check one level up\u2014for example, wrapping a function call in an if statement\u2014you can usually eliminate the <span style=\"color: #339966;\">undefined<\/span> entirely. It makes your code much cleaner and easier to understand; great advice from our technical lead.<\/p>\n<p>The second problem was related to UI errors. We use the <strong><a href=\"https:\/\/material.angular.dev\/\">Angular Material UI Component Library<\/a><\/strong>, and updating the version of <strong>Angular Material<\/strong> usually requires some code changes, but none of these had been done in <strong>eGAFOR.<\/strong> So, after I finally fixed all the type errors and opened the application, there were some &amp;quot;funny-looking&amp;quot; bugs, missing buttons, etc. But thanks to AI, it was quite easy to map the migration changes between the versions.<\/p>\n<p><strong>&#8220;Alternative Universes&#8221; bug<\/strong><br \/>\nThe heart of <strong>eGAFOR<\/strong> lies in a place hidden from the public: the collaboration mode, where forecasters from multiple countries work together to create forecasts in real time.<\/p>\n<p>Collaboration sessions are managed on the backend. The collaboration mechanism itself is provided by <strong>IBL&amp;&#8217;s Visual Weather<\/strong>. When we were testing <strong>eGAFOR<\/strong> after the upgrade, we encountered a strange bug. After a while, users started seeing different realities (different forecasts), although they were supposed to be in the same session.<\/p>\n<p>I remember spending days finding and analyzing this bug until I eventually traced it back to a <a href=\"https:\/\/momentjs.com\/\">Moment.js<\/a> object used in the session creation. It turned out multiple sessions were being spawned because the reference time for the session was being mutated. The problem was that this object was used widely in the codebase, making it nearly impossible to find the exact line responsible for the change.<\/p>\n<p>After some research, I decided to use a <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Proxy\">JavaScript Proxy<\/a> object to trap and log exactly where the mutations were happening. A simple call to the <span style=\"color: #339966;\">clone<\/span> function in the low-level code fixed the whole issue. I guess that is one of the reasons why <strong>Moment.js<\/strong> has fallen out of favor.<\/p>\n<p>Below, I provide a simple example of an idea that helped me find and fix the bug.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9534 \" src=\"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-11.00.27-300x27.png\" alt=\"kod2\" width=\"789\" height=\"71\" srcset=\"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-11.00.27-300x27.png 300w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-11.00.27-1024x91.png 1024w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-11.00.27-768x68.png 768w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-11.00.27.png 1194w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9529\" src=\"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.39.50-300x211.png\" alt=\"kod-foto \" width=\"960\" height=\"675\" srcset=\"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.39.50-300x211.png 300w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.39.50-1024x721.png 1024w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.39.50-768x541.png 768w, https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/04\/Snimka-obrazovky-2026-04-15-o-10.39.50.png 1266w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/p>\n<p><strong>Memory leak investigation<\/strong><br \/>\nOnce the upgrade was live, we hit a wall with a memory leak that only appeared in production under heavy load. You can&#8217;t fix what you can&#8217;t see, so I used the &#8212;<span style=\"color: #339966;\">inspect<\/span> flag on our <strong>Node.js <\/strong>backend and tunneled via <strong>Chrome DevTools.<br \/>\n<\/strong><br \/>\nAfter analyzing the memory profile, I found that an <strong>RxJS <a href=\"https:\/\/www.learnrxjs.io\/learn-rxjs\/subjects\/replaysubject\">ReplaySubject<\/a><\/strong> was the problem. All user actions were propagated through this subject, and that day I learned that using a <span style=\"color: #339966;\">ReplaySubject<\/span> with an unbounded buffer can be really dangerous, since it cached every user action. The trick is to not use <span style=\"color: #339966;\">ReplaySubject<\/span>, or use it with <span style=\"color: #339966;\">bufferSize<\/span> or <span style=\"color: #339966;\">windowTime<\/span> settings.<\/p>\n<p><strong>Beyond the Code<\/strong><br \/>\nAfter the bugs were fixed and improvements implemented, I had the opportunity to meet with the forecasters\u2014the people who use the application on a daily basis to keep pilots safe.<\/p>\n<p>Seeing the software through a user&#8217;s eyes can be very helpful. I think it&#8217;s very beneficial for every developer to understand the user&#8217;s use case, as it can give your work true meaning.<\/p>\n<p>So, there were a lot of lessons learned, but I am really thankful to <strong>IBL<\/strong> for this opportunity. I would encourage developers not to be afraid of legacy code or of change in general. Every challenge you take is an opportunity to learn something new and grow as a developer or even as a person. Especially now with AI, the ability to dive deep and understand a problem&#8217;s root cause remains a developer&#8217;s most valuable skill. Most things will eventually work out in the end,<br \/>\nand I am pretty sure we all love that feeling of satisfaction when it happens.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Something around a year and a half ago, I joined my current team at IBL Software Engineering as a developer. After a while, I was asked if I wanted to take over one of our older projects, and since it sounded like a challenge, I said, &#8220;Sure!&#8221;<\/p>\n","protected":false},"author":5,"featured_media":9995,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[56],"tags":[89,90,92,91],"class_list":["post-9994","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-bratislava","tag-codecon","tag-inspiration","tag-partners"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Taming a Forecasting Web App &#8212; CODECON<\/title>\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.codecon.sk\/en\/taming-a-forecasting-web-app\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Taming a Forecasting Web App &#8212; CODECON\" \/>\n<meta property=\"og:description\" content=\"Something around a year and a half ago, I joined my current team at IBL Software Engineering as a developer. After a while, I was asked if I wanted to take over one of our older projects, and since it sounded like a challenge, I said, &quot;Sure!&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/\" \/>\n<meta property=\"og:site_name\" content=\"CODECON\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-17T13:00:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-25T13:24:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/05\/blog-2-1-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1280\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Eva Kalinov\u00e1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Eva Kalinov\u00e1\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/\"},\"author\":{\"name\":\"Eva Kalinov\u00e1\",\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/#\\\/schema\\\/person\\\/815e94ce93756757859939501e018711\"},\"headline\":\"Taming a Forecasting Web App\",\"datePublished\":\"2026-04-17T13:00:02+00:00\",\"dateModified\":\"2026-05-25T13:24:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/\"},\"wordCount\":863,\"image\":{\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codecon.sk\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/blog-2-1-scaled.png\",\"keywords\":[\"#bratislava\",\"#codecon\",\"#inspiration\",\"#partners\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/\",\"url\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/\",\"name\":\"Taming a Forecasting Web App &#8212; CODECON\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codecon.sk\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/blog-2-1-scaled.png\",\"datePublished\":\"2026-04-17T13:00:02+00:00\",\"dateModified\":\"2026-05-25T13:24:21+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/#\\\/schema\\\/person\\\/815e94ce93756757859939501e018711\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codecon.sk\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/blog-2-1-scaled.png\",\"contentUrl\":\"https:\\\/\\\/www.codecon.sk\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/blog-2-1-scaled.png\",\"width\":2560,\"height\":1280,\"caption\":\"ibl blog 2\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/taming-a-forecasting-web-app\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Domovsk\u00e1 str\u00e1nka\",\"item\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Taming a Forecasting Web App\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/\",\"name\":\"CODECON\",\"description\":\"Najv\u00e4\u010d\u0161ie komunitn\u00e9 stretnutie v\u00fdvoj\u00e1rov na Slovensku\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codecon.sk\\\/en\\\/#\\\/schema\\\/person\\\/815e94ce93756757859939501e018711\",\"name\":\"Eva Kalinov\u00e1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Taming a Forecasting Web App &#8212; CODECON","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.codecon.sk\/en\/taming-a-forecasting-web-app\/","og_locale":"en_US","og_type":"article","og_title":"Taming a Forecasting Web App &#8212; CODECON","og_description":"Something around a year and a half ago, I joined my current team at IBL Software Engineering as a developer. After a while, I was asked if I wanted to take over one of our older projects, and since it sounded like a challenge, I said, \"Sure!\"","og_url":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/","og_site_name":"CODECON","article_published_time":"2026-04-17T13:00:02+00:00","article_modified_time":"2026-05-25T13:24:21+00:00","og_image":[{"width":2560,"height":1280,"url":"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/05\/blog-2-1-scaled.png","type":"image\/png"}],"author":"Eva Kalinov\u00e1","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Eva Kalinov\u00e1","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/#article","isPartOf":{"@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/"},"author":{"name":"Eva Kalinov\u00e1","@id":"https:\/\/www.codecon.sk\/en\/#\/schema\/person\/815e94ce93756757859939501e018711"},"headline":"Taming a Forecasting Web App","datePublished":"2026-04-17T13:00:02+00:00","dateModified":"2026-05-25T13:24:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/"},"wordCount":863,"image":{"@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/05\/blog-2-1-scaled.png","keywords":["#bratislava","#codecon","#inspiration","#partners"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/","url":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/","name":"Taming a Forecasting Web App &#8212; CODECON","isPartOf":{"@id":"https:\/\/www.codecon.sk\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/#primaryimage"},"image":{"@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/05\/blog-2-1-scaled.png","datePublished":"2026-04-17T13:00:02+00:00","dateModified":"2026-05-25T13:24:21+00:00","author":{"@id":"https:\/\/www.codecon.sk\/en\/#\/schema\/person\/815e94ce93756757859939501e018711"},"breadcrumb":{"@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/#primaryimage","url":"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/05\/blog-2-1-scaled.png","contentUrl":"https:\/\/www.codecon.sk\/wp-content\/uploads\/2026\/05\/blog-2-1-scaled.png","width":2560,"height":1280,"caption":"ibl blog 2"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codecon.sk\/en\/taming-a-forecasting-web-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Domovsk\u00e1 str\u00e1nka","item":"https:\/\/www.codecon.sk\/en\/"},{"@type":"ListItem","position":2,"name":"Taming a Forecasting Web App"}]},{"@type":"WebSite","@id":"https:\/\/www.codecon.sk\/en\/#website","url":"https:\/\/www.codecon.sk\/en\/","name":"CODECON","description":"Najv\u00e4\u010d\u0161ie komunitn\u00e9 stretnutie v\u00fdvoj\u00e1rov na Slovensku","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codecon.sk\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.codecon.sk\/en\/#\/schema\/person\/815e94ce93756757859939501e018711","name":"Eva Kalinov\u00e1"}]}},"_links":{"self":[{"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/posts\/9994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/comments?post=9994"}],"version-history":[{"count":1,"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/posts\/9994\/revisions"}],"predecessor-version":[{"id":9996,"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/posts\/9994\/revisions\/9996"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/media\/9995"}],"wp:attachment":[{"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/media?parent=9994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/categories?post=9994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codecon.sk\/en\/wp-json\/wp\/v2\/tags?post=9994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}