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