Sobre el proyecto

Pagoda es un kit de inicio de desarrollo web full-stack y panel de administración escrito en Go. No es un framework sino un repositorio plantilla: se clona en lugar de usar `go get`, y luego se adapta el código a tu propia aplicación. Su objetivo declarado es proporcionar gran parte de la funcionalidad que se espera de un framework web completo, manteniendo todo el código bajo tu control, sin interfaces estrictas ni dependencias forzadas. Fundamentos y stack - Backend: Echo (framework HTTP), Ent (ORM con generación de código), Gomponents (componentes HTML escritos en Go). - Frontend: HTML renderizado en el servidor con HTMX para AJAX/actualizaciones parciales, Alpine.js para comportamiento del lado del cliente, y DaisyUI sobre Tailwind CSS para estilos. El proyecto enfatiza la construcción de interfaces modernas sin escribir JavaScript ni CSS, e incluso sin escribir HTML directamente. - Almacenamiento: SQLite es la base de datos predeterminada, también usada para colas de tareas en segundo plano persistentes; el caché es en memoria. El README señala que Postgres y Redis eran anteriormente los predeterminados y apunta a una rama sin mantenimiento para esa configuración. Funcionalidad incluida - Contenedor de servicios con inyección de dependencias para autenticación, caché, configuración, base de datos, archivos, correo, ORM, tareas, validador y servicios web; se puede inicializar y cerrar correctamente en una sola llamada y se pasa a los manejadores de rutas. - Configuración mediante YAML con sobrescritura por variables de entorno usando viper, además de cambio de entorno (notablemente un entorno de prueba). - Auto-migraciones de base de datos a través de Ent, y una base de datos de prueba separada (SQLite en memoria por defecto). - Tipos de entidad ORM para User y PasswordToken, con ayudantes en el Makefile para crear y generar nuevos tipos de entidad. Eliminar Ent también elimina el panel de administración dinámico. - Sesiones mediante Gorilla sessions, almacenadas en cookies y cifradas; el README advierte cambiar la clave de cifrado predeterminada para entornos en producción. - Autenticación: inicio/cierre de sesión, tokens de restablecimiento de contraseña (hasheados con bcrypt, caducidad configurable), registro, una marca de administrador en los usuarios, middleware para requerir autenticación, sin autenticación, o acceso de administrador, y verificación por correo electrónico. - Panel de administración con generación de código, control de acceso y una hoja de ruta; las capturas de pantalla muestran vistas de listado/edición de entidades y monitoreo de colas de tareas. - Enrutamiento con middleware personalizado, manejadores, manejo de errores, redirecciones y ayudantes de prueba (servidor HTTP, ayudantes de solicitud/respuesta, Goquery). - Capa de UI: componentes basados en Gomponents, diseños, páginas, formularios con procesamiento de envío, validación en línea y protección CSRF, modelos, iconos, caché de nodos y mensajes flash. - Servicios adicionales: paginador, caché (establecer/obtener/vaciar datos y etiquetas), tareas con colas, despachador y monitoreo, cron, carga de archivos y archivos estáticos/públicos con cache-busting y cabeceras cache-control, correo electrónico, HTTPS y registro de logs. Primeros pasos Instala Go, clona el repositorio, ejecuta `make install` para herramientas opcionales (generador de Ent, Air para recarga en vivo, Tailwind CLI), crea una cuenta de administrador con `make admin email=...` (la consola imprime una contraseña generada), luego ejecuta `make run`; la aplicación está disponible en localhost:8000 por defecto con datos en el directorio `dbs`. `make watch` habilita la recarga en vivo con recompilación automática de CSS. Licencia y estado El proyecto tiene licencia MIT, se menciona en Awesome Go, y cuenta con insignias de pruebas CI y Go Report Card. El README es detallado y en gran medida un recorrido guiado por el código base, lo que lo hace adecuado para desarrolladores que quieren un punto de partida con todo incluido mientras conservan la capacidad de sustituir cualquier componente.