I have recently worked on the same kind of similar quiz for German.

However I have some other ideas and my quiz isn't "science based"

- in my quiz there are only "yes / no answers" This way you don't spend eternity reading descriptions of the word "apple". It also means I can estimate separately my passive and active vocabulary.

The OP missing "I don't know button" which will overestimate any result by 25% percent.

- I'm adjusting dynamically how many questions to ask in each bucket.

the goal of my quiz is to estimate a number of German words an English speaking learner has learned.

So I have curated vocabulary to remove "free words" like rare compounds of common words and other rare words which satisfy "any European knows this word without learning".

The final vocabulary used in a quiz is approx 8k words only

https://wortschi.de/quiz