Understand.
Identify who takes the test, what "placement" needs to mean for them, and what CEFR actually measures.
The audience
The primary user is an Indonesian adult learner or working professional who wants to know her functional English level for practical decisions — course enrollment, job application preparation, or self-directed study planning. She has no access to expensive certified tests (IELTS, TOEFL) and wants an indicative — not officially certified — level assessment she can take at home in one sitting.
She needs a test that finishes in under an hour, gives a clear result she understands (A1, A2, B1, B2 with brief descriptions), and provides a certificate she can save or print for her records.
Research and sources
The Common European Framework of Reference for Languages (CEFR) was studied in depth — the Council of Europe descriptor tables for A1 through B2, sample assessment materials, and published placement-test structures used by language schools. Existing placement tests were surveyed for question types, difficulty calibration approaches, and result-presentation patterns.
AI tools accelerated exploration of question formats, but every question was verified for CEFR level appropriateness against the descriptor tables. Early AI-generated questions frequently misjudged difficulty — a question tagged "A1" would in practice require B1-level grammar to answer correctly.
Define.
Convert placement needs into question count, level distribution, and scoring approach.
Three dimensions were fixed before question writing began.
Test structure. Six sequential sections: I. Basic English (A1, 20 questions), II. Elementary (A2, 25 questions), III. Intermediate (B1, 30 questions), IV. Upper-Intermediate (B2, 15 questions), V. Reading Comprehension (5 questions), and VI. Listening Simulation (5 questions). Total 100 questions, completable within an hour. The Listening Simulation is currently delivered in text form — a planned upgrade will replace it with audio.
Level distribution rationale. The B1 section carries the largest count (30 questions) because intermediate is the most difficult level to resolve. Beginners are relatively easy to identify (many wrong answers); advanced learners are relatively easy to confirm (many right answers); but placement within the B1 band needs finer-grained evidence. Reading and Listening are separated as skill-specific bands so a test-taker who is strong in grammar but weaker in comprehension does not have that gap hidden by the level-based score alone.
Scoring approach. A two-layer algorithm: (1) raw score across all sections determines a baseline level, (2) performance within each level section confirms or adjusts the placement. This prevents over-placement — a test-taker who guesses well at B2 but fails A2 questions should not be placed at B2.
Structure.
Organize the test flow, scoring logic, and certificate output.
Test architecture
Questions are grouped into the six sequential sections defined earlier — four CEFR-level sections ascending from A1 to B2, followed by dedicated Reading Comprehension and Listening Simulation sections. Blocked ordering by section keeps the test-taker in a consistent difficulty context, starting easier and progressing harder within each section, then moving to the next level. This is more predictable than randomized ordering and reduces mental fatigue from repeated difficulty jumps.
The test presents one question per screen with a clear progress indicator showing current section, question number, and overall completion. No time limit is imposed — placement accuracy matters more than speed, and time stress reduces reliability further.
Scoring and certificate
The scoring engine runs entirely in client-side JavaScript — no server calls, no data transmission. On completion, the algorithm computes the CEFR level, generates a brief descriptor explaining what that level means in practical terms, and renders a printable certificate.
Design system. Inter typography throughout — larger for question stems (17–18px), slightly smaller for answer options (15–16px). A neutral primary palette (grays and one accent), with green for confirmed answers and warm gray for unanswered. No per-question feedback during the test (which would leak information about later questions); full breakdown with correct/incorrect indicators on completion.
Generate.
Use AI to draft questions and distractors — with strict level-verification.
ChatGPT was used to generate initial question pools across all four skills and all four levels. For each question, AI produced the question stem, four answer options (one correct, three distractors), and a CEFR level assignment with brief justification.
Iteration was heaviest in three areas. Variety within levels: early AI outputs often produced multiple questions testing the same grammar pattern within a single section, creating redundancy without adding assessment information — a section had to test a range of sub-skills, not the same one repeatedly. Difficulty distribution within each level: within A2, for example, questions needed a spread from easy-A2 to hard-A2, not clustered at one point in the band — otherwise the section could not discriminate within the level. Distractor quality: AI distractors were sometimes too obviously wrong (making questions trivially easy) or too plausibly correct (making questions ambiguous), and needed rewriting toward the middle band.
AI drafted 100 questions in an hour. Curating them for balanced variety, coverage, and difficulty took three weeks.
Evaluate.
Validate every question against CEFR standards and every scoring path against edge cases.
Content rubric
Each question was reviewed against the following criteria:
- Does the section cover a spread of sub-skills, or is it clustered on the same pattern?
- Does difficulty within each section range from the easy end to the hard end of that level?
- Is exactly one option correct, with no ambiguity on careful reading?
- Are distractors plausible but clearly wrong upon reflection?
- Does the question test what it claims to test, or does it require unrelated skills?
- Is the cultural context neutral or Indonesia-appropriate?
Technical validation
Node.js integrity checks were run across the full question dataset, verifying that every question had exactly four options, exactly one correct answer marked, a valid CEFR level tag, and non-empty question and option text.
Simulated scoring was run for representative performance scenarios — all correct at A1, all correct through A2 then random, all correct through B1, and full-correct — to verify the algorithm placed test-takers appropriately for each pattern.
Refine.
Rewrite miscalibrated questions, tune the algorithm, and test the full experience.
Revisions
Content revisions rebalanced variety within each level. Some sections had multiple questions testing near-identical grammar patterns; those were replaced with questions covering different sub-skills so each section samples a wider range within its level.
Interface revisions were substantial. The initial design ended at the score screen — no certificate — which was insufficient for a placement test aimed at learners who want a record of their result. A certificate page and a participant-name input were added so the test could produce a shareable, keepable output. The selected-answer indicator was replaced with a higher-contrast style after early users had difficulty distinguishing their chosen answer from unselected options. Several interaction bugs were fixed — scoring inconsistencies at specific answer patterns, wrapping issues on longer question stems, and print-preview issues on the certificate.
The scoring algorithm was refined after simulated scoring revealed edge cases — for example, a test-taker who scored perfectly on A1/A2 but partially on B1/B2 was initially placed at B2, when B1 was more accurate. The two-layer approach was introduced specifically to address these over-placement scenarios.
Testing
Simulated scoring runs covered every representative performance pattern. Print-style testing verified the certificate rendered cleanly at A4 size across common browsers. Mobile testing verified the single-question-per-screen layout functioned correctly on smaller viewports without accidental multi-answer selection or awkward wrapping of question text.
Deliver.
Deliver as a single-file HTML with print styles — no backend, no login, no data leaves the browser.
The final deliverable is a single HTML file. Questions, scoring logic, participant-name input, and certificate template are all embedded. It opens in any browser. It runs entirely locally. It prints a certificate. No account creation, no data transmission, no risk that a private assessment result ends up on someone else's server.
Before the test begins, the participant enters her name — this is what later appears on the certificate. The result display uses two levels: a summary CEFR level with a plain-language descriptor, and a breakdown by section (A1, A2, B1, B2, Reading, Listening). The certificate is designed to print cleanly on A4, with the participant's name, score, level, and date.
Reflection.
The strongest single lesson was the difference between generating content and curating it. AI produced 100 draft questions in an hour that were syntactically valid and topically on target, but the balance across sections — variety of sub-skills, spread of difficulty within each level, plausibility of distractors — required deliberate human curation. Generation was cheap. Curation was the work.
The second lesson was that a placement test is not just questions. Adding the participant-name input and certificate page was not decoration; it changed the test from a scored quiz into something the user could use, keep, and share. Delivery matters as much as content in a self-directed context — a good test with no shareable result is a worse product than a good test with one.