Redirecting to RocketPy homepage...
-- The About page is being rebuilt. If you are not redirected, continue to - rocketpy.org. -
-diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 4b3d428..af4c566 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -25,7 +25,7 @@ This is a **static marketing website** for RocketPy (rocketpy.org) - an open-sou ### Image Assets - Background images are referenced in CSS using optimized assets (e.g., `url("../images/hero-background.png")`) -- Section illustrations use descriptive filenames (e.g., `hero-logo-illustration.png`, `community-visual.png`) +- Section illustrations are scalable SVGs with descriptive filenames (e.g., `hero-trajectory.svg`, `community-network.svg`) - Favicon and logo files are in `images/` directory ## Development Workflow @@ -36,6 +36,15 @@ npm run format # Runs Prettier on all HTML, CSS, JS files ``` Only dev dependency is Prettier (v3.3.3). Always format before committing. +### Local Preview +```bash +make start # serve the source files at http://127.0.0.1:8000 (override with PORT=) +make status # check whether the dev server is running +make stop # stop the dev server +make build # build the minified site into dist/ +``` +The `make` targets wrap `scripts/devserver.py`, a cross-platform (Windows/macOS/Linux) manager for a detached `python -m http.server`. Run `make help` to list all targets. + ### Deployment - **Automatic deployment** via GitHub Actions (`.github/workflows/static.yml`) - Triggers on push to `master` branch diff --git a/.gitignore b/.gitignore index 22e8474..3334be8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ node_modules/ # Build output dist/ +# Local dev server +.devserver.pid + # OS files .DS_Store Thumbs.db diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..62397b6 --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +# RocketPy site - local dev helpers. +# Run `make help` to list the available targets. + +PORT ?= 8000 +HOST ?= 127.0.0.1 +export PORT HOST + +.PHONY: help start stop restart status build serve-dist format + +help: + @echo Targets: + @echo make start - start the local dev server on the source files + @echo make stop - stop the dev server + @echo make restart - restart the dev server + @echo make status - show whether the server is running + @echo make build - build the minified site into dist/ + @echo make serve-dist - build then preview the production dist/ output + @echo make format - run prettier on html/css/js + @echo Override the port with e.g. make start PORT=3000 + +start: + @python scripts/devserver.py start + +stop: + @python scripts/devserver.py stop + +restart: + @python scripts/devserver.py restart + +status: + @python scripts/devserver.py status + +build: + @npm run build + +serve-dist: build + @python scripts/devserver.py stop + @python -m http.server $(PORT) --directory dist --bind $(HOST) + +format: + @npm run format diff --git a/about.html b/about.html index b022149..eefe8ba 100644 --- a/about.html +++ b/about.html @@ -3,15 +3,15 @@
-- The About page is being rebuilt. If you are not redirected, continue to - rocketpy.org. -
-${p.bio}
+ + `; + grid.appendChild(card); + }); + } + + function renderContributors() { + const grid = document.getElementById("contribGrid"); + if (!grid) return; + TEAM.gallery.forEach((p) => { + const cell = document.createElement(p.handle ? "a" : "div"); + cell.className = "contrib-cell"; + if (p.handle) { + cell.href = `https://github.com/${p.handle}`; + cell.target = "_blank"; + cell.rel = "noopener noreferrer"; + } + cell.title = `${p.name}${p.commits ? " — " + p.commits + " commits" : ""}`; + cell.innerHTML = ` + ${avatarMarkup(p, "contrib-avatar")} + ${p.name} + `; + grid.appendChild(cell); + }); + } + + function renderStats() { + const people = TEAM.featured.length + TEAM.gallery.length; + const el = document.getElementById("statPeople"); + if (el) el.textContent = people + "+"; + } + + renderFeatured("foundersGrid", "founder"); + renderFeatured("coreGrid", "core"); + renderContributors(); + renderStats(); +