Proyecto WEB en Laravel con backend Filament y api sanctum para gestionar chistes, preguntas y adivinanzas que se pueden consumir externamente mediante bots, pwa o spa
Repositorios del proyecto:
- GitHub https://github.com/raupulus/www.jaja.raupulus.dev
- GitLab https://gitlab.com/raupulus/www.jaja.raupulus.dev
📺 Ver vídeo de presentación completo
El objetivo principal de este proyecto es tener una web y API de código abierto dónde pueda colaborar la comunidad en su desarrollo y además tener un repositorio de contenido (chistes, preguntas, adivinanzas) comunitario en la web https://jaja.raupulus.dev dónde cualquiera puede subir sugerencias de contenidos.
🤖 Bot de Discord: Invitar a tu servidor
🌐 Síguenos en nuestras redes sociales:
- Bluesky: https://bsky.app/profile/jajupulus.bsky.social
- Telegram: https://t.me/jajaproject
- Mastodon: https://mas.to/@jajupulus
- Twitter/X: https://x.com/jajupulus
¡Únete a nuestra comunidad y mantente al día con las últimas actualizaciones del proyecto!
Hemos desarrollado una api para que puedas utilizar los recursos aportados por la comunidad.
Puedes entrar a la documentación en https://jaja.raupulus.dev/doc.
Esta api dispone de un endpoint público sin necesidad de registro o cuenta de usuario que devuelve un contenido aleatorio de entre todos los disponibles.
También dispone de más endpoints para poder filtrar por tipo de contenido, categorías y grupos de contenidos los cuales si necesitan una cuenta de colaborador que solo se puede conseguir contactándonos.
Instalar dependencias para desarrollo:
composer installInstalar dependencias para producción:
composer install --no-devphp artisan key:generatephp artisan storage:linkEjemplo para postgresql
sudo -u postgres createdb -O web -T template1 jaja_raupulusphp artisan migratephp artisan make:filament-userActualmente, no vemos interesante un sistema de roles más fuerte y por defecto todos los usuarios se crean sin acceso al panel de administración en /admin.
Para garantizar el acceso (declarar un usuario como administrador) deberás actualizar manualmente el role de ese usuario en la base de datos (role_id=1) que por defecto será 2.
Esto queda así para que en el futuro si escala el sistema de roles (nuevo role como editor, gestión de roles en el panel...) podamos actualizar manteniendo la misma enumeración de roles, pero actualmente las necesidades son muy básicas y no llega a ser interesante aumentar la complejidad y querys.
php artisan db:seedTen en cuenta que tras modificar la documentación para los endpoints de la API necesitamos ejecutar el comando para generar la nueva versión actualizada:
php artisan scribe:generateEs interesante revisar que en nuestro .env para desarrollo tengamos en la variable "SCRIBE_AUTH_KEY" el token de un usuario de pruebas para que se obtengan peticiones reales y aparezcan los ejemplos de peticiones correctas.
Sitio Principal: /
Documentación api: /docs
Panel Administrador: /admin
Login Administrador: /admin/login
Panel Usuarios: /panel
Login Usuarios: /panel/login (También /login que redirige al anterior)
Documentación: https://filamentphp.com/docs/
php artisan make:filament-resource Content --generateHeaders:
- Accept: application/json
- Content-type: application/json
- Añadir Autenticación Bearer token
Documentación:
- /docs
Listado de tareas pendientes a realizar antes de la primera publicación
- Añadir favicon
- Crear y Añadir logotipo en distintas versiones
- Preparar metadatos SEO
- Crear y añadir imágenes para previsualización de redes sociales
- Rellenar información en secciones del home
- Limitar subida desde el frontend a 2mb por imagen adjunta y bloquear otro tipo de contenido
- Mejorar textos en metadatos para SEO dentro de layout "head.blade.php"
- Crear página de normas al publicar/compartir y adjuntarlas en formulario de envío.
- Crear página de política de privacidad
- Crear página de política de cookies
- Crear página de condiciones de uso indicando que el contenido subido se cede para ser usado por cualquiera
- Crear página de agradecimiento/colaboradores tanto de github como de uploaders/users dónde se añada la cantidad de subidas que ha realizado y enlazarlo en el home
- Crear Licencia para el proyecto (GPLv3?)
- Añadir tipografía más estable/uniforme, actualmente se usa la del sistema "-apple-system"
- Añadir enlaces a páginas creadas anteriormente en todos los apartados que se dejaron con enlaces "#"
- Añadir a la página de agradecimientos (quizás también a la principal??) Resumen de estadísticas con cantidades de chistes subidos
- Crear estadísticas para los usuarios que han subido más contenido y dinamizarlas
- Limitar tamaño del nick en formulario a 25 mirar cuanto cuadra bien en las tarjetas para no permitir aquí 255 y romper diseños
- Añadir previsualización de imagen al subir sugerencia de contenido
- Crear Validation request para endpoint login api de usuario
- Personalizar metatags en páginas (imágen si tuviera)
- Crear .env para producción
- Crear archivo de configuración para sitio virtual para apache
- Cambiar acceso a panel de usuario desde "/user" a "/panel"
- Mirar si usar el login en el panel de usuarios para no utilizar el de admin como ahora
- Quitar widget de documentación en el panel de usuarios
- Añadir estadísticas en el backend para contenidos y usuarios
- Añadir colaboradores de software a la db e intranet (tabla para colaboradores y otra con proyectos asociados a estos) estos colaboradores podrán editar sus proyectos desde la intranet, también añadir nuevos pero sin cambiar estado "draft"
- Dinamizar colaboradores y proyectos para tener su propia página con listado de proyectos y ver cada proyecto individual, esto permite tener más contenido indexado y dar visibilidad a los colaboradores. Habrá que rediseñar el bloque de tarjetas para enlazar a ver colaborador con su listado de proyectos y cada proyecto a su página individual del mismo.
- Crear página con listado de páginas "/pages/index"
- Revisar migraciones y validaciones para el campo "nick" que no debe permitir más de 50 carácteres
- Crear comando laravel para regenerar las estadísticas cada 30m y añadirlo al cron
- Crear comando laravel para generar sitemap.xml y añadirlo a cron de laravel
- Añadir recaptcha v3 en formulario de envío
- Revisar todos los iconos de las secciones en menú lateral del backend y poner uno adecuado para cada CRUD
- Aceptación de cookies
- En la api, las respuestas de los contenidos/grupos/tipos/categorías no se adapta a plural/singular según la cantidad de los devueltos
- Generar documentación de api phpdoc con automatización
- Enlazar documentación api en la página de API
- Implementar middleware limitando peticiones para todas las rutas api
- Habilitar indexado en motores de búsqueda
- Mirar para quitar indexado en motores de búsqueda las rutas que comiencen por /api
- Implementar gestión de preguntas tipo quiz con respuestas en el frontend
- Frontend: Si seleccionan pregunta tipo quiz, debería mostrar 4 opciones (máximo) requeridas 2 (mínimo) para las respuestas
- Implementar y mostrar las opciones adicionales en contenido cuando sea de tipo quiz
- Implementar y mostrar las opciones adicionales en sugerencias cuando sea de tipo quiz
- Implementar que al aprobar sugerencias, también se pasen sus opciones en caso de ser de tipo quiz
- Obtener dirección ip real cuando viene de un proxy/cdn (por la abstracción que hace cloudflare)
- Ocultar Opciones para tipos que no son "quiz"
- Añadir opciones para quiz en panel de usuarios, solo lo tengo en el de admin actualmente
- Poner las categorías en sugerencias y contenidos opcionales, si no hay ninguna añadir internamente "General"
- Tras aprobar sugerencia, debería desaparecer el botón de aprobar para no añadir duplicados
- Prevenir sitemap error al generar en server por permisos. Contemplar rellenar datos en lugar de eliminar completamente.
- Del endpoint/random descartar contenido del grupo de chistes para adultos
- Al publicar en redes sociales, descartar contenido del grupo de chistes para adultos
- Revisar categorías en backend -> editar sugerencias, debería tomar "General" por defecto y no toma ninguna ahora
- En panel de admin > Escritorio, cambiar consultas para estadísticas de sugerencias y contar las eliminadas
- Mejorar página principal y enlazar a redes sociales
- Añadir endpoint para poder subir sugerencias de chistes
- Mejor control de contenido poco apropiado para todos los públicos
- Mejorar filtros de contenido en endpoints de rutas aleatorias
- Implementar gestión de reportes
- Añadir gestión de reportes en el backend
- Añadir endpoint para reportar contenido
- Crear listado de chistes/adivinanzas filtrando por grupos en el frontend
- Crear listado de chistes/adivinanzas filtrando por tipos en el frontend
- Crear listado de chistes/adivinanzas filtrando por categorías en el frontend
- Añadir al sitemap generator las nuevas vistas para listar grupos/tipos/categorías
- Plantear cacheado para listado de categorías/tipos/grupos al cargar las páginas, reduciendo consultas
- Enlazar listado de tipos, categorías y grupos en el home con 3 tarjetas en una fila
- Mejorar la descripción de todos los tipos
- Añadir imágenes y descripciones a los grupos
- Añadir imágenes y descripciones a los tipos
- Crear enlace para obtener bot de discord en el home con un icono muy visual
- Diseñar imágenes para todas las páginas
- Revisar todas las páginas para asegurar que tienen metadatos y descripciones bien formadas
- Añadir selector de grupos en formulario de subida
- Crear listado y filtros de contenidos al entrar en un grupo o categoría, crear vista para solo mostrar 3 y botón para ir refrescando contenido
- Añadir ruta "content.group.content.random" a sitemap
- Añadir ruta "content.categoria.content.random" a sitemap
- En estadísticas del backend, sugerencias total, pendientes y aprobadas no se calculan bien
- Añadir botón en panel admin para publicar en el momento en todas las redes sociales un contenido concreto o una entrada manual
- Mover a endpoint público obtener contenido filtrando tipo: chiste/adivinanza/quiz
- Aumentar límites de peticiones en los endpoints de la api para usuarios autenticados
- Añadir "options" al devolver contenido de tipo quiz
- Implementar lista de exclusión de ips al validar límites de peticiones
- Crear endpoint para recibir un nick de un usuario y devolver un contenido random de él
- Cuando se apruebe una sugerencia y el nick de usuario exista, se debe asociar al usuario para no tener uploaders duplicados. Mirar raupulus https://jaja.raupulus.dev/pagina/agradecimientos
- Revisar lista de categorías, creo que hay demasiadas y resulta incómodo... reducir lista y ser más genérico al etiquetar
- En estadísticas de aportaciones por usuarios, descartar eliminados del filtro (bloque con carita, quiz, brain suma eliminados)
- El bloque de resumen en la home en pantallas medianas con zoom muestra la tercera tarjeta debajo a la izquierda, centrar
- Añadir en el panel de admin botón para ejecutar comando artisan y refrescar tanto el caché como el sitemap.
- Al forzar delete en contenidos, poner evento para eliminar la imagen del hdd
- Al forzar delete en sugerencias, poner evento para eliminar la imagen del hdd
- Añadir imágenes a todos los grupos
- Añadir imágenes a todos los tipos
- Hacer bot para discord
- Vigilar captcha, da la sensación que alguna vez falla la carga pero no estoy seguro si es timeout por tardar (caducado)
- Revisar consultas api para tener en SELECT solo valores que se devuelven en la respuestas
- Gestión de tokens en panel de usuarios
- Implementar ordenar en relaciones
- Unificar subidas de imágenes a un método que pueda reutilizar en todos lados en lugar de duplicar tanto código ahí
- Al mostrar preguntas de tipo quiz, el formato de las posibles respuestas es una lista ordenada sin estilos...
- Generar thumbnails de todas las imágenes a 120px, 300px y 600px?
- Importar/exportar contenidos en excel+csv
- Frontend: Crear efecto de jajas cayendo por el fondo de la web con distintas longitudes "ja" "jaja" "aj"... y opacidad
- Crear contador de visita a endpoint bloqueando contador por día u hora restringiendo ip+domain
- Crear página de mantenimiento para cuando se esté actualizando (para php artisan down)
- En las tarjetas (frontend) de contenido total, colaboradores y risas generadas... enlazar a secciones?
- Al editar adivinanzas desde el grupos->modal de contenido, no tengo la selección de preguntas correctas. Plantear viabilidad.
- Bajar timeout de envío para fomularios y tras enviar la primera vez enviar timeout para que no sorprenda a la gente cuando intenta enviar por segunda vez
- Reportar contenido desde la web
