App Web Full-Stack (PHP/MySQL + HTML/JS)

Desarrollar una aplicación web con frontend (HTML/JS) separado de un backend (PHP en POO + MySQL) expuesto como Web Service (API REST). La app debe incluir sistema de sesión con login y al menos un CRUD completo. El proyecto se versionará en GitHub con un README detallado y aplicará medidas mínimas de seguridad.

1) Alcance funcional mínimo

Elige una entidad (ej.: biblioteca, inventario, reservas, incidencias, tareas, alumnos/cursos).
Debe incluir, como mínimo:

  • 1 entidad principal con CRUD completo: Crear, Leer (lista + detalle), Actualizar, Eliminar.
  • Autenticación de usuarios con login/logout y sesión (no solo “mock”).
  • Autorización básica: acciones protegidas solo para usuarios autenticados.
  • Listado con búsqueda y/o filtrado en el frontend.
  • Validaciones en front y back.

Sugerencia de entidades: users (para login) + una entidad de negocio como itemscoursesticketsbookings, etc.

2) Requisitos técnicos

  • Backend
    • Lenguaje: PHP (>=7.4; recomendable 8.x).
    • Estilo: POO (clases para modelos, controladores, servicios/repositorios).
    • Acceso a datos: MySQL con prepared statements (PDO o MySQLi).
    • Rutas tipo REST: /api/... que devuelvan JSON.
    • Gestión de sesión  (PHP session) 
  • Frontend
    • HTML + CSS + JS (vanilla).
    • Consume la API vía fetch.
  • Separación front/back
    • epositorio con carpetas: /frontend y /backend.
  • Base de datos
    • Script db/schema.sql + db/seed.sql (opcional) para poblar datos de prueba.
  • GitHub
    • Uso de commits frecuentes, ramas (opcional) y README completo.
  • Documentación
    • README.md en raíz con: descripción, arquitectura, requisitos, instalación, variables de entorno, comandos, endpoints, roles, capturas/GIF, autores.

3) Seguridad (mínimos obligatorios)

  • Passwords: almacenar con password_hash() / password_verify().
  • SQL InjectionPDO + prepared statements SIEMPRE.
  • Sesiones:
    • session.cookie_httponly = 1session.cookie_secure = 1 (si HTTPS), SameSite=Lax.
    • Regenerar ID de sesión tras login.
    • Tiempo de inactividad y expiración configurados.
  • Reglas de BD: usuario MySQL con mínimos privilegios (solo la base usada).
  • Errores: no exponer trazas en producción; logs internos.
  • Validación: back valida todo; front valida para UX, pero back es la autoridad
  • Backups: script/nota de backup de la BD (aunque sea manual).

 4) Entregables

  1. URL del repositorio GitHub (público o acceso concedido si privado).
  2. README.md completo.
  3. Script SQL (db/schema.sql + seed.sql opcional).
  4. Capturas o GIF corto del flujo principal (login + CRUD).
  5. Colección de Postman/Thunder Client (opcional, suma).
  6. Checklist de seguridad marcada (ver abajo).

5) Plantilla de README.md (copiar/pegar)

# Nombre del Proyecto

Descripción corta del dominio elegido y objetivo de la app.

## Arquitectura
– Frontend (HTML/JS) en `/frontend` consumiendo API REST JSON.
– Backend (PHP OOP + MySQL) en `/backend` exponiendo `/api/…`.

## Requisitos
– PHP 8.x, MySQL 5.7/8.x, servidor web (Apache/Nginx), Node (opcional).
– Copiar `.env.example` a `.env` y completar valores.

## Instalación
1. Clonar repo.
2. Importar `db/schema.sql` (y `db/seed.sql` opcional).
3. Configurar VirtualHost/servir `/backend/public` como raíz del back.
4. Configurar `FRONT_ORIGIN` en `.env` y CORS.
5. Abrir `/frontend/index.html` (o servir con dev server).

## Scripts útiles
– (Opcional) `composer install`, `php -S localhost:8000 -t backend/public`, etc.

## Endpoints (resumen)
– `POST /api/auth/login` — login (JSON body: email, password)
– `POST /api/auth/logout` — logout
– `GET /api/auth/me` — usuario autenticado
– CRUD entidad principal: `/api/items`…

## Seguridad aplicada
– Hashing, prepared statements, CSRF/SameSite, cabeceras, etc. (Checklist abajo)

## Capturas
(Insertar imágenes o GIF)

## Checklist de Seguridad
– [ ] …