|
1 | | -# Página de Aterrizaje SafeMap |
| 1 | +# SafeMap Web (Landing + Demo de Mapa) |
2 | 2 |
|
3 | | -> 🚀 **Estado: COMPLETADO** - Página de aterrizaje lista para producción para la plataforma de seguridad móvil SafeMap. |
| 3 | +> Sitio de aterrizaje de SafeMap con un demo de mapa interactivo para Lima. |
4 | 4 |
|
5 | | -## 📋 Descripción General del Proyecto |
| 5 | +## 📋 Descripción |
6 | 6 |
|
7 | | -SafeMap es un proyecto universitario para una plataforma de seguridad móvil que permite a los ciudadanos reportar incidentes de forma anónima, visualizar zonas de riesgo mediante mapas de calor en tiempo real y obtener rutas seguras utilizando tecnología de IA. |
| 7 | +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. |
8 | 8 |
|
9 | | -## 🏗️ Stack Tecnológico |
| 9 | +## 🏗️ Stack |
10 | 10 |
|
11 | | -- **Framework**: Astro 5.8.1 |
12 | | -- **Biblioteca UI**: React 18 |
13 | | -- **Estilos**: Tailwind CSS |
14 | | -- **Lenguaje**: TypeScript |
15 | | -- **Herramienta de Build**: Vite |
16 | | -- **Gestor de Paquetes**: npm |
| 11 | +- Astro 5.8.1 |
| 12 | +- React 19 |
| 13 | +- Tailwind CSS |
| 14 | +- TypeScript |
| 15 | +- Vite (build) |
17 | 16 |
|
18 | | -## 📁 Estructura del Proyecto |
| 17 | +## 📁 Estructura |
19 | 18 |
|
20 | 19 | ```text |
21 | 20 | SafeMap-Web/ |
22 | | -├── public/ # Activos estáticos |
23 | | -│ ├── avatars/ # Avatares para testimonios (SVG) |
24 | | -│ ├── js/ # Scripts del lado del cliente |
25 | | -│ ├── favicon.svg # Favicon del sitio |
26 | | -│ ├── apple-touch-icon.svg # Ícono de app para iOS |
27 | | -│ ├── robots.txt # Archivo robots para SEO |
28 | | -│ └── site.webmanifest # Manifiesto PWA |
| 21 | +├── public/ |
| 22 | +│ ├── avatars/ |
| 23 | +│ ├── js/ |
| 24 | +│ ├── favicon.svg |
| 25 | +│ ├── apple-touch-icon.svg |
| 26 | +│ ├── robots.txt |
| 27 | +│ └── site.webmanifest |
29 | 28 | ├── src/ |
30 | 29 | │ ├── components/ |
31 | | -│ │ ├── cards/ # Componentes de tarjeta reutilizables |
32 | | -│ │ ├── interactive/ # Componentes interactivos de React |
33 | | -│ │ ├── layout/ # Cabecera, Pie de página |
34 | | -│ │ ├── sections/ # Secciones de la página |
35 | | -│ │ └── ui/ # Elementos de UI |
36 | | -│ ├── data/ # Archivos de datos JSON |
37 | | -│ ├── layouts/ # Diseños de página |
38 | | -│ ├── pages/ # Páginas Astro |
39 | | -│ │ └── index.astro # Página principal, por ejemplo |
40 | | -│ └── styles/ # CSS Global |
41 | | -├── .github/ |
42 | | -│ └── workflows/ |
43 | | -│ └── deploy.yml # Flujo de trabajo para despliegue en GitHub Pages |
44 | | -├── astro.config.mjs # Configuración de Astro |
45 | | -├── tailwind.config.mjs # Configuración de Tailwind |
46 | | -├── package.json # Manifiesto del proyecto |
47 | | -├── DEPLOYMENT.md # Guía de despliegue |
48 | | -└── README.md # Este archivo |
| 30 | +│ │ ├── cards/ |
| 31 | +│ │ ├── interactive/ # Mapas y UI interactiva (React) |
| 32 | +│ │ ├── layout/ |
| 33 | +│ │ ├── sections/ |
| 34 | +│ │ └── ui/ |
| 35 | +│ ├── data/ |
| 36 | +│ ├── layouts/ |
| 37 | +│ ├── pages/ # index.astro, demo.astro |
| 38 | +│ └── styles/ |
| 39 | +├── astro.config.mjs |
| 40 | +├── tailwind.config.mjs |
| 41 | +├── package.json |
| 42 | +├── DEPLOYMENT.md |
| 43 | +└── README.md |
49 | 44 | ``` |
50 | 45 |
|
51 | | -Astro busca archivos `.astro` o `.md` en el directorio `src/pages/`. Cada página se expone como una ruta basada en el nombre de su archivo. |
| 46 | +Astro expone cada archivo de `src/pages/` como una ruta. Los recursos estáticos van en `public/`. |
52 | 47 |
|
53 | | -No hay nada especial sobre `src/components/`, pero ahí es donde nos gusta colocar cualquier componente de Astro/React/Vue/Svelte/Preact. |
| 48 | +## 🚀 Inicio Rápido (Windows PowerShell) |
54 | 49 |
|
55 | | -Cualquier activo estático, como imágenes, se puede colocar en el directorio `public/`. |
| 50 | +Requisitos: Node.js 18+ y npm. |
56 | 51 |
|
57 | | -## 🧞 Comandos |
58 | | - |
59 | | -Todos los comandos se ejecutan desde la raíz del proyecto, desde una terminal: |
60 | | - |
61 | | -| Comando | Acción | |
62 | | -| :------------------------ | :--------------------------------------------------------- | |
63 | | -| `npm install` | Instala las dependencias | |
64 | | -| `npm run dev` | Inicia el servidor de desarrollo local en `localhost:4321` | |
65 | | -| `npm run build` | Compila tu sitio para producción en `./dist/` | |
66 | | -| `npm run preview` | Previsualiza tu compilación localmente, antes de desplegar | |
67 | | -| `npm run astro ...` | Ejecuta comandos CLI como `astro add`, `astro check` | |
68 | | -| `npm run astro -- --help` | Obtiene ayuda usando el CLI de Astro | |
69 | | - |
70 | | -## ✨ Características Implementadas |
| 52 | +```powershell |
| 53 | +# Instala dependencias |
| 54 | +npm install |
71 | 55 |
|
72 | | -### 🎨 Diseño y Experiencia de Usuario |
| 56 | +# Levanta el servidor de desarrollo (por defecto http://localhost:4321) |
| 57 | +npm run dev |
| 58 | +``` |
73 | 59 |
|
74 | | -- Diseño moderno y responsivo con enfoque "mobile-first" |
75 | | -- Diseño de Cuadrícula Bento interactiva mostrando características clave |
76 | | -- Animaciones y transiciones de desplazamiento suaves |
77 | | -- Esquema de colores y tipografía profesional |
| 60 | +Si `npm run dev` falla (Exit Code 1), revisa “Solución de Problemas”. |
78 | 61 |
|
79 | | -### 🧩 Componentes Interactivos |
| 62 | +## 🧞 Scripts |
80 | 63 |
|
81 | | -- **MapDemo**: Maqueta de mapa interactivo con marcadores de incidentes y rutas seguras |
82 | | -- **StatsCounter**: Visualización animada de estadísticas en tiempo real |
83 | | -- **ContactForm**: Formulario completo de registro para beta con validación |
| 64 | +| Comando | Descripción | |
| 65 | +| ------------------ | ------------------------------------ | |
| 66 | +| npm run dev | Servidor de desarrollo | |
| 67 | +| npm run build | Compila a producción en ./dist | |
| 68 | +| npm run preview | Sirve ./dist para verificación local | |
| 69 | +| npm run lint | Linter (ESLint) | |
| 70 | +| npm run lint:fix | Linter con autofix | |
| 71 | +| npm run format | Formatea con Prettier | |
| 72 | +| npm run type-check | Chequeo de tipos (Astro + TS) | |
| 73 | +| npm run astro … | CLI de Astro (add, check, etc.) | |
84 | 74 |
|
85 | | -### 📱 Secciones |
| 75 | +## 🗺️ Demo del Mapa |
86 | 76 |
|
87 | | -- **Hero**: Propuesta de valor principal con llamada a la acción |
88 | | -- **Features**: Seis características clave de la plataforma con iconos |
89 | | -- **Testimonials**: Respaldo de autoridades y expertos en seguridad |
90 | | -- **Pricing**: Estructura de precios de tres niveles |
91 | | -- **FAQ**: Preguntas frecuentes detalladas |
92 | | -- **Footer**: Información completa del sitio y enlaces |
| 77 | +- Página: `src/pages/demo.astro` → ruta `/demo`. |
| 78 | +- Componente principal: `src/components/interactive/MapDemoClean.tsx`. |
| 79 | +- Estilos Leaflet: `src/styles/leaflet-custom.css` (importado desde `global.css`). |
93 | 80 |
|
94 | | -### 🔧 Características Técnicas |
| 81 | +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. |
95 | 82 |
|
96 | | -- **Optimizado para SEO**: Meta tags, datos estructurados, sitemap |
97 | | -- **Listo para PWA**: Manifiesto de aplicación web y capacidades offline |
98 | | -- **Rendimiento**: División de código (code splitting), carga diferida (lazy loading), paquetes optimizados |
99 | | -- **Accesibilidad**: Cumple con WCAG 2.1 AA |
100 | | -- **TypeScript**: Seguridad de tipos completa en todo el proyecto |
| 83 | +### Nota sobre un bug histórico de marcadores “flotantes” |
101 | 84 |
|
102 | | -## 🚀 Inicio Rápido |
| 85 | +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. |
103 | 86 |
|
104 | | -### Prerrequisitos |
| 87 | +- Fix aplicado en `src/styles/leaflet-custom.css`: se retiró la animación del contenedor. |
| 88 | +- Si necesitas animaciones, aplícalas a un elemento hijo dentro del HTML del `DivIcon` (no al contenedor `.leaflet-marker-icon`). |
105 | 89 |
|
106 | | -- Node.js 18+ |
107 | | -- npm o yarn |
| 90 | +## 🔧 Solución de Problemas |
108 | 91 |
|
109 | | -### Instalación |
| 92 | +1. “npm run dev” no arranca o puerto ocupado (4321) |
110 | 93 |
|
111 | | -```bash |
112 | | -# Clona el repositorio |
113 | | -git clone https://github.com/trinity-bytes/SafeMap-Web.git |
114 | | -cd SafeMap-Web |
| 94 | +```powershell |
| 95 | +# Ver el proceso que usa el puerto 4321 |
| 96 | +$pid = (Get-NetTCPConnection -LocalPort 4321).OwningProcess |
| 97 | +Get-Process -Id $pid |
115 | 98 |
|
116 | | -# Instala las dependencias |
117 | | -npm install |
| 99 | +# Matarlo si es necesario |
| 100 | +Stop-Process -Id $pid -Force |
118 | 101 |
|
119 | | -# Inicia el servidor de desarrollo |
| 102 | +# Reiniciar el dev server |
120 | 103 | npm run dev |
121 | 104 | ``` |
122 | 105 |
|
123 | | -### Scripts Disponibles |
124 | | - |
125 | | -```bash |
126 | | -npm run dev # Inicia el servidor de desarrollo |
127 | | -npm run build # Compila para producción |
128 | | -npm run preview # Previsualiza la compilación de producción |
129 | | -npm run astro # Ejecuta comandos CLI de Astro |
130 | | -``` |
131 | | - |
132 | | -## 🌐 Despliegue |
133 | | - |
134 | | -El proyecto está listo para producción y se puede desplegar en: |
135 | | - |
136 | | -- **Netlify** (Recomendado) |
137 | | -- **Vercel** |
138 | | -- **GitHub Pages** |
139 | | -- **Servidor personalizado** |
140 | | - |
141 | | -Consulta `DEPLOYMENT.md` para instrucciones detalladas de despliegue. |
142 | | - |
143 | | -## 📊 Rendimiento |
| 106 | +1. Cerrar el servidor de desarrollo |
144 | 107 |
|
145 | | -- **Tamaño del Paquete**: ~200KB gzipped |
146 | | -- **Puntuación Lighthouse**: 95-100 en todas las métricas |
147 | | -- **First Contentful Paint**: <1.5s |
148 | | -- **Time to Interactive**: <3.5s |
| 108 | +- En la terminal donde corre: Ctrl + C (confirma si te lo pide). |
| 109 | +- En VS Code: Terminal → ícono de papelera (Terminate) o “Tasks: Terminate Running Task”. |
149 | 110 |
|
150 | | -## 🎓 Proyecto Universitario |
| 111 | +1. Dependencias corruptas |
151 | 112 |
|
152 | | -Esta página de aterrizaje fue desarrollada como parte de un proyecto universitario para el curso "Diseño y Patrones de Software", demostrando: |
153 | | - |
154 | | -- Prácticas modernas de desarrollo web |
155 | | -- Arquitectura basada en componentes |
156 | | -- Técnicas de optimización del rendimiento |
157 | | -- Cumplimiento de accesibilidad |
158 | | -- Documentación profesional |
| 113 | +```powershell |
| 114 | +Remove-Item -Recurse -Force node_modules; Remove-Item -Force package-lock.json |
| 115 | +npm install |
| 116 | +npm run dev |
| 117 | +``` |
159 | 118 |
|
160 | | -## 📚 Documentación |
| 119 | +## 🌐 Despliegue |
161 | 120 |
|
162 | | -- `DEPLOYMENT.md` - Guía de despliegue completa |
163 | | -- `PROJECT-COMPLETION.md` - Informe detallado de finalización del proyecto (si existe) |
164 | | -- Documentación de componentes dentro de los archivos fuente |
| 121 | +Guía en `DEPLOYMENT.md`. Funciona bien en proveedores como Netlify, Vercel o un servidor propio. |
165 | 122 |
|
166 | 123 | ## 🤝 Contribuciones |
167 | 124 |
|
168 | | -Este es un proyecto universitario, pero los comentarios y sugerencias son bienvenidos: |
| 125 | +Sugerencias bienvenidas: |
169 | 126 |
|
170 | | -1. Haz un fork del repositorio |
171 | | -2. Crea una rama para tu característica (`git checkout -b feature/AmazingFeature`) |
172 | | -3. Haz commit de tus cambios (`git commit -m 'Add some AmazingFeature'`) |
173 | | -4. Haz push a la rama (`git push origin feature/AmazingFeature`) |
174 | | -5. Abre un Pull Request |
| 127 | +1. Fork |
| 128 | +2. Rama: `feature/mi-cambio` |
| 129 | +3. Commit: `feat: descripción breve` |
| 130 | +4. Push y Pull Request |
175 | 131 |
|
176 | 132 | ## 📄 Licencia |
177 | 133 |
|
178 | | -Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo `LICENSE` para más detalles. |
| 134 | +MIT — ver `LICENSE`. |
179 | 135 |
|
180 | 136 | --- |
181 | 137 |
|
182 | | -**Construido con ❤️ usando Astro, React, TypeScript y Tailwind CSS** |
| 138 | +Hecho con Astro, React, TypeScript y Tailwind CSS. |
0 commit comments