I don’t think there’s much of a difference between internal and public in most applications, except for libraries of course.
I agree with the argument though that keeping the visibility small by default is a good idea. Thus, I’d propose a private by default approach, except for classes of courses, since Kotlin lacks a package local visibility modifier.