pnpm installpnpm build # Build site into dist/
miniserve --index index.html dist # Serve locally| Command | Description |
|---|---|
pnpm build |
Full build: copy sources + vendor + fonts + fetch data → dist/ |
pnpm fetch-data |
Fetch Google Sheets + Medium RSS → dist/assets/data/ |
pnpm lint |
Check lint + format (no changes) |
pnpm lint:fix |
Auto-fix lint + format issues |
pnpm format |
Format all files |
pnpm ci |
CI mode lint check (exits non-zero on violations) |
- CI (
.github/workflows/ci.yml): PR/push → Biome lint + format check - Build & Deploy (
.github/workflows/build-deploy.yml): push to main + every 6 hours (cron) → build → deploy to GitHub Pages
Static site with build-time data fetching. No runtime external API calls.
pnpm run prepare-data combines the following public Google Sheets CSV sources:
- PDAO 활동 이력 전체 수합, tab
gid=0: historical activity records. - 2026-2 Activity Tracker,
External Projects & Awards: activities displayed under2026 H2.
Both sources must remain readable without Google login for scheduled builds. Keep the tracker’s ID, Counts, and 활동1 headers; Counts must equal the number of nonempty activity cells in each member row. Members without activities are omitted, and Discord IDs are optional. Activity text follows Role: description.
The fetch script validates both sources before replacing static/assets/data/archive.json. If either source fails or has invalid data, it logs the error and retains the existing valid archive (or restores a valid archive from build/assets/data/). With no valid cache, the build fails. Medium RSS refreshes independently. The existing six-hour deployment schedule refreshes these sources; changes appear after a successful deployment. Profile-card biographies are maintained separately in src/lib/data/profile.ts.
Source (HTML/CSS/JS)
+ pnpm vendor libs (i18next, Three.js, Roboto fonts)
+ fetched data (Google Sheets CSV, Medium RSS)
→ dist/ (deployed to GitHub Pages)