Contexto general
Este proyecto nació debido a que una amiga me contacto para desarrollarlo a un familiar. Se buscaba tener un sistema que apoyase a gestionar un "Studio Boutique" que impartía las disciplinas de Barré, Pilates Reformer e Indoor Cycling.
De inicio no sabían con exactitud lo que querían, pero después de varías ideas que se tenían decidimos trabajarlo ejecutando un plan de 2 partes. La primera parte consistía en desarrollar todo el core de lo necesario, es decir, todo lo que tenga que ver con el funcionamiento base y que pueda ser controlado por el personal administrativo del estudio. La segunda parte se enfocaría en trabajarlo para hacer un diseño que le pueda gustar al usuario, funcionalidad para él y en añadir un sistema de control de pagos.
Al inicio solo era yo el único desarrollador pero posteriormente se añadió a otro para generar una landing page, pero el sistema en general fue desarrollado solo por mi. Se contaba con un diseñador pero solo diseño la landing page.
Lo que se logró desarrollar al final fue:
- Login de usuarios
- El registro de un usuario nuevo (se necesitatá correo, nombre, contraseña), se decidió realizarlo solo cuando se inicie sesión debido a que se esperaba acordar con el diseñador como se trabajaría.
- Posibilidad de re-establecer la contraseña. Se quedó solo en la sección de configuración de usuario.
- Sección de perfil de usuarios
- Puede actualizar (nombre, telefono, contraseña y biografía).
- Eliminar la cuenta (zona peligrosa).
- Administración de usuarios
- Se puede añadir, editar o eliminar distintos tipos de usuarios:
- Coaches: Podrán visualizar las personas que impartiran clases e indicar su disponibilidad en la plataforma.
- Recepcionistas: Podrán asignar a los usuarios a una clase reservando una posición, y en caso de ser necesario, registrar a nuevos usuarios clientes.
- Administadores: Tienen acceso a todo pero su principal responsabilida es escoger quienes impartiran las clases.
- Los usuarios clientes se registran pero no tienen la posibilidad de iniciar sesión.
- Apartado de “Reservas”
- Se puede hacer en una hora y día en específico.
- Mostrar las clases anteriores (por defecto no se mostrarán)
- Apartado de administración de reservas
- Asignar horarios a los instructores
- Se le asigna una recurrencia al horario para hacerlo más cómodo
Tecnologías utilizadas
Para este proyecto decidí utilizar:
- NextJS para trabajar el frontend (también aproveché un poco la posibilidad que ofrece de Backend)
- Prisma
- Taildwind CSS
- Zustand
- AWS (S3, Serverless)
Resultados y Logros
Debido a que este proyecto lo estuve trabajando en mis tiempos libres no lo logré terminarlo en el tiempo que había estimado (1 mes), pero no fue mucho problema ya que el estudio demoró todavía más en abrir. Según lo que se había establecido como primera parte del proyecto se cumplió con lo establecido y se hicieron diversos ajustes, algunos de diseño inicial y pero la mayoría eran de funcionalidad (nuevas y mejoras).
Desafíos
Se tuvieron diversos desafíos que van desde la falta de entendimiento entre lo que se esperaba y lo que estaba realizando hasta un par de problemas técnicos. Entre los problemas técnicos me encontré con:
- El inicio de sesión. Me cerré tanto en una idea que no era facil de ejecutar que eso me costó mucho tiempo y me hizo pensar en rendirme varias veces, pero cuando cambie de enfoque todo fue bastante más rápido el progreso y una vez que comuniqué mi situación llegamos al acuerdo de primero hacerlo funcional y luego lo perfeccionabamos.
- La gestión de horarios, clases y asientos (posiciones). De esto no se teníamos una buena idea base sobre como debía de funcionar debido a que fue cambiando bastante durante el desarrollo. De inicio solo se tenía que decir que cliente se estaba registrando a la clase, pero de ahí se tuvieron distintos cambios que involucraban a esta sección:
- Se tenía que establecer la posición que tomaría cada cliente.
- Cada horario tenía su clase en específico y solo se podía tomar esa clase en dicho horario.
- Lo anterior llevó a que según el tipo de clase que se fuese a tomar cambiaba la cantidad de asientos que se tenían.
Aprendizaje
- Si me encuentro sin salida en una opción no perder el tiempo en seguir buscando en esa opción y buscar otro camino, aunque quede algo de deuda técnica, es mejor eso y tenerlo en mente que perder el tiempo.
- Debo tener un diseño base sobre lo que se quiere hacer. La razón de esto es que me ayuda a mi a saber que es lo que quiero hacer y de esta forma no pierdo tanto tiempo cambiando una y otra vez en el diseño, ya que se realice la primera versión se puede cambiar. Además, ayuda a que el usuario tenga una idea más clara de lo que tiene que esperar.
- Definición solida de requerimientos. Si es necesario hacer un diagrama de flujo hay que realizarlo y buscar considerar todos los casos de uso disponibles para que en la planeación de funcionalidades se pueda estimar mejor los tiempos.