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