{"componentChunkName":"component---gatsby-theme-spaceout-src-templates-article-template-tsx","path":"/clean-architecture-common-pitfalls","result":{"pageContext":{"article":{"id":"19207872-c4ca-5f5d-8ea1-af504359cb67","slug":"/clean-architecture-common-pitfalls","secret":false,"title":"Clean Architecture - common pitfalls","author":"Luke Celitan","date":"November 1st, 2022","dateForSEO":"2022-11-01T00:00:00.000Z","timeToRead":5,"excerpt":"How To Avoid The Pitfalls Of Not Applying Clean Architecture In Software","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Clean Architecture - common pitfalls\",\n  \"author\": \"Luke Celitan\",\n  \"date\": \"2022-11-01T00:00:00.000Z\",\n  \"hero\": \"./cleancode.jpg\",\n  \"excerpt\": \"How To Avoid The Pitfalls Of Not Applying Clean Architecture In Software\",\n  \"category\": \"Post\",\n  \"tech\": [\"Rust\", \"Nodejs\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"how-to-avoid-the-pitfalls-of-not-applying-clean-architecture-in-software\"\n  }, \"How To Avoid The Pitfalls Of Not Applying Clean Architecture In Software\"), mdx(\"p\", null, \"The software that we design and implement has to be reliable, maintainable and\\nscalable. If a software is not designed with these qualities in mind, it can\\nturn into a mess. This article discusses the importance of practicing clean code\\nand architecture in order to avoid the pitfalls of not applying them\"), mdx(\"h2\", {\n    \"id\": \"clean-code-and-clean-architecture\"\n  }, \"Clean code and clean architecture\"), mdx(\"p\", null, \"When it comes to software development, clean code and clean architecture are two\\nof the most important concepts to keep in mind. Unfortunately, they are often\\noverlooked or not applied properly, which can lead to a number of problems down\\nthe line. Clean code is all about making your code easy to read, understand, and\\nmaintain. It should be well-organized and free of any unnecessary clutter. This\\nmakes it simpler and faster to make changes when needed, and also helps prevent\\nerrors from creeping in. Meanwhile, clean architecture is all about designing\\nyour software in a way that keeps the different parts loosely coupled and easily\\ninterchangeable. This makes your code more robust and easier to scale as your\\nneeds change over time. Unfortunately, both of these concepts are often ignored\\nor misunderstood. As a result, many software projects end up being needlessly\\ncomplex and difficult to maintain. If you want to avoid these pitfalls, be sure\\nto keep clean code and clean architecture in mind from the very start of your\\nproject.\"), mdx(\"p\", null, \"When in need of good architecture patterns look out for existing platforms and\\nsolutions. Open source projects that survived the harsh reality of software\\nengineering will be a great source for anyone who is looking for good patterns.\\nWith time and experience a software engineer will be able to tell apart the\\nanti-patterns and patterns one should follow.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1024px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"100%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAAsTAAALEwEAmpwYAAADXklEQVQ4y12T+VMScRTA/dPKpp8aO6xsJqVrprxmUrwQj1FBKURKCUVUBDtEnVLyyAJNRc28EFzzChi1yQiUc1nYu7dgKH7nze77vn2fd32/m0JRxH8haYqkOCGSjQRJEgxNMQyV/IlISWg0TYKgaIgk8bMeOBFB0eBf1x94nuNPYYKI7mxvbm1uRCJY3AKufr83HEZxIrq99WP802icT0TnYNiwLI2FUeuaZWnpezDgB49oFDs+PvJ6j6MRzON2rSwvCsvLVleXWZaFNCcwlArhvd4jHI/s7mwvfl+A7cHBHiRZWV4a6NdruzuHBt83SiXp6dedTnsSnOjW7XZNTpgQm9VmXRsZ/ghkZ4dao+kqLHx6j5fFy8oEI5BnJ8JlhsIO9vd+/dpfXFwA8vP4J33vu9c9OrGoDsJhGIogNigHyPPTBpPVapE+l0yYjDMzU2YQ8zQ852bNBsOgUtGs1XQ5HEnVJmXGsJDVujb80aBStclkjZKGekVLi0LRLBQKcnKewJzm52YpkjhHnvTs8x0vfJvPy81OvXihtJgvqqu5k5FxM/1GTXUl6Pfv81yuQ5ZlEt2eHhXUEwoFpyYnW17KS4r5G+vrToe9qqpCWC7Q6TQCQcnlS6nabg240RTF0DTL0AwDb05P4fYsGwwGBj+8f/f2DYKsI+s2gBvqxW2tyuqqysLCgmtX01ZXV8ANx3EMw448Hia2uMwOu10ub8rLyxEISkWiWunzZ/Vicbuq9UVTY2bm3fz8PAixu7MTCAZQFDVPT/X36cPhMIAcHAgEjEajRNLQ1dkxPfV1bGxU+UoBadtVbaWlxWUlRfNz5iOP22a19PX1VldXVFUKnU5nDI51ABrE7lC3a7o637zWqdWqnh5tk0xaWSEs4hfAzG7fusnjZT56+KC2tiY7+7FWp+VgJvangIYgSIcaDks50N/nsP/cQGyfx0flctkLeROfX9AolcIpwiUzmb5A2aFQCObPwfHM8PesWSwv5dC+zDD0obiIn5uTfTXtCkwLhofjUQDCKOrxuA8Pf4N/bGAMwwkHh/1+PwxvdGTYZDLq9b0VQoFYLDIMDYIRJ4g4EF9wbOwpHOPjCz7AkZAEEcEwv8/ndrvjWMIzoZ+BYxH/R2FiAjeCPunrjFtC/gHqYNgYh/Z68gAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/e0a2b089269e7989df033fa027c06cd9/53334/blueprint2.webp 1024w\"],\n    \"sizes\": \"(max-width: 1024px) 100vw, 1024px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/e0a2b089269e7989df033fa027c06cd9/658fc/blueprint2.png 1024w\"],\n    \"sizes\": \"(max-width: 1024px) 100vw, 1024px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/e0a2b089269e7989df033fa027c06cd9/658fc/blueprint2.png\",\n    \"alt\": \"Blueprint for clean code\",\n    \"title\": \"Blueprint for clean code\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \")), mdx(\"h2\", {\n    \"id\": \"what-does-clean-code-look-like\"\n  }, \"What does clean code look like?\"), mdx(\"p\", null, \"When it comes to clean code, there are a few key things to keep in mind. First\\nand foremost, clean code is readable and easy to understand. It is well-\\norganized and well-documented, so that anyone who needs to can easily find and\\nuse the information they need. Clean code is also consistent in style and\\nformatting. This makes it easier to read and understand, as well as more likely\\nto be error-free. In addition, clean code is modular \\u2013 it is organized into\\nsmall, self-contained units that can be easily reused. Finally, clean code is\\ntestable. This means that it can be verified that the code does what it is\\nsupposed to do, and that any changes made will not break existing functionality.\\nBy following these guidelines, you can ensure that your code is clean, readable,\\nand maintainable \\u2013 all of which are essential for any software project.\"), mdx(\"h2\", {\n    \"id\": \"clean-code-essentials\"\n  }, \"Clean code essentials:\"), mdx(\"h3\", {\n    \"id\": \"security\"\n  }, \"Security\"), mdx(\"p\", null, \"The best present any software architect can do for himself is to start the\\ndesign from security first perspective. Making a proper threat modeling will\\nhelp in establishing the correct patterns and services needed to complete the\\nproject.\"), mdx(\"p\", null, \"These days security first approach in my opinion is the only way to write a\\nprofessional software. Even if your code or project is squeaky clean but you did\\nnot plan or execute any kind of security strategy, you may end up loosing\\nreputation or feel wrath of your client when their application gets DDOS\\u2019ed or\\ndata breached.\"), mdx(\"p\", null, \"For more info om threat modeling and running your project in the DevSecOps\\nmethodology please checkout his \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://spaceout.pl/dev-sec-ops\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"link\")), mdx(\"h3\", {\n    \"id\": \"documentation\"\n  }, \"Documentation\"), mdx(\"p\", null, \"This sometimes can be the most overlooked part of the project, however it will\\nbe the most important thing in keeping it truly alive. Proper documentation\\nshould include\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"How to install the project\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"How to start the application in dev mode\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"How to build the project (production mode)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"What is the delivery scenario (CI/CD, Release strategy and naming conventions)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Architecture and Services used in Software (Servers, DB\\u2019s, Caches, Blobs, 3rd\\nparty)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Where to get the secret keys (Vaults, People, \\u2026)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"How to monitor the software (Logs, AppInsights, Trackers \\u2026)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"coding and contributions standards (Style, Commits, Tests, Coverage)\")), mdx(\"h2\", {\n    \"id\": \"common-pitfalls\"\n  }, \"Common pitfalls\"), mdx(\"h3\", {\n    \"id\": \"we-do-not-need-to-think-about-the-structure-or-clean-code-at-the-beginning-of-the-project\"\n  }, \"We do not need to think about the structure or clean code at the beginning of the project\"), mdx(\"p\", null, \"There are many potential problems that can arise from not having a clean\\narchitecture or clean code in your software project. Some of the more common\\nones include:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Increased complexity and confusion: Without a well-defined architecture, your\\ncode can quickly become complex and difficult to understand. This can lead to\\nconfusion and errors when making changes or adding new features.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"decreased flexibility: A messy codebase can be very inflexible, making it\\nhard to make changes or add new functionality without breaking existing code.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"increased maintenance costs: Dirty code is often more difficult and\\ntime-consuming to maintain, leading to higher costs over time.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"decreased reliability: Code that is poorly organized and written in a hurry\\nis often less reliable and may contain more bugs. This can lead to unexpected\\nbehavior and crashes, which can be very frustrating for users.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"decreased quality: In general, lower-quality code is simply not as good as\\nwell-crafted code. This can impact the overall quality of your project and\\nmake it less likely to meet users\\u2019 needs and expectations.\")), mdx(\"p\", null, \"Not following the rules outlined before will result in a typical scenario where\\nyour development velocity will drop exponentially, leaving your project manager\\nor client frustrated. In this case the development team primary goal is to\\ndeliver features, not thinking about the structure of the project, not giving\\nthe team or developer the time needed to implement proper testing or refactoring\\nwhat was already written. The usual management response to this situation is add\\nmore man power to the development team in hopes that additional team mates will\\nbring the velocity back up to where it was at the beginning of the project.\\nHowever adding more people to a late project will make it even latter.\"), mdx(\"p\", null, \"It is important to understand that the business does not understand this, nor\\ncare, however it is up the development team to establish the speed and proper\\ntimetable. The conversation about the proposed velocity with business side will\\nbe a difficult one, but it will always be a part of the development cycle.\"), mdx(\"h3\", {\n    \"id\": \"no-need-to-deploy-straight-away-we-will-think-about-the-cicd-later-on\"\n  }, \"No need to deploy straight away, we will think about the CI/CD later on\"), mdx(\"p\", null, \"Not establishing proper git flow, automatic code delivery to an online\\nenvironment, will result in a classic \\u201CIt works on my computer\\u201D - \\u201Cbut are we\\ngoing to give your computer to the client ?\\u201D Developers tend to have fast\\nmachines with loads of ram, pushing straight to online instances should be a\\nnatural step in order to catch these differences. Calls and functions that work\\nnormally on your computer can suddenly be too much for a small server or online\\ncloud instance. We also have to think about differences in Operating Systems,\\nnetwork speed and other external factors.\"), mdx(\"p\", null, \"Make yourself a favour and make sure to test major pushes straight on the online\\nenvironment.\"), mdx(\"p\", null, \"This will also help with any kind of more advanced patterns like microservices,\\none must be careful not fall into a trap of creating applications that are easy\\nto develop but hard to deploy\"), mdx(\"h3\", {\n    \"id\": \"clean-architecture-does-not-impact-on-how-the-system-works\"\n  }, \"Clean architecture does not impact on how the system works\"), mdx(\"p\", null, \"This is another misconception among developers, true software architects will\\ntake into consideration what are the business costs of running a project. Clean\\narchitecture keeps the system lean, unnecessary code or bad arch will have\\nimpact on system performance, ram and cpu usage. Upgrading servers or instances\\nso your application works as it should can result in additional frictions with\\nyour client, or can even result in client dropping the project if the estimated\\nserver costs are met with huge real costs of sustaining an application.\"), mdx(\"h2\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"If you\\u2019re not careful, it\\u2019s easy to fall into the trap of not applying clean\\narchitecture in your software development projects. However, by following the\\ntips outlined in this article, you can avoid these pitfalls and create cleaner,\\nmore maintainable code. By adhering to the principles of clean architecture, you\\ncan make your code easier to understand, reuse, and modify \\u2013 which will save you\\ntime and money in the long run.\"), mdx(\"p\", null, \"Clean arch tries to minimize costs of adding features, fixing bugs, it will\\ndirect the developer in where solution should be added, and what is the most\\nimportant it should protect the system from implementing a bug that cannot be\\nfixed.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["Rust","Nodejs"],"category":"Post","appDescription":null,"hero":{"full":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQFAgb/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAdCVFNeiTjL4CkN//8QAGhAAAQUBAAAAAAAAAAAAAAAAAgABAwQRE//aAAgBAQABBQKxLxBrLbityRyB0Il3iTi2YijDf//EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABYRAQEBAAAAAAAAAAAAAAAAAAAREP/aAAgBAgEBPwFcj//EAB4QAAIBAwUAAAAAAAAAAAAAAAABAhARISIxMmFx/9oACAEBAAY/AvSGmSvRKOWWawcqPo2P/8QAHRAAAgMAAgMAAAAAAAAAAAAAAREAITFBYXGBof/aAAgBAQABPyFRbb2oVx0iRxENm4QBZ0DBGMU04BBAa6i0hiid8RQBuj3uBV+5/9oADAMBAAIAAwAAABDAAHz/xAAWEQADAAAAAAAAAAAAAAAAAAAAAWH/2gAIAQMBAT8QiyLKsqz/xAAXEQEBAQEAAAAAAAAAAAAAAAAAEQFR/9oACAECAQE/ELiExHH/xAAfEAEBAAICAQUAAAAAAAAAAAABEQAhMdFBUWFxobH/2gAIAQEAAT8QkaUQC8FMFAUBIpnh4zmtuxGExFlEQept84GTW02DqE9u8GBAgV1kPIaC3HT7cTKqhq3X8x0AHy7z/9k=","aspectRatio":1,"src":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/58fe7/cleancode.jpg","srcSet":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/e0f30/cleancode.jpg 236w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/86afd/cleancode.jpg 472w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/58fe7/cleancode.jpg 944w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/0ff54/cleancode.jpg 1200w","srcWebp":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/99fbb/cleancode.webp","srcSetWebp":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/77392/cleancode.webp 236w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/1f177/cleancode.webp 472w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/99fbb/cleancode.webp 944w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/9000d/cleancode.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M232%203c-3%203%205%207%2013%206%205%200%209%202%2012%206%203%205%204%205%201%205-2%200-2%205%200%208%202%202%202%202%201%203-2%201%202%203%204%203l3%201v-4c-3-6-1-7%204-2%204%204%207%208%204%207h-1c-1%201%2011%2013%2012%2012l-1-2-2-3c1-1%2010%208%2014%2014l4%205-3-7c-4-6-5-7-2-4h2c0-2-4-5-5-4l-2-1-8-10c-5-5-6-6-4-6l3%201-3-3c-4-5-6-6-9-6s-7-4-9-8c-3-6-25-15-28-11m150%2027a456%20456%200%2001-32%2027c6-7%203-5-4%202-8%208-10%2011-6%2012h4a127%20127%200%200021-23c1%201%201%201%200%200%200-2%203-4%205-3v-2c0%201%206-4%2011-11%2013-13%2013-14%201-2m-251%202a171%20171%200%2000-13%2024l-1%203h-3l-1%201%201%201c2-2%201%201-1%202l-2%202-1%204-1%203-2-3-1-3v3c0%204%203%2011%207%2016%204%204%2010%206%2019%206h5l2-6%204-10c4-6%204-6%200-8-3-1-5%200-4%204l-7%209%203-5c3-6%202-10-2-9-2%200-2%200%200-1l4-2c2%201%203%200%201-4l-3-7-1-4c-1%200-2-3-1-5%201-1%201-4-1-4v-2l2-8-3%203m133%2025c0%204%203%2010%205%2010l1-2v-1l2%205c0%202%204%206%207%206%202%200%200-7-3-11s-3-4-3-1c1%203-5-3-8-8l-2-2%201%204m39-1c3%206%202%209-2%207l1%203c2%205%202%2010-1%2010h-2l-3-1c-3%200-9-3-9-4l-1-1-1%204c0%204%201%204%204%205%204%201%206%203%204%203-1%200-2%201-1%202%200%201%200%202-1%201h-1l-1-2c1-2%201-2-5-2h-11c-8-2-8-2-12-1s-4%202-2%209c0%202%203%203%204%201h15c13%200%2013%200%2014-2%200-2%200-2%201%200%204%204%2014-11%2014-20%200-6-1-12-3-13-1-1-1-1-1%201m-111%205v7h21v-5h-10l-10%201v-5c-1-3-1-3-1%202M44%2057l3%203%202%204c0%203%209%2011%2012%2011%204-2%204-5%200-10l-5-4%203%204c4%204%201%204-4-1l-11-7m105%2016c-2%201-6%209-7%2015l-1%203h6c6-1%207-2%205-4s-1-3%201-10c1-2-2-5-4-4m-42%208l2%204%201%203c-1%201-1%200-2-1-2-5-4-3-5%205-1%203-1%203%201%203l1%202%202-1%202-2v2l-1%204c-1%201-2%209%200%208%201%200%201%204-1%208l-3%2012c-1%2014-2%2012-2-3v-13c-2-1-3%201-3%206v4l-1-4-1-15c0-9%200-11-1-10l-3%202c-3-1-4%201-4%2015l-2%2015-2%2016c-1%2018-3%2019-5%204%200-11-2-9-2%203%200%209%200%2010-2%2010s-3%203-1%206c1%203%203%202%203%200%200-4%202%201%203%208%201%205%201%205%201-5v-10l2%201c3%201%203%202%201%202s-3%202-1%202l1%201v2c1%200%202%204%202%2010l1%205v-3l1%203%202%2012c1%2011%202%2012%207%2010s6-1%205%207c0%204%200%206%201%205%201-2%201-2%201%200v3c-2%201%205%2011%2012%2015%201%201%201%201-1%202-2%200-3%201-3%202l-1%201c-2-2-2%206%200%2013l-1%202-2-5-1-4-9%2018c-2%205-6%2012-6%2010-1-1-20%207-22%209h-2c1-2-2-1-6%203l-7%203H0v37a372%20372%200%20002%2039c0-2%208-1%209%201%202%204%203%206%201%204-2-1-2-1-1%202l2%2012%201%2013-3-7c-4-12-7-17-9-15%200%201-1%201-1-1-1-1-1%205-1%2012%200%2017%200%2017%205%2017h4l-4-10c-4-13-4-15-3-15l1%201%204%2013%204%2011h9l8-1%202-2h6c3-1%203-1%202%201s-1%202%205%202h7v-3a1465%201465%200%20001-35l12-1c13%200%2013%200%2014%207v6l1%2014%201%2012h27l-1-5v-7l-1-19%207%205%204%204%203%202c0%204%204%204%207%202%204-3%205-2%202%201-4%205-4%2014%201%2013%201-1%202-1%202%201s1%203%2016%203c8%200%2014%200%2013-1-2%200-4-9-3-9v-3c1-2%201-2-3-2-6%201-6%200%200-1%204-1%207%200%207%201l-1%201-1%201v2c1%200%203%208%202%209l1%201h2l2%201%201-1%202-2c1-1%201%200%201%201l1%202%204-12%201-4c1-1%201-1%201%201%200%203%200%203%201%201%201-1%202-3%201-5l1-4c4-2%204%200%204%2012v12l1-11%201-11v21h21l-1-8-1-8%201%202%201%203%201-2-1-21h2v-2h-3c-1%201-1%201-1-1%200-1%201-2%203-2%203%200%203%200%203%204s0%204%202%203v-5c1-3%2011-3%2011%200l1%203c3%200%204-4%201-4-1-1%204-1%2010-1l10%201v3c0%202-1%203-5%203-6%202-9%201-9-3%200-2%200-3-1-2l-1%206c0%205%200%205-3%205-5%200-7-1-7-7%201-7-2-3-2%205l-3%2011c-1%204-1%204-2%202s-1-2-1%201c0%202%201%203%204%205l5%206%201%202c0-1%201-2%203-2s2%200%202%202v1l1-1h1l4%201h4v-11l1-11h5c4%200%206%202%202%202-2%200-2%200%200%201l1%201c-1%200-2%200-1%201l-1%202c0%201-1%201-1-1l-2-4-1%208-1%2010c0%202%200%202%2011%202%2013%200%2013%200%2012-5l3-3%202-6%201-4v-16c1-1%201-1%201%201v2l5-3%205-4%205-1c4%200%204%200%205%205a689%20689%200%20001%2024v10h29v-14l-2-19v-6h84l1-38v-37h-44l3-3c3-3%206-4%2010-4l5-1c1-1%201-1-2-1-5%200-10%202-15%205-6%204-14%206-12%203l-1-1-1%201-15%201h-15l1-10%201-18c2-11%200-19-5-24l-1-2%201-1c0-2%202-3%204-2h1l1-2v-6l-1-6c1-1-1-2-1%200v9h-3%201v-2c-2-3-6-4-6-2h-7c-6%201-6%201-6%204s0%203%201%201l2-2v2l-2%205c-1-1-2%200-2%201%200%202-1%203-2%203-2%200-2%200-1-1%202-2%204-11%202-11l-1%202h-1c0-2-5-4-10-7-8-4-8-5-5-5l4%201%208%204c5%203%206%203%2011%202l6-1-2-2c-1-2-1-2%201-2h3c1%200%205-7%205-10l5-1c6%201%206%201%209-8%203-7%203-14%201-12-2%201-3-9-3-30a386%20386%200%2000-1-17c-2%205-4%204-4-2%200-11-1-3-2%2013%200%2013-1%2018-2%2019-2%203-3%201-4-8-2-10-3-12-8-10l-3%202v-7l-1-8%204-6c6-5%206-6%203-13-8-16-18-17-95-17a531%20531%200%2001-54-1c0%201-16%203-18%202-1-1%200-1%202-1h3l-3-1-3-1h2l3-1c0-1-22-2-23-1h-3c-2-1-2-1-1-2%202-1%201-1-2-1l-3-2%201-1v-1c-1-4-4-9-4-7m92%2051c-4%202-16%2012-16%2014h2l-2%204-2%204%207-6c15-16%2021-15%2042%205%2013%2013%2017%2016%2028%2020%2010%204%2020%203%2027-4%204-4%202-4-3%200-8%206-15%205-29-1-10-5-14-8-12-8l-4-5c-3-3-5-5-4-6h-1l-1-1c2-2-13-16-17-16h-15m-3%2016c-5%203-8%206-18%2018-4%206-7%208-9%208-5%202-5%203-3%2013l3%2010%206%201c6%201%206%201%209-3l4-5a265%20265%200%20002-10l1%206c-1%202%200%203%202%200l2-1%202-1%2010-1c10%200%2011%201%2021%2013l8%209v2l1%201c4-2%209-2%2011-1s2%201-1%201c-5%200-9%202-13%207s-4%205%201%207c3%201%203%201%206-2%204-4%209-6%2012-6%204%201%204%200%201-4-2-3-3-4-2-5%201-2%203-2%202%200l2%203c3%201%203%201%203-1%200-1%200-2%201-1l1-5c0-3%200-4-1-2s-1%200-3-8c0-7-2-10-6-13l-2-3c0-2-1-2-8-3-3-1-5-2-9-7-15-18-18-20-27-20l-9%203m134%2013l-1%2023%205-12c1-4%200-12-1-12l-2-4c0-3-1-2-1%205m-70-4c-2%200-2%201-2%202%201%203-1%203-6%201-9-4-7-1%203%205%208%204%2018%205%2024%202%202-1%203-2%202-3v-1c1-2-10-6-13-4-1%201-1%200-1-1%200-2-1-2-7-1m32%2016l-4%203-2%201c-1-1-3%200-5%203l-3%204%208%202c11%203%209%204-5%201-3%200-4%201-1%202%201%201%200%201-1%201-5%200-3%201%204%203h7l1-1c2%201%202%200%204-2l1-3-1%204c0%203%200%204%201%203%202%200%203-4%202-5v-3c2-4%202-9%201-10l-1-2c0-2-1-2-6-1m11%209c-2%203-6%2016-6%2024l-1%205%202-3%202-2v3c1%202%201%202%201-3l2-4%201-2c1-4%203-2%202%203%200%203%200%204%201%203%201-2%203-15%201-13v3l-2%201c-2%201-3%200-3-1l1-2%202-1v-1l-1-3c1-2%201-2%201%200%200%203%202%203%202%200%200-4-1-5-3-3v-2c0-5%200-5-2-2m-89%2023c0%209-2%208-2-1%200-4%200-5-2-5s-2%201-2%207c0%205%200%206-2%206l-2-1%201-1%201-5-1-6c-2%200-2%201-2%207v7l-1-7-1-7v8c0%205%200%208%201%207l7-1%206%201h1v-3l-1-8-1-6v8m54%209l-6%202h-5l2%202%203%202-3-1c-3-1-3-1-2%201v1l-4-2v3l-1-1-2-1v2l4%206c1%203%201%203%202%201s1-2%202%200l1%202v-2c0-2%200-2%201-1h5l6-1c7-1%207-1%203-8-5-6-6-6-6-5m-101%2011h-1l-1%201-1%201-1-1c1-2-2-1-4%202-2%202-2%202%200%202l3%201c1%201%200%201-3%201h-5l2%201%203%201c0%201-1%202-3%201-1%200-2%200-1%201%204%203%203%204-2%204l-6-1%201-2%204-1-4-1c-5%200-7%202-7%208v4l2-2c3-4%2010-4%209%200h2c1-2%202-2%206%205%202%203%204%206%203%207h3v-2l-1-2c0-3-3-8-5-11-3-2-2-3%201-1l4%204c2%203%202%203%202%201s0-2%202-2c1%201%202%200%203-3%200-2%202-3%203-4l2-1-2-5c-2%200-2%200-1-2%202-3-5-7-7-4m111%2031c-8%206-11%209-9%209%203%200-2%202-7%203-5%200-6%201-6%203%200%204%203%204%2015%200%2010-3%2012-4%2018-9%204-3%205-6%202-6a953%20953%200%2001-13%200M15%20363c-1%202%201%204%205%204h4l14%201c2%200%203%200%204-3l2-3-9-1c-9%200-12%200-10%202%201%201%201%201-1%201s-3%200-2-1c2-1%201-2-3-2l-4%202m126%204l3%206%205-1h5l-2%202c-3%204-3%204%206%204l8%201c1%202%200%204-2%204s-1%202%201%202v1c-2%200-2%201-2%202l1%204c0%202%207%201%208-2%202-4%201-5-1-5-4%200-3-2%201-3s5-2%204-7c-1-2-1-2-2%200l-4%201h-2c-1%201-1%201-1-1s1-3%203-2c3%202%203-1%201-2l-6-2c-3%200-3%200-1-1%202%200%202-1%200-3l-3-2-1-1-1-1c-2%200-2%201%200%204%203%204%202%205-5%205h-7c-1%201-3%200-3-2h3l-1-3v-3c1-1%200-1-2-1l-3%201h-1l-1-1%202%206m113-2c-1%203-1%203%201%203s2%201%202%204v5h8v-6c0-7%200-7-3-9-6-2-7-1-8%203M15%20387c1%204%201%204%205%203%204-2%207-2%207%201l5%202h6l1-4c1-4%201-5-4-3s-5%202-8%200l-5-1h-5c-2-1-2-1-2%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQFAgb/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAdCVFNeiTjL4CkN//8QAGhAAAQUBAAAAAAAAAAAAAAAAAgABAwQRE//aAAgBAQABBQKxLxBrLbityRyB0Il3iTi2YijDf//EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABYRAQEBAAAAAAAAAAAAAAAAAAAREP/aAAgBAgEBPwFcj//EAB4QAAIBAwUAAAAAAAAAAAAAAAABAhARISIxMmFx/9oACAEBAAY/AvSGmSvRKOWWawcqPo2P/8QAHRAAAgMAAgMAAAAAAAAAAAAAAREAITFBYXGBof/aAAgBAQABPyFRbb2oVx0iRxENm4QBZ0DBGMU04BBAa6i0hiid8RQBuj3uBV+5/9oADAMBAAIAAwAAABDAAHz/xAAWEQADAAAAAAAAAAAAAAAAAAAAAWH/2gAIAQMBAT8QiyLKsqz/xAAXEQEBAQEAAAAAAAAAAAAAAAAAEQFR/9oACAECAQE/ELiExHH/xAAfEAEBAAICAQUAAAAAAAAAAAABEQAhMdFBUWFxobH/2gAIAQEAAT8QkaUQC8FMFAUBIpnh4zmtuxGExFlEQept84GTW02DqE9u8GBAgV1kPIaC3HT7cTKqhq3X8x0AHy7z/9k=","aspectRatio":1,"src":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/1dc0b/cleancode.jpg","srcSet":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/3a5ce/cleancode.jpg 163w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/05730/cleancode.jpg 327w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/1dc0b/cleancode.jpg 653w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/f72c7/cleancode.jpg 980w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/0ff54/cleancode.jpg 1200w","srcWebp":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/0acdf/cleancode.webp","srcSetWebp":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/ac59e/cleancode.webp 163w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/7660b/cleancode.webp 327w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/0acdf/cleancode.webp 653w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/75470/cleancode.webp 980w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/9000d/cleancode.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M232%203c-3%203%205%207%2013%206%205%200%209%202%2012%206%203%205%204%205%201%205-2%200-2%205%200%208%202%202%202%202%201%203-2%201%202%203%204%203l3%201v-4c-3-6-1-7%204-2%204%204%207%208%204%207h-1c-1%201%2011%2013%2012%2012l-1-2-2-3c1-1%2010%208%2014%2014l4%205-3-7c-4-6-5-7-2-4h2c0-2-4-5-5-4l-2-1-8-10c-5-5-6-6-4-6l3%201-3-3c-4-5-6-6-9-6s-7-4-9-8c-3-6-25-15-28-11m150%2027a456%20456%200%2001-32%2027c6-7%203-5-4%202-8%208-10%2011-6%2012h4a127%20127%200%200021-23c1%201%201%201%200%200%200-2%203-4%205-3v-2c0%201%206-4%2011-11%2013-13%2013-14%201-2m-251%202a171%20171%200%2000-13%2024l-1%203h-3l-1%201%201%201c2-2%201%201-1%202l-2%202-1%204-1%203-2-3-1-3v3c0%204%203%2011%207%2016%204%204%2010%206%2019%206h5l2-6%204-10c4-6%204-6%200-8-3-1-5%200-4%204l-7%209%203-5c3-6%202-10-2-9-2%200-2%200%200-1l4-2c2%201%203%200%201-4l-3-7-1-4c-1%200-2-3-1-5%201-1%201-4-1-4v-2l2-8-3%203m133%2025c0%204%203%2010%205%2010l1-2v-1l2%205c0%202%204%206%207%206%202%200%200-7-3-11s-3-4-3-1c1%203-5-3-8-8l-2-2%201%204m39-1c3%206%202%209-2%207l1%203c2%205%202%2010-1%2010h-2l-3-1c-3%200-9-3-9-4l-1-1-1%204c0%204%201%204%204%205%204%201%206%203%204%203-1%200-2%201-1%202%200%201%200%202-1%201h-1l-1-2c1-2%201-2-5-2h-11c-8-2-8-2-12-1s-4%202-2%209c0%202%203%203%204%201h15c13%200%2013%200%2014-2%200-2%200-2%201%200%204%204%2014-11%2014-20%200-6-1-12-3-13-1-1-1-1-1%201m-111%205v7h21v-5h-10l-10%201v-5c-1-3-1-3-1%202M44%2057l3%203%202%204c0%203%209%2011%2012%2011%204-2%204-5%200-10l-5-4%203%204c4%204%201%204-4-1l-11-7m105%2016c-2%201-6%209-7%2015l-1%203h6c6-1%207-2%205-4s-1-3%201-10c1-2-2-5-4-4m-42%208l2%204%201%203c-1%201-1%200-2-1-2-5-4-3-5%205-1%203-1%203%201%203l1%202%202-1%202-2v2l-1%204c-1%201-2%209%200%208%201%200%201%204-1%208l-3%2012c-1%2014-2%2012-2-3v-13c-2-1-3%201-3%206v4l-1-4-1-15c0-9%200-11-1-10l-3%202c-3-1-4%201-4%2015l-2%2015-2%2016c-1%2018-3%2019-5%204%200-11-2-9-2%203%200%209%200%2010-2%2010s-3%203-1%206c1%203%203%202%203%200%200-4%202%201%203%208%201%205%201%205%201-5v-10l2%201c3%201%203%202%201%202s-3%202-1%202l1%201v2c1%200%202%204%202%2010l1%205v-3l1%203%202%2012c1%2011%202%2012%207%2010s6-1%205%207c0%204%200%206%201%205%201-2%201-2%201%200v3c-2%201%205%2011%2012%2015%201%201%201%201-1%202-2%200-3%201-3%202l-1%201c-2-2-2%206%200%2013l-1%202-2-5-1-4-9%2018c-2%205-6%2012-6%2010-1-1-20%207-22%209h-2c1-2-2-1-6%203l-7%203H0v37a372%20372%200%20002%2039c0-2%208-1%209%201%202%204%203%206%201%204-2-1-2-1-1%202l2%2012%201%2013-3-7c-4-12-7-17-9-15%200%201-1%201-1-1-1-1-1%205-1%2012%200%2017%200%2017%205%2017h4l-4-10c-4-13-4-15-3-15l1%201%204%2013%204%2011h9l8-1%202-2h6c3-1%203-1%202%201s-1%202%205%202h7v-3a1465%201465%200%20001-35l12-1c13%200%2013%200%2014%207v6l1%2014%201%2012h27l-1-5v-7l-1-19%207%205%204%204%203%202c0%204%204%204%207%202%204-3%205-2%202%201-4%205-4%2014%201%2013%201-1%202-1%202%201s1%203%2016%203c8%200%2014%200%2013-1-2%200-4-9-3-9v-3c1-2%201-2-3-2-6%201-6%200%200-1%204-1%207%200%207%201l-1%201-1%201v2c1%200%203%208%202%209l1%201h2l2%201%201-1%202-2c1-1%201%200%201%201l1%202%204-12%201-4c1-1%201-1%201%201%200%203%200%203%201%201%201-1%202-3%201-5l1-4c4-2%204%200%204%2012v12l1-11%201-11v21h21l-1-8-1-8%201%202%201%203%201-2-1-21h2v-2h-3c-1%201-1%201-1-1%200-1%201-2%203-2%203%200%203%200%203%204s0%204%202%203v-5c1-3%2011-3%2011%200l1%203c3%200%204-4%201-4-1-1%204-1%2010-1l10%201v3c0%202-1%203-5%203-6%202-9%201-9-3%200-2%200-3-1-2l-1%206c0%205%200%205-3%205-5%200-7-1-7-7%201-7-2-3-2%205l-3%2011c-1%204-1%204-2%202s-1-2-1%201c0%202%201%203%204%205l5%206%201%202c0-1%201-2%203-2s2%200%202%202v1l1-1h1l4%201h4v-11l1-11h5c4%200%206%202%202%202-2%200-2%200%200%201l1%201c-1%200-2%200-1%201l-1%202c0%201-1%201-1-1l-2-4-1%208-1%2010c0%202%200%202%2011%202%2013%200%2013%200%2012-5l3-3%202-6%201-4v-16c1-1%201-1%201%201v2l5-3%205-4%205-1c4%200%204%200%205%205a689%20689%200%20001%2024v10h29v-14l-2-19v-6h84l1-38v-37h-44l3-3c3-3%206-4%2010-4l5-1c1-1%201-1-2-1-5%200-10%202-15%205-6%204-14%206-12%203l-1-1-1%201-15%201h-15l1-10%201-18c2-11%200-19-5-24l-1-2%201-1c0-2%202-3%204-2h1l1-2v-6l-1-6c1-1-1-2-1%200v9h-3%201v-2c-2-3-6-4-6-2h-7c-6%201-6%201-6%204s0%203%201%201l2-2v2l-2%205c-1-1-2%200-2%201%200%202-1%203-2%203-2%200-2%200-1-1%202-2%204-11%202-11l-1%202h-1c0-2-5-4-10-7-8-4-8-5-5-5l4%201%208%204c5%203%206%203%2011%202l6-1-2-2c-1-2-1-2%201-2h3c1%200%205-7%205-10l5-1c6%201%206%201%209-8%203-7%203-14%201-12-2%201-3-9-3-30a386%20386%200%2000-1-17c-2%205-4%204-4-2%200-11-1-3-2%2013%200%2013-1%2018-2%2019-2%203-3%201-4-8-2-10-3-12-8-10l-3%202v-7l-1-8%204-6c6-5%206-6%203-13-8-16-18-17-95-17a531%20531%200%2001-54-1c0%201-16%203-18%202-1-1%200-1%202-1h3l-3-1-3-1h2l3-1c0-1-22-2-23-1h-3c-2-1-2-1-1-2%202-1%201-1-2-1l-3-2%201-1v-1c-1-4-4-9-4-7m92%2051c-4%202-16%2012-16%2014h2l-2%204-2%204%207-6c15-16%2021-15%2042%205%2013%2013%2017%2016%2028%2020%2010%204%2020%203%2027-4%204-4%202-4-3%200-8%206-15%205-29-1-10-5-14-8-12-8l-4-5c-3-3-5-5-4-6h-1l-1-1c2-2-13-16-17-16h-15m-3%2016c-5%203-8%206-18%2018-4%206-7%208-9%208-5%202-5%203-3%2013l3%2010%206%201c6%201%206%201%209-3l4-5a265%20265%200%20002-10l1%206c-1%202%200%203%202%200l2-1%202-1%2010-1c10%200%2011%201%2021%2013l8%209v2l1%201c4-2%209-2%2011-1s2%201-1%201c-5%200-9%202-13%207s-4%205%201%207c3%201%203%201%206-2%204-4%209-6%2012-6%204%201%204%200%201-4-2-3-3-4-2-5%201-2%203-2%202%200l2%203c3%201%203%201%203-1%200-1%200-2%201-1l1-5c0-3%200-4-1-2s-1%200-3-8c0-7-2-10-6-13l-2-3c0-2-1-2-8-3-3-1-5-2-9-7-15-18-18-20-27-20l-9%203m134%2013l-1%2023%205-12c1-4%200-12-1-12l-2-4c0-3-1-2-1%205m-70-4c-2%200-2%201-2%202%201%203-1%203-6%201-9-4-7-1%203%205%208%204%2018%205%2024%202%202-1%203-2%202-3v-1c1-2-10-6-13-4-1%201-1%200-1-1%200-2-1-2-7-1m32%2016l-4%203-2%201c-1-1-3%200-5%203l-3%204%208%202c11%203%209%204-5%201-3%200-4%201-1%202%201%201%200%201-1%201-5%200-3%201%204%203h7l1-1c2%201%202%200%204-2l1-3-1%204c0%203%200%204%201%203%202%200%203-4%202-5v-3c2-4%202-9%201-10l-1-2c0-2-1-2-6-1m11%209c-2%203-6%2016-6%2024l-1%205%202-3%202-2v3c1%202%201%202%201-3l2-4%201-2c1-4%203-2%202%203%200%203%200%204%201%203%201-2%203-15%201-13v3l-2%201c-2%201-3%200-3-1l1-2%202-1v-1l-1-3c1-2%201-2%201%200%200%203%202%203%202%200%200-4-1-5-3-3v-2c0-5%200-5-2-2m-89%2023c0%209-2%208-2-1%200-4%200-5-2-5s-2%201-2%207c0%205%200%206-2%206l-2-1%201-1%201-5-1-6c-2%200-2%201-2%207v7l-1-7-1-7v8c0%205%200%208%201%207l7-1%206%201h1v-3l-1-8-1-6v8m54%209l-6%202h-5l2%202%203%202-3-1c-3-1-3-1-2%201v1l-4-2v3l-1-1-2-1v2l4%206c1%203%201%203%202%201s1-2%202%200l1%202v-2c0-2%200-2%201-1h5l6-1c7-1%207-1%203-8-5-6-6-6-6-5m-101%2011h-1l-1%201-1%201-1-1c1-2-2-1-4%202-2%202-2%202%200%202l3%201c1%201%200%201-3%201h-5l2%201%203%201c0%201-1%202-3%201-1%200-2%200-1%201%204%203%203%204-2%204l-6-1%201-2%204-1-4-1c-5%200-7%202-7%208v4l2-2c3-4%2010-4%209%200h2c1-2%202-2%206%205%202%203%204%206%203%207h3v-2l-1-2c0-3-3-8-5-11-3-2-2-3%201-1l4%204c2%203%202%203%202%201s0-2%202-2c1%201%202%200%203-3%200-2%202-3%203-4l2-1-2-5c-2%200-2%200-1-2%202-3-5-7-7-4m111%2031c-8%206-11%209-9%209%203%200-2%202-7%203-5%200-6%201-6%203%200%204%203%204%2015%200%2010-3%2012-4%2018-9%204-3%205-6%202-6a953%20953%200%2001-13%200M15%20363c-1%202%201%204%205%204h4l14%201c2%200%203%200%204-3l2-3-9-1c-9%200-12%200-10%202%201%201%201%201-1%201s-3%200-2-1c2-1%201-2-3-2l-4%202m126%204l3%206%205-1h5l-2%202c-3%204-3%204%206%204l8%201c1%202%200%204-2%204s-1%202%201%202v1c-2%200-2%201-2%202l1%204c0%202%207%201%208-2%202-4%201-5-1-5-4%200-3-2%201-3s5-2%204-7c-1-2-1-2-2%200l-4%201h-2c-1%201-1%201-1-1s1-3%203-2c3%202%203-1%201-2l-6-2c-3%200-3%200-1-1%202%200%202-1%200-3l-3-2-1-1-1-1c-2%200-2%201%200%204%203%204%202%205-5%205h-7c-1%201-3%200-3-2h3l-1-3v-3c1-1%200-1-2-1l-3%201h-1l-1-1%202%206m113-2c-1%203-1%203%201%203s2%201%202%204v5h8v-6c0-7%200-7-3-9-6-2-7-1-8%203M15%20387c1%204%201%204%205%203%204-2%207-2%207%201l5%202h6l1-4c1-4%201-5-4-3s-5%202-8%200l-5-1h-5c-2-1-2-1-2%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQFAgb/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgH/2gAMAwEAAhADEAAAAdCVFNeiTjL4CkN//8QAGhAAAQUBAAAAAAAAAAAAAAAAAgABAwQRE//aAAgBAQABBQKxLxBrLbityRyB0Il3iTi2YijDf//EABYRAAMAAAAAAAAAAAAAAAAAAAABEv/aAAgBAwEBPwGWSymUz//EABYRAQEBAAAAAAAAAAAAAAAAAAAREP/aAAgBAgEBPwFcj//EAB4QAAIBAwUAAAAAAAAAAAAAAAABAhARISIxMmFx/9oACAEBAAY/AvSGmSvRKOWWawcqPo2P/8QAHRAAAgMAAgMAAAAAAAAAAAAAAREAITFBYXGBof/aAAgBAQABPyFRbb2oVx0iRxENm4QBZ0DBGMU04BBAa6i0hiid8RQBuj3uBV+5/9oADAMBAAIAAwAAABDAAHz/xAAWEQADAAAAAAAAAAAAAAAAAAAAAWH/2gAIAQMBAT8QiyLKsqz/xAAXEQEBAQEAAAAAAAAAAAAAAAAAEQFR/9oACAECAQE/ELiExHH/xAAfEAEBAAICAQUAAAAAAAAAAAABEQAhMdFBUWFxobH/2gAIAQEAAT8QkaUQC8FMFAUBIpnh4zmtuxGExFlEQept84GTW02DqE9u8GBAgV1kPIaC3HT7cTKqhq3X8x0AHy7z/9k=","aspectRatio":1,"src":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/eaa58/cleancode.jpg","srcSet":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/5a3ee/cleancode.jpg 114w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/41f8f/cleancode.jpg 229w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/eaa58/cleancode.jpg 457w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/c309b/cleancode.jpg 686w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/e3008/cleancode.jpg 914w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/0ff54/cleancode.jpg 1200w","srcWebp":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/15384/cleancode.webp","srcSetWebp":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/31fce/cleancode.webp 114w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/e3e25/cleancode.webp 229w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/15384/cleancode.webp 457w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/0258d/cleancode.webp 686w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/64ea2/cleancode.webp 914w,\n/static/7d4a98470ec7e64e3cbb19681c7c7fab/9000d/cleancode.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M232%203c-3%203%205%207%2013%206%205%200%209%202%2012%206%203%205%204%205%201%205-2%200-2%205%200%208%202%202%202%202%201%203-2%201%202%203%204%203l3%201v-4c-3-6-1-7%204-2%204%204%207%208%204%207h-1c-1%201%2011%2013%2012%2012l-1-2-2-3c1-1%2010%208%2014%2014l4%205-3-7c-4-6-5-7-2-4h2c0-2-4-5-5-4l-2-1-8-10c-5-5-6-6-4-6l3%201-3-3c-4-5-6-6-9-6s-7-4-9-8c-3-6-25-15-28-11m150%2027a456%20456%200%2001-32%2027c6-7%203-5-4%202-8%208-10%2011-6%2012h4a127%20127%200%200021-23c1%201%201%201%200%200%200-2%203-4%205-3v-2c0%201%206-4%2011-11%2013-13%2013-14%201-2m-251%202a171%20171%200%2000-13%2024l-1%203h-3l-1%201%201%201c2-2%201%201-1%202l-2%202-1%204-1%203-2-3-1-3v3c0%204%203%2011%207%2016%204%204%2010%206%2019%206h5l2-6%204-10c4-6%204-6%200-8-3-1-5%200-4%204l-7%209%203-5c3-6%202-10-2-9-2%200-2%200%200-1l4-2c2%201%203%200%201-4l-3-7-1-4c-1%200-2-3-1-5%201-1%201-4-1-4v-2l2-8-3%203m133%2025c0%204%203%2010%205%2010l1-2v-1l2%205c0%202%204%206%207%206%202%200%200-7-3-11s-3-4-3-1c1%203-5-3-8-8l-2-2%201%204m39-1c3%206%202%209-2%207l1%203c2%205%202%2010-1%2010h-2l-3-1c-3%200-9-3-9-4l-1-1-1%204c0%204%201%204%204%205%204%201%206%203%204%203-1%200-2%201-1%202%200%201%200%202-1%201h-1l-1-2c1-2%201-2-5-2h-11c-8-2-8-2-12-1s-4%202-2%209c0%202%203%203%204%201h15c13%200%2013%200%2014-2%200-2%200-2%201%200%204%204%2014-11%2014-20%200-6-1-12-3-13-1-1-1-1-1%201m-111%205v7h21v-5h-10l-10%201v-5c-1-3-1-3-1%202M44%2057l3%203%202%204c0%203%209%2011%2012%2011%204-2%204-5%200-10l-5-4%203%204c4%204%201%204-4-1l-11-7m105%2016c-2%201-6%209-7%2015l-1%203h6c6-1%207-2%205-4s-1-3%201-10c1-2-2-5-4-4m-42%208l2%204%201%203c-1%201-1%200-2-1-2-5-4-3-5%205-1%203-1%203%201%203l1%202%202-1%202-2v2l-1%204c-1%201-2%209%200%208%201%200%201%204-1%208l-3%2012c-1%2014-2%2012-2-3v-13c-2-1-3%201-3%206v4l-1-4-1-15c0-9%200-11-1-10l-3%202c-3-1-4%201-4%2015l-2%2015-2%2016c-1%2018-3%2019-5%204%200-11-2-9-2%203%200%209%200%2010-2%2010s-3%203-1%206c1%203%203%202%203%200%200-4%202%201%203%208%201%205%201%205%201-5v-10l2%201c3%201%203%202%201%202s-3%202-1%202l1%201v2c1%200%202%204%202%2010l1%205v-3l1%203%202%2012c1%2011%202%2012%207%2010s6-1%205%207c0%204%200%206%201%205%201-2%201-2%201%200v3c-2%201%205%2011%2012%2015%201%201%201%201-1%202-2%200-3%201-3%202l-1%201c-2-2-2%206%200%2013l-1%202-2-5-1-4-9%2018c-2%205-6%2012-6%2010-1-1-20%207-22%209h-2c1-2-2-1-6%203l-7%203H0v37a372%20372%200%20002%2039c0-2%208-1%209%201%202%204%203%206%201%204-2-1-2-1-1%202l2%2012%201%2013-3-7c-4-12-7-17-9-15%200%201-1%201-1-1-1-1-1%205-1%2012%200%2017%200%2017%205%2017h4l-4-10c-4-13-4-15-3-15l1%201%204%2013%204%2011h9l8-1%202-2h6c3-1%203-1%202%201s-1%202%205%202h7v-3a1465%201465%200%20001-35l12-1c13%200%2013%200%2014%207v6l1%2014%201%2012h27l-1-5v-7l-1-19%207%205%204%204%203%202c0%204%204%204%207%202%204-3%205-2%202%201-4%205-4%2014%201%2013%201-1%202-1%202%201s1%203%2016%203c8%200%2014%200%2013-1-2%200-4-9-3-9v-3c1-2%201-2-3-2-6%201-6%200%200-1%204-1%207%200%207%201l-1%201-1%201v2c1%200%203%208%202%209l1%201h2l2%201%201-1%202-2c1-1%201%200%201%201l1%202%204-12%201-4c1-1%201-1%201%201%200%203%200%203%201%201%201-1%202-3%201-5l1-4c4-2%204%200%204%2012v12l1-11%201-11v21h21l-1-8-1-8%201%202%201%203%201-2-1-21h2v-2h-3c-1%201-1%201-1-1%200-1%201-2%203-2%203%200%203%200%203%204s0%204%202%203v-5c1-3%2011-3%2011%200l1%203c3%200%204-4%201-4-1-1%204-1%2010-1l10%201v3c0%202-1%203-5%203-6%202-9%201-9-3%200-2%200-3-1-2l-1%206c0%205%200%205-3%205-5%200-7-1-7-7%201-7-2-3-2%205l-3%2011c-1%204-1%204-2%202s-1-2-1%201c0%202%201%203%204%205l5%206%201%202c0-1%201-2%203-2s2%200%202%202v1l1-1h1l4%201h4v-11l1-11h5c4%200%206%202%202%202-2%200-2%200%200%201l1%201c-1%200-2%200-1%201l-1%202c0%201-1%201-1-1l-2-4-1%208-1%2010c0%202%200%202%2011%202%2013%200%2013%200%2012-5l3-3%202-6%201-4v-16c1-1%201-1%201%201v2l5-3%205-4%205-1c4%200%204%200%205%205a689%20689%200%20001%2024v10h29v-14l-2-19v-6h84l1-38v-37h-44l3-3c3-3%206-4%2010-4l5-1c1-1%201-1-2-1-5%200-10%202-15%205-6%204-14%206-12%203l-1-1-1%201-15%201h-15l1-10%201-18c2-11%200-19-5-24l-1-2%201-1c0-2%202-3%204-2h1l1-2v-6l-1-6c1-1-1-2-1%200v9h-3%201v-2c-2-3-6-4-6-2h-7c-6%201-6%201-6%204s0%203%201%201l2-2v2l-2%205c-1-1-2%200-2%201%200%202-1%203-2%203-2%200-2%200-1-1%202-2%204-11%202-11l-1%202h-1c0-2-5-4-10-7-8-4-8-5-5-5l4%201%208%204c5%203%206%203%2011%202l6-1-2-2c-1-2-1-2%201-2h3c1%200%205-7%205-10l5-1c6%201%206%201%209-8%203-7%203-14%201-12-2%201-3-9-3-30a386%20386%200%2000-1-17c-2%205-4%204-4-2%200-11-1-3-2%2013%200%2013-1%2018-2%2019-2%203-3%201-4-8-2-10-3-12-8-10l-3%202v-7l-1-8%204-6c6-5%206-6%203-13-8-16-18-17-95-17a531%20531%200%2001-54-1c0%201-16%203-18%202-1-1%200-1%202-1h3l-3-1-3-1h2l3-1c0-1-22-2-23-1h-3c-2-1-2-1-1-2%202-1%201-1-2-1l-3-2%201-1v-1c-1-4-4-9-4-7m92%2051c-4%202-16%2012-16%2014h2l-2%204-2%204%207-6c15-16%2021-15%2042%205%2013%2013%2017%2016%2028%2020%2010%204%2020%203%2027-4%204-4%202-4-3%200-8%206-15%205-29-1-10-5-14-8-12-8l-4-5c-3-3-5-5-4-6h-1l-1-1c2-2-13-16-17-16h-15m-3%2016c-5%203-8%206-18%2018-4%206-7%208-9%208-5%202-5%203-3%2013l3%2010%206%201c6%201%206%201%209-3l4-5a265%20265%200%20002-10l1%206c-1%202%200%203%202%200l2-1%202-1%2010-1c10%200%2011%201%2021%2013l8%209v2l1%201c4-2%209-2%2011-1s2%201-1%201c-5%200-9%202-13%207s-4%205%201%207c3%201%203%201%206-2%204-4%209-6%2012-6%204%201%204%200%201-4-2-3-3-4-2-5%201-2%203-2%202%200l2%203c3%201%203%201%203-1%200-1%200-2%201-1l1-5c0-3%200-4-1-2s-1%200-3-8c0-7-2-10-6-13l-2-3c0-2-1-2-8-3-3-1-5-2-9-7-15-18-18-20-27-20l-9%203m134%2013l-1%2023%205-12c1-4%200-12-1-12l-2-4c0-3-1-2-1%205m-70-4c-2%200-2%201-2%202%201%203-1%203-6%201-9-4-7-1%203%205%208%204%2018%205%2024%202%202-1%203-2%202-3v-1c1-2-10-6-13-4-1%201-1%200-1-1%200-2-1-2-7-1m32%2016l-4%203-2%201c-1-1-3%200-5%203l-3%204%208%202c11%203%209%204-5%201-3%200-4%201-1%202%201%201%200%201-1%201-5%200-3%201%204%203h7l1-1c2%201%202%200%204-2l1-3-1%204c0%203%200%204%201%203%202%200%203-4%202-5v-3c2-4%202-9%201-10l-1-2c0-2-1-2-6-1m11%209c-2%203-6%2016-6%2024l-1%205%202-3%202-2v3c1%202%201%202%201-3l2-4%201-2c1-4%203-2%202%203%200%203%200%204%201%203%201-2%203-15%201-13v3l-2%201c-2%201-3%200-3-1l1-2%202-1v-1l-1-3c1-2%201-2%201%200%200%203%202%203%202%200%200-4-1-5-3-3v-2c0-5%200-5-2-2m-89%2023c0%209-2%208-2-1%200-4%200-5-2-5s-2%201-2%207c0%205%200%206-2%206l-2-1%201-1%201-5-1-6c-2%200-2%201-2%207v7l-1-7-1-7v8c0%205%200%208%201%207l7-1%206%201h1v-3l-1-8-1-6v8m54%209l-6%202h-5l2%202%203%202-3-1c-3-1-3-1-2%201v1l-4-2v3l-1-1-2-1v2l4%206c1%203%201%203%202%201s1-2%202%200l1%202v-2c0-2%200-2%201-1h5l6-1c7-1%207-1%203-8-5-6-6-6-6-5m-101%2011h-1l-1%201-1%201-1-1c1-2-2-1-4%202-2%202-2%202%200%202l3%201c1%201%200%201-3%201h-5l2%201%203%201c0%201-1%202-3%201-1%200-2%200-1%201%204%203%203%204-2%204l-6-1%201-2%204-1-4-1c-5%200-7%202-7%208v4l2-2c3-4%2010-4%209%200h2c1-2%202-2%206%205%202%203%204%206%203%207h3v-2l-1-2c0-3-3-8-5-11-3-2-2-3%201-1l4%204c2%203%202%203%202%201s0-2%202-2c1%201%202%200%203-3%200-2%202-3%203-4l2-1-2-5c-2%200-2%200-1-2%202-3-5-7-7-4m111%2031c-8%206-11%209-9%209%203%200-2%202-7%203-5%200-6%201-6%203%200%204%203%204%2015%200%2010-3%2012-4%2018-9%204-3%205-6%202-6a953%20953%200%2001-13%200M15%20363c-1%202%201%204%205%204h4l14%201c2%200%203%200%204-3l2-3-9-1c-9%200-12%200-10%202%201%201%201%201-1%201s-3%200-2-1c2-1%201-2-3-2l-4%202m126%204l3%206%205-1h5l-2%202c-3%204-3%204%206%204l8%201c1%202%200%204-2%204s-1%202%201%202v1c-2%200-2%201-2%202l1%204c0%202%207%201%208-2%202-4%201-5-1-5-4%200-3-2%201-3s5-2%204-7c-1-2-1-2-2%200l-4%201h-2c-1%201-1%201-1-1s1-3%203-2c3%202%203-1%201-2l-6-2c-3%200-3%200-1-1%202%200%202-1%200-3l-3-2-1-1-1-1c-2%200-2%201%200%204%203%204%202%205-5%205h-7c-1%201-3%200-3-2h3l-1-3v-3c1-1%200-1-2-1l-3%201h-1l-1-1%202%206m113-2c-1%203-1%203%201%203s2%201%202%204v5h8v-6c0-7%200-7-3-9-6-2-7-1-8%203M15%20387c1%204%201%204%205%203%204-2%207-2%207%201l5%202h6l1-4c1-4%201-5-4-3s-5%202-8%200l-5-1h-5c-2-1-2-1-2%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/7d4a98470ec7e64e3cbb19681c7c7fab/0ff54/cleancode.jpg"}}},"authors":[{"authorsPage":true,"bio":"Hello everybody 👋 !  My name is Luke and I am the creator and owner of the spaceout.pl. Personally, I am a big geek with huge love for Star Wars, Marvel and DC comic books, Funk and 80s music. I take most of my design inspiration from offline experiences like going to art museums, galleries and working with other creative people on various projects. I also work with various Activist and NGO groups as a pro-bono designer and developer.\n","id":"f69d27c7-7f9a-5fbd-b05d-1a324fd10c0a","name":"Luke Celitan","featured":true,"social":[{"url":"https://www.facebook.com/spaceout/"},{"url":"https://twitter.com/spaceout.pl"},{"url":"https://www.instagram.com/spaceout.pl/"},{"url":"https://huggingface.co/MassivDash"},{"url":"https://bsky.app/profile/lukecelitan.bsky.social"}],"slug":"/authors/luke-celitan","avatar":{"small":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/afb2b/spaceghost.jpg 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/03612/spaceghost.jpg 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/58718/spaceghost.webp 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/ed320/spaceghost.webp 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 50px) 100vw, 50px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"medium":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/59538/spaceghost.jpg 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fd013/spaceghost.jpg 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/d9b14/spaceghost.webp 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/6b183/spaceghost.webp 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 100px) 100vw, 100px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"large":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/a2637/spaceghost.jpg 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/15203/spaceghost.jpg 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/2d087/spaceghost.webp 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/29d87/spaceghost.webp 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 305px) 100vw, 305px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"}}}],"basePath":"/","tech":["Rust","Nodejs"],"category":"Post","slug":"/clean-architecture-common-pitfalls","id":"19207872-c4ca-5f5d-8ea1-af504359cb67","title":"Clean Architecture - common pitfalls","appDescription":null,"mailchimp":false,"next":[{"id":"fc731126-1fb1-5bd0-9b45-e17990fd8299","slug":"/s3-manager","secret":false,"title":"S3 Manager","author":"Luke Celitan","date":"April 27th, 2022","dateForSEO":"2022-04-27T00:00:00.000Z","timeToRead":2,"excerpt":"GUI for managing and browsking S3 buckets","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"S3 Manager\",\n  \"excerpt\": \"GUI for managing and browsking S3 buckets\",\n  \"date\": \"2022-04-27T00:00:00.000Z\",\n  \"hero\": \"s3ManagerCover.png\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"AWS S3 GUI\",\n  \"category\": \"Project\",\n  \"tech\": [\"Svelte\", \"Rust\", \"TS\", \"Tailwind\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"s3-manager\"\n  }, \"S3 Manager\"), mdx(\"p\", null, \"Hi everyone, I\\u2019m excited to share with you a project I\\u2019ve been working on for\\nthe last few months. It\\u2019s a graphical user interface to aws s3 service, which\\nlets you easily manage your buckets, files and permissions. I have wrote it\\nusing Rust lang in the backend and svelte for a frontend, and I want to tell you\\nhow fun it was working with rust backend.\"), mdx(\"p\", null, \"Rust is a systems programming language that focuses on performance, reliability\\nand concurrency. It has a powerful type system, memory safety guarantees and a\\nrich ecosystem of libraries and tools. Rust also has some unique features that\\nmake it a great choice for backend development, such as:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Ownership and borrowing: Rust uses these concepts to manage memory and\\nresources without a garbage collector, avoiding runtime overhead and memory\\nleaks.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Traits and generics: Rust allows you to define abstract interfaces and\\nimplement them for different types, enabling code reuse and polymorphism.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Async/await: Rust supports asynchronous programming with a built-in syntax\\nthat makes it easy to write concurrent code that is readable and efficient.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Error handling: Rust has a robust and expressive way of dealing with errors,\\nusing the Result and Option types and the ? operator.\")), mdx(\"p\", null, \"Using Rust for the backend of my GUI project was a rewarding experience. I\\nlearned a lot about the language and its features, and I enjoyed the challenge\\nof writing fast and reliable code. I also used some awesome crates that made my\\nlife easier, such as:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tokio: A runtime for writing async applications with Rust.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Rusoto: A AWS SDK for Rust.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Warp: A web framework that provides a simple and elegant way to create RESTful\\nAPIs.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Sveltekit: A framework for building web applications with Svelte, a reactive\\nfrontend framework that compiles to vanilla JavaScript.\")), mdx(\"p\", null, \"The result is a GUI application that is easy to use, responsive and\\ncross-platform. You can download it from my GitHub repository (link below) and\\ntry it out yourself. I hope you find it useful and fun to use. If you have any\\nfeedback or suggestions, please let me know in the comments. Thanks for reading!\"), mdx(\"h2\", {\n    \"id\": \"lightmode-ui-overview\"\n  }, \"LightMode UI overview\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"2840px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"64.84%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC0ElEQVQ4y32Ry09UdxTHr7ow7UZd+QeYCpi47MqNCxc2bdOkaqJR4yMx7nVlF6YbawGl2AoYoqD4QIQ4ghCh0lCVRwpKhZkLjKMzMA9mmAfDPO69c2fu8OmBCz5qdPHJ99zvOb+Tc85VXnx9E+eRm/gu3sHT95JxNcz4vzM4xwOoriBTkyGczz24R14zrfoJTPoJOX2EnruZHXUTGJxgpteFu3UU11kHyj9lTfjbX2KQQyuAsQgiH2CKl+djf5Wl3OSNJ7hONKI8Kb3OdKdKbuE1+sNfMLrLMXsq3vG4ivzfNeT7ajD7LmP+eWElV2nTdY7cyG3Uqg7U4w0oji23mGqfQEu8kobn0Xt+Q+++iLZKTzVa72Wbx3+IV/VeTuKucrThZtTKB6jHpGHjZgfjbS70xSyGmUcvgmbZq5uySm6JxRX4H0uetbgcqxXS8Og1lEsbunjRMoVZSGDMulkIe9GiPqzULMX0Z8iEKSb9FONeCnoU168OnIevolRu6GC09RWF4jz6rIfk3IzcUx5ko1iZuU8j+UIySCHuI2/EcZ5zMHZAJjy1/hEjbV4ZOo0W8ZKKBdGT0lCLY32SmJDASoex5gMUcvOM/SyD7bmOcnxdL8/uTUvDJIbfSVbWNqMeivM+igmvTfzNO1Y9yVtSZ4UnKGSCjP7UyfDuZpSDax7xtC0IC/Knq79Hr9uLUbdHEK0VrT+A0XgMo+GozZV9tr9cJ/GlbzHazzB8uof+HQ9Rdq1toa/NIxPqGLEAZjqKsRCRO87ZpOQ7HRdiNuLZRDBSokmpySUYODnEX18Noexcd5uOJie6HDnyxk0kGCQdi8ot596SFTIrZOMrcTxGJhIiE5ohk4rQ+6NK65cemXDjXb7b0sQP2+v5pux3dpfVsL/kPoe2dnGopHNZT2zt5mzpU86XDFJXNkDdtn5qRWtL+qkvfUbDtkEaNrlp/MLPf3bLcqcXG4ABAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/73c74f337af4d7a25cd2f343437b5458/a3bc4/lightFiles.webp 2500w\", \"/static/73c74f337af4d7a25cd2f343437b5458/46158/lightFiles.webp 2840w\"],\n    \"sizes\": \"(max-width: 2840px) 100vw, 2840px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/73c74f337af4d7a25cd2f343437b5458/412e4/lightFiles.png 2500w\", \"/static/73c74f337af4d7a25cd2f343437b5458/40555/lightFiles.png 2840w\"],\n    \"sizes\": \"(max-width: 2840px) 100vw, 2840px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/73c74f337af4d7a25cd2f343437b5458/40555/lightFiles.png\",\n    \"alt\": \"LightMode\",\n    \"title\": \"LightMode\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \"), \" \", mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"2798px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.19999999999999%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAADr0lEQVQ4yzWTfUzUBRjH759K22rk2txaL1pKwHnUMDzerixIk04FTSTjLd6EoPHq1CBS0CsV5C2naagh4AEmgZDdWAYIp0PeOTi4k5c7uBIQKOLl7jj69OuPnu277/Zsz2ff59keUbvrNTSfV2H4rhp9UzcajQlNl4G+HiNajZHB/jEGukbQdwwxqhllTGtgXDOCqUOHqXOQ8VYthsZ+dDXd9J2oRdQmKcWk6mcRM3MLZhbMFhYtFpb/sWFdWcaybMVsNWNetgiyYrEtY7bZBP3vNpZYYfSXTjTRVxA1byrBqBpi6fEAKONYqUzCUhqL9Xo8VCZAzWGo+xJ+zhA8HW4mCRL6VYJXJQsz0dB5jdGbAjD0IqKf7JUYVHpG9G0URO6i6UwMv/96Cf0NBdXHIyjNjKUoLQJF5E6+PxpGhSKBnPgossKDOR0XzbGg/RTnZzN2oxVNyCVEP7xwi4e1wi0mRriefRz1qVC6K8/RUnSMc6czcXTZwkaxMxJXDza+sRl5YBTbAjORvBPHlm2JOEojiErNw1TeQm+wACxcc5uBujG0A13UHApgMMuJtoR1mAqDuFVwDKnUFWexAzJPT+S+20lIPERg+Ane909BvjcVD1kYyWm5jCvV9BwQVj67po7B2yYeah9wYZ8rBoUL0ydfYSLdicbcL3hdLMHBfqMAluLi7MQnQZ8SHHMGb79k5AFH8HovmuT0fMbK1HQFCAlTnlahVU2i7X/AkXcdUIa4oI53ZOjom7QXJLLZ3RN3NzekguztN7DTbz/BB7Px8U9lu38Sbm8LCdNzMRTfo233ZUSRT9yhR/WY9va7vLR6LeFSMRmyZ2iKceD+2Wiksq14yWQ4OYlZ/+p65LsD+Cg4k60fJuHlHYW9g5y41G8YudzKfZ8SRCFP1tNe+4jh0QFOpqRR9PVXKGL8yQn1oK1MQV5+AXnZp4j/LIbAgH1kZBzn2/OVnMm5SlLKaXx3RKPIuYj+fDtNblWIdjz1I3erR4AFZh+NMTNhxLY0zZ+jfUxq7qFWN9LQUE9nZyvNLQ309naxODfNzOQ41sVZ5mcn+Wtxkr6cfupfa0bks6ocVbmOhSkjU0YTM39MMT05x2zFBRpi97DOXc6Gtz5gk2wP9m67SMsq5L8y/23GOi981LyV5RUzbYeHqVytE4B2Svw2VLBXUoZcXIyvuISPHe8Q9nI9B56vwtuuBvmztRx87jdS7NTkvthBsUTPFbGOq046SgRXSnRcWzvM5VVG/gXyNs+3VamzyAAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/a3bc4/lightImg.webp 2500w\", \"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/0030e/lightImg.webp 2798w\"],\n    \"sizes\": \"(max-width: 2798px) 100vw, 2798px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/412e4/lightImg.png 2500w\", \"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/92245/lightImg.png 2798w\"],\n    \"sizes\": \"(max-width: 2798px) 100vw, 2798px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/1f39b5c6ac740589d5b7bc8b6c0548fe/92245/lightImg.png\",\n    \"alt\": \"LightMode\",\n    \"title\": \"LightMode\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \")), mdx(UI, {\n    colors: ['#1F2937', '#52525b', '#F9FAFB', '#FFEDD5', '#FFF7ED'],\n    primeFontFamily: 'Roboto',\n    secondaryFontFamily: 'Audiowide',\n    background: '#FFF7ED',\n    textColor: \"#1F2937\",\n    h1: {\n      fontFamily: 'Roboto',\n      fontWeight: '700',\n      fontSize: '40px',\n      textTransform: 'uppercase',\n      color: '#1F2937'\n    },\n    h2: {\n      fontSize: '35px',\n      fontWeight: '700',\n      fontFamily: 'Roboto'\n    },\n    body: {\n      fontFamily: 'Roboto',\n      color: '#1F2937',\n      fontSize: '18px',\n      lineHeight: 1.7\n    },\n    mdxType: \"UI\"\n  }), mdx(\"h2\", {\n    \"id\": \"dark-mode-ui-overview\"\n  }, \"Dark Mode UI overview\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"2920px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"65.2%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAADeElEQVQ4y0WR20/bZRyHG6GkvzE5hFNbaKEttPRI++v5RGmhtIVBKZsBPLAZ5hgzMMHCTqVsFNguHDBBZFmWELPbRf8AvZnuRhY1RhONJoaLmZho9D94/AkXXjz5fN/vxfO+bz6ysYYSE8oC05oZch27hPSfElY/IaR8QrDxEwL1BwTrHxOseyTlIwIN+/gbdvE3PiDUuEWgroS3ZhVv5TYuYR3Z6H8H9SgqnYV6XYRaiSZTgpq2MFXa4DE1bSEpA8fzq9qQRPCYKmk+rfWjVAVxn7qDS1FCNli9jKU+S3NbO7cSBm70aMmHVOTDapZ7dRSS7RTSZlYGbcdzsa+VlWTbSUos92kxarqwKYqIwhqyiLCIVZ3DandQyth4OhPj650Zvtx4nftZK3tTcXYudFMa6eLhxTgbOS/FAT+r2bC0i1Ic9GFu8/8v9FbMYmwawBmM8fBuiS82pvjus8c8P1hn/Ow5VO1W7J4gZjGExRfG4BnBkZjHEZ/DlbiKPTqNpq0Pp6JwIhTLp9HVpWg1unl6fZJf1h0cvmfgj/23KUyN02Fsx+NyEA2HyQ5l6E1NkB69RmY0T3pojr70JXSGE6FbKJ0IW2v70eitfDQW5teSm7/WNPxTEll/Y4jGZg1Ohx2/z4dXtBPqGWVgrEDq7OKxNJG5LAmTiIpbknAVmUX+FqqqGHVqI/NxBwfjXTybMXFUDLB9vh9dp52I9Dq3243BoJO+n2FwbIXkyALx9BVi/RfR6Xsl2Q08QhGZsXwCZXWU2qZ2bM2dTHeLrCUb+SbvYv+dXsRgN6l0CpfLiSg68YSGOfNagcFzS3QnpojGz0sX9eGVyvUKN5HpykZoqgpTrTRh6/Djs4oEOzSM+7RMZiJYXN10SYV0WkTsdhGjLSYVlJP2w+hNSfSdvbS0RAicyuNTXEOmKotRc9qJxuDk9sYDVu5+yOLqJsuz8+SiPZgjZ3D0ZDGGBrDEhslOzrC+/TE3N7ZYWv2A0tYeHn8Wr3wOj+J9ZGpJWCV0YdK5+OrzZ7x4/oLDw5/4YfMOC1YD5S0+tOYkFmeODnOW4sIOf/78N799+5Kj73/n6MeXjA9cxfvKZRyKd5E1lUdoKAtK+GiQe6iTu1FW9NBSkaZFnpIyg75imLRiniuK+ywJe+SFXeaETS4J93iz8jbZyuuEhFlM8gv8C9FI4Hm3W9PDAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/c16fac002607f92a68caa474d8814ea9/a3bc4/darkImg.webp 2500w\", \"/static/c16fac002607f92a68caa474d8814ea9/5694a/darkImg.webp 2920w\"],\n    \"sizes\": \"(max-width: 2920px) 100vw, 2920px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/c16fac002607f92a68caa474d8814ea9/412e4/darkImg.png 2500w\", \"/static/c16fac002607f92a68caa474d8814ea9/5be2d/darkImg.png 2920w\"],\n    \"sizes\": \"(max-width: 2920px) 100vw, 2920px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/c16fac002607f92a68caa474d8814ea9/5be2d/darkImg.png\",\n    \"alt\": \"DarkMode\",\n    \"title\": \"DarkMode\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \"), \" \", mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"2732px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"70%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAADBUlEQVQ4y32TWU8bZxSGx2AwQwPE2wTwLJ7xggF7PNjjZYxxqAPBAaKoSkqK3Uq5oGqkSq3UNV1kp1ilraIuUqUoiiIVqkq5yX98+nmJyE178ej9znmPXp1ZPuk95ZRO7HM+Mj5mJ3VBzXjJ5vLfeNfOqUb/ohp5gRd5jhd+RnVA5Cnl6J+C36gqvwrvFyqh7ykvnOHO/o50GPqGhOES1TcIWVuEEg3eUqtc0caoFeZ1j7nBOVYW9WV/pB6zWgEjcgdX/glpP/gVilqk6WQ4O1ihdytDt5Wm1xLngd5apXuYozfEHvq9sd8VPG5l+HbPxFneIx84Q6rPfYqe2uJ2JcuTVpzedozTpjZG5XTXpC9C+yKoLwJOd+Jv+Br9pk63uUgxNggUGxbkh6hGhbBZYkbz8ClFJhddpOjGiIiDFM4Lfc3r/kgnFDGrZFkKHlCSxYb29AOW9AqpZI5S6TpubQ/HbZJaq5JcrZAc6JsMeoKEIL3u4ZRukLLLmMohpRkRmJt6QCxexUw65Jw664VtMSzqFTGUqfwP5eHcurONte4OA8vyj0jZwAdcjdpoZo58oUGu+DYZewtruEX1P7GG23us5a9jZV0sEViR+0jJwF3mI1mWjRxWvkncuYmSrhM0qwQtb6Rm5RLrsh9O1tCyNwilyxjRAzz5MVJaBE4HbW47SV4dW1wcpbi4Z3F+d4DJ+f0VLjr5MTbn76ZG/YEv5v4R8y/u6dSNXfEOu0ja9E1mQ1nctRwntTRHeY12wRwTp120aLtJOm5qhKg7wusURtp2TI4KKvnFXbHhd0jXpmrMR1dRTAcl02BePIos/nxZK44pMKNuMK3aTAkmtZzAxj+o9TxXEmX8RhY9skNDfiQC/ZsszNmo4sOsJTxWxPVLqpck1DqrWpOa/g7b+hEt/f0hO/oxTeM+u8ljauYdcdc71OXPxD85uYky4RH2lbgqbbAgOUR9DZYmWiz5WiwLVN8+1YkPOZl8wpf+ZzzyP+cL/1M+8f/Bif9n2oEf2J/9mmLgIf8CjOHDk7qWKZ0AAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/355626eec6bd9de3a88a60da8c7f8c8c/a3bc4/darkFiles.webp 2500w\", \"/static/355626eec6bd9de3a88a60da8c7f8c8c/57c94/darkFiles.webp 2732w\"],\n    \"sizes\": \"(max-width: 2732px) 100vw, 2732px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/355626eec6bd9de3a88a60da8c7f8c8c/412e4/darkFiles.png 2500w\", \"/static/355626eec6bd9de3a88a60da8c7f8c8c/f2f36/darkFiles.png 2732w\"],\n    \"sizes\": \"(max-width: 2732px) 100vw, 2732px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/355626eec6bd9de3a88a60da8c7f8c8c/f2f36/darkFiles.png\",\n    \"alt\": \"DarkMode\",\n    \"title\": \"DarkMode\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \")), mdx(UI, {\n    colors: ['#1E293B', '#0F172A', '#FFEDD5', '#FFF7ED', '#F9FAFB', '#FFF'],\n    primeFontFamily: 'Roboto',\n    secondaryFontFamily: 'Audiowide',\n    background: '#1E293B',\n    textColor: \"#FFF\",\n    h1: {\n      fontFamily: 'Roboto',\n      fontWeight: '700',\n      fontSize: '40px',\n      textTransform: 'uppercase',\n      color: '#fff'\n    },\n    h2: {\n      fontSize: '35px',\n      fontWeight: '700',\n      fontFamily: 'Roboto'\n    },\n    body: {\n      fontFamily: 'Roboto',\n      color: '#fff',\n      fontSize: '18px',\n      lineHeight: 1.7\n    },\n    mdxType: \"UI\"\n  }), mdx(\"h2\", {\n    \"id\": \"installation-files\"\n  }, \"Installation files\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/S3_Manager/releases\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"releases\")), mdx(\"h2\", {\n    \"id\": \"features\"\n  }, \"Features\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Dark and light mode dependant on system preferences\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Files, Pictures, Movies and buckets gallery (grid style)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Optimized for looking through the pictures / movies, lazy loading, images and\\nmovies streamed dritecly from the bucket, are loaded with presigned urls.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Adjustable grid gallery\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Simple name search\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"folders filtering in movies and images pages\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tagging of assets\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Folder creation\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Multi file upload (drop files)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Galleries remember scroll positions while navigating the app.\")), mdx(\"h3\", {\n    \"id\": \"aws-account\"\n  }, \"AWS Account\"), mdx(\"p\", null, \"In order to use the application you need aws account with s3 service activated.\\nS3 app uses standard aws config files used for aws cli connection\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"info here\"), \".\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"~/.aws/credentials\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"[default]\\naws_access_key_id=AKIAIOSFODNN7EXAMPLE\\naws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"~/.aws/config\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"[default]\\nregion=us-west-2\\noutput=json\\n\")), mdx(\"h3\", {\n    \"id\": \"alternate-s3-endpoint\"\n  }, \"Alternate s3 endpoint\"), mdx(\"p\", null, \"Set env vars \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"S3_CUSTOM_ENDPOINT\"), \" to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"true\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"1\"), \" at your machine to alter the\\ns3 default endpoints Set the alternative endpoint url with\\n\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"S3_CUSTOM_ENDPOINT_URL\"), \" env\"), mdx(\"p\", null, \"Rust lang (cargo) and node.js (npm or yarn) and tauri-cli instalations are\\nneeded to run / build the project from source\"), mdx(\"p\", null, \"This application is based on \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://tauri.app/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"tauri.app\"), \", RUST lang in the\\nbackend (core of the app and frontend things are handled by svelte + vite + ts\\ncombo.\"), mdx(\"p\", null, \"Simple division: Rust manages the data and the calls, front end displays the\\ndata.\"), mdx(\"h2\", {\n    \"id\": \"github-info\"\n  }, \"Github info\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/MassivDash/S3_Manager\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://github.com/MassivDash/S3_Manager\")), mdx(\"p\", null, \"Don\\u2019t forget to \\u2B50 the project if you found it helpful.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["Svelte","Rust","TS","Tailwind"],"category":"Project","appDescription":"AWS S3 GUI","hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y4VT+0+bVRjuf2BM1OmccRujBGd0CzBMdEAUURHdHOp+GGBEhJEtbi7RNQ4cRqNGN1xkGgXb0nvXLKy0hV0EQQesK1CuExjrECalQC9AaQuMr4/vOV0ZRtGTPN97znu+85z38hyRIAhgCAthAtlwGFHfCpYZlrFMYDbiu7Om+Wq/6B+H10KUiDA2+gcmJpwIBoNEdpsTRsEJWVTRsRJxOBIxI7q9tMTXCwsLuD40iHabFW2tLXA6x/mZ5VXRiphjiQ54vR6EQqEVsigx27vpcGBsbBT9fb3o6bbj4oXzMJuMfO73++9ezgiXFhcxOenCLTowfH0Ic3NzPBJG5PP50NluQ3PTL7BdtXLCOkstDh4oxlt5Oai3mOD1eOB2TyNE6bMhmp2dwQSFHrFO9PX2YOSmg1IQiHwW3V2duGq9AmW1DHLZTyg/8RVOEq60tcI9PY3ZmRl02TvgHI+kLxqmmvT39cDlclFkIZzRa9HQ8DPfDAQCPEqfz8vr9fu1fvq3jyJy82aMjDigUlbj49ISzM/PRwhZDVgqvb3dMNUaUV9fx9dddjs6OtoxODjACf8+wrBa23D06Ad4t+AdpKWmQK1WRQjZh9XM5ZrA5d9+xZHDh9Da0gLHjWGYjTUw0yUGvQ4ymZSi10NRLYdE8iEynk9HSspOVHx7CsX7i9DY2BAhZO3GKtmwTg8NDPD0pJU/4svPP4NGpeD2VPlJHCjej9SUZ5CXuw97XtvFG1RVVYlFau6KDqNgg9XsEslCIZdCQilp1UpotSoqQSdvGMvCYjahrOw4knck4cj7h/DD96e50HmEqwm9Xi8velvLZZJKI+/+9NQUtBo1CvLfRmFBPsklF7FbYiCOjUVpyTHYOzvo5YxyrapVSiK8kzKzk1THqclJLFJNfSR0JlwryYNJ5psTX8NYcxbFRYUUWQJ2v5rFazs4cA1e0uEXVJLkpMRIU4IkYicR+al+UyRUG93qnvGhllIrOV6Ksk8/gYK6aKO0G5ubUGsxQ65UoOK70zCcNaCddLgvNweSYx9B1HS4CBcKc3Audw+MBEv+XujffBk1edlQ7M5A+c4EVGWmQf36S4RMVGamouFgPqyS9yDflQ5p1rPQvJGJiueegm5vFkTymPugT9gCQ3I8ziSJodu2GYZEMVRxD0Idez/08euhiVtH8wc42Fy+6V5IH70HGvE6vlbRf7r4h7gVqZ/YiJr0HTj34tMwvZKGuuwXYMnOgHZ7DFRbN0D9+CPcKh97GCoCt7SO+u761/O5SJsYJ2i2bRI0TzJsFOgCWm8WNNtjBAXNZVs3CEry65PiBF2i+H8hClA3gySXAGGBHrr7z1vw01v108Mf6ulG8/k6jDtu8L2Ah/3r4fZfQXusy/1rIfwfe2vhL/Kc+noaqXyIAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/7e76a640f9382dc8a36ea033c8346b68/a1946/s3ManagerCover.png","srcSet":"/static/7e76a640f9382dc8a36ea033c8346b68/5b37e/s3ManagerCover.png 236w,\n/static/7e76a640f9382dc8a36ea033c8346b68/49058/s3ManagerCover.png 472w,\n/static/7e76a640f9382dc8a36ea033c8346b68/a1946/s3ManagerCover.png 944w,\n/static/7e76a640f9382dc8a36ea033c8346b68/6050d/s3ManagerCover.png 1200w","srcWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/99fbb/s3ManagerCover.webp","srcSetWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/77392/s3ManagerCover.webp 236w,\n/static/7e76a640f9382dc8a36ea033c8346b68/1f177/s3ManagerCover.webp 472w,\n/static/7e76a640f9382dc8a36ea033c8346b68/99fbb/s3ManagerCover.webp 944w,\n/static/7e76a640f9382dc8a36ea033c8346b68/9000d/s3ManagerCover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M283%2069c-3%202-4%203-4%205s0%202-1%201c0-3-1-2-11%204-6%203-8%205-8%206%200%202%200%202%202%202v2c0%202%200%202%202%201l2-3h3l2-1c0%201-2%203-5%204-3%202-6%204-6%206l-3%203c-2%201-2%201-2-2%201-3-1-4-4-1-3%202-2%203%200%203h2l-2%203-2%202h1l3-1%202-1%204-2c3-2%203-2%2014%202l11%203%201-9%201-9%201%209%201%2010%207-3%206-3c2%200%204-3%205-5l-2-2c-1%200-3-2-1-3s-1-9-4-9l-1-1-3-1h-2l-5-3c-8-3-8-3-3-6%204-2%205-3%203-3l-4%202m-93%2024c1%201%201%201-1%201h-4l2%201%203%201-3%201c-2%200-2%200-1%201h3c4-1%205-1%205%202%201%203%205%207%2010%208%201%201%202%201%202-2%201-3%201-4%204-3l4%203c2%202%202%202-2%204-3%201-4%202-3%204h4c0-3%202-3%202%200%201%203%200%203-2%202l-3%201h4c3%200%204%200%203%201-2%200-1%202%201%202%205%200%207%201%207%203l1%202h1l2%201%201-2-1-2c-3%201-3-1-1-3%204-5%2015-4%2015%201l-1%202h-2l-2%201h-2l2%201c4%202%2024-2%2029-5l3-1c3-1%203-1%202-2h1c2%200%202%200%201-1v-1h2l1%201v-4c-1-1-2-2-3-1-1%200-12-3-15-6-3-1-5-1-4%201l-3%202-4%202c-1%203-6%204-10%202h2l4-1-6-1h-6l1-1h-2c-3%200-3%200-1-1h-2c-3%200-3%200-1-1h-1c-3%200-3%200-2-1v-1l-2-2-3-3v1l-2%203h1l2%201v1h-1v7l-1-2-1-3v-1l-1-1-2-3c0-2-1-2-3-1-3%200-3%200-2-1s1-1-1-1h-2c-3%200-3%200-2-1s1-1-1-1h-3c-3%200-3%200-1-1h-2c-2%200-3%200-2-1%202-1%202-1-1-2h-4m-87%2023l-2%203c-2%202-3%209-2%209%201%201-2%203-7%205-6%203-8%204-7%205h5c2-1%204-1%2014%202l12%204-4-4c-6-6-7-9-7-18l-1-8-1%202m258%202l-8%207-6%203a307%20307%200%2001-33%2018c-21%2012-40%2019-59%2021l-7%201%202%201%2013-1%208-1c9-1%2018-4%2024-7l6-2-5%204c-17%207-38%2011-63%2011-18%200-24%200-43-4l-4%201%201%202%201%2010c0%208%200%2010-2%2011v1c2%200%204-2%203-5l1-3%201%202c-1%202%200%203%201%203l1-3%201-3c1-1%201-1%201%201l2%202c2-1%204-2%202-2l-1-2h1l3%201%203-1-3%202-2%202h2l4-1%201-3c1-3%201-3%201%202%200%203%200%205%201%204h2v2l-1%203c0%202%208%201%2014-1l4-1c2%203%204%200%204-6%200-4%200-5%201-3%200%203%200%203%205%203l9%201c2%200%203%200%203%204l1%206v2c-1%202-1%207%201%208%202%200%203-3%201-4v-1l2%201%201%201c3%200%204%200%204%202l1%201%201-1%202-1-1-2c-3-1-3-1%202-1h4c-2-1-2-1%200-1l3-1h1l1-2v1l1%201%201-2h2v2c-1%201-2%201%2014%201%2014%200%2016%201%2010%204-7%204-12%206-14%205l-1%201c1%201-12%205-25%208-14%202-45%202-60-1-14-2-23-5-23-6h3l4%201-3-2c-4-1-4-2-5-4l1-3%201%201%204%201c4-1%205%200%203%202l-1%201%206%202-2-1c-2-1-2-1-1-3%201-3%201-3-3-3a374%20374%200%2001-9-1l-5%205c-3%201-4%204-4%206%201%201-4%205-10%208l-4%204%204-2%206-2h1c0-1%208-4%2012-4%206-1%2021%2014%2024%2025%201%202%201%202-1%201s-3-1-6%203c-5%205-7%206-8%203s-2-2-1%201c0%203%200%203-4%205-3%202-4%202-5%200-5-5-7-5-4%200%202%204%201%204-4%207s-9%203-5%200c2%200%202-1%200-2-1-1-1-1-1%201s0%202-1%201l-1-1-1-2v-1l-3-4c-3-5-7-9-7-7l2%202c1%201%202%203%200%203v1l-6-6-10-9-3-3h-1c0%201-1%201-3-1-5-2-4%200%201%203%2012%206%2024%2020%2026%2030l1%205%204-2%206-4a183%20183%200%200131-15c1%202-39%2025-43%2025h-2l2%201%202%204v3h-28c-25%200-27%200-25-2%202%200%203-1%203-2l-6%203-14%201-12-1-1-1-1%201-6%201-3-1c1-1%201-1-1-1-3-1-5%200-3%201%201%201-5%201-13%201H0v75h69a1061%201061%200%200197%203l-1%203v2l4-2c3-2%204-4%204-5l1-1%201%202h1v-1l1-1%203%201-1%201-3%203-7%204-3%204v3l19-11%208-5h208v-75h-6c-6%200-6%200-4-1v-2l-2%202-4%201h-2l3-2c8-7%2017-21%2013-23v-1l1-13c0-14%200-15-6-17-3-1-12%200-10%202v3l-1-2-2-1-1%202-1%202v2h-3v1c1%201-2%205-4%203l-1%201v1l-1-1-2%201c-1%201-2%203-1%205l-1%205-1%203-1-3c-1-2-1-2-2%202v6l-1%201c-2-2-2%2014%200%2020%202%203%202%203-1%203l-3-1h-1l-2%201-2-1-3-2-3-1-6-3h3l2-1-2-1v-1c1%200%202-1%201-2l-1-4c0-4%200-3-1%201-1%203-2%203-8%201-2%200-2%200%200%201%201%202%201%202-2%202l-4-1%205%202c2%202%205%203%205%202l1%201h-5c-2-1-2%200%201%202%204%204%203%205-3%205-4%200-5%200-6-2-1-1-2-2-3-1-1%200-1%201%201%202l1%201c-3%200-5-1-4-3v-1h-1c0%202-2%202-5%200h1l2-1-1-2h-2v-1h2c1-1%202%200%203%201%200%202%205%201%205-1%201-1%201-1%201%201s4%204%204%202l1-2-1-2-2-1-2-1h-7l-3-3-4-2-2-2-1-2h-1c0%202-2%203-2%201v-4c-1-3%200-4%201-1l2%201%202%201c1%202%204%201%204-1l-2-1-2-2c0-1%201-1%206%201%204%201%204%201%206-1v-7c-1%200-2%201-1%202%200%201-1%201-5-1-10-4-12-4-8%203%202%204%201%205-2%202-1-1-2-3-1-5%200-1%200-2-1-1l-1%202c-2%200-1-3%201-5%203-3%207-11%206-13h2c-1-1%200-3%202-4%203-4%204-7%203-9s-1-10%201-14c1-4%203-6%2022-16l14-10v-3l4-3c19-12%2020-27%203-38l-4-5-2-4c-1-1%200-2%204-6%203-2%204-4%203-5-1%200-1-1%201-3%202-4%201-3-3%201M63%20148c0%203%204%2014%207%2017%203%204%205%205%2011%208%206%202%208%203%207%204v1l2-1h11l4-5%203-7v-1a12889%2012889%200%2001-45-16m88%205c-1%203%200%204%201%202l2-1%203%202v1l5%202a46%2046%200%200110%202l5%203h2l3%201h3c2-1%202-3-1-3l-17-5c-15-5-16-6-16-4m18%2020l-2%201c-2%200-2%200-2%2012l-1%2013c-2%201-3%200-1-1l1-2h-1l-1-3%201-5v-1l-2%201c-1%201-1%201-1-3l-1-7c0-3%200-3-1-1l-2%202c-1%200-3%203-2%204l3-1c2-1%202-1%202%203%200%202-1%203-3%204l-3%202-1-2c0-5%200-5-2-5-2%201-3%201-3-1s-1-2-2%200l-1%201c3-1%202%201-1%202-1%201-2%201-1%202l3-1c1-1%201-1%201%205-1%205%200%206%201%204h1l1-1h6c2%200%202%200%201%201l-4%202-3%202-8%205c-6%203-10%207-6%206h1c-2%202-3%202-10-1-15-6-18-7-17-8%200-2-2-3-4-2v1l1%202c0%201%201%202%205%203l4%202%202%201-1%202-2%206c0%202-1%203-3%204-3%202-5%205-3%204l4-2%201%201c-2%202%203%202%208%200%208-3%209-4%207-5%200-1-2-1-5%201-6%204-7%204-8-1l1-4%201%204c0%204%201%204%203%200%201-4%201-4-1-4v-1l1-2c0-2%201-2%206%200%204%202%205%202%204%205v4l3-1c2-2%204-2%205-1h8c2%200%204%200%206-2l4-2%201-3c0-1%201-3%205-5l5-3v-7c0-6%200-7%201-6l1%202c-2%201-1%203%201%202h2l-2%204c-2%204-2%204%200%204l4-2%202-1%202-2c4-1%206-3%205-9l1-8v-1l-1-3c-1-3-4-6-4-4h-5c-1-1-1%200-1%203%200%204-2%206-2%202%200-3-2-7-2-5m167%2031c-10%206-12%208-12%2013l-1%206v3l1%202v7h3l2-4%204-4c0-2%200-2-4-1-4%203-4%201-1-3s5-5%209-4h8l5-2h5l2%202h9c1-1%200-3-3-4l-2-3c0-3%200-4-2-5s-3-2-3-4c-1-3-1-3-1%200s0%204-2%204c-4-2-6-2-8-1h-1l1-2c2%200%201-5%200-5l-9%205m-98%2032l2%201c2%200%202%201%202%2010v10l-3-1c-5%200-6-5-1-5l4-1h-4c-2%200-3%200-3-2l-2-2-2%201c0%202-1%202-6%200-9-3-8-4-8%2017v21c-1%201%201%201%208%201%208%200%2011-2%203-2l6-1%2019-2%208-1c-1%201-2%202-1%203v3h46v-8c0-7%200-7-2-6l-9-2-6-2c-1%206-3%2010-8%2012-5%203-10%201-5-2h3v1l2-1-1-1v-2c2-1%202-7%201-7l-4%202h-6c-2-1-22%205-24%207s-5%203-5%200l-2-1h-1v-1l-2-1c0-3%205-2%207%200h1l1-2v-2l1-1%201%201c-2%202%201%202%206%201%204-1%207-3%204-3l5-3c7-4%208-5%202-5l-10-1c-6%200-7%200-9%202l-2%202v-13l1-13%203-1-5-1-5%201m-35%2013l3%203c4%202%204%202%201%204-2%201-2%202-2%2015v15l1-14c0-10%201-14%202-15l1%201%201%201c2-2%203%200%202%202l-2%201-1%2011%201%208%202-4v7c2%200%205-8%203-8v-8l-1-4-2%201%201-2c4-3%202-10-4-14-4-3-6-3-6%200m-15%2025l-3%203%203-1h3v5c0%205%200%205%203%205l4-2%201-2%201-4c0-4%200-5-3-6-5-2-6-1-9%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y4VT+0+bVRjuf2BM1OmccRujBGd0CzBMdEAUURHdHOp+GGBEhJEtbi7RNQ4cRqNGN1xkGgXb0nvXLKy0hV0EQQesK1CuExjrECalQC9AaQuMr4/vOV0ZRtGTPN97znu+85z38hyRIAhgCAthAtlwGFHfCpYZlrFMYDbiu7Om+Wq/6B+H10KUiDA2+gcmJpwIBoNEdpsTRsEJWVTRsRJxOBIxI7q9tMTXCwsLuD40iHabFW2tLXA6x/mZ5VXRiphjiQ54vR6EQqEVsigx27vpcGBsbBT9fb3o6bbj4oXzMJuMfO73++9ezgiXFhcxOenCLTowfH0Ic3NzPBJG5PP50NluQ3PTL7BdtXLCOkstDh4oxlt5Oai3mOD1eOB2TyNE6bMhmp2dwQSFHrFO9PX2YOSmg1IQiHwW3V2duGq9AmW1DHLZTyg/8RVOEq60tcI9PY3ZmRl02TvgHI+kLxqmmvT39cDlclFkIZzRa9HQ8DPfDAQCPEqfz8vr9fu1fvq3jyJy82aMjDigUlbj49ISzM/PRwhZDVgqvb3dMNUaUV9fx9dddjs6OtoxODjACf8+wrBa23D06Ad4t+AdpKWmQK1WRQjZh9XM5ZrA5d9+xZHDh9Da0gLHjWGYjTUw0yUGvQ4ymZSi10NRLYdE8iEynk9HSspOVHx7CsX7i9DY2BAhZO3GKtmwTg8NDPD0pJU/4svPP4NGpeD2VPlJHCjej9SUZ5CXuw97XtvFG1RVVYlFau6KDqNgg9XsEslCIZdCQilp1UpotSoqQSdvGMvCYjahrOw4knck4cj7h/DD96e50HmEqwm9Xi8velvLZZJKI+/+9NQUtBo1CvLfRmFBPsklF7FbYiCOjUVpyTHYOzvo5YxyrapVSiK8kzKzk1THqclJLFJNfSR0JlwryYNJ5psTX8NYcxbFRYUUWQJ2v5rFazs4cA1e0uEXVJLkpMRIU4IkYicR+al+UyRUG93qnvGhllIrOV6Ksk8/gYK6aKO0G5ubUGsxQ65UoOK70zCcNaCddLgvNweSYx9B1HS4CBcKc3Audw+MBEv+XujffBk1edlQ7M5A+c4EVGWmQf36S4RMVGamouFgPqyS9yDflQ5p1rPQvJGJiueegm5vFkTymPugT9gCQ3I8ziSJodu2GYZEMVRxD0Idez/08euhiVtH8wc42Fy+6V5IH70HGvE6vlbRf7r4h7gVqZ/YiJr0HTj34tMwvZKGuuwXYMnOgHZ7DFRbN0D9+CPcKh97GCoCt7SO+u761/O5SJsYJ2i2bRI0TzJsFOgCWm8WNNtjBAXNZVs3CEry65PiBF2i+H8hClA3gySXAGGBHrr7z1vw01v108Mf6ulG8/k6jDtu8L2Ah/3r4fZfQXusy/1rIfwfe2vhL/Kc+noaqXyIAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/7e76a640f9382dc8a36ea033c8346b68/3ddd4/s3ManagerCover.png","srcSet":"/static/7e76a640f9382dc8a36ea033c8346b68/078a8/s3ManagerCover.png 163w,\n/static/7e76a640f9382dc8a36ea033c8346b68/e56da/s3ManagerCover.png 327w,\n/static/7e76a640f9382dc8a36ea033c8346b68/3ddd4/s3ManagerCover.png 653w,\n/static/7e76a640f9382dc8a36ea033c8346b68/c5cc7/s3ManagerCover.png 980w,\n/static/7e76a640f9382dc8a36ea033c8346b68/6050d/s3ManagerCover.png 1200w","srcWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/0acdf/s3ManagerCover.webp","srcSetWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/ac59e/s3ManagerCover.webp 163w,\n/static/7e76a640f9382dc8a36ea033c8346b68/7660b/s3ManagerCover.webp 327w,\n/static/7e76a640f9382dc8a36ea033c8346b68/0acdf/s3ManagerCover.webp 653w,\n/static/7e76a640f9382dc8a36ea033c8346b68/75470/s3ManagerCover.webp 980w,\n/static/7e76a640f9382dc8a36ea033c8346b68/9000d/s3ManagerCover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M283%2069c-3%202-4%203-4%205s0%202-1%201c0-3-1-2-11%204-6%203-8%205-8%206%200%202%200%202%202%202v2c0%202%200%202%202%201l2-3h3l2-1c0%201-2%203-5%204-3%202-6%204-6%206l-3%203c-2%201-2%201-2-2%201-3-1-4-4-1-3%202-2%203%200%203h2l-2%203-2%202h1l3-1%202-1%204-2c3-2%203-2%2014%202l11%203%201-9%201-9%201%209%201%2010%207-3%206-3c2%200%204-3%205-5l-2-2c-1%200-3-2-1-3s-1-9-4-9l-1-1-3-1h-2l-5-3c-8-3-8-3-3-6%204-2%205-3%203-3l-4%202m-93%2024c1%201%201%201-1%201h-4l2%201%203%201-3%201c-2%200-2%200-1%201h3c4-1%205-1%205%202%201%203%205%207%2010%208%201%201%202%201%202-2%201-3%201-4%204-3l4%203c2%202%202%202-2%204-3%201-4%202-3%204h4c0-3%202-3%202%200%201%203%200%203-2%202l-3%201h4c3%200%204%200%203%201-2%200-1%202%201%202%205%200%207%201%207%203l1%202h1l2%201%201-2-1-2c-3%201-3-1-1-3%204-5%2015-4%2015%201l-1%202h-2l-2%201h-2l2%201c4%202%2024-2%2029-5l3-1c3-1%203-1%202-2h1c2%200%202%200%201-1v-1h2l1%201v-4c-1-1-2-2-3-1-1%200-12-3-15-6-3-1-5-1-4%201l-3%202-4%202c-1%203-6%204-10%202h2l4-1-6-1h-6l1-1h-2c-3%200-3%200-1-1h-2c-3%200-3%200-1-1h-1c-3%200-3%200-2-1v-1l-2-2-3-3v1l-2%203h1l2%201v1h-1v7l-1-2-1-3v-1l-1-1-2-3c0-2-1-2-3-1-3%200-3%200-2-1s1-1-1-1h-2c-3%200-3%200-2-1s1-1-1-1h-3c-3%200-3%200-1-1h-2c-2%200-3%200-2-1%202-1%202-1-1-2h-4m-87%2023l-2%203c-2%202-3%209-2%209%201%201-2%203-7%205-6%203-8%204-7%205h5c2-1%204-1%2014%202l12%204-4-4c-6-6-7-9-7-18l-1-8-1%202m258%202l-8%207-6%203a307%20307%200%2001-33%2018c-21%2012-40%2019-59%2021l-7%201%202%201%2013-1%208-1c9-1%2018-4%2024-7l6-2-5%204c-17%207-38%2011-63%2011-18%200-24%200-43-4l-4%201%201%202%201%2010c0%208%200%2010-2%2011v1c2%200%204-2%203-5l1-3%201%202c-1%202%200%203%201%203l1-3%201-3c1-1%201-1%201%201l2%202c2-1%204-2%202-2l-1-2h1l3%201%203-1-3%202-2%202h2l4-1%201-3c1-3%201-3%201%202%200%203%200%205%201%204h2v2l-1%203c0%202%208%201%2014-1l4-1c2%203%204%200%204-6%200-4%200-5%201-3%200%203%200%203%205%203l9%201c2%200%203%200%203%204l1%206v2c-1%202-1%207%201%208%202%200%203-3%201-4v-1l2%201%201%201c3%200%204%200%204%202l1%201%201-1%202-1-1-2c-3-1-3-1%202-1h4c-2-1-2-1%200-1l3-1h1l1-2v1l1%201%201-2h2v2c-1%201-2%201%2014%201%2014%200%2016%201%2010%204-7%204-12%206-14%205l-1%201c1%201-12%205-25%208-14%202-45%202-60-1-14-2-23-5-23-6h3l4%201-3-2c-4-1-4-2-5-4l1-3%201%201%204%201c4-1%205%200%203%202l-1%201%206%202-2-1c-2-1-2-1-1-3%201-3%201-3-3-3a374%20374%200%2001-9-1l-5%205c-3%201-4%204-4%206%201%201-4%205-10%208l-4%204%204-2%206-2h1c0-1%208-4%2012-4%206-1%2021%2014%2024%2025%201%202%201%202-1%201s-3-1-6%203c-5%205-7%206-8%203s-2-2-1%201c0%203%200%203-4%205-3%202-4%202-5%200-5-5-7-5-4%200%202%204%201%204-4%207s-9%203-5%200c2%200%202-1%200-2-1-1-1-1-1%201s0%202-1%201l-1-1-1-2v-1l-3-4c-3-5-7-9-7-7l2%202c1%201%202%203%200%203v1l-6-6-10-9-3-3h-1c0%201-1%201-3-1-5-2-4%200%201%203%2012%206%2024%2020%2026%2030l1%205%204-2%206-4a183%20183%200%200131-15c1%202-39%2025-43%2025h-2l2%201%202%204v3h-28c-25%200-27%200-25-2%202%200%203-1%203-2l-6%203-14%201-12-1-1-1-1%201-6%201-3-1c1-1%201-1-1-1-3-1-5%200-3%201%201%201-5%201-13%201H0v75h69a1061%201061%200%200197%203l-1%203v2l4-2c3-2%204-4%204-5l1-1%201%202h1v-1l1-1%203%201-1%201-3%203-7%204-3%204v3l19-11%208-5h208v-75h-6c-6%200-6%200-4-1v-2l-2%202-4%201h-2l3-2c8-7%2017-21%2013-23v-1l1-13c0-14%200-15-6-17-3-1-12%200-10%202v3l-1-2-2-1-1%202-1%202v2h-3v1c1%201-2%205-4%203l-1%201v1l-1-1-2%201c-1%201-2%203-1%205l-1%205-1%203-1-3c-1-2-1-2-2%202v6l-1%201c-2-2-2%2014%200%2020%202%203%202%203-1%203l-3-1h-1l-2%201-2-1-3-2-3-1-6-3h3l2-1-2-1v-1c1%200%202-1%201-2l-1-4c0-4%200-3-1%201-1%203-2%203-8%201-2%200-2%200%200%201%201%202%201%202-2%202l-4-1%205%202c2%202%205%203%205%202l1%201h-5c-2-1-2%200%201%202%204%204%203%205-3%205-4%200-5%200-6-2-1-1-2-2-3-1-1%200-1%201%201%202l1%201c-3%200-5-1-4-3v-1h-1c0%202-2%202-5%200h1l2-1-1-2h-2v-1h2c1-1%202%200%203%201%200%202%205%201%205-1%201-1%201-1%201%201s4%204%204%202l1-2-1-2-2-1-2-1h-7l-3-3-4-2-2-2-1-2h-1c0%202-2%203-2%201v-4c-1-3%200-4%201-1l2%201%202%201c1%202%204%201%204-1l-2-1-2-2c0-1%201-1%206%201%204%201%204%201%206-1v-7c-1%200-2%201-1%202%200%201-1%201-5-1-10-4-12-4-8%203%202%204%201%205-2%202-1-1-2-3-1-5%200-1%200-2-1-1l-1%202c-2%200-1-3%201-5%203-3%207-11%206-13h2c-1-1%200-3%202-4%203-4%204-7%203-9s-1-10%201-14c1-4%203-6%2022-16l14-10v-3l4-3c19-12%2020-27%203-38l-4-5-2-4c-1-1%200-2%204-6%203-2%204-4%203-5-1%200-1-1%201-3%202-4%201-3-3%201M63%20148c0%203%204%2014%207%2017%203%204%205%205%2011%208%206%202%208%203%207%204v1l2-1h11l4-5%203-7v-1a12889%2012889%200%2001-45-16m88%205c-1%203%200%204%201%202l2-1%203%202v1l5%202a46%2046%200%200110%202l5%203h2l3%201h3c2-1%202-3-1-3l-17-5c-15-5-16-6-16-4m18%2020l-2%201c-2%200-2%200-2%2012l-1%2013c-2%201-3%200-1-1l1-2h-1l-1-3%201-5v-1l-2%201c-1%201-1%201-1-3l-1-7c0-3%200-3-1-1l-2%202c-1%200-3%203-2%204l3-1c2-1%202-1%202%203%200%202-1%203-3%204l-3%202-1-2c0-5%200-5-2-5-2%201-3%201-3-1s-1-2-2%200l-1%201c3-1%202%201-1%202-1%201-2%201-1%202l3-1c1-1%201-1%201%205-1%205%200%206%201%204h1l1-1h6c2%200%202%200%201%201l-4%202-3%202-8%205c-6%203-10%207-6%206h1c-2%202-3%202-10-1-15-6-18-7-17-8%200-2-2-3-4-2v1l1%202c0%201%201%202%205%203l4%202%202%201-1%202-2%206c0%202-1%203-3%204-3%202-5%205-3%204l4-2%201%201c-2%202%203%202%208%200%208-3%209-4%207-5%200-1-2-1-5%201-6%204-7%204-8-1l1-4%201%204c0%204%201%204%203%200%201-4%201-4-1-4v-1l1-2c0-2%201-2%206%200%204%202%205%202%204%205v4l3-1c2-2%204-2%205-1h8c2%200%204%200%206-2l4-2%201-3c0-1%201-3%205-5l5-3v-7c0-6%200-7%201-6l1%202c-2%201-1%203%201%202h2l-2%204c-2%204-2%204%200%204l4-2%202-1%202-2c4-1%206-3%205-9l1-8v-1l-1-3c-1-3-4-6-4-4h-5c-1-1-1%200-1%203%200%204-2%206-2%202%200-3-2-7-2-5m167%2031c-10%206-12%208-12%2013l-1%206v3l1%202v7h3l2-4%204-4c0-2%200-2-4-1-4%203-4%201-1-3s5-5%209-4h8l5-2h5l2%202h9c1-1%200-3-3-4l-2-3c0-3%200-4-2-5s-3-2-3-4c-1-3-1-3-1%200s0%204-2%204c-4-2-6-2-8-1h-1l1-2c2%200%201-5%200-5l-9%205m-98%2032l2%201c2%200%202%201%202%2010v10l-3-1c-5%200-6-5-1-5l4-1h-4c-2%200-3%200-3-2l-2-2-2%201c0%202-1%202-6%200-9-3-8-4-8%2017v21c-1%201%201%201%208%201%208%200%2011-2%203-2l6-1%2019-2%208-1c-1%201-2%202-1%203v3h46v-8c0-7%200-7-2-6l-9-2-6-2c-1%206-3%2010-8%2012-5%203-10%201-5-2h3v1l2-1-1-1v-2c2-1%202-7%201-7l-4%202h-6c-2-1-22%205-24%207s-5%203-5%200l-2-1h-1v-1l-2-1c0-3%205-2%207%200h1l1-2v-2l1-1%201%201c-2%202%201%202%206%201%204-1%207-3%204-3l5-3c7-4%208-5%202-5l-10-1c-6%200-7%200-9%202l-2%202v-13l1-13%203-1-5-1-5%201m-35%2013l3%203c4%202%204%202%201%204-2%201-2%202-2%2015v15l1-14c0-10%201-14%202-15l1%201%201%201c2-2%203%200%202%202l-2%201-1%2011%201%208%202-4v7c2%200%205-8%203-8v-8l-1-4-2%201%201-2c4-3%202-10-4-14-4-3-6-3-6%200m-15%2025l-3%203%203-1h3v5c0%205%200%205%203%205l4-2%201-2%201-4c0-4%200-5-3-6-5-2-6-1-9%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y4VT+0+bVRjuf2BM1OmccRujBGd0CzBMdEAUURHdHOp+GGBEhJEtbi7RNQ4cRqNGN1xkGgXb0nvXLKy0hV0EQQesK1CuExjrECalQC9AaQuMr4/vOV0ZRtGTPN97znu+85z38hyRIAhgCAthAtlwGFHfCpYZlrFMYDbiu7Om+Wq/6B+H10KUiDA2+gcmJpwIBoNEdpsTRsEJWVTRsRJxOBIxI7q9tMTXCwsLuD40iHabFW2tLXA6x/mZ5VXRiphjiQ54vR6EQqEVsigx27vpcGBsbBT9fb3o6bbj4oXzMJuMfO73++9ezgiXFhcxOenCLTowfH0Ic3NzPBJG5PP50NluQ3PTL7BdtXLCOkstDh4oxlt5Oai3mOD1eOB2TyNE6bMhmp2dwQSFHrFO9PX2YOSmg1IQiHwW3V2duGq9AmW1DHLZTyg/8RVOEq60tcI9PY3ZmRl02TvgHI+kLxqmmvT39cDlclFkIZzRa9HQ8DPfDAQCPEqfz8vr9fu1fvq3jyJy82aMjDigUlbj49ISzM/PRwhZDVgqvb3dMNUaUV9fx9dddjs6OtoxODjACf8+wrBa23D06Ad4t+AdpKWmQK1WRQjZh9XM5ZrA5d9+xZHDh9Da0gLHjWGYjTUw0yUGvQ4ymZSi10NRLYdE8iEynk9HSspOVHx7CsX7i9DY2BAhZO3GKtmwTg8NDPD0pJU/4svPP4NGpeD2VPlJHCjej9SUZ5CXuw97XtvFG1RVVYlFau6KDqNgg9XsEslCIZdCQilp1UpotSoqQSdvGMvCYjahrOw4knck4cj7h/DD96e50HmEqwm9Xi8velvLZZJKI+/+9NQUtBo1CvLfRmFBPsklF7FbYiCOjUVpyTHYOzvo5YxyrapVSiK8kzKzk1THqclJLFJNfSR0JlwryYNJ5psTX8NYcxbFRYUUWQJ2v5rFazs4cA1e0uEXVJLkpMRIU4IkYicR+al+UyRUG93qnvGhllIrOV6Ksk8/gYK6aKO0G5ubUGsxQ65UoOK70zCcNaCddLgvNweSYx9B1HS4CBcKc3Audw+MBEv+XujffBk1edlQ7M5A+c4EVGWmQf36S4RMVGamouFgPqyS9yDflQ5p1rPQvJGJiueegm5vFkTymPugT9gCQ3I8ziSJodu2GYZEMVRxD0Idez/08euhiVtH8wc42Fy+6V5IH70HGvE6vlbRf7r4h7gVqZ/YiJr0HTj34tMwvZKGuuwXYMnOgHZ7DFRbN0D9+CPcKh97GCoCt7SO+u761/O5SJsYJ2i2bRI0TzJsFOgCWm8WNNtjBAXNZVs3CEry65PiBF2i+H8hClA3gySXAGGBHrr7z1vw01v108Mf6ulG8/k6jDtu8L2Ah/3r4fZfQXusy/1rIfwfe2vhL/Kc+noaqXyIAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/7e76a640f9382dc8a36ea033c8346b68/502b1/s3ManagerCover.png","srcSet":"/static/7e76a640f9382dc8a36ea033c8346b68/f2e6d/s3ManagerCover.png 114w,\n/static/7e76a640f9382dc8a36ea033c8346b68/4ddba/s3ManagerCover.png 229w,\n/static/7e76a640f9382dc8a36ea033c8346b68/502b1/s3ManagerCover.png 457w,\n/static/7e76a640f9382dc8a36ea033c8346b68/7ddc2/s3ManagerCover.png 686w,\n/static/7e76a640f9382dc8a36ea033c8346b68/435bf/s3ManagerCover.png 914w,\n/static/7e76a640f9382dc8a36ea033c8346b68/6050d/s3ManagerCover.png 1200w","srcWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/15384/s3ManagerCover.webp","srcSetWebp":"/static/7e76a640f9382dc8a36ea033c8346b68/31fce/s3ManagerCover.webp 114w,\n/static/7e76a640f9382dc8a36ea033c8346b68/e3e25/s3ManagerCover.webp 229w,\n/static/7e76a640f9382dc8a36ea033c8346b68/15384/s3ManagerCover.webp 457w,\n/static/7e76a640f9382dc8a36ea033c8346b68/0258d/s3ManagerCover.webp 686w,\n/static/7e76a640f9382dc8a36ea033c8346b68/64ea2/s3ManagerCover.webp 914w,\n/static/7e76a640f9382dc8a36ea033c8346b68/9000d/s3ManagerCover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M283%2069c-3%202-4%203-4%205s0%202-1%201c0-3-1-2-11%204-6%203-8%205-8%206%200%202%200%202%202%202v2c0%202%200%202%202%201l2-3h3l2-1c0%201-2%203-5%204-3%202-6%204-6%206l-3%203c-2%201-2%201-2-2%201-3-1-4-4-1-3%202-2%203%200%203h2l-2%203-2%202h1l3-1%202-1%204-2c3-2%203-2%2014%202l11%203%201-9%201-9%201%209%201%2010%207-3%206-3c2%200%204-3%205-5l-2-2c-1%200-3-2-1-3s-1-9-4-9l-1-1-3-1h-2l-5-3c-8-3-8-3-3-6%204-2%205-3%203-3l-4%202m-93%2024c1%201%201%201-1%201h-4l2%201%203%201-3%201c-2%200-2%200-1%201h3c4-1%205-1%205%202%201%203%205%207%2010%208%201%201%202%201%202-2%201-3%201-4%204-3l4%203c2%202%202%202-2%204-3%201-4%202-3%204h4c0-3%202-3%202%200%201%203%200%203-2%202l-3%201h4c3%200%204%200%203%201-2%200-1%202%201%202%205%200%207%201%207%203l1%202h1l2%201%201-2-1-2c-3%201-3-1-1-3%204-5%2015-4%2015%201l-1%202h-2l-2%201h-2l2%201c4%202%2024-2%2029-5l3-1c3-1%203-1%202-2h1c2%200%202%200%201-1v-1h2l1%201v-4c-1-1-2-2-3-1-1%200-12-3-15-6-3-1-5-1-4%201l-3%202-4%202c-1%203-6%204-10%202h2l4-1-6-1h-6l1-1h-2c-3%200-3%200-1-1h-2c-3%200-3%200-1-1h-1c-3%200-3%200-2-1v-1l-2-2-3-3v1l-2%203h1l2%201v1h-1v7l-1-2-1-3v-1l-1-1-2-3c0-2-1-2-3-1-3%200-3%200-2-1s1-1-1-1h-2c-3%200-3%200-2-1s1-1-1-1h-3c-3%200-3%200-1-1h-2c-2%200-3%200-2-1%202-1%202-1-1-2h-4m-87%2023l-2%203c-2%202-3%209-2%209%201%201-2%203-7%205-6%203-8%204-7%205h5c2-1%204-1%2014%202l12%204-4-4c-6-6-7-9-7-18l-1-8-1%202m258%202l-8%207-6%203a307%20307%200%2001-33%2018c-21%2012-40%2019-59%2021l-7%201%202%201%2013-1%208-1c9-1%2018-4%2024-7l6-2-5%204c-17%207-38%2011-63%2011-18%200-24%200-43-4l-4%201%201%202%201%2010c0%208%200%2010-2%2011v1c2%200%204-2%203-5l1-3%201%202c-1%202%200%203%201%203l1-3%201-3c1-1%201-1%201%201l2%202c2-1%204-2%202-2l-1-2h1l3%201%203-1-3%202-2%202h2l4-1%201-3c1-3%201-3%201%202%200%203%200%205%201%204h2v2l-1%203c0%202%208%201%2014-1l4-1c2%203%204%200%204-6%200-4%200-5%201-3%200%203%200%203%205%203l9%201c2%200%203%200%203%204l1%206v2c-1%202-1%207%201%208%202%200%203-3%201-4v-1l2%201%201%201c3%200%204%200%204%202l1%201%201-1%202-1-1-2c-3-1-3-1%202-1h4c-2-1-2-1%200-1l3-1h1l1-2v1l1%201%201-2h2v2c-1%201-2%201%2014%201%2014%200%2016%201%2010%204-7%204-12%206-14%205l-1%201c1%201-12%205-25%208-14%202-45%202-60-1-14-2-23-5-23-6h3l4%201-3-2c-4-1-4-2-5-4l1-3%201%201%204%201c4-1%205%200%203%202l-1%201%206%202-2-1c-2-1-2-1-1-3%201-3%201-3-3-3a374%20374%200%2001-9-1l-5%205c-3%201-4%204-4%206%201%201-4%205-10%208l-4%204%204-2%206-2h1c0-1%208-4%2012-4%206-1%2021%2014%2024%2025%201%202%201%202-1%201s-3-1-6%203c-5%205-7%206-8%203s-2-2-1%201c0%203%200%203-4%205-3%202-4%202-5%200-5-5-7-5-4%200%202%204%201%204-4%207s-9%203-5%200c2%200%202-1%200-2-1-1-1-1-1%201s0%202-1%201l-1-1-1-2v-1l-3-4c-3-5-7-9-7-7l2%202c1%201%202%203%200%203v1l-6-6-10-9-3-3h-1c0%201-1%201-3-1-5-2-4%200%201%203%2012%206%2024%2020%2026%2030l1%205%204-2%206-4a183%20183%200%200131-15c1%202-39%2025-43%2025h-2l2%201%202%204v3h-28c-25%200-27%200-25-2%202%200%203-1%203-2l-6%203-14%201-12-1-1-1-1%201-6%201-3-1c1-1%201-1-1-1-3-1-5%200-3%201%201%201-5%201-13%201H0v75h69a1061%201061%200%200197%203l-1%203v2l4-2c3-2%204-4%204-5l1-1%201%202h1v-1l1-1%203%201-1%201-3%203-7%204-3%204v3l19-11%208-5h208v-75h-6c-6%200-6%200-4-1v-2l-2%202-4%201h-2l3-2c8-7%2017-21%2013-23v-1l1-13c0-14%200-15-6-17-3-1-12%200-10%202v3l-1-2-2-1-1%202-1%202v2h-3v1c1%201-2%205-4%203l-1%201v1l-1-1-2%201c-1%201-2%203-1%205l-1%205-1%203-1-3c-1-2-1-2-2%202v6l-1%201c-2-2-2%2014%200%2020%202%203%202%203-1%203l-3-1h-1l-2%201-2-1-3-2-3-1-6-3h3l2-1-2-1v-1c1%200%202-1%201-2l-1-4c0-4%200-3-1%201-1%203-2%203-8%201-2%200-2%200%200%201%201%202%201%202-2%202l-4-1%205%202c2%202%205%203%205%202l1%201h-5c-2-1-2%200%201%202%204%204%203%205-3%205-4%200-5%200-6-2-1-1-2-2-3-1-1%200-1%201%201%202l1%201c-3%200-5-1-4-3v-1h-1c0%202-2%202-5%200h1l2-1-1-2h-2v-1h2c1-1%202%200%203%201%200%202%205%201%205-1%201-1%201-1%201%201s4%204%204%202l1-2-1-2-2-1-2-1h-7l-3-3-4-2-2-2-1-2h-1c0%202-2%203-2%201v-4c-1-3%200-4%201-1l2%201%202%201c1%202%204%201%204-1l-2-1-2-2c0-1%201-1%206%201%204%201%204%201%206-1v-7c-1%200-2%201-1%202%200%201-1%201-5-1-10-4-12-4-8%203%202%204%201%205-2%202-1-1-2-3-1-5%200-1%200-2-1-1l-1%202c-2%200-1-3%201-5%203-3%207-11%206-13h2c-1-1%200-3%202-4%203-4%204-7%203-9s-1-10%201-14c1-4%203-6%2022-16l14-10v-3l4-3c19-12%2020-27%203-38l-4-5-2-4c-1-1%200-2%204-6%203-2%204-4%203-5-1%200-1-1%201-3%202-4%201-3-3%201M63%20148c0%203%204%2014%207%2017%203%204%205%205%2011%208%206%202%208%203%207%204v1l2-1h11l4-5%203-7v-1a12889%2012889%200%2001-45-16m88%205c-1%203%200%204%201%202l2-1%203%202v1l5%202a46%2046%200%200110%202l5%203h2l3%201h3c2-1%202-3-1-3l-17-5c-15-5-16-6-16-4m18%2020l-2%201c-2%200-2%200-2%2012l-1%2013c-2%201-3%200-1-1l1-2h-1l-1-3%201-5v-1l-2%201c-1%201-1%201-1-3l-1-7c0-3%200-3-1-1l-2%202c-1%200-3%203-2%204l3-1c2-1%202-1%202%203%200%202-1%203-3%204l-3%202-1-2c0-5%200-5-2-5-2%201-3%201-3-1s-1-2-2%200l-1%201c3-1%202%201-1%202-1%201-2%201-1%202l3-1c1-1%201-1%201%205-1%205%200%206%201%204h1l1-1h6c2%200%202%200%201%201l-4%202-3%202-8%205c-6%203-10%207-6%206h1c-2%202-3%202-10-1-15-6-18-7-17-8%200-2-2-3-4-2v1l1%202c0%201%201%202%205%203l4%202%202%201-1%202-2%206c0%202-1%203-3%204-3%202-5%205-3%204l4-2%201%201c-2%202%203%202%208%200%208-3%209-4%207-5%200-1-2-1-5%201-6%204-7%204-8-1l1-4%201%204c0%204%201%204%203%200%201-4%201-4-1-4v-1l1-2c0-2%201-2%206%200%204%202%205%202%204%205v4l3-1c2-2%204-2%205-1h8c2%200%204%200%206-2l4-2%201-3c0-1%201-3%205-5l5-3v-7c0-6%200-7%201-6l1%202c-2%201-1%203%201%202h2l-2%204c-2%204-2%204%200%204l4-2%202-1%202-2c4-1%206-3%205-9l1-8v-1l-1-3c-1-3-4-6-4-4h-5c-1-1-1%200-1%203%200%204-2%206-2%202%200-3-2-7-2-5m167%2031c-10%206-12%208-12%2013l-1%206v3l1%202v7h3l2-4%204-4c0-2%200-2-4-1-4%203-4%201-1-3s5-5%209-4h8l5-2h5l2%202h9c1-1%200-3-3-4l-2-3c0-3%200-4-2-5s-3-2-3-4c-1-3-1-3-1%200s0%204-2%204c-4-2-6-2-8-1h-1l1-2c2%200%201-5%200-5l-9%205m-98%2032l2%201c2%200%202%201%202%2010v10l-3-1c-5%200-6-5-1-5l4-1h-4c-2%200-3%200-3-2l-2-2-2%201c0%202-1%202-6%200-9-3-8-4-8%2017v21c-1%201%201%201%208%201%208%200%2011-2%203-2l6-1%2019-2%208-1c-1%201-2%202-1%203v3h46v-8c0-7%200-7-2-6l-9-2-6-2c-1%206-3%2010-8%2012-5%203-10%201-5-2h3v1l2-1-1-1v-2c2-1%202-7%201-7l-4%202h-6c-2-1-22%205-24%207s-5%203-5%200l-2-1h-1v-1l-2-1c0-3%205-2%207%200h1l1-2v-2l1-1%201%201c-2%202%201%202%206%201%204-1%207-3%204-3l5-3c7-4%208-5%202-5l-10-1c-6%200-7%200-9%202l-2%202v-13l1-13%203-1-5-1-5%201m-35%2013l3%203c4%202%204%202%201%204-2%201-2%202-2%2015v15l1-14c0-10%201-14%202-15l1%201%201%201c2-2%203%200%202%202l-2%201-1%2011%201%208%202-4v7c2%200%205-8%203-8v-8l-1-4-2%201%201-2c4-3%202-10-4-14-4-3-6-3-6%200m-15%2025l-3%203%203-1h3v5c0%205%200%205%203%205l4-2%201-2%201-4c0-4%200-5-3-6-5-2-6-1-9%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/7e76a640f9382dc8a36ea033c8346b68/6050d/s3ManagerCover.png"}}},{"id":"171956d6-d153-5990-8c33-fff8c43dd99d","slug":"/eba-spot","secret":false,"title":"Łeba spot","author":"Luke Celitan","date":"April 27th, 2022","dateForSEO":"2022-04-27T00:00:00.000Z","timeToRead":2,"excerpt":"Seaside bed and breakfast","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Łeba spot\",\n  \"excerpt\": \"Seaside bed and breakfast\",\n  \"date\": \"2022-04-27T00:00:00.000Z\",\n  \"hero\": \"lebaspot.png\",\n  \"author\": \"Luke Celitan\",\n  \"appDescription\": \"Room reservation\",\n  \"category\": \"Project\",\n  \"tech\": [\"ReactIcon\", \"Nextjs\", \"TS\", \"Tailwind\", \"Postgre\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"uxui\"\n  }, \"Ux/Ui\"), mdx(\"p\", null, \"This website has started out as a custom wordpress theme and wp installation,\\nhowever as the seasons went by, I have decided to move the project to the\\nnext.js installation. It seemed as the right combintion between static pages and\\ndynamic pages that require connection to various 3rd party APIs (like\\nbooking.com). The obvious business requirements was creating a room reservation\\nsystem that will not allow overbooking, double booking and a responsive admin\\npanel so the owners can have control over their reservations whenever they want.\\nThe website also had to contain diffrent languages versions, in order to widen\\nthe audience of this mini hotel. The seo was a also a big factor in this build.\"), mdx(\"p\", null, \"The design changed over the years, but in the end I have decieded upon a subtle\\nelegant look in shades of black, grey and white. Lato (Sans Serif, did you know\\n? \\u201CLato\\u201D means summer in polish) and Cormorant (Serif) fonts are being utilized\\nas the main duo of typography set up. Thankfully owners could come up with Hotel\\npictures that mathed the tone of the website.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"3576px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"56.56%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACaklEQVQoz2WSW09TQRSFz7/y0Uef9MVfoNHEmGA0Xkm8BBVJbEjAkEZAYsRLEcGAmqpYykVoK6W0BVooaaUXLbSlBXs75/T2OXNAAT3Jyuy9Z9Y+a+0ZRdM0CoUC1Wp1H5XKLkRcEetByFq5XDY4+XweXfDD32MEQxEquo4iC5o4IBO1JFaR66pm5LqqUq/VaNTqNOoHYNRqf2MaDQPynCKVlEslanvKagKySV3kMjYIgvgfZIO9+M8PZKyU99RVKvruKpXpmmHP2DOs6vuWBXRNp1Qs7Z6VucHZhVIsqRTKOpou5lWtUZX2wJhVvlBEFWRVjKAs7KtiHHWhQs5d14UboUqOTLozbAumktmI82sjRCwcYNE7z4LbhePrJNmtDNuZFMl4lFTyB7lslqxALpelWCzgdLrw+BZZjcXx+JfwBVYJR+Mok1YLCc8AQ09a6etspf3udY4dPcKcy4F95CWW7nbsH97gdjlxOR1MfrGS/Jng5InjNDXfwmy1cfXBQ1puNmMZHEIZftHNcNcl7l87Q09HK/1mE5fPn8bv9fDu9VP6ukzYRgewfbZin5jAPTNOejNJx50L9PSaeT7lps3Uxvvee1htDpTgso+5WTuhgJd7t29wpeksF8+dEgqdyD2/Z47o2gqPu8w86ujkbX8P+Z1t7OMf8S6vMPJpimZTLy3dozwbFQ0L4sn4Q8uEY+vMTE8zaHnF4MAAqc1NMltpZr9NEYlFmRHqpmxjrC750MQlLQSXCK6HSGdyOBdWGJvx4loIiIbiJiORNWKJGP9+uZ0c0WSCVCZ9qC5vdiuXwz3vZH0teGjvNxiUE09nBZK0AAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/a48dcfd942cb7d49bf8d250a154e4fbb/a3bc4/ui1.webp 2500w\", \"/static/a48dcfd942cb7d49bf8d250a154e4fbb/2cf9d/ui1.webp 3576w\"],\n    \"sizes\": \"(max-width: 3576px) 100vw, 3576px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/a48dcfd942cb7d49bf8d250a154e4fbb/412e4/ui1.png 2500w\", \"/static/a48dcfd942cb7d49bf8d250a154e4fbb/4ead0/ui1.png 3576w\"],\n    \"sizes\": \"(max-width: 3576px) 100vw, 3576px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/a48dcfd942cb7d49bf8d250a154e4fbb/4ead0/ui1.png\",\n    \"alt\": \"Website screen\",\n    \"title\": \"Website screen\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \")), mdx(UI, {\n    colors: ['#0c0c0c', '#52525b', '#d4d4d8', '#fbfbfb', '#aaa5a5'],\n    primeFontFamily: 'Lato',\n    secondaryFontFamily: 'Cormorant',\n    background: '#FFF',\n    textColor: \"#0c0c0c\",\n    h1: {\n      fontFamily: 'Cormorant',\n      fontWeight: '700',\n      fontSize: '40px',\n      textTransform: 'uppercase',\n      color: '#0c0c0c'\n    },\n    h2: {\n      fontSize: '35px',\n      fontWeight: '700',\n      fontFamily: 'Lato'\n    },\n    body: {\n      fontFamily: 'Lato',\n      color: '#0c0c0c',\n      fontSize: '18px',\n      lineHeight: 1.7\n    },\n    mdxType: \"UI\"\n  }), mdx(\"p\", null, \"I have also decided to inlude current wheater api call so the user can see what\\nhe is actually missing. A fine detail that hopefully users can appreciate. I\\nthink it ties in nicley with the navbar and language picker, making a less\\nborking but yest standard navbar.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"3542px\"\n    }\n  }, \"\\n      \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"4.760000000000001%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAACXBIWXMAABYlAAAWJQFJUiTwAAAALklEQVQI12P4+vXr/1+/fv3/+fMnnMbFRqc/f/7yH6T/3fv3/0+du/z/65ev/wFbjU2G7VESWwAAAABJRU5ErkJggg==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/fb5a56c9ab36d963f39263fc543b2f86/a3bc4/ui2.webp 2500w\", \"/static/fb5a56c9ab36d963f39263fc543b2f86/88240/ui2.webp 3542w\"],\n    \"sizes\": \"(max-width: 3542px) 100vw, 3542px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"/static/fb5a56c9ab36d963f39263fc543b2f86/412e4/ui2.png 2500w\", \"/static/fb5a56c9ab36d963f39263fc543b2f86/c81b9/ui2.png 3542w\"],\n    \"sizes\": \"(max-width: 3542px) 100vw, 3542px\",\n    \"type\": \"image/png\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"src\": \"/static/fb5a56c9ab36d963f39263fc543b2f86/c81b9/ui2.png\",\n    \"alt\": \"Nav Bar\",\n    \"title\": \"Nav Bar\",\n    \"loading\": \"lazy\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    }\n  }), \"\\n        \"), \"\\n    \")), mdx(\"p\", null, \"Other non standard but very important elements were the searchbar with filters\\nand reservation calendar picker. The search back was constructed as sticky\\nelement that show it self on scroll back, optimising user room reservation\\nsearch for the user. A custom calendar picker had also to be constructed bin\\norder to show hafl booked days.\"), mdx(\"h2\", {\n    \"id\": \"developent-nextjs-postgres-tailwindcss\"\n  }, \"Developent: next.js, postgres, tailwindcss\"), mdx(\"p\", null, \"Next.js is a framework that allows you to create a single page application. It\\nis a lot more flexible than wordpress that helped me tie custom business rules\\nwith mentioned 3rd api intergartions. For this next.js dynamic and api\\ncapabielities were used, the next.js helps on this end a lot, providing also the\\nin-house image optimalizastions features on the server side.\"), mdx(\"p\", null, \"I have used the postgres database as the main backend database. Its a solid\\nchoice for verstile and scalable sql data storage.\"), mdx(\"p\", null, \"On this project I have used the React and tailwindcss framework to create a\\nresponsive customer website and admin panel. I became quite fond of the\\ntailwindcss framework as it is a great tool for quickly building responisve\\ndesigns and achive great performance on css performance and overall bundle.\\nDefinately a framework I plan to keep on using.\"), mdx(\"p\", null, \"Overall next.js is a great React framework for building a single page\\napplications, however it is not without it faults. Rapid developement of next.js\\ncan bring troubles as core upgrades bring often many breaking changes and other\\nbugs to already established instance.\"), mdx(\"h2\", {\n    \"id\": \"lebaspotcompl-is-a-bed-and-breakfast-property-located-by-the-polish-bałtyk-sea\"\n  }, \"Lebaspot.com.pl is a bed and breakfast property located by the polish ba\\u0142tyk sea.\"), mdx(\"p\", null, \"\\uD83D\\uDC49 \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://lebaspot.com.pl\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"https://lebaspot.com.pl\")));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["ReactIcon","Nextjs","TS","Tailwind","Postgre"],"category":"Project","appDescription":"Room reservation","hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAD6UlEQVQ4y32U61ObVRDG8zfVVlvAcgu3EAh3Ag2QECAQLiEkIRJCIBAu4V7H9oPOVMZxHJXpDGpn/AwtiG3VcVQ6A2IbIpfxG3IL4fLznIS0EVvfmefdPXues+/unndXEQ6HOT4+Rsp4vM4Wv/emfUU84U24zPm/M4qweIVCodfiMjkUurwOvZQxXXF6eop8znn1xPTz83POzs4ETpE8KSNrab+A5MS4JycnKFafPWN8wMf00DC3h0cicsI3yFiflw8/uMvsl3N8PfeAB998y+zsHPfvf8VnM5/wxcwMn9/7mE8/usf46DR3J6f5fXUNxdL8Apnv3ECTnEphmpL85DTU76aSk5BEa30TLqeHwf4RRofH8fT4cFo7sRjqcJmbsdebInpVsRZtrobH3y2j+H5xibyUNMpyVFTk5lORp6E0Jx+z3sT4sJ8+dw/+QT+jIxNC92KpM+G2tNNvs9NjseJsahZOjTRoK/jpyRMUy48WyUlKpigjC60qj6qCErT5JXS5uhnyD9Ln9TI0OMnAwBjmWhPm6lrcLa14rVa6W9pwNjRgN9Rg1ZXzy9PH0QhVSSnCYXbEmbG8ivbGNiamprjz/p1Iqj1945hNVm4VlGE31jJpb6DTUEVdWSU1hUW0aQvxt1Sy/uuPKBbn5ylQZmDS1eAwt+JxuPCJ1Dyd3bzX7sAinJuMzWiy8tFmZzHSXsm4o5bSDCXlIhNNpppCkZ27voznK8Lh0sKCKKialhoDXW0d+D29jHo8eLv78Li8uB1ujMWlFKUrqVLnYK0qpkNE2ayvw2KyUK01YDM14m6uYeXnH1A8FTdTV1pOZ2MLjmYrg+5+hnt9TIhLmPJPMNQ7RJuukvISA7fqfejNIzRaxnC6bos6T9Fk7qXT0oXPYWN15TdZw0WKMzLRF5WiTlWSq8ylwWjDqKvH1W4Tl6DHVKElT1XMlRsaEtJ0ZBe2UlBuR1Nmo7Laia6ikZS3rrL86KFM+SFpb18XdcyiQp1H4tXr3LxyDW1xNVpNKYaiQrqtNqwtHaQrhcOb+aRl60hX1XItsYiULD2q7BKyEhOQf4zi791d1tfWCAY22N7cIvjiBRsCUg88D/BnMMjW1jY7O3+xLRDYCLK+/gcbG1tsBLfFWpwRth3BOTo6iu/laF9GgejTs4jt3x0ev47buehn6Ssyvi5PFtnkEpIgERtXMVs4HN3f399nc3OTQCDArsg0Or4EOUaUkyQWZXTKRHEkPnh4eEj4pcPoMN3b2xPlECmLskg94vBVmv91FH9YflTK0wu7zEquZZQHBwcRXZ6P1DBGjsdJXDSy2PFph4SUjmJBSF4smH8AuRThzksWgcgAAAAASUVORK5CYII=","aspectRatio":1,"src":"/static/55348f15dd0ce417928f7ed656ebfb8f/a1946/lebaspot.png","srcSet":"/static/55348f15dd0ce417928f7ed656ebfb8f/5b37e/lebaspot.png 236w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/49058/lebaspot.png 472w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/a1946/lebaspot.png 944w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/030f1/lebaspot.png 1416w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/75927/lebaspot.png 1888w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/b8151/lebaspot.png 3200w","srcWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/99fbb/lebaspot.webp","srcSetWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/77392/lebaspot.webp 236w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/1f177/lebaspot.webp 472w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/99fbb/lebaspot.webp 944w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/4a492/lebaspot.webp 1416w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/b0b8f/lebaspot.webp 1888w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/dae32/lebaspot.webp 3200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M15%20184v98h370V86H15v98'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAD6UlEQVQ4y32U61ObVRDG8zfVVlvAcgu3EAh3Ag2QECAQLiEkIRJCIBAu4V7H9oPOVMZxHJXpDGpn/AwtiG3VcVQ6A2IbIpfxG3IL4fLznIS0EVvfmefdPXues+/unndXEQ6HOT4+Rsp4vM4Wv/emfUU84U24zPm/M4qweIVCodfiMjkUurwOvZQxXXF6eop8znn1xPTz83POzs4ETpE8KSNrab+A5MS4JycnKFafPWN8wMf00DC3h0cicsI3yFiflw8/uMvsl3N8PfeAB998y+zsHPfvf8VnM5/wxcwMn9/7mE8/usf46DR3J6f5fXUNxdL8Apnv3ECTnEphmpL85DTU76aSk5BEa30TLqeHwf4RRofH8fT4cFo7sRjqcJmbsdebInpVsRZtrobH3y2j+H5xibyUNMpyVFTk5lORp6E0Jx+z3sT4sJ8+dw/+QT+jIxNC92KpM+G2tNNvs9NjseJsahZOjTRoK/jpyRMUy48WyUlKpigjC60qj6qCErT5JXS5uhnyD9Ln9TI0OMnAwBjmWhPm6lrcLa14rVa6W9pwNjRgN9Rg1ZXzy9PH0QhVSSnCYXbEmbG8ivbGNiamprjz/p1Iqj1945hNVm4VlGE31jJpb6DTUEVdWSU1hUW0aQvxt1Sy/uuPKBbn5ylQZmDS1eAwt+JxuPCJ1Dyd3bzX7sAinJuMzWiy8tFmZzHSXsm4o5bSDCXlIhNNpppCkZ27voznK8Lh0sKCKKialhoDXW0d+D29jHo8eLv78Li8uB1ujMWlFKUrqVLnYK0qpkNE2ayvw2KyUK01YDM14m6uYeXnH1A8FTdTV1pOZ2MLjmYrg+5+hnt9TIhLmPJPMNQ7RJuukvISA7fqfejNIzRaxnC6bos6T9Fk7qXT0oXPYWN15TdZw0WKMzLRF5WiTlWSq8ylwWjDqKvH1W4Tl6DHVKElT1XMlRsaEtJ0ZBe2UlBuR1Nmo7Laia6ikZS3rrL86KFM+SFpb18XdcyiQp1H4tXr3LxyDW1xNVpNKYaiQrqtNqwtHaQrhcOb+aRl60hX1XItsYiULD2q7BKyEhOQf4zi791d1tfWCAY22N7cIvjiBRsCUg88D/BnMMjW1jY7O3+xLRDYCLK+/gcbG1tsBLfFWpwRth3BOTo6iu/laF9GgejTs4jt3x0ev47buehn6Ssyvi5PFtnkEpIgERtXMVs4HN3f399nc3OTQCDArsg0Or4EOUaUkyQWZXTKRHEkPnh4eEj4pcPoMN3b2xPlECmLskg94vBVmv91FH9YflTK0wu7zEquZZQHBwcRXZ6P1DBGjsdJXDSy2PFph4SUjmJBSF4smH8AuRThzksWgcgAAAAASUVORK5CYII=","aspectRatio":1,"src":"/static/55348f15dd0ce417928f7ed656ebfb8f/3ddd4/lebaspot.png","srcSet":"/static/55348f15dd0ce417928f7ed656ebfb8f/078a8/lebaspot.png 163w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/e56da/lebaspot.png 327w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/3ddd4/lebaspot.png 653w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/c5cc7/lebaspot.png 980w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/eebd2/lebaspot.png 1306w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/b8151/lebaspot.png 3200w","srcWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/0acdf/lebaspot.webp","srcSetWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/ac59e/lebaspot.webp 163w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/7660b/lebaspot.webp 327w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/0acdf/lebaspot.webp 653w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/75470/lebaspot.webp 980w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/68d47/lebaspot.webp 1306w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/dae32/lebaspot.webp 3200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M15%20184v98h370V86H15v98'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAD6UlEQVQ4y32U61ObVRDG8zfVVlvAcgu3EAh3Ag2QECAQLiEkIRJCIBAu4V7H9oPOVMZxHJXpDGpn/AwtiG3VcVQ6A2IbIpfxG3IL4fLznIS0EVvfmefdPXues+/unndXEQ6HOT4+Rsp4vM4Wv/emfUU84U24zPm/M4qweIVCodfiMjkUurwOvZQxXXF6eop8znn1xPTz83POzs4ETpE8KSNrab+A5MS4JycnKFafPWN8wMf00DC3h0cicsI3yFiflw8/uMvsl3N8PfeAB998y+zsHPfvf8VnM5/wxcwMn9/7mE8/usf46DR3J6f5fXUNxdL8Apnv3ECTnEphmpL85DTU76aSk5BEa30TLqeHwf4RRofH8fT4cFo7sRjqcJmbsdebInpVsRZtrobH3y2j+H5xibyUNMpyVFTk5lORp6E0Jx+z3sT4sJ8+dw/+QT+jIxNC92KpM+G2tNNvs9NjseJsahZOjTRoK/jpyRMUy48WyUlKpigjC60qj6qCErT5JXS5uhnyD9Ln9TI0OMnAwBjmWhPm6lrcLa14rVa6W9pwNjRgN9Rg1ZXzy9PH0QhVSSnCYXbEmbG8ivbGNiamprjz/p1Iqj1945hNVm4VlGE31jJpb6DTUEVdWSU1hUW0aQvxt1Sy/uuPKBbn5ylQZmDS1eAwt+JxuPCJ1Dyd3bzX7sAinJuMzWiy8tFmZzHSXsm4o5bSDCXlIhNNpppCkZ27voznK8Lh0sKCKKialhoDXW0d+D29jHo8eLv78Li8uB1ujMWlFKUrqVLnYK0qpkNE2ayvw2KyUK01YDM14m6uYeXnH1A8FTdTV1pOZ2MLjmYrg+5+hnt9TIhLmPJPMNQ7RJuukvISA7fqfejNIzRaxnC6bos6T9Fk7qXT0oXPYWN15TdZw0WKMzLRF5WiTlWSq8ylwWjDqKvH1W4Tl6DHVKElT1XMlRsaEtJ0ZBe2UlBuR1Nmo7Laia6ikZS3rrL86KFM+SFpb18XdcyiQp1H4tXr3LxyDW1xNVpNKYaiQrqtNqwtHaQrhcOb+aRl60hX1XItsYiULD2q7BKyEhOQf4zi791d1tfWCAY22N7cIvjiBRsCUg88D/BnMMjW1jY7O3+xLRDYCLK+/gcbG1tsBLfFWpwRth3BOTo6iu/laF9GgejTs4jt3x0ev47buehn6Ssyvi5PFtnkEpIgERtXMVs4HN3f399nc3OTQCDArsg0Or4EOUaUkyQWZXTKRHEkPnh4eEj4pcPoMN3b2xPlECmLskg94vBVmv91FH9YflTK0wu7zEquZZQHBwcRXZ6P1DBGjsdJXDSy2PFph4SUjmJBSF4smH8AuRThzksWgcgAAAAASUVORK5CYII=","aspectRatio":1,"src":"/static/55348f15dd0ce417928f7ed656ebfb8f/502b1/lebaspot.png","srcSet":"/static/55348f15dd0ce417928f7ed656ebfb8f/f2e6d/lebaspot.png 114w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/4ddba/lebaspot.png 229w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/502b1/lebaspot.png 457w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/7ddc2/lebaspot.png 686w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/435bf/lebaspot.png 914w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/b8151/lebaspot.png 3200w","srcWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/15384/lebaspot.webp","srcSetWebp":"/static/55348f15dd0ce417928f7ed656ebfb8f/31fce/lebaspot.webp 114w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/e3e25/lebaspot.webp 229w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/15384/lebaspot.webp 457w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/0258d/lebaspot.webp 686w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/64ea2/lebaspot.webp 914w,\n/static/55348f15dd0ce417928f7ed656ebfb8f/dae32/lebaspot.webp 3200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M15%20184v98h370V86H15v98'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/55348f15dd0ce417928f7ed656ebfb8f/6050d/lebaspot.png"}}}]}},"staticQueryHashes":["1609575157","2068910035","2361467917","2361467917","3838421970","500183989","5650841"]}