01 Resumen Ejecutivo ›
El Regional Hazard Explorer es un producto gratuito, sin autenticacion, que permite a cualquier usuario explorar la peligrosidad sismica de una ubicacion geografica. Funciona como puerta de entrada al ecosistema PSHA de Appgile.
Propuesta de Valor
El usuario hace clic en un punto del mapa y obtiene instantaneamente:
- PGA estimado — Aceleracion maxima del suelo (Peak Ground Acceleration) para 475 anios de periodo de retorno
- Fallas activas cercanas — Distancia y geometria de las fallas del catalogo GEM GAF-DB en un radio de 300 km
- Sismicidad historica — Terremotos significativos (M ≥ 5) del catalogo USGS FDSN
- Contexto tectonico — Tipo de regimen tectonico (cortical activo, estable, subduccion)
Tier 0 usa exclusivamente datos de dominio publico (USGS) y CC BY-SA 4.0 (GEM GAF-DB). No se requiere licencia comercial de GEM para este producto.
Rol en el Ecosistema
02 Posicionamiento de Producto ›
Audiencia Objetivo
| Segmento | Necesidad | Conversion Esperada |
|---|---|---|
| Ingenieros estructurales | Quick-check de peligrosidad antes de un proyecto | Alta → Tier 1-2 |
| Aseguradoras / reaseguradoras | Evaluacion rapida de riesgo por ubicacion | Alta → Tier 3 |
| Desarrolladores inmobiliarios | Due diligence sismica de parcelas | Media → Tier 1 |
| Investigadores / academicos | Exploracion de datos sismicos globales | SEO/Branding |
| Proteccion civil / gobiernos | Visualizacion regional de amenaza | Media → Tier 2-3 |
Diferenciacion vs. Competencia
| Caracteristica | PSHA Explorer (Tier 0) | GEM Hazard Viewer | USGS Earthquake Map |
|---|---|---|---|
| PGA por ubicacion | Calculo propio | GEM Mosaic | No |
| Fallas activas | GAF-DB + mapa | Solo viewer | No |
| Sismicidad historica | USGS catalog | No | Si |
| Informe descargable | PDF basico | No | No |
| Upgrade a PSHA completo | 1-click | No | No |
| Uso comercial | Si | NC-SA 4.0 | Public Domain |
03 Fuentes de Datos y Licencias ›
Tier 0 opera exclusivamente con fuentes de datos que permiten uso comercial sin restricciones.
| Fuente | Datos | Licencia | Uso en Tier 0 | Atribucion |
|---|---|---|---|---|
| USGS FDSN API | Catalogo sismico global | Public Domain | Sismicidad historica, terremotos significativos | USGS Earthquake Hazards Program |
| GEM GAF-DB | Geometria de fallas activas globales | CC BY-SA 4.0 | Fallas cercanas, trazas en mapa | GEM Foundation — Styron & Pagani (2020) |
| USGS Vs30 | Clasificacion de suelo (GeoTIFF) | Public Domain | Vs30 del sitio para ajuste de PGA | USGS |
Estrategia de Calculo Propio de PGA
En lugar de leer valores del GEM Hazard Mosaic (prohibido comercialmente), Tier 0 calcula una estimacion simplificada de PGA usando:
- Fallas cercanas (GAF-DB) — Distancia a las fallas activas mas proximas, magnitudes maximas estimadas por longitud de ruptura (Leonard 2014 / WC1994)
- GMPE simplificada — Aplicacion de NGA-West2 (promedio ASK14 + BSSA14 + CB14 + CY14) para estimar PGA mediano en roca (Vs30 = 760 m/s)
- Ajuste por Vs30 — Amplificacion/deamplificacion segun Vs30 del sitio (USGS GeoTIFF)
- Contribucion de sismicidad difusa — Tasa de eventos del catalogo USGS en un radio de 300 km, corregida por completitud
Paleta de Colores PGA (Referencia GEM)
Usamos la paleta estandar de 11 bins de PGA que sigue las convenciones del sector:
04 Arquitectura y Componentes UI ›
Stack Tecnologico
| Capa | Tecnologia | Justificacion |
|---|---|---|
| Framework | Next.js 15 (App Router) | SSR para SEO, ISR para cache |
| Mapa | Mapbox GL JS (dark-v11) | Rendimiento WebGL, datos vectoriales, estilo oscuro profesional |
| Estilos | Tailwind CSS v4 | Consistencia con el resto del frontend |
| Charts | Plotly.js (lightweight) | Graficos interactivos, hazard curves futuras |
| API | FastAPI + async | Rendimiento, tipado, documentacion automatica |
| Cache | Redis + ISR | PGA pre-calculado por grid, reduccion de latencia |
| Geodatos | PostGIS | Queries ST_DWithin eficientes para fallas cercanas |
Layout de Pagina
Componentes Principales
1. Barra de Busqueda (Geocoding)
- Mapbox Geocoding API para autocompletar direcciones
- Input: texto libre (ciudad, direccion, coordenadas)
- Output: lat/lon → centra mapa + dispara query
- Placeholder: "Buscar ubicacion... (ej: Santiago de Chile, Lima, Mexico DF)"
2. Mapa Interactivo
- Estilo base:
mapbox://styles/mapbox/dark-v11 - Zoom inicial: 2 (vista mundial)
- Capas vectoriales:
- Fallas activas — LineString, color por slip_rate o tectonic_region
- Sismos historicos — Circle, radio proporcional a magnitud, color por profundidad
- PGA heatmap — Fill-extrusion o heatmap layer, grid 0.1° pre-calculado
- Interacciones: Click en punto → popup + panel lateral. Hover en falla → tooltip con nombre y tipo.
3. Panel de Resultados
Al hacer clic en el mapa, el panel lateral muestra:
- PGA Card: Valor grande (ej.
0.24g) con swatch de color de la paleta, clasificacion textual ("Alto"), disclaimer de estimacion - Fallas Cercanas: Lista ordenada por distancia, con nombre, tipo (strike-slip, reverse, etc.), distancia en km, Mmax estimado
- Sismicidad: Top 10 terremotos mas significativos en 300 km, con magnitud, fecha, profundidad, distancia
- Contexto: Tipo tectonico, Vs30 del sitio, numero de fallas en radio
- CTAs: Botones prominentes para upgrade a Tier 1+ y descarga de PDF basico
4. PDF Basico (Descargable)
- 1-2 paginas generadas via WeasyPrint en servidor
- Contenido: ubicacion, PGA estimado, fallas cercanas, disclaimers
- Marca de agua: "Estimacion preliminar — appgile.com/psha"
- Gate opcional: Requerir email para descargar (lead capture)
05 Modelo de Datos ›
Tablas Principales
-- Fallas activas (cache de GAF-DB, actualizado mensualmente)
CREATE TABLE active_faults (
id SERIAL PRIMARY KEY,
gaf_id TEXT UNIQUE NOT NULL,
name TEXT,
fault_type TEXT, -- strike-slip, reverse, normal, subduction
slip_rate_min FLOAT,
slip_rate_max FLOAT,
dip_min FLOAT,
dip_max FLOAT,
rake FLOAT,
lower_depth FLOAT,
upper_depth FLOAT,
tectonic_region TEXT,
geometry GEOMETRY(MultiLineString, 4326) NOT NULL,
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_faults_geom ON active_faults USING GIST(geometry);
-- Grid de PGA pre-calculado (resolucion 0.1 grado)
CREATE TABLE pga_grid (
id SERIAL PRIMARY KEY,
lat FLOAT NOT NULL,
lon FLOAT NOT NULL,
pga_475 FLOAT, -- PGA en g, TR=475 anios
pga_2475 FLOAT, -- PGA en g, TR=2475 anios
vs30 FLOAT,
tectonic_region TEXT,
n_faults_300km INTEGER,
computed_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(lat, lon)
);
CREATE INDEX idx_pga_grid_coords ON pga_grid(lat, lon);
-- Cache de consultas de sismicidad (USGS responses)
CREATE TABLE seismicity_cache (
id SERIAL PRIMARY KEY,
lat_center FLOAT NOT NULL,
lon_center FLOAT NOT NULL,
radius_km FLOAT DEFAULT 300,
min_mag FLOAT DEFAULT 5.0,
event_count INTEGER,
data_json JSONB NOT NULL,
fetched_at TIMESTAMPTZ DEFAULT NOW(),
expires_at TIMESTAMPTZ DEFAULT NOW() + INTERVAL '7 days'
);
Volumenes Estimados
| Tabla | Registros | Tamano est. | Actualizacion |
|---|---|---|---|
active_faults | ~13,500 | ~50 MB (con geometria) | Mensual (GitHub sync) |
pga_grid | ~6.5M (0.1° global) | ~500 MB | Unica + incremental |
seismicity_cache | Variable (por demanda) | ~100 MB | TTL 7 dias |
Tipos TypeScript (Frontend)
interface HazardPreview {
lat: number;
lon: number;
pga_475: number; // PGA en g (TR=475 anios)
pga_2475: number | null; // PGA en g (TR=2475 anios)
pga_class: string; // "Muy bajo" | "Bajo" | ... | "Extremo"
pga_color: string; // hex color de la paleta
vs30: number;
tectonic_region: string;
n_faults_300km: number;
}
interface NearbyFault {
gaf_id: string;
name: string | null;
fault_type: string;
distance_km: number;
slip_rate: string; // "0.1-1.0 mm/yr"
dip: string; // "45-60"
tectonic_region: string;
geometry: GeoJSON.Feature; // para pintar en mapa
}
interface HistoricEarthquake {
usgs_id: string;
magnitude: number;
mag_type: string;
date: string; // ISO 8601
depth_km: number;
distance_km: number;
location: string; // descripcion textual USGS
lat: number;
lon: number;
}
interface ExplorerResponse {
hazard: HazardPreview;
faults: NearbyFault[];
earthquakes: HistoricEarthquake[];
attribution: string[];
disclaimer: string;
}
06 API Endpoints ›
Endpoints REST
| Metodo | Ruta | Descripcion | Auth | Cache |
|---|---|---|---|---|
| GET | /api/v1/explore |
Consulta completa para un punto | Ninguna | Redis 1h + ISR 24h |
| GET | /api/v1/explore/pga |
Solo PGA para un punto (lightweight) | Ninguna | Redis 24h |
| GET | /api/v1/explore/faults |
Fallas cercanas con geometria | Ninguna | Redis 7d |
| GET | /api/v1/explore/seismicity |
Sismicidad historica | Ninguna | Redis 24h |
| POST | /api/v1/explore/pdf |
Generar PDF basico | Rate limit | Redis 1h |
| GET | /api/v1/explore/tiles/{z}/{x}/{y} |
Vector tiles de PGA grid | Ninguna | CDN 24h |
Endpoint Principal: /api/v1/explore
GET /api/v1/explore?lat=-33.45&lon=-70.66&radius=300
Accept: application/json
{
"hazard": {
"lat": -33.45,
"lon": -70.66,
"pga_475": 0.42,
"pga_2475": 0.78,
"pga_class": "Muy alto",
"pga_color": "#FD8D3C",
"vs30": 362,
"tectonic_region": "Subduction Interface",
"n_faults_300km": 8
},
"faults": [
{
"gaf_id": "CLFS_001",
"name": "San Ramon Fault",
"fault_type": "reverse",
"distance_km": 12.3,
"slip_rate": "0.1-0.5 mm/yr",
"dip": "45-70",
"tectonic_region": "Active Shallow Crust"
}
],
"earthquakes": [
{
"usgs_id": "us20003k7a",
"magnitude": 8.3,
"mag_type": "mww",
"date": "2015-09-16T22:54:33Z",
"depth_km": 22.4,
"distance_km": 240,
"location": "48km W of Illapel, Chile"
}
],
"attribution": [
"USGS Earthquake Hazards Program",
"GEM Foundation - Global Active Faults Database (Styron & Pagani, 2020)"
],
"disclaimer": "Estimacion orientativa basada en datos publicos..."
}
Rate Limiting
| Endpoint | Limite | Ventana | Clave |
|---|---|---|---|
/api/v1/explore | 60 requests | 1 minuto | IP address |
/api/v1/explore/pdf | 5 requests | 1 hora | IP address |
/api/v1/explore/tiles/* | Sin limite | — | CDN cached |
07 Flujo de Conversion ›
El objetivo principal de Tier 0 es convertir visitantes anonimos en leads cualificados y, eventualmente, en clientes de Tier 1-3.
Funnel de Conversion
Puntos de Captura de Lead
| Trigger | Accion | Dato Capturado | Prioridad |
|---|---|---|---|
| Descarga de PDF | Modal con formulario de email | Email + ubicacion consultada | P0 |
| Click "Solicitar Informe" | Redireccion a registro con pre-fill de ubicacion | Email + nombre + ubicacion + tier deseado | P0 |
| 5+ consultas en sesion | Banner suave: "Crea tu cuenta para guardar consultas" | Email (opcional) | P1 |
| Share / embed result | Link permanente con parametros de ubicacion | Analytics: UTM tracking | P2 |
SEO Strategy
- URL con parametros:
/explore?lat=-33.45&lon=-70.66→ SSR con meta tags dinamicos - Meta tags:
<title>Seismic Hazard in Santiago, Chile | PGA: 0.42g | PSHA Explorer</title> - Paginas estaticas por ciudad: Pre-generar /explore/santiago-chile, /explore/lima-peru, etc. (top 200 ciudades en zonas sismicas)
- Schema.org: Structured data para Google con tipo
Dataset+Place - Idiomas: Espanol (primario) + Ingles (secundario) para alcance global
Objetivo: 3-5% de visitantes Tier 0 solicitan un informe de pago (Tier 1+). Con 10,000 visitas/mes, eso representa 300-500 leads cualificados mensuales.
08 Implementacion y Roadmap ›
Fases de Desarrollo
- Importar GAF-DB a PostGIS (
active_faultstable) - Configurar sync mensual de GAF-DB desde GitHub
- Implementar endpoint
/api/v1/explore/faults(query ST_DWithin) - Conectar USGS FDSN API con cache Redis (TTL 24h)
- Endpoint
/api/v1/explore/seismicity
- Implementar GMPEs NGA-West2 (ASK14, BSSA14, CB14, CY14)
- Calculo de Mmax por longitud de ruptura (Leonard 2014)
- Pre-calculo de grid PGA 0.1° para zonas sismicas prioritarias
- Endpoint
/api/v1/explore/pga - Integracion de Vs30 desde USGS GeoTIFF
- Pagina
/explorecon mapa Mapbox full-screen - Capas de fallas, sismos y PGA heatmap
- Panel lateral de resultados con CTAs
- Barra de busqueda con geocoding
- Responsive: funcional en mobile
- Generacion de PDF basico (WeasyPrint)
- Email gate para descarga de PDF
- Pre-generacion de paginas por ciudad (SSG/ISR)
- Meta tags dinamicos, Schema.org
- Analytics: Mixpanel/Plausible para tracking de funnel
- Validar PGA propio vs. GEM Mosaic (discrepancia aceptable < 30% para Tier 0)
- Testing de carga: 100 req/s sostenido
- QA en mobile, accesibilidad WCAG AA
- Soft launch con 10 ciudades piloto
- Iteracion basada en feedback
Estimacion de Esfuerzo
09 Decisiones Tecnicas ›
Calcular PGA propio usando GMPEs + datos publicos, en lugar de leer valores del GEM Hazard Mosaic.
Pre-calcular un grid de PGA a 0.1° de resolucion e interpolar para puntos intermedios, en lugar de calcular PGA on-the-fly para cada request.
El explorador es 100% publico, sin login. Solo se requiere email para descargar el PDF basico.
Usar el promedio ponderado de ASK14, BSSA14, CB14 y CY14 (pesos iguales: 0.25) para corteza activa. Zhao et al. (2006) para subduccion.
Incluir disclaimer visible en toda interaccion: "Estimacion orientativa. No sustituye un analisis PSHA profesional."
Resumen de Decisiones
| ID | Decision | Alternativa Descartada | Impacto |
|---|---|---|---|
| DT-01 | PGA propio (GMPEs + datos publicos) | GEM Mosaic readout | Critico |
| DT-02 | Grid pre-calculado 0.1° | Calculo on-the-fly | Performance |
| DT-03 | Sin login para explorer | Login obligatorio | Conversion |
| DT-04 | NGA-West2 (4 modelos, pesos iguales) | GMPE unico | Precision |
| DT-05 | Disclaimer permanente | Solo en PDF | Legal |
10 Riesgos y Mitigaciones ›
| Riesgo | Probabilidad | Impacto | Mitigacion |
|---|---|---|---|
| PGA propio difiere > 30% del GEM Mosaic | Media | Alto | Validar contra 50+ puntos de referencia. Calibrar GMPEs por region. Si discrepancia es sistematica, aplicar factores de correccion regionales. |
| USGS FDSN API no disponible | Media | Medio | Cache Redis con TTL largo (7 dias). Fallback a datos ISC cacheados. Mostrar datos cacheados con timestamp de ultima actualizacion. |
| Coste de Mapbox excesivo | Baja | Medio | Free tier de Mapbox: 50K cargas de mapa/mes. Monitorizar uso. Si excede, migrar a MapLibre GL JS (open-source) con tiles de Protomaps. |
| GEM cambia licencia de GAF-DB | Baja | Alto | GAF-DB publicado en GitHub bajo CC BY-SA 4.0. Descargar y cachear localmente. Si cambia licencia, la version descargada sigue siendo valida. Alternativa: compilar catalogo propio de fallas desde publicaciones academicas. |
| Baja conversion Tier 0 → Tier 1+ | Media | Medio | A/B testing de CTAs. Ajustar el "teaser" de informacion gratuita vs. de pago. Agregar mas valor en Tier 0 gradualmente (ej: mini-grafico de hazard curve). |
| Uso del PGA de Tier 0 como referencia profesional | Media | Alto | Disclaimer prominente y permanente. Marca de agua en PDF. Limitar precision mostrada (redondear a 0.01g). Incluir rango de incertidumbre. |
| Pre-calculo de grid PGA lento | Media | Bajo | Calcular por regiones prioritarias (Latam, Mediterraneo, SE Asia primero). Usar workers paralelos con Celery. Grid inicial: solo zonas con PGA > 0.01g. |