The website for SubZero Robotics, FIRST Robotics Competition Team 5690 from Esko, Minnesota.
- Live site: https://gogan999.github.io/subzero-web-site/
- Built with: Astro, a fast static-site generator. There's no server or database to maintain.
- Hosted on: GitHub Pages (free). Every push to
mainrebuilds and publishes the site automatically.
Most updates are just editing a text file. You don't need to know how to code.
| I want to… | Edit this |
|---|---|
| Post news | Add a file to src/content/news/ |
| Add a photo album | Add photos to src/assets/gallery/<album>/ + a file in src/content/albums/ |
| Add a new season / results / awards | src/data/seasons.yaml |
| Update sponsors | src/data/sponsors.yaml + logos in src/assets/sponsors/ |
| Add a robot | src/data/robots.yaml + photo in src/assets/robots/ |
| Update coaches & mentors | src/data/people.yaml |
| Change emails, address, social links | src/data/site.ts |
| Change departments or core values | src/data/subteams.ts |
| Change page text | src/pages/*.astro (e.g. about.astro) |
You can make all of these edits right on GitHub.com: open the file, click the ✏️ pencil, edit, then Commit changes. The site updates a minute or two later.
-
Create a new file in
src/content/news/namedYYYY-MM-DD-short-title.md, for example2027-03-08-lake-superior-recap.md. -
Paste this at the top and fill it in:
--- title: "Lake Superior Regional Recap" date: 2027-03-08 summary: "One or two sentences that show up on the news cards." cover: ../../assets/news/lake-superior-2027.jpg # optional coverAlt: "Describe the photo for screen readers" # needed if you use a cover tags: ["2027 Season", "Competition"] --- Write the article here. Use **bold**, *italics*, ## headings and [links](/history/). 
-
Put any photos in
src/assets/news/.
The URL drops the date: 2027-03-08-lake-superior-recap.md becomes /news/lake-superior-recap/. Links to other pages on the site can start with / (like /gallery/), and the site fixes them up automatically. Add draft: true to hide a post until it's ready.
-
Download the photos you want from Drive. Pick the best 10–20: quality beats quantity.
-
Make a folder
src/assets/gallery/2027-lake-superior-regional/and put the photos in it. Photos show up in file-name order, so01.jpg,02.jpg, … works well. -
Shrink them so the repo stays small:
npm run images(or ask someone with Node installed). This resizes big phone photos, rotates them upright, and strips GPS location data. -
Create
src/content/albums/2027-lake-superior-regional.yaml. The file name must match the folder name:title: "2027 Lake Superior Regional" date: 2027-03-06 description: "One or two sentences about the event." cover: 03.jpg # optional, defaults to the first photo captions: # optional 01.jpg: "Our drive team before the finals" 05.jpg: "Celebrating the Creativity Award"
⚠️ Phone photos in HEIC format need to be converted to JPG first. Google Drive's download usually does this for you.
Open src/data/seasons.yaml, copy the top entry, paste it above, and update it. Official results are at https://frc-events.firstinspires.org/<year>/team/5690. The home page stats (seasons, awards, regional titles, Championship trips) and the "Latest season" card update automatically.
Set highlight: true for a big season (a trophy marker), and album: <album-id> to link a photo album.
Edit src/data/sponsors.yaml. Each sponsor can have:
| Field | What it does |
|---|---|
status |
current (shown on the sponsor wall) or past (thank-you list) |
tier |
dynasty ($5,000+), diamond ($2,500+), platinum ($1,000+), gold ($500+), silver (up to $499). Bigger tiers are shown bigger and first. Leave it out for in-kind partners. |
logo |
an image file in src/assets/sponsors/ (e.g. gene-haas.png) |
display |
logo, name or both (default: logo if there is one, otherwise the name) |
size |
xl, lg, md, sm or xs to override the size the tier gives |
url |
optional link to their website |
Sponsor amounts are never shown on the site, only the tier names.
Edit src/data/robots.yaml (newest first) and put a photo in src/assets/robots/ named after the year (e.g. 2027.jpg). Each robot can list a few short specs, a binder link and a video link. Awards are pulled in automatically from seasons.yaml.
You need Node.js 22 or newer.
npm install # first time only
npm run dev # live preview at http://localhost:4321/subzero-web-site/
npm run check # check for mistakes (bad dates, missing fields, broken images, ...)
npm run build # build the final site into dist/
npm run images # shrink large photos in src/assetsIf you make a mistake in a data file (like a misspelled field or a missing image), npm run check and the build will tell you exactly which file and line.
The site deploys with GitHub Actions (.github/workflows/deploy.yml) whenever main changes.
One-time setup: in the GitHub repo, go to Settings → Pages → Build and deployment → Source and choose GitHub Actions.
Pull requests are checked automatically (.github/workflows/check.yml), so you'll know a change builds before you merge it.
If the team gets a domain like subzerorobotics.org:
- In
astro.config.mjs, setSITE = 'https://subzerorobotics.org'andBASE = '/'. - Create
public/CNAMEcontaining justsubzerorobotics.org. - In Settings → Pages, enter the custom domain, then point the domain's DNS at GitHub Pages (instructions).
src/
assets/ images: brand/, gallery/<album>/, news/, sponsors/
components/ reusable pieces (header, footer, cards, icons)
content/ news posts (Markdown) and photo albums (YAML)
data/ seasons, sponsors, people, site info
layouts/ page wrapper (SEO tags, header, footer)
lib/ small helpers
pages/ one file per page; folders become URLs
styles/ global.css (colors, fonts, spacing)
public/ files copied as-is (favicons, social share image)
scripts/ optimize-images.mjs
Colors, fonts and spacing are CSS variables at the top of src/styles/global.css. Light and dark mode follow each visitor's device setting.
FIRST® and FIRST® Robotics Competition are registered trademarks of FIRST.