Mi idea de negocio es crear una plataforma personalizable para realizar sitios web en línea.
¿Qué es una plataforma personalizable?
Lo que yo quiero hacer es todo el ecosistema tanto de backend como frontend y comunicación entre estos, dando como resultado su sitio web. No quiero hacer algo genérico solo las bases para que a partir de estas se pueda crear cualquier tipo de sitio web.
Los sitios web resultantes pueden ser sitios SPA, sitios estáticos, sitios dinámicos, etc.
¿Por qué?
Esto lo hago pa divertirme, pa divertirme y para aprender en el proceso, pero tengo un poco de inspiración y curiosidad de hacer algo por mi mismo y no depender de terceros para hacer mis proyectos.
¿Cómo?
La idea es crear un sistema de componentes que se puedan reutilizar y que se puedan combinar entre si para crear un sitio web. La parte backend la quiero hacer con Golang y la parte frontend con React pero el framework de frontend aún no lo se ya que actualmente el mundo de React es muy grande y hay muchas opciones. El backend seria crea una API ya sea REST o GraphQL y el frontend consumiría esta API. También debería tener un backoffice para que el usuario pueda administrar el sitio web.
Detalles tecnicos
Primero quiero iniciar con la parte del backoffice que es por donde el usuario podrá administrar su sitio web. El backoffice lo quiero hacer con PHP específicamente con Laminas/Mezzio, usando una base de datos no relacional como MongoDB, un ORM como Doctrine y un sistema de plantillas como Twig.
En lo que voy escribiendo y deduciendo esta parte del backoffice va a ser un monolito ya que no quiero complicarme mucho con la arquitectura y quiero enfocarme en los componentes que se van a usar. Quiza para no usar JQuery y hacer dinamica la alta de datos, use React con Vite pero eso lo vere mas adelante.
Suena un poco complejo pero es lo que quiero hacer, ya que quiero aprender a usar estos componentes y ver cómo se comportan en un proyecto real.
¿Por qué usar PHP?
PHP es un lenguaje que conozco y me gusta mucho, además de que es muy popular y tiene una gran comunidad. También quiero probar otra cosa que no sea Laravel y de Laravel ya se ha escrito mucho y hay muchos recursos.
¿Por qué usar Laminas/Mezzio?
Laminas/Mezzio es un framework es muy ligero, flexible y se puede usar con cualquier componente de terceros. Lo que se me hace complicado y tedioso es configurar todo el proyecto, se deben de cargar todos los componentes que se van a usar y configurarlos, pero es algo que se puede hacer.
¿Por qué usar MongoDB?
MongoDB es una base de datos no relacional que me gusta mucho, es muy flexible y se puede usar con cualquier lenguaje de programación. En el pasado he podido usar MongoDB con Mezzio.
¿Por qué usar Doctrine?
Doctrine es un ORM diferente al ORM de Laravel, es un poco más complejo pero es muy flexible y se puede usar con cualquier base de datos. En el pasado he podido usar Doctrine con Mezzio.
¿Por qué usar Twig?
Twig es un sistema de plantillas que he podido usar en mis trabajos anteriores, tiene soporte de caché para las templates y se puede usar con cualquier framework. No he usado aún twig con Mezzio pero sí en algunos proyectos con Symfony.
API
La API la quiero hacer con Golang, usando el framework Echo, este se debe comunicar con la base de datos de MongoDB para extraer la información y enviarla al frontend. En el pasado ya he podido trabajar con Golang y MongoDB. La API debe ser de tipo GraphQL ya que del lado del frontend puede ser más fácil de consumir y se pueden seleccionar los datos que se quieren obtener. Aún no estoy muy familiarizado con GraphQL pero es algo que quiero aprender.
¿Por qué usar Golang?
Golang es el lenguaje que últimamente he estado usando en la chamba, tiene aproximadamente 2 años que estoy trabajando con el y quiero desarrollar mis skills en este lenguaje. Y Echo he podido usarlo en la chamba quiero y aprender más de este framework.
Conexión con MongoDB
Para la conexión con MongoDB quiero usar el driver oficial de MongoDB para Golang, ya que no es difícil de usar y le quitaría una dependencia al proyecto si usara algún ORM.
Frontend
Es la parte resultante para mi la más importante, ya que es la que se va a mostrar al usuario final. La quiero hacer con React, pero aún no se que framework usar, se que actualmente existe Next.js, Gatsby, Create React App, Remix, etc. Pero aún no se cual usar, ya que no he usado ninguno de estos frameworks. Aún que con la nueva versión de React se recomienda no usarlo solo, sino, con algún framework esto me da una pista por donde empezar y las opciones se reducen a Next.js, Gatsby y Remix.
No pondré más detalles de esta parte porque quiero investigar más y ver cual es la mejor opción. Aunque para una primera versión tengo que elegir uno de estos frameworks y empezar a desarrollar el frontend.
¿Por qué usar React?
React es una librería que empecé a usar algunos años a tras antes dedicarme a full con el backend, tuve la oportunidad de usarlo en algunos proyectos en mi chamba anterior, pero no lo he usado con un framework.
Definiendo un MVP
A continuación voy a definir un MVP para este proyecto, ya que quiero empezar a desarrollar y no quiero que se me vaya de las manos.
Un MVP (Producto Mínimo Viable, por sus siglas en inglés) es una versión inicial de un producto que tiene suficientes características para satisfacer las necesidades básicas de los usuarios y validar la viabilidad del concepto.
Quiero que mi MVP tenga las siguientes características:
-
Autenticación y roles de usuario: Implementa un sistema de autenticación que permita a los usuarios registrarse como administradores y acceder al backoffice. Los administradores tendrán permisos para realizar cambios en la estructura del sitio.
-
Creación de la estructura del sitio: Desarrolla un módulo en el backoffice que permita a los administradores crear y gestionar las páginas del sitio, incluyendo la opción de definir el nombre del menú y la URL asociada. Por ejemplo, podrían crear las páginas "HOME", "PRODUCTS", "ABOUT", "TECHNICAL" y "DISTRIBUTORS".
-
Barra de búsqueda: Implementa una barra de búsqueda en el sitio web que permita a los usuarios buscar contenido específico. Este componente puede utilizar técnicas como el indexado de palabras clave y la búsqueda en la base de datos para ofrecer resultados relevantes.
-
Switch de idioma: Agrega un interruptor en el sitio web que permita a los usuarios cambiar entre diferentes idiomas. Implementa la funcionalidad de traducción para mostrar el contenido en el idioma seleccionado por el usuario.
-
Página de inicio dinámica: Desarrolla una página de inicio que pueda mostrar imágenes, videos y texto de forma dinámica. En el backoffice, los administradores podrán cargar y gestionar las imágenes y videos que se mostrarán en la página de inicio. Además, podrán ingresar texto descriptivo y personalizar el diseño de la página de inicio. Gestión de contenido del carrusel de la portada: Permite a los administradores cargar y gestionar las imágenes o videos que se mostrarán en el carrusel de la portada. Pueden definir el orden, la duración y la transición entre las diapositivas.
-
Edición del contenido general: Proporciona a los administradores la capacidad de editar el contenido general del sitio, como la información de productos, eventos y detalles de la empresa. Esto puede incluir texto descriptivo, imágenes y videos relacionados.
-
Configuración del footer: Permite a los administradores personalizar el contenido del footer del sitio, incluyendo enlaces relevantes, enlaces a redes sociales y detalles de contacto de la empresa. Pueden agregar, editar o eliminar los elementos del footer según sea necesario.
-
Aspectos de privacidad y términos y condiciones: Proporciona una sección en el backoffice donde los administradores puedan ingresar y editar la información de privacidad y los términos y condiciones del sitio. Esto asegura que el contenido legalmente requerido esté presente y sea accesible para los usuarios.
-
Barra de aceptación de cookies: Implementa una barra en la parte superior o inferior del sitio que informe a los usuarios sobre el uso de cookies y les solicite su consentimiento. Los administradores podrán configurar el texto y el comportamiento de la barra a través del backoffice.
Conclusión
Este MVP se centra en lo esencial y se puede iterar y mejorar en futuras versiones en base a la retroalimentación de los usuarios y las necesidades identificadas. Por ahora dejare esto como documentación, los próximos pasos serán: definir la estructura de la base de datos y empezar a desarrollar el backend.
Si alguien llega a leer esto y tiene alguna sugerencia o comentario, por favor, no dude en contactarme.
Saludos.
Comentarios