Project
CFA and 408 Adaptive Learning Tools
Two local-first study prototypes connecting timed practice, mastery, mistakes, review dates, and self-assessment.
HTML · JavaScript · CSS · LocalStorage · Learning Analytics
Product Snapshot
- Role
- Independent frontend tool development
- Users
- CFA and Chinese CS 408 learners who need offline practice, weakness tracking, and review pacing.
- Stage
- Two working local frontend prototypes completed.
- Focus
- Deep-linked quizzes, timers, automatic scoring, subjective self-grading, mastery, and review scheduling.
- Validation
- The CFA tool covers subjects, drills, mistakes, and weaknesses; the 408 tool adds a 180-minute mock exam and split scoring.
- Public Proof
- Local HTML/JavaScript/CSS, CFA README, and working interactions; long-term learning impact has not been tested.
Next Step
Two tools, one gap
CFA and the Chinese computer-science 408 exam cover different material, but their study loops share a weakness: mistakes, mastery, and the next review date often live in separate places.
I built two local-first frontend prototypes to test how one practice session can become a continuing feedback loop.
CFA study site
The CFA tool includes subject overviews, lecture navigation, 30-minute drills, mind maps, focused packs, high-frequency pages, weakness analysis, and a mistake book. LocalStorage retains accuracy, mastery, and suggested review dates.
408 mock exam
The 408 tool implements a 180-minute timer, answer sheet, automatic objective scoring, subjective self-grading, and mastery classification. Exam state persists locally and can resume after interruption.
Design boundary
Neither prototype equates one correct answer with true mastery. They provide recording and review scheduling, but have not been validated through a longitudinal learning-gain study.
Transfer
These tools trained me to combine domain content, persistent state, and feedback pacing while keeping the distinction between measuring learning and improving it.
Configure the public Giscus environment variables to open discussion on the public site.