An Astro framework where a university course is authored as data, not as a website.
| Stack | Astro 6 · MDX · KaTeX · TypeScript |
|---|---|
| A course is | 3 files + a content/ folder |
| Components | 39, in scope by name |
| Pinned at | v4.2.0, one of 12 tags |
| Search | Pagefind, built into dist/ |
19 lines of a real course
An excerpt of content/sections/02-eksempler.mdx from the framework's
demo course, copied out of the repository unchanged, and under it what those
19 lines are worth. Not a screenshot and not a reconstruction:
the same file, put through the pipeline the integration configures for every
course. Open the solution.
<Example title="Brytning ved vann–luft">
Lys treffer en vannflate fra vann ($n_1 = 1{,}33$) mot luft ($n_2 = 1{,}00$) med
innfallsvinkel $\theta_1 = 40^\circ$. Finn brytningsvinkelen.
<Solution>
Snells lov løst for $\theta_2$ gir
<Formula tex="\sin\theta_2 = \frac{n_1}{n_2}\sin\theta_1 = 1{,}33 \cdot \sin 40^\circ \approx 0{,}855" />
slik at $\theta_2 = \arcsin(0{,}855) \approx 58{,}7^\circ$.
<Answer>$\theta_2 \approx 59^\circ$</Answer>
</Solution>
</Example>
<SelfCheck question="Hva skjer med brytningsvinkelen når innfallsvinkelen nærmer seg grensevinkelen?">
Den nærmer seg $90^\circ$ — lyset bøyes mer og mer langs flaten, og ved
grensevinkelen oppstår totalrefleksjon.
</SelfCheck> Built by the framework
Lys treffer en vannflate fra vann () mot luft () med innfallsvinkel . Finn brytningsvinkelen.
Vis løsning Skjul løsning
Snells lov løst for gir
slik at .
Hva skjer med brytningsvinkelen når innfallsvinkelen nærmer seg grensevinkelen?
Vis svar Skjul svar
Den nærmer seg — lyset bøyes mer og mer langs flaten, og ved grensevinkelen oppstår totalrefleksjon.
Six courses, one design. The framework owns everything a guide looks like; a course owns its material and a version number.
The framework
Design, schema and page wiring. 39 components, in scope by name. Six
injected routes, the MDX and KaTeX pipeline, and a Pagefind index built
into dist/.
A course
package.json, astro.config.mjs, and a one-line content.config.ts.
Then course.yaml and content/sections/NN-slug.mdx. No pages, no CSS.
Two decisions
Pinned, not tracked
A course depends on github:MartinSA04/StudyCompanion#v4.2.0, never a branch,
so a guide that built in September still builds in June. course.yaml declares
a schemaVersion the loader checks, which makes old content meeting a new
framework an error with two numbers in it. Four breaking releases so far,
across twelve tags.
This page pins that same tag and imports the framework the way a course does. The type, the colour, the panels and the code block above all come out of the package.