Rastrum

Features

What v1.0 ships today: identification cascade, observation logging, social and curation, data export, offline PWA, and privacy.

What Rastrum ships today

v0.1 → v1.2: 158 items shipped to production across 33 module specs. Every row maps to a module with a dedicated spec and code on main.

01 Identification (cascade-driven)

A single input (photo, audio, video, evidence) runs through a cascade that prioritises free plugins first, then on-device, then BYO-key APIs. First result with confidence ≥ 0.7 wins.

PlantNet

Cloud · free (500/day quota) · 78K plant species

Claude Haiku 4.5

Cloud · BYO key · multi-taxon vision fallback

BirdNET-Lite (audio)

On-device · CC BY-NC-SA · ~50 MB · ~6,000 birds

EfficientNet-Lite0

On-device · MIT · ~18 MB INT8 · ImageNet base

Phi-3.5-vision (WebLLM)

On-device · ~2.4 GB · low-confidence fallback

MegaDetector v5a

On-device · ~134 MB INT8 ONNX · camera-trap pre-filter (MIT)

/identify

Quick no-save photo probe

/chat

Photo + audio attachments → cascade → Llama-3.2-1B interprets

02 Observation logging

Geolocated capture with EXIF auto-fill, multi-media support, and coordinate obscuration for sensitive species.

/observe

Two-pass GPS + EXIF + sensitive-species obscuration

Multi-image

Gallery with primary + remove

Audio

MediaRecorder ≤30 s

Video

≤30 s (H.265/AV1)

In-app camera

getUserMedia + file-input fallback

Map location picker

Drag-pin + search + reverse geocode

My observations

/profile/observations — thumbnail history

Batch EXIF importer

/profile/import — multi-photo + per-row review

Camera-trap batch

/profile/import/camera-trap — single GPS + per-photo EXIF

03 Social + curation

No-dark-patterns social layer: activity feed, follows, comments, watchlists, opt-in streaks, and expert-weighted consensus.

Follows + comments + watchlists

Astro components: FollowButton, Comments, WatchlistView

Streaks (opt-in)

Daily grace window, nightly recompute

Discovery badges

39 seed badges, nightly evaluator (5 cat × 4 tiers)

Expert application UI

ExpertApplyView + 3× weighted consensus

Activity feed

Server-side triggers + 12 event kinds

Bell-icon unread badge

Avatar-dropdown badge (99+ overflow)

04 Data + export

Your work, your data. Export Darwin Core, publish to GBIF, or wire AI agents to the MCP server.

Darwin Core CSV

Presets: DwC, SNIB, CONANP

Darwin Core Archive ZIP

For GBIF IPT (export-dwca Edge Function)

Personal API tokens

rst_* with scopes, SHA-256 hashed

REST API

/functions/v1/api/{observe,identify,observations,export}

MCP server

/functions/v1/mcp for Claude Desktop, Cursor, VS Code, Copilot

05 Offline + PWA

Works in the field. Local outbox, on-device models, offline pmtiles maps, and one-tap PWA install.

Install button

Android Chrome direct · iOS Safari hint

Service worker

Network-first HTML, cache-first hashed assets

Dexie outbox

IndexedDB for offline observations

pmtiles MX

~48 MB offline-map archive

On-device model cache

BirdNET, EfficientNet, Phi-vision in IndexedDB

06 Privacy + governance

BYO API keys never leave the browser. On-device AI never phones home. Sensitive species obscured. CARE/FPIC posture for indigenous data.

NOM-059 / CITES obscuration

RLS-driven obscure_level

Per-record license

CC-BY default, BY-NC, CC0

CARE / FPIC

Indigenous-data care posture

BYO keys client-side only

localStorage, never server-persisted

Network-free on-device AI

BirdNET, EfficientNet, Phi-vision, Llama

07 Internationalisation

EN/ES from day one with structural parity. 11 locale-paired routes with per-language slugs. Ready for Zapoteco/Mixteco when FPIC lands.

Full EN/ES parity

Every string lives in src/i18n/{en,es}.json

11 locale-paired routes

