Study Workspace

A certification practice platform built around focused study, server-timed exams and progress that survives the next session.

Study Workspace practice question, answer explanations and course catalog
Expo · React Native Web · TypeScript · NestJS · Prisma · PostgreSQL · Supabase · Docker

The problem

Markdown question banks are useful source material, but they expose answers too early and make it difficult to resume practice or review mistakes. I wanted a phone-friendly study session and a timed exam with rules that remain consistent when a learner closes a tab.

My contribution

I defined the requirements, selected the stack, designed the data model and API, built the application and documented deployment and rollback. The initial courses use attributed, MIT-licensed material from CloudCertPrep; course creators can also write questions or import their own JSON question banks.

Engineering decisions

The server owns the exam

NestJS controls deadlines, grading and submission. Closing the app does not pause an exam. Correct answers stay on the server until the learner checks a study answer or submits an exam.

Progress keeps its meaning

Accuracy uses the first answer to each question. Edited questions create new versions, so an existing response remains tied to the question the learner actually saw.

One application boundary

The Expo web application calls a NestJS API. Supabase handles sign-in and hosted PostgreSQL, while Prisma accesses application data through the API. Authorization and exam rules live in the backend.

Study Workspace public course catalog with certification providers and course cards in the creator view
The public course catalog, shown from the creator account, brings course discovery and provider filters into one screen.

Delivery and outcome

API end-to-end tests apply the real migrations to PGlite, with the authentication token check mocked. Vitest, type checks and linting support delivery. Nginx serves the exported web app and forwards API requests to a non-root Docker container on loopback. Frontend releases use commit-named folders and an atomic symlink switch for rollback.

The web application is live in English and Greek, with study and exam modes, saved progress, course creation and imports. Native iOS and Android releases and further deployment automation are planned work.

Further reading

Essential preferences

The site remembers your privacy choice and your selected colour theme. These preferences are separate from analytics.

Google Analytics

Analytics is currently off. Accept only if you want to allow optional audience measurement.