This is a personal website for Sumin Byeon, built as a static site with Astro. The live site is published with GitHub Pages from this repository (github.com/suminb/web): branch docs, folder /docs.
Content sources (YAML/Markdown under data/, read at build time):
data/experiences.ymlplus long-form markdown (data/projects/*.md→/projects/{slug}.html, other published bodies →/experience/{slug}.html)data/experience_summary.md— résumé-style Experience page (/experience.html)data/coding_expedition.md— copy for Coding Expedition (/coding-expedition.html)data/projects.yml— single catalog: home/showcase rows (optionalfeatured,workplace,cta,experience_slug,url) and archive rows (archived: true, requiredyear) for the Archive grid and the combined tag list on/projects.htmldata/talks.yml— Talks highlights on the home page and full list on/talks.html
public/ is copied into the build as-is (e.g. public/.nojekyll so GitHub Pages does not run Jekyll and skip /_astro/ assets, public/favicon.svg, public/static/).
- Node.js 18+ (for Astro 5)
- Optional:
PUBLIC_GOOGLE_MAPS_API_KEYat build time for the Coding Expedition map (/coding-expedition.html)
npm install
npm run devnpm run buildOutput goes to docs/ (outDir in astro.config.mjs). That directory is listed in .gitignore on main so builds are not committed with source.
Preview the production build locally:
npm run previewTrip markers for the Coding Expedition map load from public/static/locations.js (GeoJSON). Replace or regenerate that file if you use a separate export pipeline.
From the repository root (with origin pointing at this repo):
./publish.shThe script:
- Runs
npm ciandnpm run build - Copies
CNAMEinto the build output when present (custom domain) - Stages the build under a
docs/directory in a temporary tree and force-pushes that tree tooriginas branchdocs
On GitHub: Settings → Pages → Build and deployment — source branch docs, folder /docs. The branch tree is a top-level docs/ directory (with index.html, _astro/, etc. inside it); GitHub serves that folder as the site root at your Pages URL.
Each deploy replaces the tip of docs with a fresh commit (unrelated history to main is normal for this flow).
- Set
siteinastro.config.mjsto your real origin (e.g.https://shortbread.io) for correct canonical URLs and sitemaps. CNAMEin the repo root is copied into the build before publish when you use a custom domain on GitHub Pages.
The previous Flask app, web import-gspread, and requirements.txt have been removed. If you need to regenerate locations.js from Google Sheets, reintroduce a small script or use git history.