Rastrum

Tareas detalladas

Desglose por ítem del roadmap. Sub-tareas con estado y referencias a specs.

Actualizado: 2026-04-26 · Ver roadmap

✓ Hecho ~ En curso ○ Pendiente ! Bloqueado

v0.1 Alpha MVP (online-first) Lanzado

astro-skeleton Esqueleto Astro + Tailwind + i18n
6/6

subtareas

Proyecto Astro 5 con output: 'static'
Tailwind 3 + integración @astrojs/tailwind
Locales EN/ES vía astro/i18n + prefixDefaultLocale
Shells compartidos BaseLayout + DocLayout
Header + Footer con toggle de tema, switcher de idioma y menú móvil
Sitemap (@astrojs/sitemap)
supabase-schema Esquema Supabase con PostGIS + RLS

02-observation.md · 05-map.md · 06-darwin-core.md · 07-licensing.md

8/8

subtareas

6 tablas principales
Columnas geography PostGIS + índices GIST
RLS dueño + lectura pública + credentialed
3 triggers
helper obscure_point() + enum obscure_level
Idempotente — reaplicable con make db-apply
Bucket de storage 'media' + políticas
Permisos de rol (anon SELECT, authenticated CRUD)
auth-magic-link Auth con enlace mágico + modo invitado

04-auth.md

6/7

subtareas

Cliente singleton supabase.ts
Helpers en auth.ts
Páginas de sign-in en EN y ES
Callback maneja flujos PKCE e implicit
Dropdown de avatar en Header con onAuthStateChange
Unión discriminada ObserverRef
Nudge tras la 3ra observación de invitado
auth-multi OAuth Google + GitHub, código OTP, passkey, cerrar sesión en todos los dispositivos

04-auth.md

6/7

subtareas

signInWithGoogle / signInWithGitHub
Flujo de código OTP (verifyOtp)
Passkey enrol + verify
Detección WebAuthn
signOutEverywhere() revocación global
Componente SignInForm compartido
!
Operador: habilitar toggle MFA WebAuthn

Bloqueado por: Paso manual en dashboard

ci-cd CI/CD con GitHub Actions

infra/testing.md · infra/github-actions.yml

5/5

subtareas

ci.yml — typecheck + test + build en PRs
deploy.yml — typecheck + test + build + deploy
deploy-functions.yml — deploys manuales
Secrets PUBLIC_* vía gh secret set
Job de Vitest corre en CI
profile-basics Página de perfil + edición + dropdown de avatar

08-profile-activity-gamification.md

7/7

subtareas

