Some checks failed
Test and deploy staging / staging (push) Has been cancelled
Dutch and Korean (explained in English) and English (explained in Dutch) from A1 to C1, with a Hangul level for Korean. Lessons with notes, words and sentences generate multiple-choice, typing, sentence building, cloze, listening and matching exercises. Endless challenges: a seeded daily challenge, sprint, survival, mixed practice, level tests, spaced-repetition reviews and generated drills (numbers, clock times, de/het, plurals, Dutch and Korean conjugation, particles, Hangul reading, irregular verbs). Progress is stored in localStorage with export/import. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 lines
716 B
TypeScript
21 lines
716 B
TypeScript
import { allEntries, allLessons } from '$lib/language-learner/course';
|
|
import { COURSES, loadCourse } from '$lib/language-learner/courses';
|
|
import type { PageServerLoad } from './$types';
|
|
|
|
// Counted on the server so the overview doesn't download three full courses.
|
|
export const load: PageServerLoad = async () => {
|
|
const courses = await Promise.all(COURSES.map((c) => loadCourse(c.code)));
|
|
return {
|
|
counts: Object.fromEntries(
|
|
courses.map((c) => [
|
|
c.code,
|
|
{
|
|
lessons: allLessons(c).length,
|
|
words: allEntries(c).filter((e) => e.kind === 'word').length,
|
|
levels: c.levels.map((lv) => lv.band)
|
|
}
|
|
])
|
|
) as Record<string, { lessons: number; words: number; levels: string[] }>
|
|
};
|
|
};
|