DEV Community

Dmytro Voytko
Dmytro Voytko

Posted on

Flashcard Pro — DP-600 Exam Trainer

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend

What I Built

Flashcard Pro — DP-600 Exam Trainer, built for my friend Den who is preparing for the Microsoft DP-600: Implementing Analytics Solutions Using Microsoft Fabric exam.

Den was drowning in Fabric docs — lakehouses, warehouses, KQL, DAX, governance — with no good way to do active recall. So I built him a simple Flask study app:

Pick a mode + topic → see a term → try to recall → reveal definition → self-grade Yes/No → next card.

  • 202 cards across all 8 DP-600 topics, in one merged flashcards.json
  • Modes: Any / New / Incorrect / simple / intermediate / advanced + per-topic filter
  • /stats dashboard: accuracy overall, by topic, by difficulty
  • JSON file storage, no DB, runs locally in 10 seconds
  • Results log with auto-compaction + 7 unit tests

Problem it solves: turns passive reading into spaced, self-tested review — especially re-drilling the cards he gets wrong.

Demo

Live local run: pip install -r requirements.txt && python app.py → http://127.0.0.1:8001/

Screenshots instead of video:

Home - mode + topic picker
Home: mode + topic picker with progress summary

Quiz - recall flow
Quiz: term → Show Definition → Yes/No self-grade

Stats dashboard
Stats: overall / by-topic / by-difficulty accuracy

Full flow: Home → Start Study (e.g. incorrect + Topic 5) → Quiz loop → Session Complete! → Stats.

Code

https://github.com/dmytrovoytko/flashcards

Stack: Python + Flask + Jinja + Bootstrap 5, app.py for routes/session, data_manager.py for filtering/stats/compaction, templates/index.html, quiz.html, stats.html.

How I Built It

Built agentically with open-source AI:

  • Model: google/gemma-4-31b-it — used for codebase analysis, spec writing, and implementation
  • Harness: OpenCode coding agent — Task/Todo-driven edits, test runs, verification via python -m unittest
  • Frameworks: Flask 3, Bootstrap 5.3, stdlib json
  • Local-first: all inference-assisted coding + all app data runs locally — cards, topics, and results.json never leave the machine

The AI did what it's best at: brainstormed the specs and made key decisions, generated flashcards by topics and difficulty (simple/intermediate/advanced in data), merged flashcards1-8.json → flashcards.json, fixed the filter, then implemented the suggested roadmap: topic picker, /stats, /end, stale-ID skipping, SECRET_KEY/FLASK_DEBUG/PORT env config, requirements.txt, and test_data_manager.py.

Why Does Open Innovation Matter?

This project only works because it's open:

  1. Forkable study content: anyone can PR new cards for DP-700, AZ-104, etc. A closed API with proprietary quizzes wouldn't allow that.
  2. Inspectable learning logic: Den can read get_filtered_cards() and get_stats() and trust how "incorrect" and accuracy are computed.
  3. Self-hostable + private: exam prep progress stays in a local results.json, no tracking, no subscription — perfect for Hacktoberfest-style community contributions.
  4. Open models → open builders: I could reproduce this entire workflow with an open-weight assistant in OpenCode, iterate locally, and push back to GitHub for others to reuse.

Open innovation turned a one-off favor for Den into a template anyone can clone for any certification.

Top comments (0)