What I built.
Student Learning App is part of my portfolio of websites and applications.
- Onboarding, subjects, uploads and profile pages.
- User-scoped practice sessions backed by Supabase.
- Demo completion and persisted result flow.
Under the hood.
Nuxt 4
Reactive route and async data lifecycle
Supabase
practice_sessions reads and writes
Vue
Loading, access and completion states
- Session route
- Load record
- Owner check
- Demo score update
- Results route
From uploaded material to a study session
A learning application needs to connect the material a student has with the practice they actually do. This project explores that flow through onboarding, subject pages, uploads and a practice area.
What the practice route actually does
The route builds a session ID from its parameter and passes a reactive key to useAsyncData. The query selects the session fields and the page checks the returned user_id against the signed-in user. It watches both the route ID and account ID so the view can reload when either changes.
That check controls what the page displays. It is not, by itself, proof of database authorisation: row-level policies still need to enforce who can read or write the record.
A deliberate placeholder with a real write path
completeDemo updates score and max_score to 1, refreshes Nuxt data, and navigates to the result route with the session ID. This exercises persistence and navigation while the actual question runner is still a placeholder.
It also marks an obvious future boundary: a client-written demo score is not authoritative assessment. A real scoring implementation needs a defined answer model and a trusted validation path. That is a more interesting next milestone than decorating the placeholder with another progress chart.
The next boundary: trusted assessment
The question runner is explicitly a demo: it completes a placeholder question and saves a sample score. I describe it as a working session-and-results foundation, not a finished question bank or an adaptive-learning engine.
What I would build on next
The valuable next layer is real question content and a complete practice flow. Getting the account, session and result relationships in place first gives that work somewhere coherent to live.