1. Inleiding
Een Ambitieus Stageproject bij Lykios
Tijdens mijn stageperiode bij Lykios kreeg ik de opdracht om, samen met één andere stagiair, een volwaardig quizplatform te ontwikkelen genaamd Qurio
. Het doel was om een complete applicatie te bouwen die niet alleen het spelen van quizzen mogelijk maakte, maar ook een rijk ecosysteem bood voor het aanmaken, beheren en analyseren van content. Dit project was een uitgelezen kans om een complex softwareproduct van begin tot eind te realiseren.
2. Wat is Qurio?
Een Compleet en Feature-Rijk Quizplatform
Qurio is een webapplicatie die gebruikers in staat stelt om quizzen te creëren, te delen en te spelen. Het platform is ontworpen om een brede set aan functionaliteiten te bieden, met aandacht voor zowel de quizmaker als de speler.
Belangrijkste functionaliteiten
De applicatie omvat een breed scala aan features, waaronder:
- Flexibel Gebruikersbeheer: Authenticatie met rollen en permissies (admin, gebruiker) die van de grond af zijn opgebouwd met JWT.
- Veilige Toegang: Inclusief een wachtwoord-reset-functie via e-mail.
- Dynamisch Quiz Spelen: Met een transparante scoreberekening en de mogelijkheid voor gasten om deel te nemen via een unieke link.
- Uitgebreid Vragenbeheer: Ondersteuning voor diverse vraagtypes met “Rich Text” en een modulaire architectuur om eenvoudig nieuwe types toe te voegen.
- Krachtige Zoekfunctie: Voor het snel vinden van quizzen en gebruikers.
- Personalisatie en Analyse: Gebruikers kunnen hun profiel beheren en per quiz gedetailleerde statistieken inzien.
3. De Technische Aanpak
Architectuur en Tech Stack
De applicatie is opgebouwd uit een Java/Spring Boot backend en een TypeScript/React frontend. Deze scheiding zorgde voor een duidelijke structuur en maakte parallelle ontwikkeling mogelijk. We maakten gebruik van een moderne en robuuste tech stack, met o.a. Spring Security, PostgreSQL, Shadcn/UI, TailwindCSS en Docker.
Slimme Ontwerpkeuzes en Modulariteit
Om de applicatie toekomstbestendig en onderhoudbaar te maken, heb ik specifieke ontwerpkeuzes gemaakt:
- Strategy Design Pattern: Dit patroon werd toegepast voor de scoreberekening, waardoor de logica per vraagtype geïsoleerd en makkelijk uitbreidbaar is.
- Custom Java Annotations: Om complexe en herbruikbare logica, zoals permissiecontroles, op een elegante en declaratieve manier te implementeren.
- Grondige Documentatie: Belangrijke architecturale beslissingen en algoritmes werden gedocumenteerd om de kennisoverdracht naar toekomstige ontwikkelaars te garanderen.
Een Rotsvaste Basis: Testen en Kwaliteit
Kwaliteitszorg was een topprioriteit. Ik heb intensief ingezet op het schrijven van tests op elk niveau: unit-, integratie- en end-to-end testen (met Playwright).
Het resultaat was een project met meer dan 300 tests en een code-coverage van 80%, een prestatie waar ik erg trots op ben.
Om dit proces te automatiseren, heb ik op een reservelaptop een Jenkins CI/CD-pipeline opgezet die alle tests automatisch uitvoerde bij elke wijziging.
Een Creatieve Deployment Oplossing
Zonder budget voor een cloudomgeving heb ik een creatieve oplossing bedacht. Met een oude laptop als server, Nginx als reverse-proxy en ngrok om een publieke URL te creëren, heb ik een volwaardige productie-omgeving gesimuleerd.
4. Besluit en Resultaat
Het eindresultaat van deze stage is een zeer robuuste en feature-rijke applicatie met commercieel potentieel. Het project was een diepgaande leerervaring die verder ging dan enkel programmeren; het omvatte architectuur, teamwork, kwaliteitszorg en DevOps. Qurio toont mijn vermogen om een complex softwareproduct van concept tot een functioneel en goed getest eindproduct te brengen.
Hieronder een demonstratie van enkele van de belangrijkste functionaliteiten:
- Registreren en inloggen
- Het gebruikersprofiel beheren
- Een nieuwe vraag aanmaken
- Een quiz updaten
- Een quiz delen via een unieke link
- Quizzen en gebruikers doorzoeken
- Gedetailleerde statistieken bekijken
- Een gebruiker archiveren (admin)
Bekijk de Documentatie
Voor een dieper inzicht in het projectplan, de realisatie en de functionaliteiten, zijn de volgende documenten beschikbaar: