Rastrum

Funcionalidades

Lo que entrega v1.0 hoy: cascada de identificación, registro de observaciones, social y curación, exportación de datos, PWA offline y privacidad.

Lo que entrega Rastrum hoy

v0.1 → v1.2: 158 ítems hechos en producción a través de 33 specs de módulo. Cada fila se mapea a un módulo con spec dedicado y código en main.

01 Identificación (cascada por costo de licencia)

Una sola entrada (foto, audio, video, evidencia) corre por una cascada que prioriza plugins gratuitos, luego on-device, y finalmente APIs con BYO key. El primer resultado con confianza ≥ 0.7 gana.

PlantNet

Cloud · gratis (cuota 500/día) · 78K plantas

Claude Haiku 4.5

Cloud · BYO key · visión multi-taxón

BirdNET-Lite (audio)

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

EfficientNet-Lite0

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

Phi-3.5-vision (WebLLM)

On-device · ~2.4 GB · respaldo de baja confianza

MegaDetector v5a

On-device · ~134 MB INT8 ONNX · pre-filtra cámara trampa (MIT)

/identify

Sondeo rápido sin guardar (foto)

/chat

Foto + audio → cascada → Llama-3.2-1B interpreta

02 Registro de observaciones

Captura geolocalizada con auto-relleno EXIF, multi-medios, y oscurecimiento de coordenadas para especies sensibles.

/observe

GPS de dos pasos + EXIF + oscurecimiento NOM-059

Multi-imagen

Galería con primary + remove

Audio

MediaRecorder ≤30 s

Video

≤30 s (H.265/AV1)

Cámara en app

getUserMedia + fallback a input file

Selector de mapa

Drag-pin + búsqueda + reverse geocode

Mis observaciones

/perfil/observaciones — historial con miniaturas

Importador EXIF batch

/perfil/importar — multi-foto + revisión por fila

Cámara trampa batch

/perfil/importar/camara-trampa — GPS único + EXIF por foto

03 Social + curación

Redes sociales sin patrones oscuros: feed de actividad, follows, comentarios, listas de seguimiento, rachas opt-in y consenso ponderado por experto.

Follows + comentarios + watchlists

Componentes Astro: FollowButton, Comments, WatchlistView

Rachas (opt-in)

Ventana de gracia diaria, recompute nocturno

Insignias de descubrimiento

39 semilla, evaluador nocturno (5 cat × 4 tiers)

UI de aplicación experta

ExpertApplyView + 3× peso de consenso

Feed de actividad

Triggers de servidor + 12 tipos de evento

Badge de campana

Contador en dropdown del avatar (99+ overflow)

04 Datos + exportación

Tu trabajo, tus datos. Exporta en Darwin Core, publica a GBIF, o conecta agentes de IA con el servidor MCP.

Darwin Core CSV

Presets: DwC, SNIB, CONANP

Darwin Core Archive ZIP

Para GBIF IPT (export-dwca Edge Function)

Tokens API personales

rst_* con scopes, hash SHA-256

REST API

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

MCP server

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

05 Offline + PWA

Funciona en el campo. Outbox local, modelos en dispositivo, mapas offline pmtiles e instalación PWA en una sola pantalla.

Botón de instalación

Android Chrome directo · iOS Safari hint

Service worker

Network-first HTML, cache-first assets

Dexie outbox

IndexedDB para observaciones offline

pmtiles MX

~48 MB para mapa offline

Modelos en caché

BirdNET, EfficientNet, Phi-vision en IndexedDB

06 Privacidad + gobernanza

BYO API keys nunca dejan el navegador. IA on-device nunca envía datos. Especies sensibles oscurecidas. CARE/FPIC para datos indígenas.

Oscurecimiento NOM-059 / CITES

RLS sobre obscure_level

Licencia por observación

CC-BY (default), BY-NC, CC0

CARE / FPIC

Postura para datos indígenas

BYO keys solo en cliente

localStorage, nunca en servidor

IA on-device sin red

BirdNET, EfficientNet, Phi-vision, Llama

07 Internacionalización

EN/ES desde el día uno con paridad estructural. 11 pares de rutas con slugs por idioma. Listo para Zapoteco/Mixteco cuando aterrice el FPIC.

Paridad EN/ES total

Cada string vive en src/i18n/{en,es}.json

11 pares de rutas

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

Componentes *View

Cuerpo compartido entre locales

08 Curación experta + validación comunitaria

Módulo 22: cola de validación, sugerencias multi-usuario, y consenso 3× ponderado por experto. Las observaciones grado-investigación se desbloquean cuando dos identifiers coinciden.

Cola /validate

Vista validation_queue + 3 RLS policies

Modal de sugerencia

CTA "Sugerir ID" en /share/obs/

Aplicación experta

/profile/expert-apply + 3× peso

Chip grado-investigación

Visible en explorar + detalle

09 Grafo social (M26)

Follows asimétricos, tier opt-in de colaborador cercano, reacciones por target, bloqueos simétricos en lectura, cola de reportes y bandeja in-app con poda 90 días.

Follow / unfollow + bloqueos

Edge Function follow, rate-limited

Reacciones por target

observation/photo/identification

Bandeja /inbox

Campana con badge y poda 90 días

ReportDialog + ConfirmDialog

Modales globales reutilizables

Strip de reacciones en /share/obs/

Auto-hidrata vía rastrum:reactions-ready

10 Descubrimiento comunitario (M28)

Página /community/observers/ con chips componibles (orden, país, taxón, sólo expertos, cercanos). Privacidad al nivel SQL: la vista con centroide solo otorga GRANT a authenticated.

Chips de filtro componibles

orden / país / taxón / experto / cercano

Selector de país en perfil

Toggle de opt-out + badge auto/user

Centroide solo autenticado

community_observers_with_centroid

Recompute nocturno

recompute-user-stats EF, 08:00 UTC

11 Proyectos + CLI batch + estaciones cámara (M29-M31)

Workflow de investigación CONANP/DRFSIPS: polígonos ANP que auto-etiquetan observaciones, CLI Node para 500–2000 fotos, estaciones cámara con períodos activos para índices RAI.

Proyectos /projects/

Polígono auto-etiqueta observaciones

CLI rastrum-import

Walker recursivo + EXIF + reanudable

POST /api/upload-url

URL R2 prefirmada con scope token

Estaciones cámara

Períodos activos + station_trap_nights()

Índices de muestreo

RAI / detección por 100 trap-nights

12 Visión multi-provider + sponsorships (M27/M32)

Cualquier user comparte su credencial Anthropic con beneficiaries específicos. Pool plataforma como fallback. Seis providers: Anthropic, Bedrock, OpenAI, Azure, Gemini, Vertex.

Sponsorships personales

/profile/sponsoring + /sponsored-by/

Pool plataforma

consume_pool_slot RPC atómico

6 providers de visión

Anthropic, Bedrock, OpenAI, Azure, Gemini, Vertex

Modelo por sponsor

preferred_model en credencial

Caps + auto-pause

Email Resend al 80%/100%

Página docs/sponsorships/

Mecánica completa EN+ES

13 Detalle de observación + edición de dueño

Layout dos columnas / apilado móvil en /share/obs/. Tabs de gestión con triggers material-edit, eliminación atómica de fotos vía Edge Function, lightbox nativo con teclado/swipe/share.

Tabs Detalles / Ubicación / Fotos

ObsManagePanel.astro

Trigger material-edit

> 1 km, > 24 h, ID primario

Lightbox nativo

Teclado + swipe + share (~106 LOC)

Borrado atómico de foto

delete-photo EF + delete_photo_atomic RPC

Badge "Editado tras IDs"

last_material_edit_at en triggers

14 Consola admin (16 PRs)

36 handlers Edge Function, 8 crons, 7 navegadores de entidad, roles con expiración, regla de dos personas, webhooks HMAC con replay protection, anomalías horarias, score de moderador real.

/console/ con 36 handlers

Dispatcher con audit log atómico

7 navegadores de entidad

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

Salud + errores + anomalías

Sparklines 12 sem + ack masivo

Webhooks HMAC firmados

_meta nonce + reconcile cron

Roles con expiración

Cron auto_revoke_expired_roles()

Regla de dos personas

enforce_two_person_irreversible

Fuente de la verdad: docs/progress.json (v0.1 → v1.0 ítems hechos), src/lib/identifiers/index.ts (plugins registrados) y supabase/functions/ (Edge Functions desplegadas).

Reportar un problema

Mostrar diagnósticos

Entorno

 

Errores de consola

 

Peticiones fallidas