[{"data":1,"prerenderedAt":1116},["ShallowReactive",2],{"home-de":3},{"profile":4,"experience":26,"education":212,"projects":244,"categories":1003},{"id":5,"extension":6,"headline":7,"languages":8,"meta":15,"stem":23,"summary":24,"__hash__":25},"profile_de\u002Fde\u002Fprofile.md","md","Full-Stack Developer",[9,12],{"name":10,"level":11},"Deutsch","Muttersprache",{"name":13,"level":14},"Englisch","Fließend (C1)",{"body":16},{"type":17,"value":18,"toc":19},"minimark",[],{"title":20,"searchDepth":21,"depth":21,"links":22},"",2,[],"de\u002Fprofile","Full-Stack Developer aus Essen mit Fokus auf PHP\u002FSymfony\u002FLaravel sowie modernes JavaScript\u002FTypeScript (Vue.js, Nuxt) – von freiberuflichen Kundenprojekten bis hin zu Produktentwicklung in Festanstellung.","51CzJEvSrT4-IJOMwsjk3Nif_oZ-KnN3d6P2VWxNnZw",[27,64,118,151,177,195],{"id":28,"title":29,"body":30,"company":34,"dateEnd":35,"dateStart":36,"description":20,"extension":6,"featured":37,"highlights":38,"location":41,"meta":42,"navigation":37,"path":43,"projects":44,"role":45,"seo":46,"sideGig":47,"stem":48,"tags":49,"__hash__":63},"experience_de\u002Fexperience\u002Faldi-dx-senior.md","Aldi Dx Senior",{"type":17,"value":31,"toc":32},[],{"title":20,"searchDepth":21,"depth":21,"links":33},[],"ALDI DX","9999-99","2024-12",true,[39,40],"Leitung der Migration des Produktinformations-Stacks auf eine neue Symfony-Anwendung","Übernahme von Rufbereitschaft und untersuchen von komplexen business kritischen Bugs",null,{},"\u002Fexperience\u002Faldi-dx-senior",[],"Senior IT Professional",{"description":20},false,"experience\u002Faldi-dx-senior",[50,51,52,53,54,55,56,57,58,59,60,61,62],"spryker","php","rabbitmq","javascript","redis","docker","aws","git","jenkins","rest","css3","laravel","cicd","PZkThQap1hkgOUy6cCJiAt9sofjQN8W3nOz9XKdsUOg",{"id":65,"title":66,"body":67,"company":85,"dateEnd":35,"dateStart":86,"description":87,"extension":6,"featured":47,"highlights":88,"location":41,"meta":92,"navigation":37,"path":93,"projects":94,"role":96,"seo":97,"sideGig":37,"stem":98,"tags":99,"__hash__":117},"experience_de\u002Fexperience\u002Fpenguin-network.md","Penguin Network",{"type":17,"value":68,"toc":83},[69,77],[70,71,72,73,76],"p",{},"Das PenguinNetwork stellt diverse modded Minecraft Server bereit.",[74,75],"br",{},"\nDie gesamte Infrastruktur wird auf eigener Hardware in Colocations gehostet.",[70,78,79,80,82],{},"Darüber hinaus werden eigene Anwendungen entwickelt, um die Verwaltung zu erleichtern und den Spielern ein bestmögliches Erlebnis zu bieten.",[74,81],{},"\nMit ~100 einzigartigen Spielern pro Tag und ~1.600 Discord-Nutzern sind wir eins der größeren Modded Minecraft Server Netzwerke.",{"title":20,"searchDepth":21,"depth":21,"links":84},[],"Penguin Network (Selbstständig)","2025-01","Das PenguinNetwork stellt diverse modded Minecraft Server bereit.\nDie gesamte Infrastruktur wird auf eigener Hardware in Colocations gehostet.",[89,90,91],"Orchestrierung zahlreicher Gameserver","Verhandlungen mit Partnern","Konzeptionierung und Entwicklung einer komplexen IT Infrastruktur",{},"\u002Fexperience\u002Fpenguin-network",[95],"dukcc-bot","Gründer und Entwickler",{"description":87},"experience\u002Fpenguin-network",[100,53,101,102,103,104,105,55,52,106,56,107,108,109,61,110,111,112,113,114,115,116,57,62],"nuxt","typescript","java","jvm","networking","linux","cloudflare","oidc","deno","vuejs","tailwindcss","html5","sqlite","nodejs","symfony","nginx","terraform","gZLgdagblVWhffNPC3MtrIQzTwVMH_NJm1hNFMv-gbU",{"id":119,"title":120,"body":121,"company":131,"dateEnd":35,"dateStart":132,"description":133,"extension":6,"featured":47,"highlights":134,"location":41,"meta":137,"navigation":37,"path":138,"projects":139,"role":145,"seo":146,"sideGig":37,"stem":147,"tags":148,"__hash__":150},"experience_de\u002Fexperience\u002Ffreelance.md","Freelance",{"type":17,"value":122,"toc":129},[123],[70,124,125,126,128],{},"Bereits während meines Abiturs habe ich mich als Freiberufler selbstständig gemacht, um mir neben der Schule etwas dazu zu verdienen.",[74,127],{},"\nEines meiner ersten Projekte betreue und entwickle ich bis heute noch.",{"title":20,"searchDepth":21,"depth":21,"links":130},[],"Selbstständig","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.",[135,136],"Entwicklung von Webanwendungen und APIs für Kundenprojekte","Erstellen von Pflichten- und Lastenheften in Abstimmung mit Kunden",{},"\u002Fexperience\u002Ffreelance",[140,141,142,143,144],"chi-costadelsol.com","richter-historica.de","XML Transformer","mysql-exporter","FtpToGit","Freiberuflicher Softwareentwickler",{"description":133},"experience\u002Ffreelance",[51,61,114,149,109,100,53,101,105,59,111,60,110,55,57,113,106,115,62],"shopware","cCedPDN2Ev01crEMp-HvzYifDIIjyHv0CZPZy44dvd0",{"id":152,"title":153,"body":154,"company":158,"dateEnd":159,"dateStart":160,"description":20,"extension":6,"featured":47,"highlights":161,"location":41,"meta":164,"navigation":37,"path":165,"projects":166,"role":167,"seo":168,"sideGig":47,"stem":169,"tags":170,"__hash__":176},"experience_de\u002Fexperience\u002Fcheck24-professional.md","Check24 Professional",{"type":17,"value":155,"toc":156},[],{"title":20,"searchDepth":21,"depth":21,"links":157},[],"CHECK24 Hotel","2024-11","2023-07",[162,163],"Optimierung zahlreicher SQL-Abfragen","Anbindung neuer Zahlungsanbieter in der Buchhaltung",{},"\u002Fexperience\u002Fcheck24-professional",[],"Professional Software Entwickler",{"description":20},"experience\u002Fcheck24-professional",[51,171,172,173,174,55,57,111,175,60,115,62],"mezzio","laminas","zend","sql","extjs","tw9x2UXf0itoYwSG5Lznfsl4mkMeWykjIzdNsW_YLTI",{"id":178,"title":179,"body":180,"company":158,"dateEnd":184,"dateStart":185,"description":20,"extension":6,"featured":47,"highlights":186,"location":41,"meta":187,"navigation":37,"path":188,"projects":189,"role":190,"seo":191,"sideGig":47,"stem":192,"tags":193,"__hash__":194},"experience_de\u002Fexperience\u002Fcheck24-junior.md","Check24 Junior",{"type":17,"value":181,"toc":182},[],{"title":20,"searchDepth":21,"depth":21,"links":183},[],"2023-06","2022-06",[],{},"\u002Fexperience\u002Fcheck24-junior",[],"Junior Software Entwickler",{"description":20},"experience\u002Fcheck24-junior",[51,171,172,173,174,55,57,59,111,175,60,115,62],"vUMpMOr3ulRD0vovRruPWGJBg797nVE7p082wbmx2Mg",{"id":196,"title":197,"body":198,"company":158,"dateEnd":185,"dateStart":202,"description":20,"extension":6,"featured":47,"highlights":203,"location":41,"meta":204,"navigation":37,"path":205,"projects":206,"role":207,"seo":208,"sideGig":47,"stem":209,"tags":210,"__hash__":211},"experience_de\u002Fexperience\u002Fcheck24-apprentice.md","Check24 Apprentice",{"type":17,"value":199,"toc":200},[],{"title":20,"searchDepth":21,"depth":21,"links":201},[],"2020-08",[],{},"\u002Fexperience\u002Fcheck24-apprentice",[],"Ausbildung zum Fachinformatiker",{"description":20},"experience\u002Fcheck24-apprentice",[51,171,172,173,174,55,57,111,175,62],"4w9KfIA29cS3d4ud1ZZXGREKXKdfBXomJiWpvZ-ZwLQ",[213,228],{"id":214,"dateEnd":185,"dateStart":202,"degree":215,"extension":6,"fieldOfStudy":41,"highlights":216,"institution":219,"meta":220,"stem":225,"tags":226,"__hash__":227},"education_de\u002Fde\u002Feducation\u002Fihk-ausbildung.md","Fachinformatiker Anwendungsentwicklung",[217,218],"Berufsschulnote: 1,5","IHK Note: 2,0","IHK Nord Westfalen",{"body":221},{"type":17,"value":222,"toc":223},[],{"title":20,"searchDepth":21,"depth":21,"links":224},[],"de\u002Feducation\u002Fihk-ausbildung",[102,104,174],"iam9uDlXAQAO0Dg3T4DQSgrzJ3bcaIBlAc0Q8jJnXaY",{"id":229,"dateEnd":230,"dateStart":231,"degree":232,"extension":6,"fieldOfStudy":41,"highlights":233,"institution":234,"meta":235,"stem":240,"tags":241,"__hash__":243},"education_de\u002Fde\u002Feducation\u002Fpictorius-abitur.md","2020-07","2017-08","Abitur, Fachrichtung Informatik",[],"Pictorius, Berufskolleg",{"body":236},{"type":17,"value":237,"toc":238},[],{"title":20,"searchDepth":21,"depth":21,"links":239},[],"de\u002Feducation\u002Fpictorius-abitur",[242,51,104],"windows","PQp4HOi4MfnFYCeZ_UHDCH9L1wrP2bj2Wtns3U4HPxc",[245,363,405,485,533,565,595,624,649,680,712,741,771,797,823,859,890,928,963],{"id":246,"title":247,"body":248,"dateEnd":35,"dateStart":354,"description":355,"extension":6,"featuredInCv":37,"link":356,"meta":357,"navigation":37,"path":358,"repo":41,"seo":359,"stem":360,"tags":361,"__hash__":362},"projects_de\u002Fprojects\u002Fgoatl-ink.md","goatl.ink",{"type":17,"value":249,"toc":348},[250,255,258,262,297,301,304,330,334],[251,252,254],"h2",{"id":253},"über-das-projekt","Über das Projekt",[70,256,257],{},"goatl.ink ist eine moderne Plattform zur Erstellung persönlicher Landing-Pages, die es Benutzern ermöglicht, ihre\nOnline-Präsenz schnell und einfach zu gestalten. Die Plattform bietet eine benutzerfreundliche Oberfläche zum Erstellen\nindividueller Seiten mit verschiedenen Inhalten und Links.",[251,259,261],{"id":260},"hauptfunktionen","Hauptfunktionen",[263,264,265,273,279,285,291],"ul",{},[266,267,268,272],"li",{},[269,270,271],"strong",{},"Personalisierte Landing-Pages",": Erstellung individueller Seiten mit eigenem Branding",[266,274,275,278],{},[269,276,277],{},"Link-Verwaltung",": Zentrale Verwaltung aller wichtigen Links und sozialen Medien",[266,280,281,284],{},[269,282,283],{},"OIDC-Authentifizierung",": Sichere Anmeldung über OpenID Connect",[266,286,287,290],{},[269,288,289],{},"Responsive Design",": Optimierte Darstellung auf allen Geräten",[266,292,293,296],{},[269,294,295],{},"Schnelle Bereitstellung",": Hosting über Cloudflare für maximale global verteilte Performance",[251,298,300],{"id":299},"technologie-stack","Technologie-Stack",[70,302,303],{},"Die Plattform basiert auf modernen Web-Technologien:",[263,305,306,312,318,324],{},[266,307,308,311],{},[269,309,310],{},"Frontend",": Nuxt.js, Vue.js 3, TypeScript",[266,313,314,317],{},[269,315,316],{},"Styling",": Tailwind CSS für modernes, responsives Design",[266,319,320,323],{},[269,321,322],{},"Infrastruktur",": Cloudflare Workers und Cloudflare D1 für schnelle globale Auslieferung",[266,325,326,329],{},[269,327,328],{},"Authentifizierung",": OpenID Connect (OIDC) für sichere Benutzerverwaltung",[251,331,333],{"id":332},"anwendungsfälle","Anwendungsfälle",[263,335,336,339,342,345],{},[266,337,338],{},"Content Creator und Influencer zur Bündelung ihrer Social-Media-Präsenz",[266,340,341],{},"Freelancer und Selbstständige für professionelle Online-Visitenkarten",[266,343,344],{},"Kleinunternehmen für einfache Unternehmensprofile",[266,346,347],{},"Persönliche Portfolios und Projekte",{"title":20,"searchDepth":21,"depth":21,"links":349},[350,351,352,353],{"id":253,"depth":21,"text":254},{"id":260,"depth":21,"text":261},{"id":299,"depth":21,"text":300},{"id":332,"depth":21,"text":333},"2026-05","Plattform zum erstellen von persönlichen Landing Pages.","https:\u002F\u002Fgoatl.ink",{},"\u002Fprojects\u002Fgoatl-ink",{"title":247,"description":355},"projects\u002Fgoatl-ink",[100,109,101,110,106,107,112,111,60,53,113,57,62],"T50xiN6KlZWZC6-L24LUS2PWh8TNB-Wv8i8zOyzBlqY",{"id":364,"title":95,"body":365,"dateEnd":35,"dateStart":86,"description":398,"extension":6,"featuredInCv":47,"link":41,"meta":399,"navigation":37,"path":400,"repo":41,"seo":401,"stem":402,"tags":403,"__hash__":404},"projects_de\u002Fprojects\u002Fdukcc-bot.md",{"type":17,"value":366,"toc":395},[367,369,375],[251,368,254],{"id":253},[70,370,371,372,374],{},"dukcc-bot ist ein Typescript basierter Discord-Bot, welcher viele proprietäre Features für das PenguinNetwork bereitstellt.",[74,373],{},"\nDarunter zählen",[263,376,377,380,383,386,389,392],{},[266,378,379],{},"Automatisches Zuweisen von Rollen basierend auf Spielzeit",[266,381,382],{},"Synchronisierung von Rollen zwischen Game Servern und Discord",[266,384,385],{},"Verknüpfen von Spiel Accounts und Discord Accounts",[266,387,388],{},"Automatisierte Verwaltung von Giveaways basierend auf Spielzeit der Nutzer",[266,390,391],{},"Discord Invite Tracking System um effektivität von Werbung zu beurteilen",[266,393,394],{},"REST Schnittstellen für Integration mit anderen Diensten, wie beispielsweise der Website",{"title":20,"searchDepth":21,"depth":21,"links":396},[397],{"id":253,"depth":21,"text":254},"Ein Typescript basierter Discord Bot + Backend für das PenguinNetwork.",{},"\u002Fprojects\u002Fdukcc-bot",{"title":95,"description":398},"projects\u002Fdukcc-bot",[101,108,59,55,52,174,57,62],"WzTc2js6DntuvN-XfOSQm0X80PUu4AEXN0EZ30cHqIY",{"id":406,"title":407,"body":408,"dateEnd":35,"dateStart":475,"description":476,"extension":6,"featuredInCv":47,"link":477,"meta":478,"navigation":37,"path":479,"repo":480,"seo":481,"stem":482,"tags":483,"__hash__":484},"projects_de\u002Fprojects\u002Ftebbe-dev.md","tebbe.dev",{"type":17,"value":409,"toc":468},[410,412,415,418,421,458,462,465],[251,411,254],{"id":253},[70,413,414],{},"Meine persönliche Portfolio-Seite mit einer Auflistung meiner Projekte und Referenzen – die Seite, die du gerade besuchst.",[70,416,417],{},"Diese Website dient als zentrale Anlaufstelle für meine berufliche Online-Präsenz und bietet einen umfassenden Überblick\nüber meine Fähigkeiten, Erfahrungen und abgeschlossenen Projekte. Die Plattform wurde entwickelt, um potenziellen\nArbeitgebern, Kunden und Interessenten einen professionellen Einblick in meine Arbeit zu ermöglichen.",[419,420,261],"h3",{"id":260},[263,422,423,429,435,441,447,453],{},[266,424,425,428],{},[269,426,427],{},"Projektübersicht",": Detaillierte Darstellung meiner persönlichen und beruflichen Projekte mit technischen Details\nund Beschreibungen",[266,430,431,434],{},[269,432,433],{},"Berufserfahrung",": Chronologische Auflistung meiner beruflichen Stationen und Verantwortlichkeiten",[266,436,437,440],{},[269,438,439],{},"Technologie-Filter",": Interaktive Tag-Chips zur Filterung von Projekten und Erfahrungen nach verwendeten\nTechnologien",[266,442,443,446],{},[269,444,445],{},"Mehrsprachigkeit",": Unterstützung für mehrere Sprachen über i18n-Integration",[266,448,449,452],{},[269,450,451],{},"SEO-Optimierung",": Vollständige Meta-Tags und strukturierte Daten für optimale Suchmaschinenindexierung",[266,454,455,457],{},[269,456,289],{},": Optimierte Darstellung auf allen Geräten dank Tailwind CSS",[419,459,461],{"id":460},"technische-umsetzung","Technische Umsetzung",[70,463,464],{},"Das Portfolio wurde mit modernen Web-Technologien entwickelt und nutzt das Nuxt 4 Framework mit Vue 3 als Basis. Für das\nContent-Management kommt Nuxt Content zum Einsatz, das eine einfache Verwaltung von Markdown-basierten Inhalten\nermöglicht. Das Design basiert auf einem maßgeschneiderten Tailwind CSS Theme mit benutzerdefinierten Farbschemata und\nTypography-Einstellungen.",[70,466,467],{},"Die Website wird auf Cloudflare Pages gehostet, was schnelle Ladezeiten durch ein globales CDN und automatische\nHTTPS-Verschlüsselung gewährleistet. Die Deployment-Pipeline ist vollständig automatisiert und erfolgt bei jedem Push\nzum Haupt-Branch.",{"title":20,"searchDepth":21,"depth":21,"links":469},[470],{"id":253,"depth":21,"text":254,"children":471},[472,474],{"id":260,"depth":473,"text":261},3,{"id":460,"depth":473,"text":461},"2020-01","Persönliches Portfolio mit meinen Projekten und Referenzen.","https:\u002F\u002Ftebbe.dev",{},"\u002Fprojects\u002Ftebbe-dev","https:\u002F\u002Fgithub.com\u002FLinusTebbe\u002Ftebbe.dev",{"title":407,"description":476},"projects\u002Ftebbe-dev",[100,109,101,110,106,53,113,57,62],"81vOLhxrS7FAr9gr03a9JONaapcy7k-dN8n78D_lFV0",{"id":486,"title":140,"body":487,"dateEnd":35,"dateStart":522,"description":523,"extension":6,"featuredInCv":37,"link":524,"meta":525,"navigation":37,"path":526,"repo":41,"seo":527,"stem":528,"tags":529,"__hash__":532},"projects_de\u002Fprojects\u002Fchi-costadelsol.md",{"type":17,"value":488,"toc":517},[489,491,494,500,504,507,511],[251,490,254],{"id":253},[70,492,493],{},"Marketing- und Objekt-Webseite für einen spanischen Immobilienmakler, tätig an der Costa del Sol.",[70,495,496,497,499],{},"Entwickelt wurde ein Symfony Backend, welches die Datenhaltung und den Import der Daten aus einem XML Feed des größten Immobilienportals Spaniens übernimmt.",[74,498],{},"\nDas Frontend wurde mit Nuxt.JS und Tailwind umgesetzt.",[251,501,503],{"id":502},"meine-funktion","Meine Funktion",[70,505,506],{},"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.",[251,508,510],{"id":509},"import","Import",[70,512,513,514,516],{},"Der Import wird asynchron über RabbitMQ als Queue System angestoßen, wahlweise direkt vom Anbieter oder manuell mit einer eigenen XML-Datei.",[74,515],{},"\nDer Fortschritt des Imports wird live im Backoffice angezeigt und aktualisiert.",{"title":20,"searchDepth":21,"depth":21,"links":518},[519,520,521],{"id":253,"depth":21,"text":254},{"id":502,"depth":21,"text":503},{"id":509,"depth":21,"text":510},"2018-03","Webseite für einen spanischen Immobilienmakler an der Costa del Sol.","https:\u002F\u002Fchi-costadelsol.com",{},"\u002Fprojects\u002Fchi-costadelsol",{"title":140,"description":523},"projects\u002Fchi-costadelsol",[51,114,100,53,530,52,531,59,60,109,55,115,104,57,105],"tailwind","uikit","e5RitA3woyqKzoK8yE9KkLT4LWcmI6V0Qy4KMUTIpjA",{"id":534,"title":535,"body":536,"dateEnd":555,"dateStart":556,"description":557,"extension":6,"featuredInCv":37,"link":41,"meta":558,"navigation":37,"path":559,"repo":560,"seo":561,"stem":562,"tags":563,"__hash__":564},"projects_de\u002Fprojects\u002Fikea-watcher.md","ikea-watcher",{"type":17,"value":537,"toc":552},[538,540,543],[251,539,254],{"id":253},[70,541,542],{},"ikea-watcher ist ein Typescript basierter Discord-Bot, der es ermöglicht, Suchbegriffe in den Second Chance Märkten von IKEA zu überwachen und bei Verfügbarkeit Benachrichtigungen zu versenden.",[70,544,545,546,548,549,551],{},"Über eine Konfigurationsdatei kann eingestellt werden, welche IKEA Filialen relevant sind, sowie eine Liste von Suchbegriffen definiert werden, die der Bot überwachen soll.",[74,547],{},"\nSollte ein neues Ergebnis in einer der relevanten Filialen erscheinen, wird eine Benachrichtigung an den angegebenen Discord-Nutzer in einer Privatnachricht gesendet.",[74,550],{},"\nDiese beinhaltet einen Link zu der Produktseite, auf welcher der Artikel direkt reserviert werden kann, sowie eine Beschreibung des Zustands, die Filiale in der der Artikel gefunden wurde und einen Link zur Navigation via Google Maps zu der besagten Filiale.",{"title":20,"searchDepth":21,"depth":21,"links":553},[554],{"id":253,"depth":21,"text":254},"2026-04","2026-03","Ein Typescript basierter Discord Bot um ganze Channel zu leeren.",{},"\u002Fprojects\u002Fikea-watcher","https:\u002F\u002Fgithub.com\u002FLinusTebbe\u002Fikea-watcher",{"title":535,"description":557},"projects\u002Fikea-watcher",[101,108,59,57],"BVDAsVtEBg0xtLzoIomtkmDxf9kGnXDBGdUd9CTB3VQ",{"id":566,"title":567,"body":568,"dateEnd":587,"dateStart":587,"description":557,"extension":6,"featuredInCv":47,"link":41,"meta":588,"navigation":37,"path":589,"repo":590,"seo":591,"stem":592,"tags":593,"__hash__":594},"projects_de\u002Fprojects\u002Fdiscord-channel-emptier.md","discord-channel-emptier",{"type":17,"value":569,"toc":584},[570,572,575],[251,571,254],{"id":253},[70,573,574],{},"discord-channel-emptier ist ein Typescript basierter Discord-Bot, der es ermöglicht, ganze Discord-Kanäle zu leeren.",[70,576,577,578,580,581,583],{},"Der Bot stellt einen Slash-Command bereit, mithilfe dessen ein Channel restlos geleert werden kann.",[74,579],{},"\nDas Tool arbeitet um die Rate Limits der Discord API herum.",[74,582],{},"\nDarüber hinaus ist es möglich, einzelne Messages, Nutzer oder gar ganze Rollen zu exkludieren.\nNützlich ist dies beispielweise, falls ein Textchannel nur kurzlebige Informationen beinhaltet, aber Nachrichten eines Administrators etwa unberührt bleiben sollen.",{"title":20,"searchDepth":21,"depth":21,"links":585},[586],{"id":253,"depth":21,"text":254},"2026-01",{},"\u002Fprojects\u002Fdiscord-channel-emptier","https:\u002F\u002Fgithub.com\u002FLinusTebbe\u002Fdiscord-channel-emptier",{"title":567,"description":557},"projects\u002Fdiscord-channel-emptier",[101,108,57],"wLUh7Z22YL6GytOsW9-HAPnvgpk2TPh2zkC4EhJA9rs",{"id":596,"title":597,"body":598,"dateEnd":614,"dateStart":614,"description":615,"extension":6,"featuredInCv":37,"link":616,"meta":617,"navigation":37,"path":618,"repo":619,"seo":620,"stem":621,"tags":622,"__hash__":623},"projects_de\u002Fprojects\u002Fgiveemot-es.md","giveemot.es",{"type":17,"value":599,"toc":611},[600,602,608],[251,601,254],{"id":253},[70,603,604,605,607],{},"giveemot.es war ursprünglich ein Projekt eines Freundes, wir wollten eine Möglichkeit haben emotes von der Platform 7TV in Slack zu verwenden, ohne diese jedes Mal manuell herunterzuladen oder durch den Freigabeprozess der Workspace-Administratoren zu gehen.",[74,606],{},"\nDarauf hin wurde eine Anwendung entwickelt, um anhand eines Suchbegriffes in der URL über eine Umleitung direkt das Bild zu posten.",[70,609,610],{},"Nach einiger Zeit habe ich den Arbeitgeber gewechselt, das Projekt neu auf Cloudflare Workers umgebaut und eine Microsoft Teams Integration entwickelt.",{"title":20,"searchDepth":21,"depth":21,"links":612},[613],{"id":253,"depth":21,"text":254},"2025-07","Ein Tool, um emotes der Platform 7TV in Slack und Microsoft Teams zu verwenden.","https:\u002F\u002Fgiveemot.es",{},"\u002Fprojects\u002Fgiveemot-es","https:\u002F\u002Fgithub.com\u002FLinusTebbe\u002Fgiveemot.es",{"title":597,"description":615},"projects\u002Fgiveemot-es",[108,106,111,60,101,57,62],"j8Qr1fOj9L2Hik-RLJspl56SDgrOvSCY90mbuXKIFpc",{"id":625,"title":626,"body":627,"dateEnd":640,"dateStart":36,"description":641,"extension":6,"featuredInCv":47,"link":642,"meta":643,"navigation":37,"path":644,"repo":41,"seo":645,"stem":646,"tags":647,"__hash__":648},"projects_de\u002Fprojects\u002Fmeme-generator-bot.md","meme-generator-bot",{"type":17,"value":628,"toc":637},[629,631,634],[251,630,254],{"id":253},[70,632,633],{},"meme-generator-bot ist ein Typescript basierter Discord-Bot, der es ermöglicht, imgflip.com Memes zu generieren und direkt in einen Discord-Channel zu posten.",[70,635,636],{},"Der Bot stellt einen Slash-Command bereit, mithilfe dessen ein Meme erstellt und in einem angegebenen Kanal gepostet werden kann.\nDas Tool ist ebenfalls \"User Installable\", dadurch kann der Bot auch in Privatnachrichten und auf Discord-Servern genutzt werden, auf denen der Bot nicht installiert ist.",{"title":20,"searchDepth":21,"depth":21,"links":638},[639],{"id":253,"depth":21,"text":254},"2025-05","Ein Typescript basierter Discord Bot um imgflip.com memes zu generieren und direkt zu posten.","https:\u002F\u002Fdiscord.com\u002Foauth2\u002Fauthorize?client_id=1306189339247513620",{},"\u002Fprojects\u002Fmeme-generator-bot",{"title":626,"description":641},"projects\u002Fmeme-generator-bot",[101,108,59,55,57,62],"U_b57XvD6G-7Ct7ErHRDGzyswaqIOfLNrxZe0XIugD0",{"id":650,"title":651,"body":652,"dateEnd":36,"dateStart":671,"description":672,"extension":6,"featuredInCv":47,"link":673,"meta":674,"navigation":37,"path":675,"repo":41,"seo":676,"stem":677,"tags":678,"__hash__":679},"projects_de\u002Fprojects\u002Fgame-finder-app.md","game-finder.app",{"type":17,"value":653,"toc":668},[654,656,659,662,665],[251,655,254],{"id":253},[70,657,658],{},"game-finder.app ist eine Web-App, mit der sich Spiele aus dem Steam-Katalog gezielt durchsuchen und entdecken lassen. Statt sich durch endlose Store-Listen zu klicken, lässt sich der Katalog über mehrere kombinierbare Filter so weit eingrenzen, bis genau die Spiele übrig bleiben, die zu den eigenen Vorlieben und der verfügbaren Zeit passen.",[70,660,661],{},"Gefiltert werden kann unter anderem nach Spieldauer (geschätzte Zeit bis zum Abschluss der Story, optional inklusive DLCs), Erscheinungsdatum, Genres (z. B. Adventure, RPG, Strategy, Action, Indie, Simulation, Casual, Free to Play, Massively Multiplayer, Racing), Tags sowie technischen Features wie Single-Player, Multiplayer, Co-op (online, LAN, gemeinsam), Steam Achievements, voller Controller-Support, Steam Cloud und Remote Play. Die Ergebnisse lassen sich nach Spieldauer, Preis, Bewertung oder Rabatt sortieren.",[70,663,664],{},"Jeder Treffer wird als Karte mit Titel, Erscheinungsjahr, Genre, Kurzbeschreibung, den zugehörigen Tags, der geschätzten Spieldauer und einer Bewertungswertung dargestellt.",[70,666,667],{},"Technisch besteht das Projekt aus einem in PHP\u002FSymfony umgesetzten Backend, das die Spieldaten aufbereitet und über eine REST-Schnittstelle bereitstellt, sowie einem mit Nuxt und Vue.js gebauten Frontend (TailwindCSS).",{"title":20,"searchDepth":21,"depth":21,"links":669},[670],{"id":253,"depth":21,"text":254},"2024-06","Eine Such- und Filter-App, um Steam-Spiele anhand von Genre, Tags, Features und Spieldauer zu entdecken.","https:\u002F\u002Fgame-finder.app\u002Fsearch",{},"\u002Fprojects\u002Fgame-finder-app",{"title":651,"description":672},"projects\u002Fgame-finder-app",[51,114,100,174,59,111,60,109,115,57,55,62,110],"KCJEfk8qKPrraFnbLaQYvVRsaSrx_OjluyJhKmeUo5o",{"id":681,"title":682,"body":683,"dateEnd":159,"dateStart":702,"description":703,"extension":6,"featuredInCv":47,"link":704,"meta":705,"navigation":37,"path":706,"repo":707,"seo":708,"stem":709,"tags":710,"__hash__":711},"projects_de\u002Fprojects\u002Fdeparture-board-tebbe-dev.md","departure-board.tebbe.dev",{"type":17,"value":684,"toc":699},[685,687,696],[251,686,254],{"id":253},[70,688,689,690,692,693,695],{},"departure-board.tebbe.dev ist ein interaktiver Webdienst, der Echtzeit-Abfahrtsinformationen des öffentlichen\nNahverkehrs anzeigt. Der Dienst bietet eine übersichtliche Benutzeroberfläche, die mit Nuxt.js und Vue.js entwickelt\nwurde und über REST-APIs aktuelle Fahrplandaten abruft.",[74,691],{},"\nVom Nutzer wird zuerst eine Haltestelle und danach alle gewünschten Beförderungsmittel angegeben, daraufhin wird eine URL generiert, über welche die selbe Ansicht jederzeit angezeigt werden kann.",[74,694],{},"\n→ Ideal um auf einem Monitor statisch anzuzeigen oder in ein Dashboard einzubinden.",[70,697,698],{},"Das Tool richtet sich an Pendler, Reisende und alle, die schnell Informationen über Abfahrtszeiten benötigen. Die\nAbfrage erfolgt in Echtzeit und liefert detaillierte Informationen wie Abfahrtszeiten, Verspätungen, Liniennummern und\nZielorte.",{"title":20,"searchDepth":21,"depth":21,"links":700},[701],{"id":253,"depth":21,"text":254},"2024-10","Ein interaktiver Webdienst zur Anzeige von Echtzeit-Abfahrtsinformationen des öffentlichen Nahverkehrs mit einer benutzerfreundlichen Oberfläche.","https:\u002F\u002Fdeparture-board.tebbe.dev",{},"\u002Fprojects\u002Fdeparture-board-tebbe-dev","https:\u002F\u002Fgithub.com\u002FLinusTebbe\u002Fdeparture-board",{"title":682,"description":703},"projects\u002Fdeparture-board-tebbe-dev",[100,59,111,60,53,101,113,109,110,106,57,62],"P_tz19p_u34JeBAGTnvaZsHknAgnx0to1JzZM2x9mIw",{"id":713,"title":141,"body":714,"dateEnd":184,"dateStart":733,"description":734,"extension":6,"featuredInCv":47,"link":41,"meta":735,"navigation":37,"path":736,"repo":41,"seo":737,"stem":738,"tags":739,"__hash__":740},"projects_de\u002Fprojects\u002Frichter-historica.md",{"type":17,"value":715,"toc":730},[716,718,721,727],[251,717,254],{"id":253},[70,719,720],{},"Ein Online-Shop, der sich auf den Verkauf militärischer Antiquitäten spezialisiert hat.",[70,722,723,724,726],{},"Umgesetzt wurde das Projekt mit Shopware 6, wobei den Wünschen des Kunden entsprechend ein eigenes Theme entwickelt wurde.",[74,725],{},"\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.",[70,728,729],{},"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":731},[732],{"id":253,"depth":21,"text":254},"2020-06","Online-Shop, spezialisiert auf den Verkauf militärischer Antiquitäten.",{},"\u002Fprojects\u002Frichter-historica",{"title":141,"description":734},"projects\u002Frichter-historica",[149,51,174,111,60,55,57],"C8gN-wNFJk2HyAIeZW_PaiRNPHhLp3Sqkwi-17sePbo",{"id":742,"title":743,"body":744,"dateEnd":230,"dateStart":230,"description":763,"extension":6,"featuredInCv":47,"link":41,"meta":764,"navigation":37,"path":765,"repo":766,"seo":767,"stem":768,"tags":769,"__hash__":770},"projects_de\u002Fprojects\u002Fcontactsync-tebbe-dev.md","contactsync.tebbe.dev",{"type":17,"value":745,"toc":760},[746,748,751],[251,747,254],{"id":253},[70,749,750],{},"Ein Tool, um meine Kontakte von Google Contacts mit meinem IP-Telefon zu synchronisieren",[70,752,753,754,756,757,759],{},"Ich habe einige Zeit lang ein IP-Telefon von Grundstream genutzt, dieses verfügte über die Möglichkeit, ein Kontaktbuch als XML von einer Webadresse zu importieren.",[74,755],{},"\nWas fehlte, war die Möglichkeit, mein Google Contacts Kontaktbuch in so eine XML zu konvertieren, daher habe ich dieses Projekt entwickelt.",[74,758],{},"\nNach einem Login mit seinem Google Account wird ein einzigartiger Link generiert, welches gleichzeitig ein Passwort enthält und ein entsprechendes XML-Dokument bereitstellt.",{"title":20,"searchDepth":21,"depth":21,"links":761},[762],{"id":253,"depth":21,"text":254},"Tool, um meine Kontakte von Google Contacts mit meinem IP-Telefon zu synchronisieren.",{},"\u002Fprojects\u002Fcontactsync-tebbe-dev","https:\u002F\u002Fgithub.com\u002FLinusTebbe\u002Fcontactsync.tebbe.dev",{"title":743,"description":763},"projects\u002Fcontactsync-tebbe-dev",[51,61,174,107,59,111,60,109,115,57],"augVpZr6Zh1br-wvV5cRaAzkmLq0daNnz31xLPoT1P8",{"id":772,"title":773,"body":774,"dateEnd":787,"dateStart":787,"description":788,"extension":6,"featuredInCv":47,"link":789,"meta":790,"navigation":37,"path":791,"repo":792,"seo":793,"stem":794,"tags":795,"__hash__":796},"projects_de\u002Fprojects\u002Fwhois-tebbe-dev.md","whois.tebbe.dev",{"type":17,"value":775,"toc":784},[776,778,781],[251,777,254],{"id":253},[70,779,780],{},"whois.tebbe.dev ist ein kostenloser Webdienst, der es ermöglicht, WHOIS-Informationen für IP-Adressen und Domains\nschnell und einfach abzurufen. Der Dienst bietet eine übersichtliche Benutzeroberfläche, die mit Nuxt.js entwickelt\nwurde und als Backend direkt die API von ARIN verwendet.",[70,782,783],{},"Das Tool richtet sich an Entwickler, Systemadministratoren und alle, die schnell Informationen über IP-Adressen benötigen.\nDie Abfrage erfolgt in Echtzeit und liefert detaillierte Informationen wie Registrar,\nRegistrierungsdatum, Nameserver und weitere relevante WHOIS-Daten.",{"title":20,"searchDepth":21,"depth":21,"links":785},[786],{"id":253,"depth":21,"text":254},"2020-05","Ein kostenloser Webdienst zur Abfrage von WHOIS-Informationen für IP-Adressen und Domains mit einer benutzerfreundlichen Oberfläche.","https:\u002F\u002Fwhois.tebbe.dev",{},"\u002Fprojects\u002Fwhois-tebbe-dev","https:\u002F\u002Fgithub.com\u002FLinusTebbe\u002Fwhois.tebbe.dev",{"title":773,"description":788},"projects\u002Fwhois-tebbe-dev",[100,59,111,60,53,101,113,109,57,62],"Khezs55yF1BmswhZp75Ru7w88Q6Pi7w5ojP80jaagLY",{"id":798,"title":142,"body":799,"dateEnd":815,"dateStart":815,"description":816,"extension":6,"featuredInCv":47,"link":41,"meta":817,"navigation":37,"path":818,"repo":41,"seo":819,"stem":820,"tags":821,"__hash__":822},"projects_de\u002Fprojects\u002Fxml-transformer.md",{"type":17,"value":800,"toc":812},[801,803,806,809],[251,802,254],{"id":253},[70,804,805],{},"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.",[70,807,808],{},"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.",[70,810,811],{},"Als technische Basis wurde Laravel Lumen verwendet, eine abgespeckte (für Konsolenanwendungen optimierte) Version von Laravel.",{"title":20,"searchDepth":21,"depth":21,"links":813},[814],{"id":253,"depth":21,"text":254},"2020-03","Ein Tool, das attributorientierte XML-Dateien in elementorientierte umwandelt.",{},"\u002Fprojects\u002Fxml-transformer",{"title":142,"description":816},"projects\u002Fxml-transformer",[51,61,57],"REQreyBhwU22qamOd5fJC0PoQfdkCUYZeDtYkHK0GE4",{"id":824,"title":143,"body":825,"dateEnd":475,"dateStart":475,"description":852,"extension":6,"featuredInCv":47,"link":41,"meta":853,"navigation":37,"path":854,"repo":41,"seo":855,"stem":856,"tags":857,"__hash__":858},"projects_de\u002Fprojects\u002Fmysql-exporter.md",{"type":17,"value":826,"toc":848},[827,829,835,839],[251,828,254],{"id":253},[70,830,831,832,834],{},"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.",[74,833],{},"\nAuf Wunsch der Agentur wurde dies mit Laravel Lumen entwickelt, eine abgespeckte (für Konsolenanwendungen optimierte) Version von Laravel.",[251,836,838],{"id":837},"funktionsweise","Funktionsweise",[70,840,841,842,844,845,847],{},"Das Tool kann für beliebige Kundenserver konfiguriert werden, mit einer Liste an exkludierten Tabellen.",[74,843],{},"\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.",[74,846],{},"\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":849},[850,851],{"id":253,"depth":21,"text":254},{"id":837,"depth":21,"text":838},"Laravel-Konsolenanwendung zum Klonen einer entfernten Datenbank.",{},"\u002Fprojects\u002Fmysql-exporter",{"title":143,"description":852},"projects\u002Fmysql-exporter",[51,61,174,57],"lfBNMyvINTP_k3qXvTamgXIzckIRGsPb7DxRVedRdD0",{"id":860,"title":144,"body":861,"dateEnd":882,"dateStart":882,"description":883,"extension":6,"featuredInCv":47,"link":41,"meta":884,"navigation":37,"path":885,"repo":41,"seo":886,"stem":887,"tags":888,"__hash__":889},"projects_de\u002Fprojects\u002Fftptogit.md",{"type":17,"value":862,"toc":878},[863,865,870,872],[251,864,254],{"id":253},[70,866,867,868,834],{},"Ich wurde von einer Webagentur dazu beauftragt ein Tool zu entwickeln, welches ihnen hilft Konfigurationsänderungen an Kundenservern zu protokollieren.",[74,869],{},[251,871,838],{"id":837},[70,873,874,875,877],{},"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.",[74,876],{},"\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":879},[880,881],{"id":253,"depth":21,"text":254},{"id":837,"depth":21,"text":838},"2019-12","Laravel-Konsolenanwendung zum Monitoring eines entfernten FTP-Hosts.",{},"\u002Fprojects\u002Fftptogit",{"title":144,"description":883},"projects\u002Fftptogit",[51,61,57],"kPCf49NRu_0W_jYN9p132V9ZSv-omUUxbSXpNRK4KvU",{"id":891,"title":892,"body":893,"dateEnd":918,"dateStart":919,"description":920,"extension":6,"featuredInCv":47,"link":41,"meta":921,"navigation":37,"path":922,"repo":41,"seo":923,"stem":924,"tags":925,"__hash__":927},"projects_de\u002Fprojects\u002Fpruefstellen.md","pruefstellen.de",{"type":17,"value":894,"toc":915},[895,897,903,909],[251,896,254],{"id":253},[70,898,899,900,902],{},"Von zwei Gründern in Auftrag gegeben wurde die Weiterentwicklung einer Webplattform, welche es Endkunden ermöglicht, Prüfstellen für diverse Untersuchungen zu finden und direkt online einen Termin zu buchen.",[74,901],{},"\nZentrale Komponente war die Suche anhand von verschiedenen Kriterien, wie z.B. Postleitzahl, Ort, Untersuchungsart und Verfügbarkeit.",[70,904,905,906,908],{},"Um Zeit und Kosten zu sparen, wurde die Plattform auf Basis eines bestehenden Projektes entwickelt, welches bereits die Grundfunktionalitäten bereitstellte, jedoch nicht ganz den Wünschen der Gründer entsprach.",[74,907],{},"\nDie Performance der Suche war nicht optimal, eine Umkreis-\u002FStandortsuche war ebenfalls noch nicht möglich.\nDurch einige Query und Index Optimierungen in der MySQL-Datenbank wurde dies jedoch behoben.",[70,910,911,912,914],{},"Weiterhin wurde die Plattform Schritt für Schritt in eine funktionierende Plattform weiterentwickelt.",[74,913],{},"\nEs wurde ein Backoffice für Prüfstellen entwickelt, mit dem diese ihren Kalendar anbinden konnten, sowie ihre eigenen Stammdaten verwalten konnten.",{"title":20,"searchDepth":21,"depth":21,"links":916},[917],{"id":253,"depth":21,"text":254},"2019-09","2018-04","Webplattform zur Vermittlung von Prüfstellen und Endkunden.",{},"\u002Fprojects\u002Fpruefstellen",{"title":892,"description":920},"projects\u002Fpruefstellen",[51,174,111,60,926,53,115,57],"bootstrap","86TABfQq5qqxl-M3MoJMw0cE2yqFZm4YSvpALLZrPsY",{"id":929,"title":930,"body":931,"dateEnd":953,"dateStart":954,"description":955,"extension":6,"featuredInCv":47,"link":41,"meta":956,"navigation":37,"path":957,"repo":41,"seo":958,"stem":959,"tags":960,"__hash__":962},"projects_de\u002Fprojects\u002Fdb-crawler.md","db-crawler",{"type":17,"value":932,"toc":950},[933,935],[251,934,254],{"id":253},[70,936,937,938,940,941,943,944,946,947,949],{},"Der db-crawler ist ein Crawler für die öffentlichen Schnittstellen der Deutschen Bahn und ist als selbst koordiniertes Test-Projekt im Rahmen eines Pflichtpraktikums entstanden.",[74,939],{},"\nDas Tool hat morgens kurz nach Mitternacht alle Soll-Fahrplan-Daten der Deutschen Bahn in eine Datenbank geschrieben. Da dies für jede Stunde und für jeden Bahnhof in ganz Deutschland einzeln passieren musste, wurden dafür über die öffentliche Hetzner API mehrere Cloudserver dazugebucht, hochgefahren und automatisch per cloud-init provisioniert.",[74,942],{},"\nSobald der jeweilige Server fertig installiert war, hat dieser sich selbstständig ein bereits zuvor automatisiert eingeteiltes Arbeitspaket genommen (eine Liste aus Bahnhöfen) und hat begonnen sämtliche Soll Daten für diese abzurufen.",[74,945],{},"\nDie Daten wurden an den Master Server zurückgespielt und dort in einer relationalen Datenbank gespeichert.",[74,948],{},"\nSobald das Arbeitspaket abgearbeitet war, fuhr sich der Server eingenständig wieder herunter und löschte automatisch die Ressource, um so unnötige Kosten zu vermeiden.",{"title":20,"searchDepth":21,"depth":21,"links":951},[952],{"id":253,"depth":21,"text":254},"2019-05","2019-04","Ein Crawler für die öffentlichen Schnittstellen der Deutschen Bahn.",{},"\u002Fprojects\u002Fdb-crawler",{"title":930,"description":955},"projects\u002Fdb-crawler",[59,55,52,174,57,62,116,961],"python","nEcyEgYMWN4jfMN9MV12RGXNrxuc4_-FBdabLB5GoFM",{"id":964,"title":965,"body":966,"dateEnd":991,"dateStart":992,"description":993,"extension":6,"featuredInCv":47,"link":41,"meta":994,"navigation":37,"path":995,"repo":41,"seo":996,"stem":997,"tags":998,"__hash__":1002},"projects_de\u002Fprojects\u002Fvertretungsplan.md","Vertretungsplan",{"type":17,"value":967,"toc":988},[968,970,976,985],[251,969,254],{"id":253},[70,971,972,973,975],{},"Während meines Abiturs auf dem Pictorius Berufskolleg wurde eine frühe Version der Untis-Schul-Cloud eingesetzt.",[74,974],{},"\nDamals gab es vom Anbieter noch keine Schnittstellen, keine Responsivität und nur wenig UX, besonders für mobile Benutzer.",[70,977,978,979,981,982,984],{},"Als Lösung habe ich ein eigenes Symfony Backend mit Web Crawler und API geschrieben, welches die Daten von dem Anbieter abruft, zwischenspeichert und aufbereitet wiedergab.",[74,980],{},"\nDazu gestellt wurde eine native Android-App, welche die Daten über die API abruft und darstellt.",[74,983],{},"\nDie App wurde über den Google Play Store verteilt und weitgehend durch die Schüle, über Kurse und Jahrgangsstufen verteilt genutzt.",[70,986,987],{},"Die App wurde von mir eingestellt, als der Anbieter der Schul Cloud eine eigene Alternative anbot und seine Schnittstellen soweit heruntergeschlossen hatte, dass ein einfaches Crawlen nicht mehr möglich war.",{"title":20,"searchDepth":21,"depth":21,"links":989},[990],{"id":253,"depth":21,"text":254},"2018-06","2017-10","Eine App um den Vertretungsplan meines Berufskollegs zu optimieren",{},"\u002Fprojects\u002Fvertretungsplan",{"title":965,"description":993},"projects\u002Fvertretungsplan",[51,114,174,59,115,999,1000,1001,111,60,57],"flutter","dart","android","eCXkrbR1B2p8YRTZ1eAzHgHUXEr-ngabcUeSDzTkTBY",[1004,1011,1025,1040,1062,1071,1078,1085],{"name":1005,"items":1006},"Datenbanken",[1007,1009],{"slug":174,"name":1008},"SQL (MySQL, MariaDB)",{"slug":112,"name":1010},"SQLite",{"name":310,"items":1012},[1013,1015,1017,1019,1021,1023],{"slug":111,"name":1014},"HTML5",{"slug":60,"name":1016},"CSS3",{"slug":110,"name":1018},"Tailwind CSS",{"slug":926,"name":1020},"Bootstrap",{"slug":531,"name":1022},"UIkit",{"slug":175,"name":1024},"Ext JS",{"name":1026,"items":1027},"JavaScript-Ökosystem",[1028,1030,1032,1034,1036,1038],{"slug":53,"name":1029},"JavaScript",{"slug":101,"name":1031},"TypeScript",{"slug":113,"name":1033},"Node.js",{"slug":109,"name":1035},"Vue.js",{"slug":100,"name":1037},"Nuxt.JS",{"slug":108,"name":1039},"Deno",{"name":1041,"items":1042},"Backend",[1043,1045,1047,1049,1051,1053,1055,1058,1060],{"slug":51,"name":1044},"PHP",{"slug":61,"name":1046},"Laravel",{"slug":114,"name":1048},"Symfony",{"slug":172,"name":1050},"Laminas",{"slug":171,"name":1052},"Mezzio",{"slug":173,"name":1054},"Zend Framework",{"slug":1056,"name":1057},"wordpress","WordPress",{"slug":149,"name":1059},"Shopware",{"slug":50,"name":1061},"Spryker",{"name":1063,"items":1064},"Mobile",[1065,1067,1069],{"slug":1000,"name":1066},"Dart",{"slug":999,"name":1068},"Flutter",{"slug":1001,"name":1070},"Android",{"name":1072,"items":1073},"Weitere Sprachen",[1074,1076],{"slug":102,"name":1075},"Java",{"slug":961,"name":1077},"Python",{"name":1079,"items":1080},"Betriebssysteme",[1081,1083],{"slug":105,"name":1082},"Linux",{"slug":242,"name":1084},"Windows",{"name":1086,"items":1087},"Sonstiges",[1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114],{"slug":57,"name":1089},"Git",{"slug":55,"name":1091},"Docker",{"slug":58,"name":1093},"Jenkins",{"slug":103,"name":1095},"JVM",{"slug":56,"name":1097},"AWS",{"slug":106,"name":1099},"Cloudflare",{"slug":115,"name":1101},"Nginx",{"slug":54,"name":1103},"Redis",{"slug":104,"name":1105},"Netzwerk",{"slug":52,"name":1107},"RabbitMQ",{"slug":107,"name":1109},"OIDC",{"slug":59,"name":1111},"REST",{"slug":116,"name":1113},"Terraform",{"slug":62,"name":1115},"CI\u002FCD",1782416851062]