Contributing
How to contribute code, data, translations, expert validation, and PITs.
Rastrum is solo-developed but open-source and community-driven. Code, observations, expert validation, translations, and docs are all welcome — pick the lane that fits.
# Ways to contribute
Code
- Frontend (Astro + Tailwind): components, identifier UX, offline outbox, MapLibre interactions
- Backend (Supabase Edge Functions, Deno): identifier cascade, enrichment, exports, MCP server, admin dispatcher
- On-device ML: WebLLM tuning, ONNX model packaging, regional species packs
- CLI batch import (Node 20+): camera-trap memory cards, EXIF parity with the PWA
- PWA / Capacitor: service worker, install flow, iOS/Android shell improvements
Data & species curation
- Submit field observations from Mexico / LATAM
- Validate AI identifications as a community member or expert
- Contribute regional species checklists (Darwin Core / SNIB / CONANP presets)
- Add morphometric fields for ecological evidence (tracks, scat, nests, calls)
Translations
- Spanish ↔ English parity in src/i18n/{en,es}.json
- Zapoteco, Mixteco, Náhuatl, Maya, Tsotsil/Tseltal (priority — pilot pending)
- Partner with INALI, UNAM linguistics, or CIESAS for Indigenous languages
Expert validation
- Apply for an expert badge in your taxonomic group (ornithology, botany, mycology, herpetology, entomology…)
- Review the validation queue scoped to your taxa
- Contribute regional disambiguation guides and identification keys
Docs & runbooks
- Module specs under docs/specs/modules/
- Operator runbooks under docs/runbooks/
- Doc pages under src/pages/{en,es}/docs/ — must stay paired EN/ES
# Development setup
The repo is solo-developed on macOS but the toolchain runs anywhere with Node 20+ and a Postgres-capable Supabase project. make help lists every workflow.
git clone https://github.com/ArtemioPadilla/rastrum.git
cd rastrum
make install # npm ci
make dev # astro dev — http://localhost:4321
make test # vitest run
make typecheck # tsc --noEmit
make build # static build into dist/ Copy .env.example to .env.local and fill the keys you need:
PUBLIC_SUPABASE_URL=
PUBLIC_SUPABASE_ANON_KEY=
PLANTNET_API_KEY= # optional, for the PlantNet identifier # Contribution process
- 1
Fork & branch
Branch off main; one logical change per PR.
- 2
Sign your commits (DCO)
Use git commit -s. We use the Developer Certificate of Origin, not a CLA — no paperwork.
- 3
Pre-PR checks pass
make typecheck & make test & make build — all green, EN/ES pages paired.
- 4
Open the PR
Clear description, linked issue (if any), screenshots for UI work. CI must be green before review.
- 5
Review
Aim for a maintainer reply within 7 days. Schema changes hit an extra pre-merge gate that applies the schema twice in a Postgres+PostGIS service container.
DCO sign-off
Append Signed-off-by: Your Name <your_email> to every commit message (git commit -s does this for you). By signing, you certify you wrote the code or have the right to submit it under the project's license.
# License
| Component | License |
|---|---|
| Client code (PWA, CLI, components) | MIT |
| Server / Edge Functions | AGPL-3.0 |
| Documentation | CC BY 4.0 |
| Per-observation | CC BY / CC BY-NC / CC0 (chosen by observer) |
| Taxonomic data | CC0 |
# Where to ask
- GitHub Discussions: feature proposals, architectural decisions, "is this in scope?"
- GitHub Issues: bug reports, concrete feature requests, regressions
- Module specs: docs/specs/modules/00-index.md on GitHub catalogues the ~34 implementation specs