[{"data":1,"prerenderedAt":379},["ShallowReactive",2],{"slug-content-de-\u002Fexperience\u002Ffreelance":3},{"kind":4,"item":5,"categories":66,"projects":204},"experience",{"id":6,"title":7,"body":8,"company":23,"dateEnd":24,"dateStart":25,"description":26,"extension":27,"featured":28,"highlights":29,"location":32,"meta":33,"navigation":34,"path":35,"projects":36,"role":42,"seo":43,"sideGig":34,"stem":44,"tags":45,"__hash__":65},"experience_de\u002Fexperience\u002Ffreelance.md","Freelance",{"type":9,"value":10,"toc":19},"minimark",[11],[12,13,14,15,18],"p",{},"Bereits während meines Abiturs habe ich mich als Freiberufler selbstständig gemacht, um mir neben der Schule etwas dazu zu verdienen.",[16,17],"br",{},"\nEines meiner ersten Projekte betreue und entwickle ich bis heute noch.",{"title":20,"searchDepth":21,"depth":21,"links":22},"",2,[],"Selbstständig","9999-99","2019-11","Bereits während meines Abiturs habe ich mich als Freiberufler selbstständig gemacht, um mir neben der Schule etwas dazu zu verdienen.\nEines meiner ersten Projekte betreue und entwickle ich bis heute noch.","md",false,[30,31],"Entwicklung von Webanwendungen und APIs für Kundenprojekte","Erstellen von Pflichten- und Lastenheften in Abstimmung mit Kunden",null,{},true,"\u002Fexperience\u002Ffreelance",[37,38,39,40,41],"chi-costadelsol.com","richter-historica.de","XML Transformer","mysql-exporter","FtpToGit","Freiberuflicher Softwareentwickler",{"description":26},"experience\u002Ffreelance",[46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],"php","laravel","symfony","shopware","vuejs","nuxt","javascript","typescript","linux","rest","html5","css3","tailwindcss","docker","git","nodejs","cloudflare","nginx","cicd","cCedPDN2Ev01crEMp-HvzYifDIIjyHv0CZPZy44dvd0",[67,76,94,110,136,148,157,165],{"name":68,"items":69},"Datenbanken",[70,73],{"slug":71,"name":72},"sql","SQL (MySQL, MariaDB)",{"slug":74,"name":75},"sqlite","SQLite",{"name":77,"items":78},"Frontend",[79,81,83,85,88,91],{"slug":56,"name":80},"HTML5",{"slug":57,"name":82},"CSS3",{"slug":58,"name":84},"Tailwind CSS",{"slug":86,"name":87},"bootstrap","Bootstrap",{"slug":89,"name":90},"uikit","UIkit",{"slug":92,"name":93},"extjs","Ext JS",{"name":95,"items":96},"JavaScript-Ökosystem",[97,99,101,103,105,107],{"slug":52,"name":98},"JavaScript",{"slug":53,"name":100},"TypeScript",{"slug":61,"name":102},"Node.js",{"slug":50,"name":104},"Vue.js",{"slug":51,"name":106},"Nuxt.JS",{"slug":108,"name":109},"deno","Deno",{"name":111,"items":112},"Backend",[113,115,117,119,122,125,128,131,133],{"slug":46,"name":114},"PHP",{"slug":47,"name":116},"Laravel",{"slug":48,"name":118},"Symfony",{"slug":120,"name":121},"laminas","Laminas",{"slug":123,"name":124},"mezzio","Mezzio",{"slug":126,"name":127},"zend","Zend Framework",{"slug":129,"name":130},"wordpress","WordPress",{"slug":49,"name":132},"Shopware",{"slug":134,"name":135},"spryker","Spryker",{"name":137,"items":138},"Mobile",[139,142,145],{"slug":140,"name":141},"dart","Dart",{"slug":143,"name":144},"flutter","Flutter",{"slug":146,"name":147},"android","Android",{"name":149,"items":150},"Weitere Sprachen",[151,154],{"slug":152,"name":153},"java","Java",{"slug":155,"name":156},"python","Python",{"name":158,"items":159},"Betriebssysteme",[160,162],{"slug":54,"name":161},"Linux",{"slug":163,"name":164},"windows","Windows",{"name":166,"items":167},"Sonstiges",[168,170,172,175,178,181,183,185,188,191,194,197,199,202],{"slug":60,"name":169},"Git",{"slug":59,"name":171},"Docker",{"slug":173,"name":174},"jenkins","Jenkins",{"slug":176,"name":177},"jvm","JVM",{"slug":179,"name":180},"aws","AWS",{"slug":62,"name":182},"Cloudflare",{"slug":63,"name":184},"Nginx",{"slug":186,"name":187},"redis","Redis",{"slug":189,"name":190},"networking","Netzwerk",{"slug":192,"name":193},"rabbitmq","RabbitMQ",{"slug":195,"name":196},"oidc","OIDC",{"slug":55,"name":198},"REST",{"slug":200,"name":201},"terraform","Terraform",{"slug":64,"name":203},"CI\u002FCD",[205,255,285,311,348],{"id":206,"title":37,"body":207,"dateEnd":24,"dateStart":245,"description":246,"extension":27,"featuredInCv":34,"link":247,"meta":248,"navigation":34,"path":249,"repo":32,"seo":250,"stem":251,"tags":252,"__hash__":254},"projects_de\u002Fprojects\u002Fchi-costadelsol.md",{"type":9,"value":208,"toc":240},[209,214,217,223,227,230,234],[210,211,213],"h2",{"id":212},"über-das-projekt","Über das Projekt",[12,215,216],{},"Marketing- und Objekt-Webseite für einen spanischen Immobilienmakler, tätig an der Costa del Sol.",[12,218,219,220,222],{},"Entwickelt wurde ein Symfony Backend, welches die Datenhaltung und den Import der Daten aus einem XML Feed des größten Immobilienportals Spaniens übernimmt.",[16,221],{},"\nDas Frontend wurde mit Nuxt.JS und Tailwind umgesetzt.",[210,224,226],{"id":225},"meine-funktion","Meine Funktion",[12,228,229],{},"Ich habe das Projekt von Anfang an als Full-Stack-Entwickler umgesetzt und war für die gesamte technische Planung und Umsetzung in Zusammenarbeit mit dem Auftraggeber verantwortlich.",[210,231,233],{"id":232},"import","Import",[12,235,236,237,239],{},"Der Import wird asynchron über RabbitMQ als Queue System angestoßen, wahlweise direkt vom Anbieter oder manuell mit einer eigenen XML-Datei.",[16,238],{},"\nDer Fortschritt des Imports wird live im Backoffice angezeigt und aktualisiert.",{"title":20,"searchDepth":21,"depth":21,"links":241},[242,243,244],{"id":212,"depth":21,"text":213},{"id":225,"depth":21,"text":226},{"id":232,"depth":21,"text":233},"2018-03","Webseite für einen spanischen Immobilienmakler an der Costa del Sol.","https:\u002F\u002Fchi-costadelsol.com",{},"\u002Fprojects\u002Fchi-costadelsol",{"title":37,"description":246},"projects\u002Fchi-costadelsol",[46,48,51,52,253,192,89,55,57,50,59,63,189,60,54],"tailwind","e5RitA3woyqKzoK8yE9KkLT4LWcmI6V0Qy4KMUTIpjA",{"id":256,"title":38,"body":257,"dateEnd":276,"dateStart":277,"description":278,"extension":27,"featuredInCv":28,"link":32,"meta":279,"navigation":34,"path":280,"repo":32,"seo":281,"stem":282,"tags":283,"__hash__":284},"projects_de\u002Fprojects\u002Frichter-historica.md",{"type":9,"value":258,"toc":273},[259,261,264,270],[210,260,213],{"id":212},[12,262,263],{},"Ein Online-Shop, der sich auf den Verkauf militärischer Antiquitäten spezialisiert hat.",[12,265,266,267,269],{},"Umgesetzt wurde das Projekt mit Shopware 6, wobei den Wünschen des Kunden entsprechend ein eigenes Theme entwickelt wurde.",[16,268],{},"\nDa der Shop hauptsächlich Unikate verkauft, wurde auf Kundenwunsch ebenfalls eine Reservierungsfunktion entwickelt, welche Kunden genug Zeit gab ihre Bestellung abzuschließen, ohne befürchten zu müssen, dass der Artikel in der Zwischenzeit von einem anderen Kunden gekauft wird.",[12,271,272],{},"Zusätzlich wurde eine Funktion zum Massenveröffentlichen von Artikeln entwickelt, welche es meinem Kunden ermöglichte viele Artikel gleichzeitig zu veröffentlichen, ohne jeden Artikel einzeln freigeben zu müssen.",{"title":20,"searchDepth":21,"depth":21,"links":274},[275],{"id":212,"depth":21,"text":213},"2023-06","2020-06","Online-Shop, spezialisiert auf den Verkauf militärischer Antiquitäten.",{},"\u002Fprojects\u002Frichter-historica",{"title":38,"description":278},"projects\u002Frichter-historica",[49,46,71,56,57,59,60],"C8gN-wNFJk2HyAIeZW_PaiRNPHhLp3Sqkwi-17sePbo",{"id":286,"title":39,"body":287,"dateEnd":303,"dateStart":303,"description":304,"extension":27,"featuredInCv":28,"link":32,"meta":305,"navigation":34,"path":306,"repo":32,"seo":307,"stem":308,"tags":309,"__hash__":310},"projects_de\u002Fprojects\u002Fxml-transformer.md",{"type":9,"value":288,"toc":300},[289,291,294,297],[210,290,213],{"id":212},[12,292,293],{},"Dieses Projekt wurde mir durch eine befreundete Web-Agentur vermittelt und befasst sich mit der Transformation von\nXML-Strukturen. Das Tool wandelt attributorientierte XML-Dateien in eine elementorientierte Struktur um, indem es\ndynamisch alle Attribute eines XML-Tags in untergeordnete Elemente des jeweiligen XML-Elements konvertiert.",[12,295,296],{},"Die Anwendung wurde mit besonderem Fokus auf Performance und Ressourceneffizienz entwickelt. Durch den Einsatz von\nStreams konnte der Arbeitsspeicher geschont und große Datenmengen schnell verarbeitet werden. Dies ermöglichte die\neffiziente Transformation auch umfangreicher XML-Dateien ohne hohe Systemanforderungen.",[12,298,299],{},"Als technische Basis wurde Laravel Lumen verwendet, eine abgespeckte (für Konsolenanwendungen optimierte) Version von Laravel.",{"title":20,"searchDepth":21,"depth":21,"links":301},[302],{"id":212,"depth":21,"text":213},"2020-03","Ein Tool, das attributorientierte XML-Dateien in elementorientierte umwandelt.",{},"\u002Fprojects\u002Fxml-transformer",{"title":39,"description":304},"projects\u002Fxml-transformer",[46,47,60],"REQreyBhwU22qamOd5fJC0PoQfdkCUYZeDtYkHK0GE4",{"id":312,"title":40,"body":313,"dateEnd":340,"dateStart":340,"description":341,"extension":27,"featuredInCv":28,"link":32,"meta":342,"navigation":34,"path":343,"repo":32,"seo":344,"stem":345,"tags":346,"__hash__":347},"projects_de\u002Fprojects\u002Fmysql-exporter.md",{"type":9,"value":314,"toc":336},[315,317,323,327],[210,316,213],{"id":212},[12,318,319,320,322],{},"Ich wurde von einer Webagentur dazu beauftragt ein Tool zu entwickeln, welches ihnen hilft die Datenbank von einem managed Webserver (ohne shell zugriff) zu einem lokalen Server zu klonen.",[16,321],{},"\nAuf Wunsch der Agentur wurde dies mit Laravel Lumen entwickelt, eine abgespeckte (für Konsolenanwendungen optimierte) Version von Laravel.",[210,324,326],{"id":325},"funktionsweise","Funktionsweise",[12,328,329,330,332,333,335],{},"Das Tool kann für beliebige Kundenserver konfiguriert werden, mit einer Liste an exkludierten Tabellen.",[16,331],{},"\nBei Aufruf verbindet sich die Anwendung mit dem Kundenserver und erstellt ein PHP-Skript, welches die dortige Datenbank entsprechend der Konfiguration an einen vordefinierten Pfad exportiert.",[16,334],{},"\nAnschließend wird dieser Export heruntergeladen und auf dem lokalen Server importiert, daraufhin wird sowohl das Skript als auch der Export vom Kundenserver wieder gelöscht.",{"title":20,"searchDepth":21,"depth":21,"links":337},[338,339],{"id":212,"depth":21,"text":213},{"id":325,"depth":21,"text":326},"2020-01","Laravel-Konsolenanwendung zum Klonen einer entfernten Datenbank.",{},"\u002Fprojects\u002Fmysql-exporter",{"title":40,"description":341},"projects\u002Fmysql-exporter",[46,47,71,60],"lfBNMyvINTP_k3qXvTamgXIzckIRGsPb7DxRVedRdD0",{"id":349,"title":41,"body":350,"dateEnd":371,"dateStart":371,"description":372,"extension":27,"featuredInCv":28,"link":32,"meta":373,"navigation":34,"path":374,"repo":32,"seo":375,"stem":376,"tags":377,"__hash__":378},"projects_de\u002Fprojects\u002Fftptogit.md",{"type":9,"value":351,"toc":367},[352,354,359,361],[210,353,213],{"id":212},[12,355,356,357,322],{},"Ich wurde von einer Webagentur dazu beauftragt ein Tool zu entwickeln, welches ihnen hilft Konfigurationsänderungen an Kundenservern zu protokollieren.",[16,358],{},[210,360,326],{"id":325},[12,362,363,364,366],{},"Das Tool kann für beliebige Kundenserver konfiguriert werden, mit einzelnen exclude listen im Glob style, analog zu einer .gitignore Datei.\nNach Verbindungsaufbau mit dem Server des Kunden werden die Dateien auf Änderungen überprüft und anschließend in einem lokalen Git-Repository protokolliert, welches dann auf einen remote Git Server gepusht wird.",[16,365],{},"\nSomit wird die hervorragende Versionskontrolle von Git genutzt, um sämtliche Konfigurationsänderungen zu protokollieren, im Agentur Alltag vereinfacht dies die Fehlersuche immens.",{"title":20,"searchDepth":21,"depth":21,"links":368},[369,370],{"id":212,"depth":21,"text":213},{"id":325,"depth":21,"text":326},"2019-12","Laravel-Konsolenanwendung zum Monitoring eines entfernten FTP-Hosts.",{},"\u002Fprojects\u002Fftptogit",{"title":41,"description":372},"projects\u002Fftptogit",[46,47,60],"kPCf49NRu_0W_jYN9p132V9ZSv-omUUxbSXpNRK4KvU",1782416852026]