ALTER TABLE users con 11 columnas
Componentes compartidos ProfileView + ProfileEditForm
Páginas en EN /profile/* y ES /perfil/*
Avatar de respaldo con iniciales SVG
Dropdown de avatar (Ver / Editar / Cerrar)
Sección feed de actividad
Sección de insignias
gps-observation Formulario de observación GPS con auto-relleno EXIF

02-observation.md

9/9

subtareas

Captura/carga de múltiples imágenes
GPS en vivo con getCurrentPosition
Fallback GPS EXIF con exifr
Entrada manual de coordenadas
Dropdowns hábitat / clima / tipo evidencia
Textarea de notas (≤2000)
Aviso de privacidad NOM-059/CITES
Captura de audio (MediaRecorder ≤30s)
Guarda en outbox Dexie + intento de sync
plantnet-id Integración con PlantNet

01-photo-id.md · 13-identifier-registry.md

7/7

subtareas

Edge Function con cascada PlantNet → Claude
Campo force_provider para enrutamiento
Soporte de BYO key client_keys.plantnet
Umbral de confianza 0.7
Wrapper en identifiers/plantnet.ts
Probe testConnection()
Operador: deploy + secret
claude-haiku-id Cascada con Claude Haiku 4.5

01-photo-id.md

4/5

subtareas

Prompt de sistema cacheado
Parseo JSON con remoción de fences
Soporte BYO client_anthropic_key
Probe de costo en testConnection
Operador: secret opcional
map-view Mapa MapLibre con pines agrupados

05-map.md

6/6

subtareas

Estilo OpenFreeMap Liberty
Fuente GeoJSON desde la tabla observations
Clustering en zoom bajo + pines en zoom alto
Pines coloreados por reino
Click en pin → popup con miniatura
Capa pmtiles offline (entregada a offline-maps v0.3)

→ rastreado en offline-maps

darwin-core-csv Exportación CSV Darwin Core

06-darwin-core.md

5/5

subtareas

Mapeo + generación CSV en darwin-core.ts
Tres presets: DwC / SNIB / CONANP
Manejo del tier de oscurecimiento
Componente ExportView con selector
9 tests unitarios Vitest
pwa-manifest Manifest PWA + service worker con caché de shell

03-offline.md

4/4

subtareas

manifest.webmanifest con display:standalone
sw.js cache-first para GETs same-origin
Registro solo en producción
Meta tags Apple mobile
offline-queue Outbox Dexie + motor de sync + trigger de identificación

03-offline.md · 10-media-storage.md

6/6

subtareas

RastrumDB con tres tablas
syncOutbox + registerSyncTriggers
Doble path R2 + Supabase Storage
Resize de imagen en cliente
Integración con cascade engine
Soporte para blobs de audio
unit-tests Andamiaje de tests unitarios Vitest

infra/testing.md

4/6

subtareas

Vitest 4.1 + entorno happy-dom
darwin-core.test.ts (9 tests)
byo-keys.test.ts (10 tests)
Targets de Make + integración CI
Suite pgTAP de RLS
Suite Playwright E2E

v0.3 Inteligencia offline + actividad Lanzado

activity-feed Feed de actividad + triggers del servidor

08-profile-activity-gamification.md

6/6

subtareas

Tabla activity_events con enum (12 kinds)
RLS self/público + tiers de visibilidad
Trigger fire_observation_created
Trigger fire_research_grade
Renderizado en perfil con labels i18n
Auto-marca como leído al ver
unread-badge Contador de no leídos en avatar

08-profile-activity-gamification.md

3/3

subtareas

Punto rojo con contador
Refresca con onAuthStateChange
Texto 99+
sensitive-privacy Aviso de oscurecimiento NOM-059 / CITES

02-observation.md

4/5

subtareas

Aviso ámbar siempre visible
Enum obscure_level en el schema
Trigger aplica oscurecimiento
Columna location_obscured separada
Look-up por especie al enviar
exif-extraction Auto-extracción de metadatos EXIF/XMP/ID3

02-observation.md

3/3

subtareas

exifr integrado en formulario
GPS extraído con flag EXIF
DateTimeOriginal → timestamp
webllm-text WebLLM Llama-3.2-1B para traducción + notas

11-in-browser-ai.md

5/6

subtareas

@mlc-ai/web-llm instalado
loadTextEngine + translateNote + generateFieldNote
Card de descarga con modal de consentimiento
Gestión de caché (probe / delete / re-download)
requestPersistentStorage() contra evicción iOS
Botones Translate + Auto-narrativa en form
onnx-base Fallback ONNX base EfficientNet-Lite0 (~18 MB INT8 alojado en R2)

13-identifier-registry.md

6/6

subtareas

Convertir modelo a ONNX (TF Model Garden EfficientNet-Lite0)
Bundle de labels ImageNet JSON
Implementación src/lib/identifiers/onnx-base.ts
Preprocesamiento (cover crop 224x224 + media/std ImageNet)
Inferencia en dispositivo vía onnxruntime-web (cacheada en IndexedDB)
Card de descarga en perfil con consentimiento + gestión de caché
offline-maps Descarga de mapas offline pmtiles (México zoom 0–10, ~48 MB)

05-map.md

5/6

subtareas

Archivo pmtiles delimitado a México alojado en R2
Variable PUBLIC_PMTILES_MX_URL conectada al build
Descarga src/lib/offline-map.ts + persistencia Cache API
Protocolo MapLibre pmtiles:// registrado para lecturas offline
Card de descarga en perfil con aviso de conexión móvil
Chunks zoom 11–14 por región bajo demanda
byo-anthropic-key API key de Anthropic propia (en el cliente, nunca persistida)

01-photo-id.md · 13-identifier-registry.md

5/5

subtareas

Store central byo-keys.ts respaldado en localStorage
client_keys.anthropic se reenvía por llamada a la Edge Function
La Edge Function nunca registra ni persiste la clave
UI Configure en Perfil/Editar con Save/Test/Clear
Probe testConnection() verifica una clave activa
webllm-default WebLLM como fallback de IA por defecto (advertencia de descarga en primer uso)

11-in-browser-ai.md · 13-identifier-registry.md

5/5

subtareas

Plugin Phi-3.5-vision registrado en bootstrapIdentifiers()
La cascada cae a WebLLM cuando los plugins de red fallan
Diálogo de descarga en primer uso con tamaño + consentimiento de persistencia
Gestión de caché en perfil (probe/delete/re-download)
Cap de confianza 0.35 para evitar auto-promote
identification-block Bloque de identificación visible en formulario

02-observation.md · 01-photo-id.md

5/5

subtareas

Bloque inline bajo la grilla de fotos (spinner + chip)
Auto-dispara en la primera foto + botón de re-correr
Entrada manual de nombre científico sobreescribe cascada
Confianza y fuente visibles (PlantNet, Claude, …)
Aviso ámbar de baja confianza cuando conf < 0.4
gps-two-pass GPS en dos pasos: rápido aproximado luego alta precisión

02-observation.md

5/5

subtareas

Primera llamada: enableHighAccuracy=false, timeout ~1 s
Segunda llamada: enableHighAccuracy=true, timeout ~10 s
Vista previa del formulario se actualiza al mejorar fix
Lógica de cancelación al enviar / reset del formulario
Cae a GPS EXIF si hay timeout

v0.5 Beta

byo-keys-platform API keys propias por plugin con guía de configuración

13-identifier-registry.md

6/6

subtareas

Contrato KeySpec + SetupStep + testConnection
Store central byo-keys.ts
Migración one-time del legacy
UI Configure por plugin
Botones Save + Test + Clear
10 tests unitarios
webllm-vision ID de respaldo con WebLLM Phi-3.5-vision

11-in-browser-ai.md

5/5

subtareas

Plugin Phi-3.5-vision
Cap duro de 0.35
Disclaimer en perfil
Mismo flujo consent + caché
Integración como respaldo opt-in
discovery-badges 39 insignias semilla + evaluador nocturno

08-profile-activity-gamification.md

6/7

subtareas

Tablas badges + user_badges con RLS
39 insignias (5 categorías × 4 tiers)
Funciones SQL de elegibilidad
Edge Function award-badges nocturna
Pills por tier en el perfil
Cron 30 7 * * *
Integración con feed de actividad
quality-gates Compuerta de calidad: research-grade requiere confianza ≥ 0.4

08-profile-activity-gamification.md

2/2

subtareas

Trigger enforce_research_grade_quality
Cap confidence_ceiling por plugin
consensus-workflow Consenso 2/3 + anti-sybil + peso experto

08-profile-activity-gamification.md

2/4

subtareas

Trigger prevent_self_validation
recompute_consensus con peso 3× experto
UI de validador para la comunidad
Trigger auto-recompute
multi-image Observaciones multi-imagen

02-observation.md

4/4

subtareas

Galería <input multiple>
Grid con primary + remove
Blobs guardados + subidos a R2
media_files con sort_order + is_primary
eco-evidence Campos de evidencia ecológica

02-observation.md

2/2

subtareas

Enum evidence_type en observations
Dropdown con 9 valores
birdnet-audio ID de audio con BirdNET-Lite (Cornell Lab CC BY-NC-SA 4.0, ONNX en R2)

12-birdnet-audio.md

9/9

subtareas

Captura de audio en formulario (≤30s)
Motor de sync enruta audio a R2 + cascade
Spec módulo 12 escrito
BirdNET-Lite v2.4 ONNX en R2 + PUBLIC_BIRDNET_WEIGHTS_URL
Decodificación de audio + remuestreo 48 kHz + ventana 3 s
Inferencia onnxruntime-web en el plugin (top-K especies)
Bundle de labels JSON (~6,000 especies)
Card de descarga en perfil con consentimiento + caché
Atribución Cornell Lab CC BY-NC-SA 4.0 en UI + export DwC
scout-v0 Rastrum Scout v0 (ID conversacional, RAG con pgvector)
0/6

subtareas

!
Habilitar extensión pgvector

Bloqueado por: Diferido en future-migrations.md

!
Pipeline de embeddings (Voyage-3 ~50K taxa)

Bloqueado por: Presupuesto de embeddings

Tabla taxon_embeddings + índice HNSW
Edge Function scout
UI de chat en la app
Tabla chat_sessions + historial
onnx-regional Paquetes ONNX regionales (Oaxaca, Yucatán)
0/5

subtareas

!
Pipeline de entrenamiento

Bloqueado por: Infraestructura ML

Set de entrenamiento por región
Convertir a ONNX int8
Cards de descarga en perfil
Routing del cascade por región
gbif-ipt Publicación piloto GBIF IPT (DwC-A ZIP)

06-darwin-core.md

3/6

subtareas

!
Solicitud de cuenta de publicador GBIF

Bloqueado por: ~2 semanas de revisión

Generador de DwC-A ZIP
Edge Function export-dwca
Script publish-to-ipt.sh para operadores
Edge Function gbif-publish (cron mensual)
Tracking de DOIs en dataset_versions
local-contexts Integración con Avisos BC/TK de Local Contexts
0/4

subtareas

!
Consentimiento comunitario

Bloqueado por: Trabajo de gobernanza multi-mes

Integración con Local Contexts Hub API v2
Tabla de enlace observation_bc_notices
Renderizado de etiquetas BC/TK
user-api-tokens Tokens de API de usuario (rst_*, con scopes, hash SHA-256)

14-user-api-tokens.md

5/5

subtareas

Tabla user_api_tokens con hash + scopes[]
Generación crypto-strong rst_<base32> en cliente
RLS solo-dueño en user_api_tokens
Texto plano mostrado al usuario una sola vez
Actualización fire-and-forget de last_used_at
token-rest-api API REST autenticada por token

14-user-api-tokens.md

7/7

subtareas

Edge Function supabase/functions/api desplegada
/api/observe POST crea una fila en observations
/api/identify POST corre la cascada con BYO keys del usuario
/api/observations GET (paginado, RLS por usuario)
/api/export GET devuelve CSV Darwin Core
Aplicación de scopes por ruta
Desplegada --no-verify-jwt; la función valida rst_*
token-ui UI de gestión de tokens en /profile/tokens (EN) y /perfil/tokens (ES)

14-user-api-tokens.md

6/6

subtareas

Rutas locale /profile/tokens y /perfil/tokens
Form de creación + modal de texto plano
Lista de tokens existentes
Acción de revocación con confirm
Strings i18n bajo tr.profile.tokens.*
Botón copiar al portapapeles en creación

v1.0 Lanzamiento Público

streaks Rachas opt-in + ventana de gracia

08-profile-activity-gamification.md

5/6

subtareas

Tabla user_streaks
recompute_streak() con gracia mensual
Edge Function recompute-streaks
Compuerta de calidad
Display de racha en perfil (StreakCard)
Email de hito por correo
shareable-cards Tarjetas OG para compartir observaciones
5/5

subtareas

Edge Function share-card (SVG + HTML)
Diseño con marca + especie + región
Meta OG / Twitter
Badge especie sensible cuando oscurecida
Página pública renderiza observación
social-features Esquema seguidores + comentarios + listas

08-profile-activity-gamification.md

4/4

subtareas

Tabla follows (anti-self + RLS)
observation_comments (threading + soft-delete)
watchlists con radius_km
Implementación UI (Comments, FollowButton, WatchlistView)

→ rastreado en follows-comments-ui

expert-system Peso 3× experto taxonómico

08-profile-activity-gamification.md

3/4

subtareas

Columnas is_expert + expert_taxa[]
recompute_consensus aplica peso 3×
UI de solicitud de experto (ExpertApplyView)
Insignias de experto en perfil
bioblitz-events Tabla de eventos + RLS

08-profile-activity-gamification.md

3/7

subtareas

Tabla events con region_geojson
RLS de lectura pública
Tres tipos de evento
Página de detalle de evento
Agregados del evento
Insignias de participación
Detección top decil
institutional-export Plantillas CSV DwC + SNIB + CONANP

06-darwin-core.md

3/3

subtareas

Tres subconjuntos de columnas
Selector de formato
Sufijos de archivo por formato
credentialed-access Compuerta RLS credentialed_researcher

07-licensing.md

2/3

subtareas

Tres columnas en users
Política RLS obs_credentialed_read
Página de solicitud
env-enrichment Edge Function fase lunar + OpenMeteo
3/3

subtareas

Edge Function enrich-environment
Se dispara al sincronizar
Actualiza 5 columnas ambientales
video-support Soporte de video ≤30s (H.265/AV1)

02-observation.md

3/6

subtareas

Captura de video en formulario (MediaRecorder ≤30s)
Fila media_files con media_type='video' + carga R2
Tile de vista previa de video en grilla (autoplay muted)
Pipeline de transcodificación con ffmpeg
Extracción de frames + separación de audio para BirdNET
Reproductor en página share/obs
camera-trap-ingest Ingesta de cámara trampa (MegaDetector v5a INT8 ONNX)

09-camera-trap.md · 19-batch-photo-importer.md

3/5

subtareas

UI de carga masiva en /perfil/importar/camara-trampa (drag-drop)
Ubicación compartida del trap (GPS único) + timestamp EXIF
MegaDetector v5a INT8 ONNX en R2 (stub model_not_bundled)
Tablas camera_trap_deployments + processing_queue (diferidas)
Edge Function: motion → ID → research-grade
capacitor-ios Wrapper iOS Capacitor para App Store (v1.2)
0/5

subtareas

!
Apple Developer Program ($99/año)

Bloqueado por: Suscripción requerida

Andamiaje Capacitor + platform/ios
Plugins nativos
Metadatos + screenshots para App Store
Primer build de TestFlight
follows-comments-ui UI de seguidores + comentarios + listas

08-profile-activity-gamification.md

3/5

subtareas

Botón Seguir en perfiles públicos (FollowButton.astro)
Componente de comentarios anidados (Comments.astro)
Vista de listas en perfil (WatchlistView.astro)
Eventos de seguidos en feed
Alertas de lista (digest, cron diario)
map-location-picker Selector de ubicación con mapa interactivo

15-map-location-picker.md · 02-observation.md

5/5

subtareas

Arrastrar pin + tap para colocar en MapLibre
Búsqueda de localidad con resultados EN/ES
Geocodificación inversa para poblar localidad
UX bottom-sheet móvil para el selector
Integración round-trip con campos del formulario
my-observations Página de historial de observaciones personales

16-my-observations.md

6/6

subtareas

Ruta /profile/observations (EN) / /perfil/observaciones (ES)
Componente MyObservationsView compartido
Grid de miniaturas con pill de estado
Click en fila → /share/obs/<id> para detalle
Incluye filas pendientes de outbox (sin sincronizar)
Paginación + orden más reciente primero
camera-getUserMedia Cámara en app vía getUserMedia con fallback a input de archivo

17-in-app-camera.md · 02-observation.md

5/5

subtareas

getUserMedia con facingMode environment
Preview <video> + captura a canvas → Blob
Permiso denegado → fallback a input file capture=environment
Cleanup de stream al cerrar para evitar indicador
Las superficies Identify + Observe lo usan
batch-exif-importer Importador masivo de fotos con extracción EXIF

19-batch-photo-importer.md

6/6

subtareas

Captura multi-foto por drag-drop / file-input
Extracción exifr de GPS + DateTimeOriginal por archivo
Tabla de revisión por fila (include/exclude, edición)
Insert masivo a outbox Dexie + sync en cola
Páginas EN /profile/import/, ES /perfil/importar/
Deep-link cámara-trampa (subruta) para subidas escalonadas
oauth-custom-domain Dominio personalizado en OAuth de Supabase (auth.rastrum.org)

04-auth.md

0/4

subtareas

!
Plan Supabase Pro ($25/mes) — requerido para dominio de auth custom

Bloqueado por: Diferido por el target de costo cero; el host de callback por defecto sirve para v1.0

CNAME DNS para auth.rastrum.org
Actualizar Site URL + allow-list en Supabase Auth
Re-probar flujos OAuth Google + GitHub en dominio custom
mcp-server Servidor MCP para agentes de IA (JSON-RPC sobre HTTP)

15-mcp-server.md · 14-user-api-tokens.md

6/6

subtareas

Edge Function supabase/functions/mcp con transporte JSON-RPC 2.0
tools/list y tools/call respaldados por scopes de user_api_tokens
5 herramientas: identify_species, submit_observation, list_observations, get_observation, export_darwin_core
initialize + ping sin auth para probing de capacidades
Desplegada --no-verify-jwt; la función valida rst_*
Integraciones documentadas para Claude Desktop, Cursor, VS Code, Copilot Coding Agent
rastrum-org-domain Migrar dominio canónico a rastrum.org
6/6

subtareas

Registrar rastrum.org + DNS vía Cloudflare
Actualizar config de Astro + host del sitemap
Migrar hostname del bucket a media.rastrum.org
Lista de pass-through del SW actualizada
Dominio antiguo redirige 301
Documentación actualizada a rastrum.org
ux-revamp-pr1-ia-chrome Renovación UX PR 1: arquitectura + chrome

00-index.md

8/8

subtareas

Helper chrome-mode + módulo chrome-helpers + routeTree (TDD)
Strings i18n para tagline, dropdown explorar, grupos docs, drawer, barra inferior
Páginas placeholder de subrutas (/explorar/recientes, /explorar/seguimiento, /explorar/especies)
Redirección 301 de /perfil/seguimiento a /explorar/seguimiento
Componentes MegaMenu, MobileBottomBar, MobileDrawer
Reescritura de Header.astro con copy por verbo, layout mobile-friendly, classnames accent-color
BaseLayout pb-20 sm:pb-0 para separación de barra inferior móvil
Cobertura e2e: highlight de rail activo, mega-menu renderiza, FAB apunta a /observar, toggle drawer, 301 watchlist

v1.5 Capa Territorial Planeado

biodiversity-trails Senderos de Biodiversidad con waypoints GPS + métricas de diversidad
0/5

subtareas

Tabla trails
UI de grabación de sendero
Vinculación observaciones-sendero
Métricas de diversidad por sendero
Página de detalle + render en mapa
pits-qr PITs + anclas QR/NFC
0/5

subtareas

Tabla pits
Página por PIT con observaciones
Generador QR para impresión
Documentación de protocolo NFC
Estadísticas por PIT
spatial-analysis Análisis espacial: capas GeoJSON ANP/INEGI/INAH
0/5

subtareas

GeoJSON ANP (CONANP)
Límites municipales INEGI
Polígonos INAH
Toggle de capas en MapLibre
Consultas PostGIS ST_Within
diversity-indices Índices de diversidad: S, H', D, Chao1, Pielou J
0/4

subtareas

Edge Function diversity-stats
Cálculos matemáticos
Curvas de rarefacción
Render en páginas de sendero / evento
trail-pdf-export Exportación PDF de senderos (estilo guía de campo)
0/3

subtareas

Render PDF server-side
Mapa, lista de especies, stats
Plantillas bilingües

v2.0 Institucional Planeado

camera-trap-advanced Cámara trampa: modelado de ocupación, histogramas
0/3

subtareas

Pipeline estadístico R/Python
Histogramas por especie y hora
Análisis de grid multi-cámara
gbif-publisher Publicador de datasets GBIF + DOI
0/3

subtareas

Exportación DwC-A continua
Releases versionados con DOIs
Generador de citas
regional-ml Pipeline de entrenamiento ML regional

07-licensing.md

0/4

subtareas

Fine-tuning continuo
Aprendizaje federado
Model cards por release
Compuerta de licencia
b2g-dashboard Dashboard B2G SaaS para CONANP / agencias
0/5

subtareas

App separada en b2g.rastrum.app
Plantillas por agencia
Suscripciones Stripe
Logs de auditoría + SLA
!
Licencia comercial BirdNET firmada

Bloqueado por: Proceso con Cornell

inat-bridge Puente iNaturalist import/export
0/4

subtareas

Flujo OAuth con iNat
Importar observaciones de iNat
Exportar datos verificados
Compatibilidad con rate limits

v2.5 IA + RA Planeado

scout-full Rastrum Scout — IA conversacional de campo completa
0/4

subtareas

Refinamiento multi-turno
Retrieval por región
Render de citas con fuentes
Sobre scout-v0
ar-overlay Superposición AR de especies en visor
0/3

subtareas

WebXR o Capacitor ARKit/ARCore
Frame en vivo → ID → label 3D
Presupuesto de performance: 30 fps
voice-indigenous Entrada/salida de voz en lenguas indígenas
0/3

subtareas

Whisper-tiny para STT
!
TTS custom para Zapoteco/Mixteco

Bloqueado por: No existe TTS comercial

Flujo en Zapoteco para piloto Sierra Norte
conabio-api APIs formales de alianza CONABIO/CONANP/INAH
0/3

subtareas

MOUs con cada agencia
Endpoints API con audit logs
Acuerdos de sincronización bidireccional

Edita docs/tasks.json para actualizar. La página se reconstruye en cada push.

Reportar un problema

Incluiremos esto en tu reporte