This repository contains the source for the Developer Development website. The site provides course materials for undergraduate software engineering, including content from:
The website is built with Quarto and deployed as a static-asset Cloudflare Worker.
Install the following tools locally:
Python dependencies are declared in pyproject.toml, resolved in uv.lock,
and installed into uv's project environment.
From the repository root, synchronize the locked dependencies:
uv sync --lockedTo update dependencies after changing pyproject.toml, run:
uv lock
uv syncUse uv add when adding a dependency so that both pyproject.toml and
uv.lock remain consistent:
uv add package-name
uv add --dev development-package-nameRender the optimized website with:
uv run quarto render --profile optimizeThe optimize profile runs the pre-render and post-render minification steps
defined in _quarto-optimize.yml. The generated site is written to _site/.
For a development preview, use:
quarto previewThe preview command intentionally does not run the complete optimization pipeline. To serve an already-rendered site locally:
cd _site
python -m http.server 8000The GitHub Actions workflows use uv exclusively for Python setup:
.github/workflows/build.ymlrenders the site for pushes and pull requests..github/workflows/publish.ymlrenders and deploys the site to Cloudflare Workers on pushes tomaster.
Both workflows install uv, run uv sync --locked, and invoke Quarto with uv run.
The migration helper automates the Cloudflare setup and deployment stages:
uv run scripts/migrate-to-cloudflare.py \
--config scripts/migrate-configs/developerdevelopment.toml \
--stage checkRun the remaining stages only after reviewing the generated configuration and confirming the DNS changes:
uv run scripts/migrate-to-cloudflare.py \
--config scripts/migrate-configs/developerdevelopment.toml \
--stage allBefore running the migration, export CLOUDFLARE_API_TOKEN and
CLOUDFLARE_ACCOUNT_ID in the shell. The API token must have the permissions
documented in MIGRATE.md. Keep the Netlify site available until
the Cloudflare deployment and verification checks pass.
For another site, create a migration TOML file with its Worker name, apex
zone, GitHub repository, and render command. The optional hostnames setting
controls the domains to bind and defaults to the apex plus www; the optional
netlify_apex_ips setting lists old Netlify A-record addresses and defaults to
75.2.60.5. The script removes only recognized Netlify records and preserves
a DNS snapshot before making changes.
See the following files for more details:
- MIGRATE.md — Cloudflare migration plan and configuration
- RUNBOOK.md — migration checkpoints and verification commands
scripts/migrate-configs/developerdevelopment.toml— site-specific migration settingswrangler.toml— Cloudflare Worker static-assets configuration
_quarto.yml Main Quarto configuration
_quarto-optimize.yml Optimized build profile
blog/ Course blog posts
schedule/ Course schedule
scripts/minify-files.py CSS, HTML, and JavaScript minification
scripts/migrate-to-cloudflare.py
Cloudflare migration helper
pyproject.toml Project metadata and dependencies
uv.lock Locked dependency resolution
wrangler.toml Cloudflare Worker configuration
This repository contains educational course materials and supporting website code. Refer to the individual source files and linked projects for their applicable licenses and attribution requirements.