← Back to Projects
Web

Dros

I built Dros to turn static ChatGPT-generated questions into interactive practice sessions with answer feedback, review queues, and learning analytics.

Timeline
May to July 2026

Technologies used

  • React
  • TypeScript
  • Vite
  • IndexedDB
  • Web APIs

Why I built Dros

I kept asking ChatGPT to generate multiple-choice questions from the material I was studying. The questions were useful, but the experience stopped at a static answer list. I had no persistent way to choose an answer, see feedback, repeat a session, or keep testing whether I understood the topic.

Dros turns those generated questions into an interactive practice loop. I can import a question bank, answer each question, see an explanation immediately, and carry mistakes into later review.

Dros practice session showing an incorrect answer, the correct option, and an explanation
Practice feedback updates the local review state immediately after each answer.

Practice is the main workflow

A session can be filtered by topic and difficulty, timed or untimed, and shuffled. When answer choices move, Dros remaps the correct answer with them instead of leaving correctness tied to the original letter. Each response updates local accuracy, question history, and the due-for-review queue.

Keeping imported questions trustworthy

Dros accepts CSV, JSON, plain text, and Moodle GIFT question banks. Each parser converts its input into one shared question model before validation. The preview marks a question as valid, accepted with a warning, or rejected with a specific error, so malformed content does not quietly enter a practice session.

Dros import preview showing one valid question, one warning, and one validation error
Every supported format passes through the same preview and validation boundary before import.

Local history turns mistakes into review

Questions and study history live in IndexedDB, with a localStorage fallback and migration path. Once the app has loaded, practice does not require an account or a remote API. Analytics use that same history to show accuracy, due questions, repeated mistakes, and weak topics.

Dros analytics dashboard showing study accuracy, due questions, repeated mistakes, and weak topics
Analytics are derived from saved question history rather than a separate reporting backend.

Limits and next steps

The review queue uses a simple due-or-not-due model instead of a full spaced-repetition algorithm. The app also has no service worker, so a fresh offline load is not guaranteed. I would next split the large application component into smaller domain modules and add focused tests for the parsers and practice-state transitions.

Tags

local-firstquestion bankimport validationpractice analyticsMoodle GIFT

More Web projects

Notion Study Reminder email open in a desktop inbox, showing overdue tasks, today’s checklist, and upcoming deadlines

Web

Node.js Notion API Gmail API

Notion Study Reminder

A dependency-free Node.js service that turns a Notion study schedule into Beirut-time email reminders.

Explore other projects

Android audiobook player showing cover art, saved progress, skip controls, playback speed, and a sleep timer

Mobile

Kotlin Jetpack Compose Media3 ExoPlayer

Audiobooks for Android

A native Android audiobook library with offline downloads, persistent listening progress, and background playback.

AI Workflow DSL overview showing a workflow program beside the lexer, generated LL(1) table, and stack parser

University

Python LP PT

AI Workflow DSL

A Python DSL and table-driven LL(1) parser for multi-agent workflows, with generated grammar docs and source-aware syntax errors.

Tanbih control panel showing selectable crisis data sources and unavailable credentialed providers

Hackathon

Node.js Express Socket.IO

Tanbih

A crisis intelligence prototype that combines multi-source detection, explainable verification, geographic targeting, and human-reviewed multilingual alerts.