Skip to content

Repository files navigation

PDAO - Postech DAO

https://dao.postech.ac.kr

Setup

pnpm install

Development

pnpm build                         # Build site into dist/
miniserve --index index.html dist  # Serve locally

Commands

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/CD

  • 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

Architecture

Static site with build-time data fetching. No runtime external API calls.

Contribution Archive sync

pnpm run prepare-data combines the following public Google Sheets CSV sources:

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)

Contributors

Languages