React + TypeScript frontend for deadtrees.earth and GeoLabel workflows (map visualization, correction editing, and audit UI).
- Frontend: https://github.com/Deadwood-ai/deadtrees-frontend
- Backend: https://github.com/Deadwood-ai/deadtrees-backend
- Upload service: https://github.com/Deadwood-ai/deadtrees-upload
- Live platform: https://deadtrees.earth
The frontend provides:
- high-performance map rendering with OpenLayers
- polygon editing tools (draw/delete/cut/merge/clip/undo)
- optional AI-assisted boundaries
- auditor review queue with approve/revert workflow
- React 18 + TypeScript + Vite
- OpenLayers for map rendering and interaction
- Ant Design for UI components
- TanStack Query for async state
- Supabase client for auth/data access
- Node.js 18+
- npm
npm install
npm run devBy default, Vite serves at http://localhost:5173.
npm run lint
npm run build
npm run previewThe frontend can deploy automatically to Firebase Hosting from GitHub Actions whenever main changes.
Workflow files:
.github/workflows/firebase-hosting-merge.yml.github/workflows/firebase-hosting-pull-request.yml
These workflows intentionally let Firebase's framework-aware Hosting deploy perform the Vite build. That matches local firebase deploy --only hosting behavior and avoids blocking deploys on the repo's current standalone TypeScript check failures from tsc && vite build.
Required GitHub repository secrets:
FIREBASE_SERVICE_ACCOUNT_DEADWOOD_D4A4BVITE_SUPABASE_URLVITE_SUPABASE_ANON_KEYVITE_SUPABASE_SENTINEL_PROCESSING_URLVITE_SUPABASE_SENTINEL_PROCESSING_ANON_KEYVITE_GEOPIFY_KEY
Optional GitHub repository secrets:
VITE_SAM_API_URLif you want to override the built-in defaultVITE_POSTHOG_PROJECT_KEYif PostHog should be enabled in production
The quickest way to provision the Firebase deploy credential is to run:
firebase init hosting:githubFirebase's official Hosting docs say this command creates the deploy service account, stores its JSON key as a GitHub secret, and writes the workflow files for you. In this repo it created the secret FIREBASE_SERVICE_ACCOUNT_DEADWOOD_D4A4B and the two Firebase Hosting workflow files above.
Create a .env.local file (or equivalent environment setup) and provide the values your deployment mode needs:
VITE_MODE=development
VITE_SUPABASE_URL=...
VITE_SUPABASE_ANON_KEY=...
# optional integrations
VITE_SAM_API_URL=...
VITE_POSTHOG_PROJECT_KEY=...
VITE_GEOPIFY_KEY=...
VITE_SUPABASE_SENTINEL_PROCESSING_URL=...
VITE_SUPABASE_SENTINEL_PROCESSING_ANON_KEY=...src/components/DeadwoodMap/: GeoLabel editing map and correction toolingsrc/pages/DatasetAudit.tsx: auditor review flowssrc/hooks/: data fetching and map-related behavior hookssrc/config.ts: runtime configuration and environment-driven setup
- Full GeoLabel pilot roadmap: https://github.com/Deadwood-ai/deadtrees-backend/blob/main/docs/projects/geolabel/roadmap-report.md
- Backend architecture and processing docs: https://github.com/Deadwood-ai/deadtrees-backend
MIT (see LICENSE).


