Plataforma de aprendizaje para Shopify: documentación en Markdown, retos prácticos, progreso por usuario y panel de administración.
| Página | URL |
|---|---|
| Inicio / retos | http://localhost:8080/ |
| Reto concreto | http://localhost:8080/module/{slug} |
| Documentación | http://localhost:8080/docs |
| Documento MD | http://localhost:8080/docs/{archivo.md} |
| Panel admin | http://localhost:8080/admin |
| Admin retos | http://localhost:8080/admin/modules |
Las URLs antiguas (index.php, docs.php, admin.php?view=…) redirigen con 301 a las rutas limpias.
La carpeta
src/se monta como raíz del servidor web (/var/www/html). Las URLs no llevan/src/en el navegador.
- Docker Desktop en ejecución
Copia el archivo de entorno de ejemplo:
cd C:\Users\Frank\Desktop\shopify-web
copy .env.example .envEn macOS o Linux:
cp .env.example .envEl valor por defecto de .env.example ya apunta a la base de datos del docker-compose.yml. Solo edita .env si usas otra URL (por ejemplo Neon en producción).
docker-compose upO en segundo plano:
docker-compose up -dAbre http://localhost:8080 en el navegador.
- Entra con una cuenta admin (por defecto
superuser/super1user2). - Abre http://localhost:8080/admin.php o el enlace Panel de Admin en la barra lateral (solo visible para administradores).
En el admin puedes:
- Crear y editar retos (módulos)
- Gestionar categorías
- Subir, ocultar o eliminar documentos
.md - Ver usuarios y su progreso
- Documentación: barra lateral → Documentación, o http://localhost:8080/docs.php
- Documentación de ejemplo (Git):
src/docs/seed/*.md— viajan con el repo. - Subidas desde admin (producción):
src/docs/md/*.md— no están en Git; un deploy no las sobrescribe. - Retos: definidos en PostgreSQL; el contenido teórico puede enlazar un
.mdpor nombre de archivo.
Los documentos ocultos se guardan en src/docs/.hidden_docs.json (tampoco en Git).
| Qué | Dónde | En Git |
|---|---|---|
| Guías de ejemplo | docs/seed/ |
Sí |
| Subidas en admin | docs/md/ |
No (.gitignore) |
| Ocultar/mostrar | docs/.hidden_docs.json |
No |
Con Docker en producción, monta un volumen en docs/md (ver docker-compose.prod.yml):
docker compose -f docker-compose.prod.yml up -d --buildEn hosting sin Docker, asegúrate de que el deploy no borre la carpeta docs/md/ del servidor (rsync con exclusión, o disco persistente).
La conexión está en src/db.php y usa RedBeanPHP (rb-postgres.php).
| Entorno | Cómo se conecta |
|---|---|
| Docker local | DATABASE_URL con host db (ver .env.example) o valores por defecto en db.php |
Sin DATABASE_URL |
Fallback en código: host=db, usuario myuser, BD mydatabase |
| Producción | Variable de entorno DATABASE_URL del hosting (Neon, Render, etc.) |
Formato de DATABASE_URL:
postgres://usuario:contraseña@host:5432/nombre_bd
shopify-web/
├── .env.example # Plantilla de variables (copiar a .env)
├── docker-compose.yml # PostgreSQL + PHP/Apache
├── Dockerfile
└── src/ # Código montado en http://localhost:8080/
├── .htaccess # Rewrite → rutas limpias
├── routes.php # Helpers de URL (route_home, route_module, …)
├── index.php # Hub principal y retos
├── docs.php # Visor de documentación
├── admin.php # Panel de administración
├── db.php # Conexión RedBean / PostgreSQL
├── auth.php # Sesión y roles
├── auth_handlers.php # Login / registro
├── security.php # CSRF y Markdown seguro
├── admin_actions.php # Acciones POST del admin
├── sidebar.php
├── styles.css # Layout y UI global
├── markdown.css # Contenido renderizado desde .md
├── docs.css # Listado de documentación (docs.php)
├── docs_lib.php # Rutas seed vs subidas
├── docs/seed/ # Markdown de ejemplo (en Git)
└── docs/md/ # Subidas admin (ignorado por Git)
- Los cambios en
src/se reflejan al recargar el navegador (volumen Docker). - Para parar:
Ctrl+Cen la terminal odocker-compose down. - PostgreSQL expone el puerto
5432en local si necesitas un cliente SQL externo.
No hace falta tocar PHP para usar la plataforma: Docker, navegador y, para administrar contenido, la cuenta admin.