Rastrum

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. 1

    Fork & branch

    Branch off main; one logical change per PR.

  2. 2

    Sign your commits (DCO)

    Use git commit -s. We use the Developer Certificate of Origin, not a CLA — no paperwork.

  3. 3

    Pre-PR checks pass

    make typecheck & make test & make build — all green, EN/ES pages paired.

  4. 4

    Open the PR

    Clear description, linked issue (if any), screenshots for UI work. CI must be green before review.

  5. 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

Report an issue

Show diagnostics

Environment

 

Console errors

 

Failed requests