Loading repository data…
Loading repository data…
Fernandosanchez1609 / repository
GoGoMap es una aplicacion web que esta destinada a volver accesible los puntos de interes en Malaga relacionados con los ODS (Objetivos de desarrollo sostenible) de la ONU
Plataforma de Localización de Puntos de Interés Sostenibles en Málaga
Descripción • Características • Stack Tecnológico • Instalación • Documentación • Contribución
GoGoMap es una aplicación web y móvil responsiva que facilita a los ciudadanos de Málaga localizar puntos de interés vinculados con los 17 Objetivos de Desarrollo Sostenible (ODS) de Naciones Unidas. Mediante geolocalización en tiempo real, la plataforma identifica automáticamente los servicios públicos y espacios sostenibles más cercanos, permitiendo a los usuarios planificar rutas e interactuar con elementos gamificados para fomentar el compromiso cívico.
Promover el conocimiento y acceso a iniciativas sostenibles en Málaga, generando consciencia ciudadana sobre los ODS mediante una experiencia interactiva e intuitiva.
| Componente | Tecnología |
|---|---|
| Lenguaje | Java 21 |
| Framework | Spring Boot 3.5.14 |
| Base de Datos | MySQL 8.0+ |
| ORM | Hibernate (Spring Data JPA) |
| Seguridad | Spring Security + OAuth2 + JWT |
| Mapeo de Objetos | MapStruct |
| Build Tool | Maven 3.8+ |
| Componente | Tecnología |
|---|---|
| Lenguaje | TypeScript 6.0 |
| Framework | React 19.2 |
| Bundler | Vite 5.0 |
| Estilos | Tailwind CSS 4.3 |
| Componentes UI | shadcn/ui + Radix UI |
| Mapas | Leaflet + React-Leaflet |
| HTTP Client | Axios |
| Router | React Router v7 |
| Validación | Zod (implícito) |
GoGoMap/
├── backend/ # API RESTful (Java Spring Boot)
│ ├── src/main/java/
│ │ └── com/esplai/backendgogomap/
│ │ ├── auth/ # Autenticación y autorización
│ │ ├── controllers/ # Endpoints REST
│ │ ├── services/ # Lógica de negocio
│ │ ├── repositories/ # Acceso a datos
│ │ ├── models/ # Entidades JPA
│ │ ├── mappers/ # DTO mapping
│ │ ├── exceptions/ # Manejo de errores
│ │ └── config/ # Configuración
│ ├── src/main/resources/
│ │ ├── application.properties
│ │ └── data/ # Datasets GeoJSON (17 ODS)
│ ├── pom.xml
│ ├── mvnw / mvnw.cmd
│ └── README.md
│
├── frontend/ # Aplicación React + TypeScript
│ ├── src/
│ │ ├── components/ # Componentes reutilizables
│ │ ├── pages/ # Páginas principales
│ │ ├── routes/ # Enrutamiento
│ │ ├── context/ # Context API (Auth, etc)
│ │ ├── api/
│ │ │ ├── services/ # Servicios API
│ │ │ ├── types/ # Tipos TypeScript
│ │ │ └── axiosConfig.ts # Configuración HTTP
│ │ ├── utils/ # Funciones auxiliares
│ │ ├── hooks/ # Custom React hooks
│ │ ├── App.tsx
│ │ └── main.tsx
│ ├── public/ # Assets estáticos
│ ├── package.json
│ ├── tsconfig.json
│ ├── vite.config.ts
│ ├── tailwind.config.js
│ └── README.md
│
└── README.md # Este archivo
git clone https://github.com/tu-organizacion/gogomaps.git
cd gogomaps
Véase backend/README.md para:
Véase frontend/README.md para:
# Terminal 1: Backend
cd backend
./mvnw spring-boot:run
# Terminal 2: Frontend
cd frontend
pnpm dev
La aplicación estará disponible en http://localhost:5173 (Vite)
API disponible en http://localhost:8080 (Spring Boot)
Cada módulo cuenta con su propia documentación:
Ver: backend/README.md
Ver: frontend/README.md
Las contribuciones son bienvenidas. Para contribuir:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
Para preguntas, sugerencias o reportar problemas:
Desarrollado con ❤️ por el equipo de GoGoMap
Promoviendo ciudadanía sostenible en Málaga
src/components/onboarding/
GoGomapOnboarding.tsx ← Componente raíz, ensambla todos los bloques
components/
Navbar.tsx ← Barra de navegación fija con scroll effect
Hero.tsx ← Sección principal con CTA
Features.tsx ← 4 tarjetas de funcionalidades
OdsShowcase.tsx ← Chips con iconos oficiales ODS
HowItWorks.tsx ← 3 pasos de uso con CTA
KarmaCallout.tsx ← Sección de gamificación con CTA
Footer.tsx ← Pie de página con links
Button.tsx ← Componente de botón reutilizable
| Sección | Componente | Descripción |
|---|---|---|
| Navbar | Navbar.tsx | Fija en la parte superior, transparente al cargar y semiopaca al hacer scroll. Incluye logo y botón de acceso |
| Hero | Hero.tsx | Titular, subtítulo, badge con tagline, dos botones CTA y foto de Málaga con halo verde |
| Funcionalidades | Features.tsx | Cuatro tarjetas glassmorphism explicando las funciones principales de la app |
| ODS | OdsShowcase.tsx | Fila horizontal con los iconos oficiales de los 6 ODS más relevantes para Málaga |
| Cómo funciona | HowItWorks.tsx | Tres pasos conectados por una línea vertical explicando el flujo de uso |
| Karma | KarmaCallout.tsx | Tarjeta destacada con ejemplo de perfil de usuario, barra de progreso y Eco Points |
| Footer | Footer.tsx | Links de navegación interna y copyright |
from-[#1B6D24] via-[#6DBD6A] to-[#A3F69C] con blobs, rejilla y partículas flotantesbg-white/10 backdrop-blur-md border border-white/10)bg-emerald-600 con shadow verde exterior)bg-white/10 backdrop-blur-md border border-white/20)El componente Button.tsx es reutilizable en toda la landing. Acepta las siguientes props:
interface ButtonProps {
label: string
href?: string
onClick?: () => void
variant?: 'primary' | 'secondary'
icon?: ReactNode
}
Uso:
<Button label="Entrar a la App" href="/login" variant="primary" icon={<Leaf className="w-4 h-4" />} />
<Button label="¿Cómo funciona?" href="#how-it-works" variant="secondary" />
La landing aplica un patrón de extracción de clases fuera del JSX, denominado extraTailwind. Todas las clases de Tailwind se definen como constantes con nombres descriptivos antes del componente, manteniendo el JSX limpio y legible:
// ✅ Correcto
const section = "relative px-6 py-8 flex flex-col items-center gap-8"
export default function MiComponente() {
return <section className={section}>...</section>
}
// ❌ Incorrecto
export default function MiComponente() {
return <section className="relative px-6 py-8 flex flex-col items-center gap-8">...</section>
}
⚠️ Este patrón extraTailwind se aplica en todos los componentes del proyecto, no solo en la landing.
Los iconos se cargan dinámicamente desde public/assets/ods/ usando el formato oficial de Naciones Unidas:
S-WEB-Goal-01.png
S-WEB-Goal-06.png
...
La función helper odsImg construye la ruta automáticamente:
function odsImg(num: number): string {
const padded = String(num).padStart(2, '0')
return `/assets/ods/S-WEB-Goal-${padded}.png`
}
El proyecto cuenta con dos páginas de error independientes que comparten el mismo estilo visual que el resto de la app (fondo #F5F5EE, colores verdes, tipografía oscura sobre fondo claro).
| Ruta | Componente raíz | Descripción |
|---|---|---|
/error | ErrorPage.tsx | Error genérico con botones Reintentar y Volver |
/* | Error404Page.tsx | Error 404 con botón Volver al Mapa |