{
    "componentChunkName": "component---src-pages-index-js",
    "path": "/",
    "result": {"data":{"hero":{"nodes":[{"frontmatter":{"greetings":"Hi, I'm","name":"Tim Grein","subtitle":"I like building software, that matters.","description":"I'm a M.Sc. Computer Science student at the University of Munich with over five years of experience in Software Engineering. I'm particularly interested in everything related to Software Engineering and System Design."}}]},"about":{"nodes":[{"frontmatter":{"image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/373d12b0644a93287d9c4dc8f1e4c785/baaed/profile-image.jpg","srcSet":"/static/373d12b0644a93287d9c4dc8f1e4c785/dd515/profile-image.jpg 200w,\n/static/373d12b0644a93287d9c4dc8f1e4c785/47930/profile-image.jpg 400w,\n/static/373d12b0644a93287d9c4dc8f1e4c785/baaed/profile-image.jpg 800w","sizes":"(min-width: 800px) 800px, 100vw"},"sources":[{"srcSet":"/static/373d12b0644a93287d9c4dc8f1e4c785/2e34e/profile-image.webp 200w,\n/static/373d12b0644a93287d9c4dc8f1e4c785/416c3/profile-image.webp 400w,\n/static/373d12b0644a93287d9c4dc8f1e4c785/c1587/profile-image.webp 800w","type":"image/webp","sizes":"(min-width: 800px) 800px, 100vw"}]},"width":800,"height":800}}}},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"image\": \"./profile-image.jpeg\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Hi, my name is Tim Grein and I love developing software with modern technologies!\"), mdx(\"p\", null, \"Before my first degree I did an internship at local software development company doing my first steps in the software development world.\"), mdx(\"p\", null, \"After that I've enrolled in a Business Information Systems (Business Informatics) degree at the Technical University of Applied Sciences Ingolstadt.\\nMoreover, I was lucky enough to have the chance to work my whole bachelor's degree in several positions all related to Software Engineering. After\\na Software Engineering Internship at the BMW Group I also had the chance to write my Bachelor Thesis there.\"), mdx(\"p\", null, \"Holding my bachelor's degree in my hands I realized I wanted to dive deeper into Computer Science, which lead to my decision to enroll\\nin a master's degree in Computer Science and a second bachelor's degree in Medical Computer Science at the Technical University of Applied Science Regensburg.\"), mdx(\"p\", null, \"During my bachelor's degree I've also founded a software startup with a student fellow, where I've lead the technical part (assessment, training) of an IT trainee program for the biggest European\\ninsurance company. After nearly three years we've both decided to move on and use our valuable experience for new opportunities.\"), mdx(\"p\", null, \"After five exciting months as a Software Engineering Intern at Red Hat, where I've worked on Red Hat OpenShift, I've got the chance to join Apple as an Software Engineering Intern in April 2022.\"));\n}\n;\nMDXContent.isMDXComponent = true;"}]},"academicExperience":{"nodes":[{"frontmatter":{"title":"M.Sc. Computer Science","station":"University of Munich","start":"Mar 2022","end":"Present","courseWork":null},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"University of Munich\",\n  \"start\": \"Mar 2022\",\n  \"end\": \"Present\",\n  \"title\": \"M.Sc. Computer Science\",\n  \"courseWork\": null\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Switched from Technical University of Applied Sciences Regensburg to University of Munich.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"M.Sc. Computer Science","station":"Technical University of Applied Sciences Regensburg","start":"Oct 2020","end":"Mar 2022","courseWork":[{"name":"Image Analysis & Machine Learning","grade":"1.0"},{"name":"Expert Systems & Artificial Intelligence","grade":"1.3"},{"name":"Modern Software Engineering","grade":"1.0"},{"name":"Project Studies I","grade":"1.3"},{"name":"Project Studies II","grade":"1.0"}]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Technical University of Applied Sciences Regensburg\",\n  \"start\": \"Oct 2020\",\n  \"end\": \"Mar 2022\",\n  \"title\": \"M.Sc. Computer Science\",\n  \"courseWork\": [{\n    \"name\": \"Image Analysis & Machine Learning\",\n    \"grade\": \"1.0\"\n  }, {\n    \"name\": \"Expert Systems & Artificial Intelligence\",\n    \"grade\": \"1.3\"\n  }, {\n    \"name\": \"Modern Software Engineering\",\n    \"grade\": \"1.0\"\n  }, {\n    \"name\": \"Project Studies I\",\n    \"grade\": \"1.3\"\n  }, {\n    \"name\": \"Project Studies II\",\n    \"grade\": \"1.0\"\n  }]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Currently I'm enrolled in a M.Sc. in Computer Science.\\nI've absolved several modules in AI and Software Engineering. Within the scope of the projects studies me and a fellow student\\nimplemented an analysis platform for a Virtual Reality Client using Java, Spring Boot, Angular, C++ and the Unreal Engine 4.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"B.Sc. Medical Computer Science","station":"Technical University of Applied Sciences Regensburg","start":"Oct 2020","end":"Mar 2022","courseWork":[{"name":"Software Engineering","grade":"1.3"},{"name":"Communication Networks","grade":"1.0"},{"name":"Medicine I","grade":"1.7"},{"name":"Database Systems","grade":"1.0"},{"name":"Medicine II","grade":"1.7"}]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Technical University of Applied Sciences Regensburg\",\n  \"start\": \"Oct 2020\",\n  \"end\": \"Mar 2022\",\n  \"title\": \"B.Sc. Medical Computer Science\",\n  \"courseWork\": [{\n    \"name\": \"Software Engineering\",\n    \"grade\": \"1.3\"\n  }, {\n    \"name\": \"Communication Networks\",\n    \"grade\": \"1.0\"\n  }, {\n    \"name\": \"Medicine I\",\n    \"grade\": \"1.7\"\n  }, {\n    \"name\": \"Database Systems\",\n    \"grade\": \"1.0\"\n  }, {\n    \"name\": \"Medicine II\",\n    \"grade\": \"1.7\"\n  }]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Absolved several modules in Medical Computer Science in a second bachelors degree before switching to the University of Munich.\\nIn this degree I'll learn the fundamentals of medicine and medical engineering.\\nFurthermore the degree includes computer science fundamentals like Algorithms & Data Structures, Theoratical Computer Science\\nand Technical Computer Science.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"B.Sc. Business Information Systems","station":"Technical University of Applied Sciences Ingolstadt","start":"Oct 2016","end":"Mar 2020","courseWork":[{"name":"Programming II","grade":"1.3"},{"name":"Android Programming","grade":"1.0"},{"name":"Web Technologies & Development","grade":"1.0"},{"name":"Software Engineering","grade":"1.3"},{"name":"Communication Networks","grade":"1.0"},{"name":"Database Systems","grade":"1.0"}]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Technical University of Applied Sciences Ingolstadt\",\n  \"start\": \"Oct 2016\",\n  \"end\": \"Mar 2020\",\n  \"title\": \"B.Sc. Business Information Systems\",\n  \"courseWork\": [{\n    \"name\": \"Programming II\",\n    \"grade\": \"1.3\"\n  }, {\n    \"name\": \"Android Programming\",\n    \"grade\": \"1.0\"\n  }, {\n    \"name\": \"Web Technologies & Development\",\n    \"grade\": \"1.0\"\n  }, {\n    \"name\": \"Software Engineering\",\n    \"grade\": \"1.3\"\n  }, {\n    \"name\": \"Communication Networks\",\n    \"grade\": \"1.0\"\n  }, {\n    \"name\": \"Database Systems\",\n    \"grade\": \"1.0\"\n  }]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"In the Business Information Systems bachelors degree at the Technical University of Applied Sciences Ingolstadt I've learned\\neverything about implementing and designing enterprise applications. The degree also included the fundamentals of Computer Science\\nlike Communication Networks, Programming, Database Systems, Software Engineering etc.\"));\n}\n;\nMDXContent.isMDXComponent = true;"}]},"workExperience":{"nodes":[{"frontmatter":{"title":"Software Engineer Intern","station":"Apple","start":"Apr 2022","end":"Sep 2022"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Apple\",\n  \"title\": \"Software Engineer Intern\",\n  \"start\": \"Apr 2022\",\n  \"end\": \"Sep 2022\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Part of the Wireless Technologies & Ecosystems team at Apple Munich\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Software Engineer Intern","station":"Red Hat","start":"Nov 2021","end":"May 2022"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Red Hat\",\n  \"title\": \"Software Engineer Intern\",\n  \"start\": \"Nov 2021\",\n  \"end\": \"May 2022\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Part of the OpenShift Console team: \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://github.com/openshift/console\"\n  }, \"https://github.com/openshift/console\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Developed UI components with Typescript and React\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Software Engineer & Co-Founder","station":"Bitelligence","start":"Sep 2019","end":"Mar 2022"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Bitelligence\",\n  \"title\": \"Software Engineer & Co-Founder\",\n  \"start\": \"Sep 2019\",\n  \"end\": \"Mar 2022\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Lead the IT-trainee program of the biggest European insurance company:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Assessment of over 70 new candidates\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Creation of training content\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Conducting full stack development trainings in Java, Spring Boot, Angular and Docker\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Implemented an analytics platform for visualizing workflows in Virtual Reality\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Implemented procedural street generation using OpenStreetMap data, Unreal Engine 4 and C++\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Supervised an User Experience Design intern designing parts of the company homepage\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Bachelor Thesis Candidate","station":"BMW Group","start":"Aug 2019","end":"Dec 2019"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"BMW Group\",\n  \"title\": \"Bachelor Thesis Candidate\",\n  \"start\": \"Aug 2019\",\n  \"end\": \"Dec 2019\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Introduced the testing framework cypress and End2End-Tests to a financial management software\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Reduced the amount of code needed for E2E-tests by 70-80%\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Software Engineer Intern","station":"BMW Group","start":"Aug 2018","end":"Dec 2018"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"BMW Group\",\n  \"title\": \"Software Engineer Intern\",\n  \"start\": \"Aug 2018\",\n  \"end\": \"Dec 2018\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Increased insights and security of a software monitor by redeveloping it using Java, Elastic Search, Logstash, Kibana and VueJS\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Reviewed code and technical concepts of external partners\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Software Engineer Intern","station":"Sulzer GmbH","start":"Feb 2018","end":"Aug 2018"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Sulzer GmbH\",\n  \"title\": \"Software Engineer Intern\",\n  \"start\": \"Feb 2018\",\n  \"end\": \"Aug 2018\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Introduced Behavior Driven Development to an automotive updating software\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Implemented UI tests using Selenium and Cucumber\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Wrote Python scripts to improve log file analysis\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Software Engineering Intern","station":"exentra GmbH","start":"May 2016","end":"Jan 2018"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"exentra GmbH\",\n  \"title\": \"Software Engineering Intern\",\n  \"start\": \"May 2016\",\n  \"end\": \"Jan 2018\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Implemented several data export features for a PLM software using Java\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Increased the UI testing coverage from 10% to nearly 100% using Java, Selenium and Cucumber\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Wrote Python scripts to automatically fetch and parse Jenkins build results\")));\n}\n;\nMDXContent.isMDXComponent = true;"}]},"certificatesExperience":{"nodes":[{"frontmatter":{"title":"Data Structures & Algorithms","station":"Udacity","start":"August 2021","end":"October 2021"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Udacity\",\n  \"start\": \"August 2021\",\n  \"end\": \"October 2021\",\n  \"title\": \"Data Structures & Algorithms\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Data Structures\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Basic Algorithms\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Advanced Algorithms\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"React Nanodegree","station":"Udacity","start":"August 2021","end":"October 2021"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Udacity\",\n  \"start\": \"August 2021\",\n  \"end\": \"October 2021\",\n  \"title\": \"React Nanodegree\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"React Fundamentals\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"React & Redux\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Front End Web Developer Nanodegree","station":"Udacity","start":"Jul 2021","end":"August 2021"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Udacity\",\n  \"start\": \"Jul 2021\",\n  \"end\": \"August 2021\",\n  \"title\": \"Front End Web Developer Nanodegree\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"CSS & Website Layout\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"JavaScript and the DOM\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Web APIs and Asynchronous Applications\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Build Tools, Webpack and Service Workers\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Java Web Developer Nanodegree","station":"Udacity","start":"May 2021","end":"Jun 2021"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Udacity\",\n  \"start\": \"May 2021\",\n  \"end\": \"Jun 2021\",\n  \"title\": \"Java Web Developer Nanodegree\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Spring Boot Basics\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Web Services and APIs\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Data Stores & Persistence\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Security and DevOps\")));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"C++ Nanodegree","station":"Udacity","start":"May 2021","end":"Jun 2021"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"station\": \"Udacity\",\n  \"start\": \"May 2021\",\n  \"end\": \"Jun 2021\",\n  \"title\": \"C++ Nanodegree\"\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"C++ Foundations\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Object-Oriented Programming\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Memory Management\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Concurrency\")));\n}\n;\nMDXContent.isMDXComponent = true;"}]},"projects":{"nodes":[{"frontmatter":{"title":"Blog","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#484848","images":{"fallback":{"src":"/static/16cda56269ba6b9ed35718a268909f50/ae196/blog.png","srcSet":"/static/16cda56269ba6b9ed35718a268909f50/e5aba/blog.png 159w,\n/static/16cda56269ba6b9ed35718a268909f50/ceaaa/blog.png 319w,\n/static/16cda56269ba6b9ed35718a268909f50/ae196/blog.png 637w","sizes":"(min-width: 637px) 637px, 100vw"},"sources":[{"srcSet":"/static/16cda56269ba6b9ed35718a268909f50/6c67f/blog.webp 159w,\n/static/16cda56269ba6b9ed35718a268909f50/7db4d/blog.webp 319w,\n/static/16cda56269ba6b9ed35718a268909f50/d3dff/blog.webp 637w","type":"image/webp","sizes":"(min-width: 637px) 637px, 100vw"}]},"width":637,"height":883}}},"githubLink":"https://github.com/TimG1997/FEWD-ND-P1-Blog","technologies":["HTML","CSS"],"keywords":["HTML","CSS"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Blog\",\n  \"image\": \"./blog.png\",\n  \"githubLink\": \"https://github.com/TimG1997/FEWD-ND-P1-Blog\",\n  \"technologies\": [\"HTML\", \"CSS\"],\n  \"keywords\": [\"HTML\", \"CSS\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"I've implemented this blog as a first project for the Front End Web Developer Nanodegree program of Udacity.\\nIt includes styling with CSS and building the semantic structure with HTML.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"A-Star with OpenStreetMap data","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#e8e8e8","images":{"fallback":{"src":"/static/78069c8dc5794f9d70b543e55ad3b454/7b1c8/a-star-osm.png","srcSet":"/static/78069c8dc5794f9d70b543e55ad3b454/e9a60/a-star-osm.png 300w,\n/static/78069c8dc5794f9d70b543e55ad3b454/53479/a-star-osm.png 600w,\n/static/78069c8dc5794f9d70b543e55ad3b454/7b1c8/a-star-osm.png 1200w","sizes":"(min-width: 1200px) 1200px, 100vw"},"sources":[{"srcSet":"/static/78069c8dc5794f9d70b543e55ad3b454/a8059/a-star-osm.webp 300w,\n/static/78069c8dc5794f9d70b543e55ad3b454/75d4b/a-star-osm.webp 600w,\n/static/78069c8dc5794f9d70b543e55ad3b454/6c03c/a-star-osm.webp 1200w","type":"image/webp","sizes":"(min-width: 1200px) 1200px, 100vw"}]},"width":1200,"height":901}}},"githubLink":"https://github.com/TimG1997/CPP-ND-A-Star-OpenStreetMap","technologies":["C++","CMake","Google Test"],"keywords":["C++"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"A-Star with OpenStreetMap data\",\n  \"image\": \"./a-star-osm.png\",\n  \"githubLink\": \"https://github.com/TimG1997/CPP-ND-A-Star-OpenStreetMap\",\n  \"technologies\": [\"C++\", \"CMake\", \"Google Test\"],\n  \"keywords\": [\"C++\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is the first project of the Udacity C++ Nanodegree.\\nI've implemented the A*-Algorithm to find the shortest path in a street map.\\nThe map data comes from OpenStreetMap.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Chatbot Memory Management Optimization","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#181818","images":{"fallback":{"src":"/static/85d72f56a72e7d6e03b1e981f48ae88d/f10b1/chatbot.png","srcSet":"/static/85d72f56a72e7d6e03b1e981f48ae88d/f70b6/chatbot.png 206w,\n/static/85d72f56a72e7d6e03b1e981f48ae88d/143a9/chatbot.png 411w,\n/static/85d72f56a72e7d6e03b1e981f48ae88d/f10b1/chatbot.png 822w","sizes":"(min-width: 822px) 822px, 100vw"},"sources":[{"srcSet":"/static/85d72f56a72e7d6e03b1e981f48ae88d/bf589/chatbot.webp 206w,\n/static/85d72f56a72e7d6e03b1e981f48ae88d/fe6ce/chatbot.webp 411w,\n/static/85d72f56a72e7d6e03b1e981f48ae88d/981bc/chatbot.webp 822w","type":"image/webp","sizes":"(min-width: 822px) 822px, 100vw"}]},"width":822,"height":565}}},"githubLink":"https://github.com/TimG1997/CPP-ND-Chatbot-Memory-Management-Optimization","technologies":["C++","CMake","Google Test","wxWidgets"],"keywords":["C++"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Chatbot Memory Management Optimization\",\n  \"image\": \"./chatbot.png\",\n  \"githubLink\": \"https://github.com/TimG1997/CPP-ND-Chatbot-Memory-Management-Optimization\",\n  \"technologies\": [\"C++\", \"CMake\", \"Google Test\", \"wxWidgets\"],\n  \"keywords\": [\"C++\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is the third project of the Udacity C++ Nanodegree.\\nIt was about a memory management optimization of an already existing chatbot.\\nThis project required a deep understanding of memory management in C++.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Concurrent Traffic simulation","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#282828","images":{"fallback":{"src":"/static/80a48f486c6b696d9ff0472cba6db463/e18ae/concurrent-traffic-simulation.png","srcSet":"/static/80a48f486c6b696d9ff0472cba6db463/627de/concurrent-traffic-simulation.png 209w,\n/static/80a48f486c6b696d9ff0472cba6db463/d1c2e/concurrent-traffic-simulation.png 418w,\n/static/80a48f486c6b696d9ff0472cba6db463/e18ae/concurrent-traffic-simulation.png 836w","sizes":"(min-width: 836px) 836px, 100vw"},"sources":[{"srcSet":"/static/80a48f486c6b696d9ff0472cba6db463/330ae/concurrent-traffic-simulation.webp 209w,\n/static/80a48f486c6b696d9ff0472cba6db463/03fc8/concurrent-traffic-simulation.webp 418w,\n/static/80a48f486c6b696d9ff0472cba6db463/ba21b/concurrent-traffic-simulation.webp 836w","type":"image/webp","sizes":"(min-width: 836px) 836px, 100vw"}]},"width":836,"height":426}}},"githubLink":"https://github.com/TimG1997/Concurrent-Traffic-Simulation","technologies":["C++","OpenCV","CMake"],"keywords":["C++"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Concurrent Traffic simulation\",\n  \"image\": \"./concurrent-traffic-simulation.png\",\n  \"githubLink\": \"https://github.com/TimG1997/Concurrent-Traffic-Simulation\",\n  \"technologies\": [\"C++\", \"OpenCV\", \"CMake\"],\n  \"keywords\": [\"C++\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is the implementation for the fourth project in the Udacity C++ Nanodegree Program: Concurrency.\\nIt was all about handling concurrency to avoid typical concurrency problems like dead locks, live locks and so on.\\nThe goal was to have a simple, but fully functional traffic simulation, which will then be rendered using OpenCV.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Critter Chronologer","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#282828","images":{"fallback":{"src":"/static/408c3ce23ca6f9c826062e62ccd8bc35/55117/critter-chronologer.png","srcSet":"/static/408c3ce23ca6f9c826062e62ccd8bc35/fd832/critter-chronologer.png 400w,\n/static/408c3ce23ca6f9c826062e62ccd8bc35/a7181/critter-chronologer.png 800w,\n/static/408c3ce23ca6f9c826062e62ccd8bc35/55117/critter-chronologer.png 1599w","sizes":"(min-width: 1599px) 1599px, 100vw"},"sources":[{"srcSet":"/static/408c3ce23ca6f9c826062e62ccd8bc35/76faa/critter-chronologer.webp 400w,\n/static/408c3ce23ca6f9c826062e62ccd8bc35/047a8/critter-chronologer.webp 800w,\n/static/408c3ce23ca6f9c826062e62ccd8bc35/e85da/critter-chronologer.webp 1599w","type":"image/webp","sizes":"(min-width: 1599px) 1599px, 100vw"}]},"width":1599,"height":501}}},"githubLink":"https://github.com/TimG1997/JWD-ND-Critter-Chronologer","technologies":["Java","Spring Boot"],"keywords":["Java","Spring Boot"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Critter Chronologer\",\n  \"image\": \"./critter-chronologer.png\",\n  \"githubLink\": \"https://github.com/TimG1997/JWD-ND-Critter-Chronologer\",\n  \"technologies\": [\"Java\", \"Spring Boot\"],\n  \"keywords\": [\"Java\", \"Spring Boot\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The Critter Chronologer is the third project of the Udacity Nanodegree Java Web Developer program.\\nIt was especially about designing the appropriate data structures and entities for the application to work using Spring Boot\\nand Hibernate.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"eCommerce API","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/16e510cb163ac5a776d1ee8616f3205f/94816/jenkins.png","srcSet":"/static/16e510cb163ac5a776d1ee8616f3205f/6b111/jenkins.png 409w,\n/static/16e510cb163ac5a776d1ee8616f3205f/4730e/jenkins.png 818w,\n/static/16e510cb163ac5a776d1ee8616f3205f/94816/jenkins.png 1635w","sizes":"(min-width: 1635px) 1635px, 100vw"},"sources":[{"srcSet":"/static/16e510cb163ac5a776d1ee8616f3205f/44ce8/jenkins.webp 409w,\n/static/16e510cb163ac5a776d1ee8616f3205f/5477e/jenkins.webp 818w,\n/static/16e510cb163ac5a776d1ee8616f3205f/1e08b/jenkins.webp 1635w","type":"image/webp","sizes":"(min-width: 1635px) 1635px, 100vw"}]},"width":1635,"height":500}}},"githubLink":"https://github.com/TimG1997/JWD-ND-eCommerce-Application","technologies":["Java","Spring Boot","Jenkins","JWT","Splunk"],"keywords":["Java","Spring Boot","CI/CD"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"eCommerce API\",\n  \"image\": \"./jenkins.png\",\n  \"githubLink\": \"https://github.com/TimG1997/JWD-ND-eCommerce-Application\",\n  \"technologies\": [\"Java\", \"Spring Boot\", \"Jenkins\", \"JWT\", \"Splunk\"],\n  \"keywords\": [\"Java\", \"Spring Boot\", \"CI/CD\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The eCommerce API is the last project of the Udacity Java Web Developer Nanodegree.\\nIt includes the implementation of Authentication and Authorization using Spring Boot Security and JWT.\\nFurthermore I've set up a Jenkins Server for Continuous Integration and Splunk to analyze log events.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Digital Learning System","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/75e3c738697ca3ebd3e6d0e4209f42fe/68136/digital-learning-system.png","srcSet":"/static/75e3c738697ca3ebd3e6d0e4209f42fe/d2cfd/digital-learning-system.png 199w,\n/static/75e3c738697ca3ebd3e6d0e4209f42fe/5b5e9/digital-learning-system.png 397w,\n/static/75e3c738697ca3ebd3e6d0e4209f42fe/68136/digital-learning-system.png 794w","sizes":"(min-width: 794px) 794px, 100vw"},"sources":[{"srcSet":"/static/75e3c738697ca3ebd3e6d0e4209f42fe/9e946/digital-learning-system.webp 199w,\n/static/75e3c738697ca3ebd3e6d0e4209f42fe/1817c/digital-learning-system.webp 397w,\n/static/75e3c738697ca3ebd3e6d0e4209f42fe/effdd/digital-learning-system.webp 794w","type":"image/webp","sizes":"(min-width: 794px) 794px, 100vw"}]},"width":794,"height":519}}},"githubLink":"https://github.com/TimG1997/Concurrent-Traffic-Simulation","technologies":["Java","Spring Boot","VueJS","Docker"],"keywords":["Java","VueJS","Spring Boot"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Digital Learning System\",\n  \"image\": \"./digital-learning-system.png\",\n  \"githubLink\": \"https://github.com/TimG1997/Concurrent-Traffic-Simulation\",\n  \"technologies\": [\"Java\", \"Spring Boot\", \"VueJS\", \"Docker\"],\n  \"keywords\": [\"Java\", \"VueJS\", \"Spring Boot\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The digital learning system was a project I've developed with three fellow students at the Technical University of Applied Sciences Ingolstadt.\\nWe've implemented a full stack application for managing flash cards and learning with an intelligent spaced-repetition learning algorithm. We've also\\nimplemted a websocket-based Quiz and Q&A mode. We've received the price for an outstanding project from the Technical University of Applied Sciences Ingolstadt.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Cloud Storage","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/25fcf935cccfaaf29013b7f51d73ea4e/1e5bf/cloud-storage.png","srcSet":"/static/25fcf935cccfaaf29013b7f51d73ea4e/7a1cf/cloud-storage.png 289w,\n/static/25fcf935cccfaaf29013b7f51d73ea4e/8ba1a/cloud-storage.png 577w,\n/static/25fcf935cccfaaf29013b7f51d73ea4e/1e5bf/cloud-storage.png 1154w","sizes":"(min-width: 1154px) 1154px, 100vw"},"sources":[{"srcSet":"/static/25fcf935cccfaaf29013b7f51d73ea4e/8b60e/cloud-storage.webp 289w,\n/static/25fcf935cccfaaf29013b7f51d73ea4e/0217f/cloud-storage.webp 577w,\n/static/25fcf935cccfaaf29013b7f51d73ea4e/da069/cloud-storage.webp 1154w","type":"image/webp","sizes":"(min-width: 1154px) 1154px, 100vw"}]},"width":1154,"height":516}}},"githubLink":"https://github.com/TimG1997/JWD-ND-SuperDuperDrive","technologies":["Java","Spring Boot","Selenium"],"keywords":["Java","Spring Boot"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Cloud Storage\",\n  \"image\": \"./cloud-storage.png\",\n  \"githubLink\": \"https://github.com/TimG1997/JWD-ND-SuperDuperDrive\",\n  \"technologies\": [\"Java\", \"Spring Boot\", \"Selenium\"],\n  \"keywords\": [\"Java\", \"Spring Boot\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The Cloud Storage project is the first project of the Udacity Nanodegree Java Web Developer program.\\nIt includes the implementation of a basic user access control using Spring Security. You had also to implement a frontend\\nwith thymeleaf. The UI of the application had also been tested with Selenium.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Game of Life","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#282828","images":{"fallback":{"src":"/static/a507349c26865916d21dd49df0c3d4a0/934b3/game-of-life.png","srcSet":"/static/a507349c26865916d21dd49df0c3d4a0/29e8a/game-of-life.png 338w,\n/static/a507349c26865916d21dd49df0c3d4a0/50ea6/game-of-life.png 676w,\n/static/a507349c26865916d21dd49df0c3d4a0/934b3/game-of-life.png 1351w","sizes":"(min-width: 1351px) 1351px, 100vw"},"sources":[{"srcSet":"/static/a507349c26865916d21dd49df0c3d4a0/7c277/game-of-life.webp 338w,\n/static/a507349c26865916d21dd49df0c3d4a0/fff4d/game-of-life.webp 676w,\n/static/a507349c26865916d21dd49df0c3d4a0/19e8f/game-of-life.webp 1351w","type":"image/webp","sizes":"(min-width: 1351px) 1351px, 100vw"}]},"width":1351,"height":764}}},"githubLink":"https://github.com/TimG1997/CPP-ND-Game-Of-Life","technologies":["C++","CMake","Google Test"],"keywords":["C++"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Game of Life\",\n  \"image\": \"./game-of-life.png\",\n  \"githubLink\": \"https://github.com/TimG1997/CPP-ND-Game-Of-Life\",\n  \"technologies\": [\"C++\", \"CMake\", \"Google Test\"],\n  \"keywords\": [\"C++\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The last project for the Udacity C++ Nanodegree program included a so called capstone project, where you have to choose\\nan own project. I've implemented the genetic algorithm Game of Life developed by John Horton Conway. This project includes\\nthe basic simulation and several extension points to hook into the simulation and also to use a custom renderer.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Landing Page","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#182848","images":{"fallback":{"src":"/static/d12ee5250506481f3b8c1346bc80b2c8/51f7f/landing-page.png","srcSet":"/static/d12ee5250506481f3b8c1346bc80b2c8/53d1f/landing-page.png 213w,\n/static/d12ee5250506481f3b8c1346bc80b2c8/cfb93/landing-page.png 427w,\n/static/d12ee5250506481f3b8c1346bc80b2c8/51f7f/landing-page.png 853w","sizes":"(min-width: 853px) 853px, 100vw"},"sources":[{"srcSet":"/static/d12ee5250506481f3b8c1346bc80b2c8/3f1c9/landing-page.webp 213w,\n/static/d12ee5250506481f3b8c1346bc80b2c8/9547b/landing-page.webp 427w,\n/static/d12ee5250506481f3b8c1346bc80b2c8/90da7/landing-page.webp 853w","type":"image/webp","sizes":"(min-width: 853px) 853px, 100vw"}]},"width":853,"height":646}}},"githubLink":"https://github.com/TimG1997/FEWD-ND-P2-Landing-Page","technologies":["HTML","CSS","JavaScript"],"keywords":["HTML","CSS","JavaScript"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Landing Page\",\n  \"image\": \"./landing-page.png\",\n  \"githubLink\": \"https://github.com/TimG1997/FEWD-ND-P2-Landing-Page\",\n  \"technologies\": [\"HTML\", \"CSS\", \"JavaScript\"],\n  \"keywords\": [\"HTML\", \"CSS\", \"JavaScript\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"For the second project of the Udacity Front End Web Developer Nanodegree you had implement a landing page with a dynamic scroll behavior\\nusing Vanilla JavaScript.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"My Reads","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/a137ab1f7a1d4abe128a0f3684ab4e34/cae3c/book-management.png","srcSet":"/static/a137ab1f7a1d4abe128a0f3684ab4e34/8e66a/book-management.png 190w,\n/static/a137ab1f7a1d4abe128a0f3684ab4e34/ac9c7/book-management.png 380w,\n/static/a137ab1f7a1d4abe128a0f3684ab4e34/cae3c/book-management.png 759w","sizes":"(min-width: 759px) 759px, 100vw"},"sources":[{"srcSet":"/static/a137ab1f7a1d4abe128a0f3684ab4e34/db63d/book-management.webp 190w,\n/static/a137ab1f7a1d4abe128a0f3684ab4e34/a118a/book-management.webp 380w,\n/static/a137ab1f7a1d4abe128a0f3684ab4e34/de4cd/book-management.webp 759w","type":"image/webp","sizes":"(min-width: 759px) 759px, 100vw"}]},"width":759,"height":724.0000000000001}}},"githubLink":"https://github.com/TimG1997/React-ND-P1-My-Reads","technologies":["React","HTML","CSS","JavaScript"],"keywords":["React","HTML","CSS","JavaScript"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"My Reads\",\n  \"image\": \"./book-management.png\",\n  \"githubLink\": \"https://github.com/TimG1997/React-ND-P1-My-Reads\",\n  \"technologies\": [\"React\", \"HTML\", \"CSS\", \"JavaScript\"],\n  \"keywords\": [\"React\", \"HTML\", \"CSS\", \"JavaScript\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"The \\\"My Reads\\\" app is the first project of the Udacity React Nanodegree program. It's an app to manage your books, which you're currently reading or which you want to read.\\nIt's also integrated with a 3rd party API to fetch the book data. It includes the implementation of routing and state management with React.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Natural Language Processing App","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/876dc556d17f5701933f1864c5c7de26/76350/nlp.png","srcSet":"/static/876dc556d17f5701933f1864c5c7de26/ea8ed/nlp.png 91w,\n/static/876dc556d17f5701933f1864c5c7de26/51504/nlp.png 182w,\n/static/876dc556d17f5701933f1864c5c7de26/76350/nlp.png 364w","sizes":"(min-width: 364px) 364px, 100vw"},"sources":[{"srcSet":"/static/876dc556d17f5701933f1864c5c7de26/65c5f/nlp.webp 91w,\n/static/876dc556d17f5701933f1864c5c7de26/3cfb1/nlp.webp 182w,\n/static/876dc556d17f5701933f1864c5c7de26/7e55d/nlp.webp 364w","type":"image/webp","sizes":"(min-width: 364px) 364px, 100vw"}]},"width":364,"height":255}}},"githubLink":"https://github.com/TimG1997/FEWD-ND-P4-NLP","technologies":["HTML","CSS","JavaScript","Webpack","NodeJS","Jest"],"keywords":["HTML","CSS","JavaScript","NodeJS"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Natural Language Processing App\",\n  \"image\": \"./nlp.png\",\n  \"githubLink\": \"https://github.com/TimG1997/FEWD-ND-P4-NLP\",\n  \"technologies\": [\"HTML\", \"CSS\", \"JavaScript\", \"Webpack\", \"NodeJS\", \"Jest\"],\n  \"keywords\": [\"HTML\", \"CSS\", \"JavaScript\", \"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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is the implementation of the fourth project of the Udacity Front End Web Developer Nanodegree.\\nIt's an app to analyze given text or text from an url using a 3rd party NLP-API.\\nYou had to implement a NodeJS Server, which acts like a proxy for the Front End. You also had to configure Webpack\\nfor building the app. Furthermore you had to implement unit tests with jest.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"System monitor","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#080808","images":{"fallback":{"src":"/static/3268acb57ab0903861939c9b236a02c1/13174/system-monitor.png","srcSet":"/static/3268acb57ab0903861939c9b236a02c1/e93de/system-monitor.png 208w,\n/static/3268acb57ab0903861939c9b236a02c1/231ea/system-monitor.png 417w,\n/static/3268acb57ab0903861939c9b236a02c1/13174/system-monitor.png 833w","sizes":"(min-width: 833px) 833px, 100vw"},"sources":[{"srcSet":"/static/3268acb57ab0903861939c9b236a02c1/e4fb2/system-monitor.webp 208w,\n/static/3268acb57ab0903861939c9b236a02c1/09a97/system-monitor.webp 417w,\n/static/3268acb57ab0903861939c9b236a02c1/6af67/system-monitor.webp 833w","type":"image/webp","sizes":"(min-width: 833px) 833px, 100vw"}]},"width":833,"height":316}}},"githubLink":"https://github.com/TimG1997/System-Monitor","technologies":["C++","CMake","Google Test","Linux"],"keywords":["C++","Linux"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"System monitor\",\n  \"image\": \"./system-monitor.png\",\n  \"githubLink\": \"https://github.com/TimG1997/System-Monitor\",\n  \"technologies\": [\"C++\", \"CMake\", \"Google Test\", \"Linux\"],\n  \"keywords\": [\"C++\", \"Linux\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is the implementation for the second project of the Udacity C++ Nanodegree.\\nThe main subject was to implement a system monitor similar to htop.\\nThis included advanced understanding of the linux file and directory structure.\\nI've also tested the whole application with the GoogleTest framework.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Travel Planner","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f83858","images":{"fallback":{"src":"/static/852a1b0a017cda71f78420efec757815/06d35/travel-planner.png","srcSet":"/static/852a1b0a017cda71f78420efec757815/39e4d/travel-planner.png 94w,\n/static/852a1b0a017cda71f78420efec757815/ed8f4/travel-planner.png 188w,\n/static/852a1b0a017cda71f78420efec757815/06d35/travel-planner.png 376w","sizes":"(min-width: 376px) 376px, 100vw"},"sources":[{"srcSet":"/static/852a1b0a017cda71f78420efec757815/bd503/travel-planner.webp 94w,\n/static/852a1b0a017cda71f78420efec757815/b00b1/travel-planner.webp 188w,\n/static/852a1b0a017cda71f78420efec757815/9e74e/travel-planner.webp 376w","type":"image/webp","sizes":"(min-width: 376px) 376px, 100vw"}]},"width":376,"height":325}}},"githubLink":"https://github.com/TimG1997/FEWD-ND-P5-Capstone","technologies":["HTML","CSS","JavaScript","Webpack","NodeJS","Jest"],"keywords":["HTML","CSS","JavaScript","NodeJS"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Travel Planner\",\n  \"image\": \"./travel-planner.png\",\n  \"githubLink\": \"https://github.com/TimG1997/FEWD-ND-P5-Capstone\",\n  \"technologies\": [\"HTML\", \"CSS\", \"JavaScript\", \"Webpack\", \"NodeJS\", \"Jest\"],\n  \"keywords\": [\"HTML\", \"CSS\", \"JavaScript\", \"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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is the last project and also capstone project of the Udacity Front End Web Developer Nanodegree. It's an app to plan a trip using several different APIs for example to retreive the weather at the location and also an example image.\\nYou had to configure the build process with Webpack and also use Jest for testing.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Vehicles API","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#383848","images":{"fallback":{"src":"/static/6f18d7965a84f30eb07dea35c21147cc/c793e/vehicles-api.png","srcSet":"/static/6f18d7965a84f30eb07dea35c21147cc/0d6e3/vehicles-api.png 139w,\n/static/6f18d7965a84f30eb07dea35c21147cc/dab4c/vehicles-api.png 278w,\n/static/6f18d7965a84f30eb07dea35c21147cc/c793e/vehicles-api.png 555w","sizes":"(min-width: 555px) 555px, 100vw"},"sources":[{"srcSet":"/static/6f18d7965a84f30eb07dea35c21147cc/c7e4b/vehicles-api.webp 139w,\n/static/6f18d7965a84f30eb07dea35c21147cc/2644e/vehicles-api.webp 278w,\n/static/6f18d7965a84f30eb07dea35c21147cc/774bd/vehicles-api.webp 555w","type":"image/webp","sizes":"(min-width: 555px) 555px, 100vw"}]},"width":555,"height":332}}},"githubLink":"https://github.com/TimG1997/JWD-ND-Vehicles-API","technologies":["Java","Spring Boot","Docker"],"keywords":["Java","Spring Boot","Docker"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Vehicles API\",\n  \"image\": \"./vehicles-api.png\",\n  \"githubLink\": \"https://github.com/TimG1997/JWD-ND-Vehicles-API\",\n  \"technologies\": [\"Java\", \"Spring Boot\", \"Docker\"],\n  \"keywords\": [\"Java\", \"Spring Boot\", \"Docker\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This project is the second project of the Udacity Nanodegree Java Web Developer program.\\nI've implemented a Vehicles API following a Microservice Architecture using Eureka.\\nFurthermore I've dockerized all Microservices to improve robustness on startup.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},{"frontmatter":{"title":"Weather App","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f83858","images":{"fallback":{"src":"/static/2c6421942ec3f9427cb1af33015288ae/d4939/weather-app.png","srcSet":"/static/2c6421942ec3f9427cb1af33015288ae/d3ba2/weather-app.png 219w,\n/static/2c6421942ec3f9427cb1af33015288ae/60b21/weather-app.png 437w,\n/static/2c6421942ec3f9427cb1af33015288ae/d4939/weather-app.png 874w","sizes":"(min-width: 874px) 874px, 100vw"},"sources":[{"srcSet":"/static/2c6421942ec3f9427cb1af33015288ae/9ef19/weather-app.webp 219w,\n/static/2c6421942ec3f9427cb1af33015288ae/70e95/weather-app.webp 437w,\n/static/2c6421942ec3f9427cb1af33015288ae/566ba/weather-app.webp 874w","type":"image/webp","sizes":"(min-width: 874px) 874px, 100vw"}]},"width":874,"height":692}}},"githubLink":"https://github.com/TimG1997/FEWD-ND-P3-Weather-App","technologies":["HTML","CSS","JavaScript"],"keywords":["HTML","CSS","JavaScript"]},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || 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); }\n\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; }\n\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\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Weather App\",\n  \"image\": \"./weather-app.png\",\n  \"githubLink\": \"https://github.com/TimG1997/FEWD-ND-P3-Weather-App\",\n  \"technologies\": [\"HTML\", \"CSS\", \"JavaScript\"],\n  \"keywords\": [\"HTML\", \"CSS\", \"JavaScript\"]\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\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This is the implementation of the third project of the Udacity Front End Web Developer Nanodegree.\\nYou had to implement a simple NodeJS server serving the app and retrieving requests from the Front End.\"));\n}\n;\nMDXContent.isMDXComponent = true;"}]},"contact":{"nodes":[{"frontmatter":{"email":"grein.tim97@gmail.com","paragraph":"Feel free to reach out to me at any time. Whether you have a question or just want to say hi, I’ll try my best to get back to you!"}}]}},"pageContext":{}},
    "staticQueryHashes": []}