ivanDev
Urban Manager

Urban Manager

Iván Bazaga

Iván Bazaga

Desarrollador Junior

# 🏙️ UrbanManager

PHP JavaScript Tailwind MySQL Supabase Node.js Apache Git Leaflet Android_Studio Google_Chrome Cloudflare

# 🌐 [Visita el proyecto en producción](https://urbanmanager.creamiproyecto.com/)


Pantalla de inicio de sesión

📱 Aplicación web para la gestión de incidencias urbanas de manera sencilla, rápida y segura.


# 📋 Tabla de contenidos


# 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

  1. Iniciar Apache y MySQL en Apache24 (o XAMPP)
  2. Configurar el Document Root para que apunte a la carpeta public/
  3. Carpeta Clonada de git UrbanManager ubicarla en C:/Apache24/htdocs/
  4. Antes de accerder a la aplicación, asegurarse de configurar la base de datos y las variables de entorno (pasos 3 y 4)
  5. Acceder a la aplicación en: http://localhost/urbanmanager

# Paso 3: Configurar la base de datos

  1. Abrir phpMyAdmin: http://localhost/phpmyadmin
  2. Crear una base de datos llamada urban
  3. Importar el archivo sql/urban.sql
  4. Editar src/Config/database.php Tutorial 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

  1. Inicia Apache y MySQL en Apache24 (o XAMPP)

  2. Abre phpMyAdmin:

    • Apache24: http://localhost/phpmyadmin
    • XAMPP: http://localhost/phpmyadmin
  3. Crea una nueva base de datos:

    • Nombre: urban
    • Cotejamiento: utf8mb4_general_ci
  4. 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

# 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

# Tutoriales

# Guías

# Arquitectura

# Glosario de términos

# 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
  1. Usuario hace clic en "Iniciar sesión con Google"
  2. Supabase verifica las credenciales
  3. Callback.php crea/actualiza el usuario en MySQL
  4. Redirige al dashboard correspondiente (usuario)
  5. 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

Licencia BY-NC-SA

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
💼 LinkedIn Iván Bazaga Perfil profesional y networking
📧 Email 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.