MatQuiz — quiz multiplayer live, cu întrebări propuse real-time de GenAI

Dată proiect:
9 martie 2026

Proiectul implementează MatQuiz, o aplicație web full-stack pornită chiar de la ideea de Quiz / Challenge aferentă programului parcurs. Modalitatea de învățare prinevaluare inițială a fost extinsă într-o experiență multiplayer, desfășurată în timp real. Decizia-cheie a venit dintr-o limitare identificată încă din faza de analiză: pentru ca aplicația să rămână interesantă și reutilizabilă, ar fi fost nevoie de foarte multe întrebări scrise manual. Soluția: generarea automată a variantei draft a întrebărilor cu ajutorul unui model AI. Astfel, hostul creează o cameră de joc, alege topicul și nivelul de dificultate, iar întrebările inițiale sunt generate automat, astfel încât fiecare sesiune poate aduce un quiz complet nou. Jucătorii intră în lobby pe baza unui cod unic, iar jocul se desfășoară live: întrebările apar simultan pentru toți participanții, răspunsurile sunt validate pe server, iar punctajul ține cont atât de corectitudine, cât și de viteza de răspuns — fiind astfel și un mecanism simplu de anti-cheat. Leaderboard-ul actualizat pe parcurs și rezultatele afișate la final completează latura competitivă a jocului. Aplicația include de asemenea administrarea completă a profilului de utilizator, un tutorial de tip How to play și un formular de contact pentru raportarea oricăror probleme întâlnite.

Proiect realizat de
Picture of Matei Stanescu
Matei Stanescu
În cadrul programului de studiu:
1

Modelarea bazei de date

Modelarea a trebuit să susțină atât natura multiplayer în timp real a jocului, cât și procesarea asincronă a generării întrebărilor, două cerințe care nu apăreau în ideea inițială, simplă, a proiectului. Camera de joc păstrează o stare explicită a etapei în care se află, permițând sincronizarea corectă a hostului și a jucătorilor indiferent de momentul în care se conectează. Răspunsurile jucătorilor au fost separate de restul datelor de joc pentru a permite calcularea punctajului în funcție de corectitudine și de timpul de răspuns, iar profilul utilizatorului include un istoric al rezultatelor, necesar pentru sistemul de clasament introdus ulterior.
2

Definirea și implementarea unui API

API-ul a fost extins dincolo de fluxul simplu de autentificare, pentru a susține și funcționalități apărute pe parcursul dezvoltării, precum verificarea existenței unui joc activ la reconectare sau administrarea completă a profilului de utilizator. Separarea clară dintre operațiile de autentificare și cele de profil a permis tratarea diferită a validărilor necesare fiecărui tip de modificare, mai ales acolo unde o schimbare de date sensibile presupune reîmprospătarea sesiunii utilizatorului.
3

Proiectarea unei interfețe grafice

Înainte de implementare, fluxurile principale ale aplicației au fost prototipate integral, de la autentificare până la finalul unui joc, pentru a stabili din timp toate stările prin care poate trece o cameră de quiz — așteptare, generare, pregătire și desfășurare efectivă. Această abordare a fost esențială într-o aplicație în timp real, unde interfața trebuie să reflecte corect starea curentă a jocului pentru fiecare participant, inclusiv în situații neobișnuite precum eșecul generării întrebărilor sau reconectarea unui jucător.
4

Arhitectura sistemului

Arhitectura a fost gândită în jurul unui principiu central: generarea întrebărilor cu ajutorul unui model LLM nu trebuie să blocheze restul aplicației, motiv pentru care această responsabilitate a fost izolată într-un serviciu separat, complet stateless, care comunică cu serviciul principal exclusiv prin cozi de mesaje. Această separare permite ca solicitările către modelul AI să fie procesate independent de fluxul de joc, iar rezultatele să fie preluate asincron, fără a afecta experiența live a utilizatorilor conectați prin WebSockets. Alegerea unei arhitecturi orientate pe evenimente a fost motivată tocmai de nevoia de a gestiona corect stările multiple prin care trece o cameră de joc, de la momentul creării ei până la afișarea rezultatelor finale.
5

Implementare BE

O parte semnificativă a efortului de implementare a fost dedicată integrării fiabile cu modelul de limbaj folosit pentru generarea întrebărilor, inclusiv definirea unui format structurat al răspunsului, necesar pentru a putea valida și persista automat conținutul generat, fără intervenție manuală. Validarea răspunsurilor jucătorilor a fost realizată exclusiv pe server, luând în calcul timpul de răspuns, ca mecanism simplu de prevenire a trișării. Tratarea explicită a scenariilor de eșec — precum o generare AI care eșuează sau durează prea mult — a fost la fel de importantă ca fluxul principal, pentru a permite resetarea camerei fără a bloca experiența hostului.
6

Implementare FE

Interfața a fost construită astfel încât fiecare ecran să reflecte direct starea curentă a camerei de joc, gestionată centralizat și actualizată în timp real pe măsură ce serverul trimite evenimente prin WebSocket. Această abordare a simplificat semnificativ logica de randare, întrucât fiecare etapă a jocului — de la numărătoarea inversă de start până la afișarea rezultatului unei întrebări — a putut fi tratată ca o consecință directă a stării primite de la backend, nu ca o secvență de tranziții gestionate manual pe partea de client.
7

Rezultatele proiectului

Rezultatele obținute confirmă viabilitatea arhitecturii orientate pe evenimente adoptate, generarea întrebărilor prin modelul LLM funcționând izolat de fluxul de joc în timp real, fără a afecta experiența utilizatorilor conectați prin WebSockets, în timp ce tratarea explicită a scenariilor de eșec a asigurat stabilitatea camerei de joc în situații neobișnuite.

Descoperă proiecte similare