Software Engineering Course
A self-study course kept in plain Markdown so it can be read and edited from a laptop or a phone, with no build step and no app to install.
How to work on this from either device
Section titled “How to work on this from either device”Laptop — VS Code
Section titled “Laptop — VS Code”cd c:\Analysis\se-courseclaudeClaude Code picks up CLAUDE.md automatically, which tells it to read
PROGRESS.md first.
iPhone — Safari
Section titled “iPhone — Safari”Open claude.ai/code, pick this repo, and start a session. Same repo, same
files, same CLAUDE.md. Works in mobile Safari; add it to the Home Screen for a
full-screen, app-like view.
For pure reading (no session), GitHub’s own mobile web view renders these Markdown files fine, and the GitHub iOS app renders them better.
Either device — the website
Section titled “Either device — the website”The course is also published as a site (Astro + Starlight on Cloudflare Pages)
with full-text search, a persistent module sidebar, and dark mode. It rebuilds
itself on every push to main, so it is never out of date with the repo. Best
for reading; use claude.ai/code when you want to actually work.
The one rule that makes this seamless
Section titled “The one rule that makes this seamless”PROGRESS.md is the handoff. Read it at the start of a session, update it at the
end. Git carries the files between devices; PROGRESS.md carries the context
— which module, what was just covered, what’s next, what’s still unresolved.
Without it, each device starts cold.
Always git pull when you pick up a device, and git push when you put it down.
Two devices editing the same Markdown file is the one way to create a conflict
here, and pulling first avoids it.
Layout
Section titled “Layout”| Path | Holds |
|---|---|
syllabus.md |
Full course outline — the spine |
modules/ |
One file per module (NN-slug.md) |
exercises/ |
Runnable code, subfolder per exercise |
notes/ |
Free-form notes and questions |
PROGRESS.md |
Session handoff state |
CLAUDE.md |
Working agreement for Claude Code sessions |
site/ |
Astro + Starlight site — generated from the above, never edit its content |
The site is derived, not authoritative
Section titled “The site is derived, not authoritative”site/scripts/sync-content.mjs copies the root Markdown into Starlight’s content
directory at build time, injecting the frontmatter Starlight needs and rewriting
.md links into site routes. site/src/content/docs/ is gitignored and
regenerated on every build.
The point of that indirection: the files you edit stay clean, portable Markdown
with no YAML headers, so they read well in the GitHub app and in claude.ai/code.
The site is a view over them. Add a file to modules/ or notes/ and it appears
on the site automatically — no config to touch.
To work on the site itself: cd site && npm run dev. Node is installed portably
at %LOCALAPPDATA%\node (the MSI installer is blocked by org policy on this
machine).
Reading on a phone
Section titled “Reading on a phone”Files are kept to ~90 columns and use short sections so they stay readable on an iPhone 14 screen without horizontal scrolling. Keep it that way when adding material: avoid wide tables and long unbroken code lines.