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 <[email protected]>
This commit is contained in:
1 parent
afb1f191df
commit
438623d857
69 files changed
+12669
-4
No files matched your search
@@ -0,0 +1,24 @@
|
||||
import { error } from '@sveltejs/kit';
|
||||
import { marked } from 'marked';
|
||||
import { allLessons } from '$lib/language-learner/course';
|
||||
import type { PageLoad } from './$types';
|
||||
|
||||
export const load: PageLoad = async ({ parent, params }) => {
|
||||
const { course } = await parent();
|
||||
const lessons = allLessons(course);
|
||||
const index = lessons.findIndex((l) => l.id === params.lesson);
|
||||
if (index < 0) error(404, 'Unknown lesson');
|
||||
const lesson = lessons[index];
|
||||
const level = course.levels.find((lv) => lv.id === lesson.level)!;
|
||||
return {
|
||||
lesson,
|
||||
level,
|
||||
next: lessons[index + 1] ?? null,
|
||||
// Notes are course content written in this repository, not user input.
|
||||
notesHtml: marked.parse(lesson.notes, { async: false }),
|
||||
seo: {
|
||||
title: `${lesson.title} · ${course.name} ${level.band}`,
|
||||
description: `${course.name} lesson: ${lesson.summary}. ${lesson.words.length} words with exercises.`
|
||||
}
|
||||
};
|
||||
};
|
||||
Reference in new issue
Block a user