Urban Manager
Iván Bazaga
Desarrollador Junior
# 🏙️ UrbanManager
# 🌐 [Visita el proyecto en producción](https://urbanmanager.creamiproyecto.com/)

📱 Aplicación web para la gestión de incidencias urbanas de manera sencilla, rápida y segura.
# 📋 Tabla de contenidos
- Recursos de Terceros
- Acerca del Proyecto
- Características
- Inicio con Docker - RECOMENDADO[🚀LA FORMA MÁS FÁCIL DE INICIAR EL PROYECTO🚀]
- Instalación Rápida
- Clonar el repositorio
- Configurar Apache24
- Configurar la base de datos
- Configurar variables de entorno [MUY IMPORTANTE / ESPECIAL ATENCION AL POSDATA 😰]
- Configuración en Localhost
- Configurar variables de entorno [MUY IMPORTANTE / ESPECIAL ATENCION AL POSDATA 😰]
- Tutoriales Disponibles
- Tecnologías
- Estructura del Proyecto
- Requisitos
- Cómo Funciona
- Licencia
- Autor
# Recursos de Terceros
El proyecto utiliza librerías y servicios de terceros. Consulta la documentación completa en:
➡️ → Recursos de Terceros
# Acerca del Proyecto
🏙️ UrbanManager es una aplicación web que permite a los ciudadanos reportar problemas en su ciudad (basura, alumbrado, calzadas, etc.) y a los administradores gestionan esos reportes.
# Características
# 👤 Para los Ciudadanos/Usuarios
- 🔐 Iniciar sesión con Google
- 📸 Crear reportes con fotos
- 🗺️ Ver ubicación en mapa interactivo
- 📊 Seguir el estado de sus reportes
- ✏️ Editar reportes pendientes
# 👨💼 Para Administradores
- 📋 Ver todos los reportes
- 🔄 Cambiar estado (pendiente → proceso → resuelto)
- 🔍 Filtrar y ordenar reportes
- 📈 Estadísticas en tiempo real
- ⏱️ Auto-refresh cada 30 segundos
# Instalación Rápida
# Paso 1: Clonar el repositorio
git clone https://github.com/IvBanzaga/UrbanManager.git
cd UrbanManager# Paso 2: Configurar Apache24
- Iniciar Apache y MySQL en Apache24 (o XAMPP)
- Configurar el Document Root para que apunte a la carpeta
public/ - Carpeta Clonada de git
UrbanManagerubicarla enC:/Apache24/htdocs/ - Antes de accerder a la aplicación, asegurarse de configurar la base de datos y las variables de entorno (pasos 3 y 4)
- Acceder a la aplicación en: http://localhost/urbanmanager
# Paso 3: Configurar la base de datos
- Abrir phpMyAdmin: http://localhost/phpmyadmin
- Crear una base de datos llamada
urban - Importar el archivo
sql/urban.sql - Editar
src/Config/database.phpTutorial de Configuración
# Paso 4: Configurar variables de entorno
Crear archivo .env en la raíz del proyecto:
# Google OAuth
G_OAUTH_CLIENT_ID=tu_client_id.apps.googleusercontent.com
G_OAUTH_CLIENT_SECRET=tu_client_secret
# Supabase
SUPABASE_URL=LINK_TO_YOUR_SUPABASE_INSTANCE
SUPABASE_ANON_KEY=KEY_FOR_ANON_ACCESS
SUPABASE_SERVICE_KEY=KEY_FOR_SERVICE_ACCESS📝 Nota: Las credenciales de Supabase las obtienes creando un proyecto gratuito en supabase.com y en Google OAuth
⏰ POSDATA: En el proyecto que he enviado al Tutor tiene los archivos .env + usuario.md con las credenciales del usuario admin para accder como admnistrador a la aplicación , para no tener que crear todas las credenciales de nuevo. Ojo, si realizas la instalacion con el incio rapido clonando el repositorio, hay no los encontraras .env + usuario.md, solo estan disponibles para el Tutor . Igualmente si quieres crear tus propias credenciales de Supabase y Google OAuth puedes seguir los siguientes tutoriales:
➡️ Tutorial Credenciales Supabase ➡️ Tutorial Credenciales Google OAuth
# Configuración en Localhost
# Opción 1: Apache24 (XAMPP)
# 📁 1.1. Ubicación del proyecto
Copia la carpeta UrbanManager a la carpeta htdocs de tu servidor:
- Apache24:
C:\Apache24\htdocs\UrbanManager - XAMPP:
C:\xampp\htdocs\UrbanManager - Antes de accerder a la aplicación, asegurarse de configurar la base de datos y las variables de entorno (pasos 1.2 / 1.3 y 1.4)
- Acceder a la aplicación en: http://localhost/urbanmanager
# 1.2. Configurar base de datos
Inicia Apache y MySQL en Apache24 (o XAMPP)
Abre phpMyAdmin:
- Apache24:
http://localhost/phpmyadmin - XAMPP:
http://localhost/phpmyadmin
- Apache24:
Crea una nueva base de datos:
- Nombre:
urban - Cotejamiento:
utf8mb4_general_ci
- Nombre:
Importa el archivo SQL:
- Ve a la pestaña "Importar"
- Selecciona el archivo
sql/urban.sql - Haz clic en "Continuar"
# 1.3. Configurar conexión a la base de datos
Edita el archivo src/Config/database.php:
# 1.4. Configurar variables de entorno
Crea o edita el archivo .env en la raíz del proyecto:
# Google OAuth
G_OAUTH_CLIENT_ID=tu_client_id.apps.googleusercontent.com
G_OAUTH_CLIENT_SECRET=tu_client_secret
# Supabase
SUPABASE_URL=LINK_TO_YOUR_SUPABASE_INSTANCE
SUPABASE_ANON_KEY=KEY_FOR_ANON_ACCESS
SUPABASE_SERVICE_KEY=KEY_FOR_SERVICE_ACCESS📝 Nota: Las credenciales de Supabase las obtienes creando un proyecto gratuito en supabase.com y en Google OAuth
⏰ POSDATA: En el proyecto que he enviado al Tutor tiene los archivos .env + usuario.md con las credenciales del usuario admin para accder como admnistrador a la aplicación , para no tener que crear todas las credenciales de nuevo. Ojo, si realizas la instalacion con el incio rapido clonando el repositorio, hay no los encontraras .env + usuario.md, solo estan disponibles para el Tutor . Igualmente si quieres crear tus propias credenciales de Supabase y Google OAuth puedes seguir los siguientes tutoriales:
➡️ Tutorial Credenciales Supabase ➡️ Tutorial Credenciales Google OAuth
# Tutoriales Disponibles
# Tutoriales Backend y autenticación
- 🔑 Supabase | Configuración de autenticación |
- 👑 Tutorial:Login con Rol Admin / para Supabase - Asignar rol de admin
- 🔗 Google OAuth | Configuración de login con Google |
# Tutoriales Mapas y geolocalización
- 📍 API Nominatim | Geocodificación de direcciones |
- 🗺️ Leaflet | Librería de mapas interactivos |
- 🌎 OpenStreetMap | Mapas gratuitos y código abierto |
# Tutorial Mobile Android APK
- 📱 Tutorial: APK Android con Capacitor - Cómo crear y configurar la APK |
# Tutoriales
- 📊 Tutorial: Panel Admin - Gestión de reportes
- 🚀 Tutorial: Despliegue Namecheap - Publicar en producción
# Guías
- 🔓 Tutorial: Autenticación - Cómo funciona el login
- 📝 Tutorial: Crear Reporte - Guía paso a paso
- 🔌 Tutorial: API Endpoints - Referencia de APIs
- 🎨 Tutorial: Estilos CSS - Personalización de estilos
# Arquitectura
# Glosario de términos
- 📚 Glosario de Términos | Diccionario de términos técnicos |
# Scripts Útiles
# Ver estado de Git
git status
# Subir cambios
git add .
git commit -m "descripción del cambio"
git push# Tecnologías
| Tecnología | Uso | Documentación |
|---|---|---|
| 🐘 PHP 8.x | Backend y base de datos | php.net |
| 📜 JavaScript | Interactividad frontend | developer.mozilla.org |
| 💨 Tailwind CSS | Estilos CSS | tailwindcss.com |
| 🗄️ MySQL | Base de datos | dev.mysql.com |
| 🗺️ Leaflet | Mapas interactivos | leafletjs.com |
| 🌎 OpenStreetMap | Mapas gratuitos | openstreetmap.org |
| 📍 Nominatim | Geocodificación de direcciones | nominatim.org |
| 🔐 Google OAuth | Autenticación con Google | developers.google.com |
| 📦 Git | Control de versiones | git-scm.com |
| 🟢 Node.js | Compilación de Tailwind CSS | nodejs.org |
| 📦 npm | Gestión de dependencias | npmjs.com |
| 🔥 Supabase | Autenticación OAuth | supabase.com |
| 🌐 Apache24 | Servidor web | apachelounge.com |
| 📱 Capacitor | App Android | capacitorjs.com |
# Estructura del Proyecto
UrbanManager/
│
├── 📁 public/ # Punto de entrada público
│ ├── index.php # Front Controller (enrutador principal)
│ ├── .htaccess # Configuración de reescritura de URL
│ ├── 📁 assets/ # Recursos estáticos
│ │ ├── 📁 css/
│ │ │ ├── style.css # Estilos compilados (Tailwind + personalizado)
│ │ │ └── tailwind.css # Archivo fuente de Tailwind (no modificar)
│ │ ├── 📁 js/
│ │ │ ├── 📁 admin/
│ │ │ │ └── adminDashboard.js # Lógica del dashboard admin
│ │ │ └── 📁 user/
│ │ │ ├── userDashboard.js # Lógica del dashboard usuario
│ │ │ ├── userReport.js # Lógica para crear/editar reportes
│ │ │ └── userProfile.js # Lógica para editar perfil
│ │ └── 📁 img/
│ ├── 📁 uploads/reports/ # Almacenamiento de archivos subidos
│ ├── 📁 apk/ # APK de la aplicación Android
│ │ └── urbanmanager.apk
│ ├── 📁 auth/ # Puntos de entrada para autenticación
│ └── 📁 views/ # Puntos de entrada para vistas
│
├── 📁 src/ # Código fuente (no accesible desde web)
│ ├── 📁 Config/ # Configuración del proyecto
│ │ ├── database.php # Conexión a MySQL
│ │ ├── supabase.php # Configuración de Supabase
│ │ └── env.php # Variables de entorno
│ │
│ ├── 📁 Controllers/ # Controladores de la API REST
│ │ ├── _auth.php # Autenticación común (se incluye en todas las APIs)
│ │ ├── reports.php # API de reportes (CRUD)
│ │ ├── profile.php # API de perfil de usuario
│ │ ├── media.php # API de medios (fotos)
│ │ ├── user.php # API de gestión inicial de usuario
│ │ ├── refresh.php # API de auto-refresh del panel admin
│ │ └── AuthController.php # Controlador de autenticación
│ │
│ ├── 📁 Middleware/ # Middlewares de seguridad
│ │ ├── AuthMiddleware.php # Verificación de autenticación
│ │ └── AdminMiddleware.php # Verificación de rol admin
│ │
│ ├── 📁 Views/ # Vistas PHP (HTML + PHP)
│ │ ├── 📁 admin/
│ │ │ └── AdminDashboardView.php
│ │ ├── 📁 auth/
│ │ │ ├── login.php
│ │ │ ├── callback.php
│ │ │ └── logout.php
│ │ └── 📁 user/
│ │ ├── UsuarioDashboardView.php
│ │ ├── profileModal.php
│ │ ├── reportModal.php
│ │ └── 📁 components/
│ │ └── report-card.php
│ │
│ ├── 📁 Layout/ # Componentes reutilizables
│ │ ├── header.php
│ │ ├── footer.php
│ │ └── navigation.php
│ │
│ ├── 📁 Helpers/ # Funciones auxiliares
│ │ └── mapeos.php
│ │
│ └── Router.php # Enrutador centralizado
│
├── 📁 routes/ # Definición de rutas de la API
│ └── web.php
│
├── 📁 android/ # Proyecto Android (Capacitor)
│ └── android/
│
├── 📁 sql/ # Scripts de base de datos
│ └── urba.sql
│
├── 📁 docs/ # Documentación del proyecto
│ ├── anexo.md
│ ├── tutoriales/
│ ├── referencias/
│ └── ...
│
├── tailwind.config.js # Configuración de Tailwind
├── package.json # Dependencias npm
├── .env # Variables de entorno (NO subir a Git)
└── LICENSE.md # Licencia del proyecto# Requisitos
| Requisito | Versión | Para qué sirve |
|---|---|---|
| 🌐 Apache24 | 2.4+ | Servidor web (o XAMPP) |
| 🐘 PHP | 8.x | Procesamiento del backend |
| 🗄️ MySQL | 8.x+ | Base de datos relacional |
| 🟢 Node.js | 18+ | Compilar Tailwind CSS |
| 📦 Git | Cualquiera | Control de versiones |
| 🔥 Cuenta Supabase | Gratis | Autenticación con Google OAuth |
| 📱 Android Studio | 2023+ | Compilar APK (opcional) |
# Cómo Funciona
# 🔐 Flujo de Autenticación
Usuario → Login.php → Supabase OAuth → Callback.php → Dashboard- Usuario hace clic en "Iniciar sesión con Google"
- Supabase verifica las credenciales
- Callback.php crea/actualiza el usuario en MySQL
- Redirige al dashboard correspondiente (usuario)
- Para crear un usuario con rol de admin . → Tutorial: Rol Admin
# 📝 Flujo de un Reporte
1. Ciudadano crea reporte → POST /src/Controllers/reports.php
2. Imagen se guarda → POST /src/Controllers/media.php
3. Admin ve el reporte → GET /src/Controllers/refresh.php
4. Admin cambia estado → POST /src/Controllers/reports.php# 🏗️ Arquitectura MVC Simplificada
┌─────────────────────────────────────────────────┐
│ VISTA (Views) │
│ - Archivos .php con HTML │
│ - Muestran la interfaz al usuario │
│ Ubicación: src/Views/ │
├─────────────────────────────────────────────────┤
│ CONTROLADOR (API) │
│ - public/api/*.php │
│ - Reciben peticiones y devuelven JSON │
│ Ubicación: public/api/ │
├─────────────────────────────────────────────────┤
│ MODELO (Database) │
│ - src/Config/database.php │
│ - Consultas SQL directas (sin ORM) │
│ Ubicación: src/Config/ │
└─────────────────────────────────────────────────┘# 📝 Convenciones de Código
# 📜 Variables (JavaScript)
// camelCase para variables
let reporteIdActual = 0;
let totalReportes = 10;
// MAYÚSCULAS para constantes
const MAXIMO_INTENTOS = 3;
const API_URL = '/urbanmanager/api/';# ⚙️ Funciones (JavaScript)
// verbo + acción en español
async function obtenerReportes() { ... }
function mostrarModal() { ... }
function calcularTotales() { ... }# 🐘 Variables (PHP)
// snake_case para variables PHP
$usuario_actual = 'Juan';
// camelCase también válido
$usuarioActual = 'Juan';# 💬 Comentarios
/* Comentario multilinea estilo C */
// Comentario de una línea# ⚠️ Archivos Importantes
| Archivo | Qué hace | Dificultad |
|---|---|---|
📝 src/Controllers/reports.php |
API básica de CRUD | Facil |
📄 src/Views/user/UsuarioDashboardView.php |
Vista con PHP+HTML | Facil |
📜 public/assets/js/user/userDashboard.js |
JavaScript con async/await | Medio |
🔐 src/Controllers/_auth.php |
Autenticación con sesiones | Medio |
🔗 src/Views/auth/callback.php |
OAuth con Supabase | Avanzado |
# Licencia

