Tighten the repo-state automation so canonical bot commits remain predictable while leaving main clean after each sync. Make the public catalog UI more honest by hiding dev-only sync, turning stars into explicit browser-local saves, aligning risk types, and removing hardcoded catalog counts. Add shared public asset URL helpers, risk suggestion plumbing, safer unpack/sync guards, and CI coverage gates so release and maintainer workflows catch drift earlier.
3.7 KiB
Antigravity Web App
This app is the static catalog and skill browser for antigravity-awesome-skills. It ships the generated registry, renders searchable skill detail pages, and publishes the public site to GitHub Pages.
What This App Does
- Loads the generated skill catalog and related metadata from tracked assets in
public/. - Renders home, category, bundle, and skill detail routes for the published library.
- Adds SEO metadata, sitemap-backed URLs, and static asset resolution for GitHub Pages.
- Supports a local-only "refresh skills" developer flow through the Vite dev server plugin.
Architecture
src/pages/contains top-level route screens such asHome.tsxandSkillDetail.tsx.src/context/holds catalog loading and shared app state.src/hooks/contains feature-specific client hooks such as star state and filters.src/utils/contains URL, SEO, and content helpers.public/contains generated catalog artifacts copied from the repo root as part of maintainer sync flows.
The app intentionally assumes a static hosting model in production. Anything that depends on /api/* is development-only unless it is backed by a real serverless or backend implementation.
Development
From the repo root:
npm run app:install
npm run app:dev
Or directly from this directory:
npm ci
npm run dev
Useful root-level commands:
npm run app:build
npm run sync:web-assets
Environment Variables
The app reads configuration from .env files in apps/web-app/.
VITE_SUPABASE_URLandVITE_SUPABASE_ANON_KEY: optional read access for read-only community save counts.VITE_ENABLE_SKILLS_SYNC=true: explicitly exposes the local maintainer-only sync button during development.VITE_SYNC_SKILLS_TOKEN: local development token accepted by the Vite refresh plugin.VITE_SITE_URL: optional override for canonical URL generation when testing non-default hosts.
Saving a skill is intentionally browser-local for now. The UI should not imply a shared write path until the project has a real backend contract for persistence, abuse controls, and deployment.
Deploy Model
Production deploys use GitHub Pages and publish the built dist/ output from this app. That means:
- production is static
- Vite
configureServerhooks are not available in production - any refresh or sync endpoint exposed by a dev plugin must be hidden or replaced by a real backend before being treated as a public feature
Maintainers should treat public/skills.json.backup, public/sitemap.xml, and other generated assets as derived artifacts synced from the repo root during release and hygiene workflows.
Catalog Data Flow
The high-level maintainer flow is:
- update skill sources under
skills/ - regenerate canonical registry artifacts from the repo root
- sync tracked web assets into
apps/web-app/public/ - build this app for Pages
npm run sync:repo-state and npm run sync:release-state are the safest entrypoints because they keep the root catalog and the web assets aligned.
Testing
From the repo root:
cd apps/web-app && npm run test
cd apps/web-app && npm run test:coverage
npm run test
The repo-level test suite also contains workflow and documentation guardrails outside src/, so changes to this app can fail tests in tools/scripts/tests/ even when the React code itself is untouched.
Troubleshooting
- If the app shows stale catalog data, run
npm run sync:web-assetsfrom the repo root and rebuild. - If a feature works in
npm run app:devbut not on GitHub Pages, check whether it depends on a dev-only Vite plugin or non-static runtime behavior. - If canonical URLs or asset links look wrong, inspect the shared path/base URL helpers before patching individual pages.