Adminio es una landing corporativa para administración inmobiliaria con formulario de contacto y un módulo privado de reportes de asistencia. El frontend es HTML, CSS y JavaScript; el backend PHP gestiona correo SMTP, autenticación por token, sesiones y consultas MySQL.
- PHP 8.x o superior con extensiones PDO y OpenSSL.
- Composer 2.x.
- Apache, el servidor integrado de PHP u otro servidor web que ejecute PHP.
- SMTP funcional para el formulario de contacto.
- MySQL/MariaDB con la tabla
asistencia_administradorespara el módulo privado.
- Instalar dependencias:
composer install- Crear la configuración local a partir del ejemplo:
copy .env.example .envEn macOS/Linux, usar cp .env.example .env. Después completar .env con valores del entorno. Nunca usar credenciales reales en .env.example.
- Servir el proyecto desde su raíz. Con PHP:
php -S 127.0.0.1:8000Abrir http://127.0.0.1:8000/. En Apache, la URL puede ser http://127.0.0.1/adminio/ si la carpeta está dentro del document root.
- Verificar la conexión de base de datos en
db/connection.phpy que el usuario tenga permisos de lectura sobreasistencia_administradores.
.env es local y está excluido del control de versiones. .env.example documenta todas las variables necesarias:
| Variable | Uso |
|---|---|
MAIL_HOST |
Host del servidor SMTP. |
MAIL_PORT |
Puerto SMTP, normalmente 587 o 465. |
MAIL_SECURE |
Cifrado SMTP: tls o ssl. |
MAIL_USERNAME |
Usuario SMTP. |
MAIL_PASSWORD |
Contraseña o token SMTP. |
MAIL_FROM_EMAIL |
Dirección remitente. |
MAIL_FROM_NAME |
Nombre visible del remitente. |
MAIL_TO |
Dirección que recibe los leads. |
DB_HOST |
Host de MySQL/MariaDB. |
DB_PORT |
Puerto de base de datos. |
DB_NAME |
Nombre de la base de datos. |
DB_USERNAME |
Usuario de base de datos. |
DB_PASSWORD |
Contraseña de base de datos. |
DB_CHARSET |
Codificación, normalmente utf8mb4. |
ASISTENCIAS_TOKEN |
Token requerido para acceder a asistencias. |
index.htmlcargahead.htmlyfooter.htmlmediantejs/adminio.js.static/data/distritos.jsonalimenta el selector de distritos.- El formulario envía JSON a
config/envio_correo.php. config/env.phplee.envy PHPMailer envía el correo mediante SMTP.
asistencias.htmlcarga el header y footer compartidos.js/asistencias.jsvalida el token, mantiene la sesión, filtra fechas, renderiza la tabla y genera gráficos.controller/validar_acceso_asistencias.phpcompara el token conhash_equals, limita intentos y aplica bloqueo temporal.controller/estado_acceso_asistencias.phpinforma el estado de la sesión.controller/asistencia_administradores.phpdevuelve el reporte filtrado.controller/cerrar_sesion_asistencias.phpdestruye la sesión.model/AsistenciaAdministradoresModel.phpconsulta la tabla ydb/connection.phpcentraliza PDO.
adminio/
├── index.html # Landing pública
├── asistencias.html # Reporte privado de asistencias
├── head.html # Header compartido
├── footer.html # Footer compartido
├── .env.example # Plantilla segura de configuración
├── config/ # Entorno, correo y plantilla HTML
├── controller/ # Endpoints de autenticación y reportes
├── db/ # Conexión PDO
├── model/ # Acceso a datos de asistencias
├── css/ # Estilos fuente y assets compilados
├── js/ # Lógica fuente y bundles
├── static/ # Imágenes, SVG y datos públicos
└── .ia-context/ # Reglas y contexto para agentes
Después de modificar PHP:
php -l config/env.php
php -l config/envio_correo.php
php -l controller/validar_acceso_asistencias.php
php -l controller/asistencia_administradores.php
php -l controller/estado_acceso_asistencias.php
php -l controller/cerrar_sesion_asistencias.phpDespués de modificar JavaScript:
node --check js/adminio.js
node --check js/asistencias.jsProbar manualmente el formulario de contacto, el acceso con token válido e inválido, el bloqueo tras intentos fallidos, los filtros, la tabla, los gráficos y el cierre de sesión.
- Usar
composer install --no-dev --optimize-autoloaderen producción. - Mantener
.envfuera del repositorio y protegerlo de servirlo públicamente. - Usar HTTPS y un token largo, aleatorio y exclusivo para asistencias.
- Rotar inmediatamente cualquier credencial que haya sido expuesta.
- No devolver secretos, trazas ni credenciales en respuestas JSON.
- Mantener Composer y PHPMailer actualizados.
- No editar
vendor/manualmente ni modificar bundles compilados sin actualizar su fuente.
Proyecto de uso privado/comercial según las políticas del propietario del repositorio.