Sitio de aterrizaje de SafeMap con un demo de mapa interactivo para Lima.
SafeMap es una plataforma de seguridad ciudadana: reporta incidentes de forma anónima, visualiza zonas de riesgo (mapa/heatmap) y sugiere rutas más seguras.
- Astro 5.8.1
- React 19
- Tailwind CSS
- TypeScript
- Vite (build)
SafeMap-Web/
├── public/
│ ├── avatars/
│ ├── js/
│ ├── favicon.svg
│ ├── apple-touch-icon.svg
│ ├── robots.txt
│ └── site.webmanifest
├── src/
│ ├── components/
│ │ ├── cards/
│ │ ├── interactive/ # Mapas y UI interactiva (React)
│ │ ├── layout/
│ │ ├── sections/
│ │ └── ui/
│ ├── data/
│ ├── layouts/
│ ├── pages/ # index.astro, demo.astro
│ └── styles/
├── astro.config.mjs
├── tailwind.config.mjs
├── package.json
├── DEPLOYMENT.md
└── README.md
Astro expone cada archivo de src/pages/ como una ruta. Los recursos estáticos van en public/.
Requisitos: Node.js 18+ y npm.
# Instala dependencias
npm install
# Levanta el servidor de desarrollo (por defecto http://localhost:4321)
npm run devSi npm run dev falla (Exit Code 1), revisa “Solución de Problemas”.
| Comando | Descripción |
|---|---|
| npm run dev | Servidor de desarrollo |
| npm run build | Compila a producción en ./dist |
| npm run preview | Sirve ./dist para verificación local |
| npm run lint | Linter (ESLint) |
| npm run lint:fix | Linter con autofix |
| npm run format | Formatea con Prettier |
| npm run type-check | Chequeo de tipos (Astro + TS) |
| npm run astro … | CLI de Astro (add, check, etc.) |
- Página:
src/pages/demo.astro→ ruta/demo. - Componente principal:
src/components/interactive/MapDemoClean.tsx. - Estilos Leaflet:
src/styles/leaflet-custom.css(importado desdeglobal.css).
Modos soportados: incidentes con marcadores, heatmap (círculos) y rutas seguras (polylines). Selector de proveedor de mapa (OSM, satélite, oscuro) y simulación de ubicación del usuario.
Se corrigió un problema donde los marcadores se desplazaban al hacer zoom porque .leaflet-marker-icon tenía animaciones con transform. Leaflet usa transform para posicionar; si lo animas, “rompe” el anclaje a coordenadas.
- Fix aplicado en
src/styles/leaflet-custom.css: se retiró la animación del contenedor. - Si necesitas animaciones, aplícalas a un elemento hijo dentro del HTML del
DivIcon(no al contenedor.leaflet-marker-icon).
- “npm run dev” no arranca o puerto ocupado (4321)
# Ver el proceso que usa el puerto 4321
$pid = (Get-NetTCPConnection -LocalPort 4321).OwningProcess
Get-Process -Id $pid
# Matarlo si es necesario
Stop-Process -Id $pid -Force
# Reiniciar el dev server
npm run dev- Cerrar el servidor de desarrollo
- En la terminal donde corre: Ctrl + C (confirma si te lo pide).
- En VS Code: Terminal → ícono de papelera (Terminate) o “Tasks: Terminate Running Task”.
- Dependencias corruptas
Remove-Item -Recurse -Force node_modules; Remove-Item -Force package-lock.json
npm install
npm run devGuía en DEPLOYMENT.md. Funciona bien en proveedores como Netlify, Vercel o un servidor propio.
Sugerencias bienvenidas:
- Fork
- Rama:
feature/mi-cambio - Commit:
feat: descripción breve - Push y Pull Request
MIT — ver LICENSE.
Hecho con Astro, React, TypeScript y Tailwind CSS.