🌐 gdgica.com · 🖼️ Figma design
Static site for the GDG ICA community, built with Astro. All public content — events, speakers, team, sponsors, gallery — lives in the separate GDGXICA/gdg-ica-data repository and is pulled in at build time by the custom loaders in src/loaders/. CI clones that repo instead of fetching it over the CDN, so a build never picks up stale JSON.
Public pages: /, /events, /events/[slug], /team, /about, /sponsors, /volunteers, /gallery. There is also an authenticated admin panel under /admin/*, backed by an Express API on Cloud Functions that writes to the data repo through the GitHub API.
- Astro 7 — static site generator
- TailwindCSS 4 — styling
- React 19 — interactive islands only
- Firebase — Hosting, Auth, Firestore, Cloud Functions
Requires Node 22.15.0 and pnpm 10.11.0.
pnpm install
pnpm devThe dev server runs at http://localhost:4321.
| Command | Action |
|---|---|
pnpm dev |
Dev server at localhost:4321 |
pnpm build |
Production build into ./dist/ |
pnpm preview |
Preview the build |
pnpm lint |
Run ESLint |
pnpm format |
Format with Prettier |
pnpm test |
Unit tests (Vitest) |
pnpm test:functions |
Cloud Functions tests |
pnpm test:rules |
Firestore rules against the emulator |
pnpm test:all |
All three suites |
src/
├── components/ # Astro components; react/ holds the client-side islands
├── layouts/ # Page layouts
├── loaders/ # Content loaders for gdg-ica-data
├── pages/ # File-based routing
├── lib/ # Firebase client, auth, API wrapper, permissions
└── content.config.ts # Zod schemas for the collections
functions/ # Cloud Functions API
docs/ # Operational guides
Architecture notes, the admin permission model and the testing setup are documented in CLAUDE.md.
GitHub Actions (.github/workflows/deploy.yml) builds and deploys to Firebase on every push to main, and on a repository_dispatch from the data repo so content updates rebuild the site.
Branch off main, commit with Conventional Commits (feat:, fix:, docs:, style:, refactor:, test:, chore:), then open a pull request. PRs need at least one approval — keep them small and focused, and include screenshots for visual changes. Check the open issues and PRs first to avoid duplicate work.
Conventions: camelCase for variables and functions, PascalCase for components, Tailwind over custom CSS, no !important, no console.log in production code. Discuss new dependencies before adding them.
MIT — see LICENSE.md