dfd.alftech.space source only · nothing hosted yet

Two courses, with the real numbers

dfd.alftech.space is where the courses I write are listed: two of them exist today, one on Kubernetes and one on Luxembourgish, and both are source code you clone and run on your own machine rather than a site you log into.

Neither is finished. Every number on this page was counted from the repository it describes, with the commands printed at the bottom; where a count disagrees with the project's own README, the counted number is the one shown here. Each course also lists what is broken in it today, in the words I would use in a code review.

Both repositories are private right now, so this page does not link into them — those URLs 404 for anyone who is not on the repository. The paths are printed below as text; write to a@alftech.space and I will add you.

Courses

KubeLearn — Kubernetes

Not ready to learn from

An interactive Kubernetes course in the Duolingo shape: a path of units, short lessons, a few questions after each one, XP and a daily streak. Node, Express and SQLite on the back, React and Vite on the front. It runs, it looks finished, and it currently teaches wrong associations — see the defects.

Units
14
Lessons
81
Questions seeded
116
Questions written
122, of which 6 are silently dropped
Lessons with no question
10
Questions per lesson
1 to 3
Question types
4: multiple choice, fill in the blank, true/false, code
Pass mark
70% of a lesson's questions

Known defects

Run it

git clone git@github.com:alexff91/learn-kubernetes.git
cd learn-kubernetes/backend && npm install && npm run build && npm start
cd ../frontend && npm install && npm run dev      # http://localhost:3000

The backend defaults to port 5000, which macOS holds for the AirPlay receiver; change it in backend/.env and in the proxy in frontend/vite.config.ts first. npm run build in the frontend exits 2 — use the dev server.

Source: github.com/alexff91/learn-kubernetes — private, and not linked, because the URL 404s without access. Ask for access.

Learn Luxembourgish

Not ready: builds for no platform

A Flutter app for Luxembourgish, pointed at the Sproochentest: four levels from A-1 to A3, an offline vocabulary where every word carries a pronunciation hint and English, German and French, and a genuine SM-2 spaced-repetition implementation behind the review queue. The vocabulary is the asset here; the shell around it needs two mechanical fixes before anyone can open it.

Levels
4: A-1, A1, A2, A3
Units
32
Lesson nodes
202
Vocabulary
602 words, all 602 with pronunciation, English, German and French
Categories
34
Phrases
38
Grammar
12 lessons, 25 exercises (2 lessons have none)
Hand-written questions
42: 25 grammar, 9 exam, 8 story
Sproochentest drills
3 listening passages, 6 speaking prompts
Stories
4, with 8 comprehension questions

Known defects

Run it

git clone git@github.com:alexff91/learn-luxembourgish.git
cd learn-luxembourgish && flutter pub get
flutter create . --platforms web       # the web target is not committed
flutter build web --release            # 253s, 3.1MB of main.dart.js

The built page is blank until the storage init call in lib/main.dart is guarded. With that one line changed it renders and plays: word of the day, the unit path, the word-match game, the offline dictionary.

Source: github.com/alexff91/learn-luxembourgish — private, and not linked, because the URL 404s without access. Ask for access.

Not a course

learn-elastic

Not listed above

A third repository has an Elastic-flavoured name and is not a course: 3 study paths, 0 lessons, 0 questions. It is a study-hours tracker with a title, a hero line and a footer that mention Elastic; nothing in it teaches anything, so it is named here rather than dressed up as a third course.

How these numbers were counted

Run from a clone of each repository. Both scripts parse the seed files and evaluate the array literals, rather than trusting the README.

# KubeLearn
node count_content.js learn-kubernetes
  UNITS   : 14
  LESSONS : 81
  QUESTIONS (objects in seedQuestions.ts): 122
  lessons with ZERO questions  : 10
  questions dropped at seed time (lesson_idx out of range): 6

node count_misplaced.js learn-kubernetes
  actually seeded             : 116
    on the lesson they were written for : 41
    on a DIFFERENT lesson               : 75 (65% of seeded questions)

# Learn Luxembourgish
grep -c "LevelUnit(categoryId:" lib/data/level_data.dart                 # 32
grep "LevelUnit(categoryId:" lib/data/level_data.dart \
  | grep -oE "lessonCount: [0-9]+" | awk -F': ' '{s+=$2} END {print s}'  # 202
grep -o "WordModel(" lib/data/vocabulary_data.dart \
                     lib/data/vocabulary_extended.dart | wc -l           # 602
grep -o "ipa: '" lib/data/vocabulary_*.dart | wc -l                      # 602
grep -o "WordModel(" lib/data/phrases_data.dart | wc -l                  # 38
grep -o "GrammarExercise(" lib/data/grammar_*.dart | wc -l               # 25

# learn-elastic
grep -c "targetHours:" src/main.js                                       # 3
grep -riE "lesson|quiz|question|answer|exercise" src index.html | wc -l  # 0