[{"data":1,"prerenderedAt":211},["ShallowReactive",2],{"slug-content-en-\u002Fprojects\u002Fvertretungsplan":3},{"kind":4,"item":5,"categories":65},"project",{"id":6,"title":7,"body":8,"dateEnd":41,"dateStart":42,"description":43,"extension":44,"featuredInCv":45,"link":46,"meta":47,"navigation":48,"path":49,"repo":46,"seo":50,"stem":51,"tags":52,"__hash__":64},"projects_en\u002Fprojects\u002Fvertretungsplan.md","Vertretungsplan",{"type":9,"value":10,"toc":36},"minimark",[11,16,24,33],[12,13,15],"h2",{"id":14},"about-the-project","About the Project",[17,18,19,20,23],"p",{},"During my Abitur at Pictorius Berufskolleg, an early version of the Untis school cloud was in use.",[21,22],"br",{},"\nAt the time, the provider offered no interfaces, no responsiveness, and very little UX, especially for mobile users.",[17,25,26,27,29,30,32],{},"As a solution, I wrote my own Symfony backend with a web crawler and API that fetched the data from the provider, cached it, and served it back in a processed form.",[21,28],{},"\nA native Android app was built alongside it, which fetched and displayed the data via the API.",[21,31],{},"\nThe app was distributed via the Google Play Store and was widely used throughout the school, across courses and grade levels.",[17,34,35],{},"I discontinued the app once the school cloud provider offered their own alternative and had locked down their interfaces enough that simple crawling was no longer possible.",{"title":37,"searchDepth":38,"depth":38,"links":39},"",2,[40],{"id":14,"depth":38,"text":15},"2018-06","2017-10","An app to improve the substitute teacher schedule at my vocational college","md",false,null,{},true,"\u002Fprojects\u002Fvertretungsplan",{"title":7,"description":43},"projects\u002Fvertretungsplan",[53,54,55,56,57,58,59,60,61,62,63],"php","symfony","sql","rest","nginx","flutter","dart","android","html5","css3","git","tK8H9DnnBSmksZypNMZMPKukEMo24gDn2pmKBKznhiY",[66,74,93,114,142,151,160,169],{"name":67,"items":68},"Databases",[69,71],{"slug":55,"name":70},"SQL (MySQL, MariaDB)",{"slug":72,"name":73},"sqlite","SQLite",{"name":75,"items":76},"Frontend",[77,79,81,84,87,90],{"slug":61,"name":78},"HTML5",{"slug":62,"name":80},"CSS3",{"slug":82,"name":83},"tailwindcss","Tailwind CSS",{"slug":85,"name":86},"bootstrap","Bootstrap",{"slug":88,"name":89},"uikit","UIkit",{"slug":91,"name":92},"extjs","Ext JS",{"name":94,"items":95},"JavaScript Ecosystem",[96,99,102,105,108,111],{"slug":97,"name":98},"javascript","JavaScript",{"slug":100,"name":101},"typescript","TypeScript",{"slug":103,"name":104},"nodejs","Node.js",{"slug":106,"name":107},"vuejs","Vue.js",{"slug":109,"name":110},"nuxt","Nuxt.JS",{"slug":112,"name":113},"deno","Deno",{"name":115,"items":116},"Backend",[117,119,122,124,127,130,133,136,139],{"slug":53,"name":118},"PHP",{"slug":120,"name":121},"laravel","Laravel",{"slug":54,"name":123},"Symfony",{"slug":125,"name":126},"laminas","Laminas",{"slug":128,"name":129},"mezzio","Mezzio",{"slug":131,"name":132},"zend","Zend Framework",{"slug":134,"name":135},"wordpress","WordPress",{"slug":137,"name":138},"shopware","Shopware",{"slug":140,"name":141},"spryker","Spryker",{"name":143,"items":144},"Mobile",[145,147,149],{"slug":59,"name":146},"Dart",{"slug":58,"name":148},"Flutter",{"slug":60,"name":150},"Android",{"name":152,"items":153},"Other Languages",[154,157],{"slug":155,"name":156},"java","Java",{"slug":158,"name":159},"python","Python",{"name":161,"items":162},"Operating Systems",[163,166],{"slug":164,"name":165},"linux","Linux",{"slug":167,"name":168},"windows","Windows",{"name":170,"items":171},"Other",[172,174,177,180,183,186,189,191,194,197,200,203,205,208],{"slug":63,"name":173},"Git",{"slug":175,"name":176},"docker","Docker",{"slug":178,"name":179},"jenkins","Jenkins",{"slug":181,"name":182},"jvm","JVM",{"slug":184,"name":185},"aws","AWS",{"slug":187,"name":188},"cloudflare","Cloudflare",{"slug":57,"name":190},"Nginx",{"slug":192,"name":193},"redis","Redis",{"slug":195,"name":196},"networking","Networking",{"slug":198,"name":199},"rabbitmq","RabbitMQ",{"slug":201,"name":202},"oidc","OIDC",{"slug":56,"name":204},"REST",{"slug":206,"name":207},"terraform","Terraform",{"slug":209,"name":210},"cicd","CI\u002FCD",1782416851965]