Este proyecto está bajo licencia de Uso Privado con Attribution-NoCommercial-ShareAlike (BY-NC-SA).
Para más detalles sobre los términos de uso, restricciones y condiciones, consulte el archivo LICENSE.md.
Resumen de la licencia:
- ✅ Permitido: Uso personal y aprendizaje
- ✅ Permitido: Compartir y adaptar el material con Attribution
- ❌ Prohibido: Uso comercial sin autorización
- ❌ Prohibido: Distribución no autorizada
# Autor
# 👨💻 **Iván Bazaga**
Desarrollador Frontend especializado en Angular y ecosistemas web modernos. Estudiante intermedio con pasión por crear aplicaciones web modernas y eficientes.
# 📞 Información de Contacto
| Plataforma | Enlace | Descripción |
|---|---|---|
| 📦 GitHub | @IvBanzaga | Repositorios y proyectos de código |
| Iván Bazaga | Perfil profesional y networking | |
| ivan.cpweb@gmail.com | Contacto directo para oportunidades | |
| 🌐 Portfolio | Ivandevs.netlify.app | Showcase de proyectos y skills |
| 🏙️ Proyecto | Creamiproyecto.com | Landing page del proyecto |
# 🧰 Stack Tecnológico de Especialización
Frontend: Java SpringBoot • Astro • Angular 20 • TypeScript • RxJS • Bootstrap 5 • HTML5 • CSS3
Backend: PHP 8.x • Node.js • Express • MySQL
Tools: Angular CLI • Git • VS Code • Prettier • npm
Learning: NgRx • PWA • Oracle • Supabase© 2026 Iván Bazaga. Todos los derechos reservados.
Comparte este proyecto
¿Te ha gustado este proyecto? ¡Compártelo con tu red!