Collect useful signals
The questionnaire turns student context into structured recommendation inputs.
Recommendations students can inspect, not a chatbot answer they are expected to trust blindly.

One complete interface state at a time. Each screen documents the task, the system response, and what the user can do next.
The questionnaire turns student context into structured recommendation inputs.
Deterministic criteria rank candidate projects and expose fit signals.
Feedback and run analytics make recommendation behavior reviewable over time.
Generic project lists ignore skill fit and difficulty. Pure LLM recommendations can sound convincing while remaining unstable, difficult to audit, and useless during provider failure.
I built the recommendation experience around structured profile signals and deterministic scoring first. Gemini adds personalized reasoning and reranking, while a fallback set keeps the product functional when the model is unavailable.
The questionnaire turns student context into structured recommendation inputs.
Deterministic criteria rank candidate projects and expose fit signals.
Gemini reranks or explains within a controlled boundary rather than inventing the whole result.
Feedback and run analytics make recommendation behavior reviewable over time.
Skills, interests, difficulty, goals, and constraints become comparable signals rather than one vague free-text request.
A visible scoring layer produces the base ranking; AI can personalize the reasoning without erasing why a project matched.
If Gemini is overloaded or unavailable, the scored recommendation set and explanations remain usable.
Secondary screens that extend the core journey without diluting it.


I led the product concept, scoring architecture, recommendation flow, result explanations, analytics interface, backend integration, and the thesis-level product presentation.
The system produces ranked projects, fit summaries, score breakdowns, recommendation explanations, feedback signals, run analytics, and exportable results with a non-LLM fallback path.