/en/observe ↔ /es/observar, /en/profile ↔ /es/perfil, …

Shared *View components

Shared body between locales

08 Expert curation + community validation

Module 22: validation queue, multi-user suggestions, and 3×-weighted expert consensus. Research-grade unlocks when two identifiers agree.

/validate queue

validation_queue view + 3 RLS policies

Suggest modal

"Suggest ID" CTA on /share/obs/

Expert application

/profile/expert-apply + 3× weight

Research-grade chip

Shown on explore + detail surfaces

09 Social graph (M26)

Asymmetric follows, opt-in close-collaborator tier, per-target reactions, read-symmetric blocks, reports queue, and in-app inbox with 90-day prune cron.

Follow / unfollow + blocks

follow Edge Function, rate-limited

Per-target reactions

observation/photo/identification

/inbox in-app inbox

Bell badge + 90-day prune cron

ReportDialog + ConfirmDialog

Global reusable modals

Reaction strip on /share/obs/

Self-hydrates via rastrum:reactions-ready

10 Community discovery (M28)

/community/observers/ page with composable chips (sort, country, taxon, experts-only, nearby). Privacy at the SQL layer — the centroid view only GRANTs to authenticated users.

Composable filter chips

sort / country / taxon / expert / nearby

Country picker on Profile

Opt-out toggle + auto/user badge

Auth-only centroid view

community_observers_with_centroid

Nightly recompute cron

recompute-user-stats EF at 08:00 UTC

11 Projects + CLI batch + camera stations (M29-M31)

CONANP/DRFSIPS research workflow: ANP polygons that auto-tag observations, a Node CLI for 500–2000 photos per drop, and camera stations with active periods for RAI indices.

/projects/ ANP polygons

Polygon auto-tags observations

rastrum-import CLI

Recursive walker + EXIF + resumable

POST /api/upload-url

R2 presigned URL with scoped token

Camera stations schema

Active periods + station_trap_nights()

Sampling effort indices

RAI / detection per 100 trap-nights

12 Multi-provider vision + sponsorships (M27/M32)

Any user can share their Anthropic credential with specific beneficiaries. Platform pool as fallback. Six providers: Anthropic, Bedrock, OpenAI, Azure, Gemini, Vertex AI.

Personal sponsorships

/profile/sponsoring + /sponsored-by/

Platform-wide pool

Atomic consume_pool_slot RPC

6 vision providers

Anthropic, Bedrock, OpenAI, Azure, Gemini, Vertex

Per-sponsor model

preferred_model on credential

Caps + auto-pause

Resend email at 80%/100%

docs/sponsorships/ page

Full mechanics, EN+ES

13 Observation detail + owner edit

Two-column desktop / stacked mobile layout on /share/obs/. Manage tabs with material-edit triggers, atomic photo delete via Edge Function, native lightbox with keyboard/swipe/share.

Details / Location / Photos tabs

ObsManagePanel.astro

Material-edit trigger

> 1 km, > 24 h, primary taxon

Native lightbox

Keyboard + swipe + share (~106 LOC)

Atomic photo delete

delete-photo EF + delete_photo_atomic RPC

"Edited after IDs" badge

last_material_edit_at-driven

14 Admin console (16 PRs)

36 Edge Function handlers, 8 crons, 7 entity browsers, time-bounded role grants, two-person rule, HMAC webhooks with replay protection, hourly anomalies, real moderator trust score.

/console/ + 36 handlers

Dispatcher with atomic audit log

7 entity browsers

Identifications, Notifications, Media, Follows, Watchlists, Projects, Taxon changes

Health + errors + anomalies

12-week sparklines + bulk ack

HMAC-signed webhooks

_meta nonce + reconcile cron

Time-bounded role grants

auto_revoke_expired_roles() cron

Two-person rule

enforce_two_person_irreversible

Source of truth: docs/progress.json (v0.1 → v1.0 done items), src/lib/identifiers/index.ts (registered plugins), and supabase/functions/ (deployed Edge Functions).

Report an issue

Show diagnostics

Environment

 

Console errors

 

Failed requests