Reviewed-on: #39
Galerías Fotográficas
Que problema identificamos
Existen multiples alternativas para la distribución de imágenes digitales, como redes sociales o proveedores de almacenamiento en la nube. Las redes sociales exponen publicamente y con poco control el contenido de las imágenes. Los proveedores de almacenamiento ofrecen un control mayor sobre la exposición de las imágenes a cambio de una suscripción o pago por uso.
Como profesional que espera cobrar por el trabajo, publicar fotos privadas en redes sociales abre camino a múltiples problemas: perdida de privacidad para el cliente, mala exposición y pobre posicionamiento web, perdida de calidad en la imágen, se impide reutilizar la imagen con otros fines sin herramientas de terceros que pueden ser perjudiciales para clientes y profesionales. Usar proveedores como WeTransfer, Google Drive o Dropbox, requiere de pagos y un conocimiento mínimo sobre el uso de estos servicios por parte del cliente; además, para ahorrar costes los profesionales deben eliminar los grupos de imágenes con cierta frequencia o fracturar por tiempo de almacenamiento al cliente. Ambas opciones limitan la cooperatividad y la recuperación de las imágenes por parte del cliente. Además, expone fácilmente al profesional a varios riesgos y problemáticas emergentes con la evolución constante del software: la perdida de credenciales, el robo de identidad, el plagio, la pérdida de control sobre la calidad de transmisión de la imagen.
Como cliente, recibir una sesión por WeTransfer limita las opciones de feedback y mejora o personalización. Recibirla por correo electrónico limita la cantidad de imágenes recibidas. Recibirlas por Google Drive o similares nos quita espacio de nuestro almacenamiento en la nube. Si el profesional publica las imágenes, referenciándos puede afectar a nuestra huella digital e imagen en redes. Además, según la configuración del servicio que use el profesional, es común tener a disposición las imágenes solamente durante un tiempo determinado, haciendo imposible recuperarlas o acceder a ellas pasado ese tiempo.
Ambos participantes de la actividad recaen en un moderno problema: necesitar diversos servicios para controlar un único recurso. Como profesional, necesitas una web-portfolio, un perfil en redes, un servicio de almacenamiento y una forma de contacto con el cliente. Como cliente, necesitas poder ver el trabajo anterior del profesional, contactar con él y poder revisar el trabajo de forma conjunta para lograr el resultado que uno espera.
Que queremos resolver
Desde el punto de vista del profesional, podemos agrupar todos los servicios en un único servico. Una especie de Amazon para imágenes.
Desde el punto de vista del cliente, agrupandolo todo, evitamos la necesidad de acceder a tantos servicios diferentes y familiarizamos al usuario con una interfaz sencilla y directa, minimizando el roce con el aplicativo.
Alternativas a nuestra solución
Existen multitud de alternativas a una web hecha a mano, como Wix o Joomla. Existen alternativas cloud-native para alojar un portfolio. Existen muchos proveedores de almacenamiento web. Existen muchas redes sociales donde compartir las imágenes. Existen metodos de comunicación y trabajo colaborativo. En su gran mayoría, en servicios diferenciados. Sin embargo no existe servicios unificados.
Despiece del problema
Almacenamiento
El profesional no quiere tener que gastar en almacenamiento ni preocuparse del estado de un proveedor. Por tanto, el sistema tiene que poder almacenar las imágenes durante mucho tiempo y mantenerlas en linea el mismo tiempo.
Distribución
El profesional no quiere tener que usar más de un servicio para enviar las imágenes al cliente o subirlas a redes sociales. El cliente no quiere recibir las imágenes en un zip o tener que descargarlas desde un servicio de terceros.
Trabajo colaborativo
El profesional quiere que el cliente escoja la imagen que más el guste y le de feedback sobre el retoque y la edición de la imágen. El cliente queire revisar el trabajo del profesional para escoger las imágenes que más le gusten.
Feedback
El cliente puede dar feedback mediante comentarios en cada imágen como votando la imagen. La nota asignada a cada imágen se determinará como: (votos positivos - votos negativos) / votos totales Los comentarios se puntuarán de la misma forma. El profesional podrá responder a los comentarios y los leerá de forma que el comentario con mejor puntuación quede el primero, en su defecto se ordenarán por fecha.
El feedback también podrá ser dado a imágenes y colecciones del portfolio público, solamente lo podrán hacer los clientes autenticados. Aquellos que adquieran una sesión podrán dejar feedback al profesional de forma pública.
Portfolio
El profesional no quiere gastar en otro servicio más para alojar el protfolio. El profesional quiere subir las imágenes al servicio y escoger cuales van a conformar el portfolio. El profesional quiere que la primera ojeada que tenga el cliente sobre el servicio sea el portfolio.
Colecciones
El profesional quiere organizar las imágenes por fecha, personas que salen en ellas, categorías, eventos... El profesional quiere poder reunir imágenes que se relacionen entre sí por categoría, evento, fechas, motivos... El profesional quiere juntar todas las imágenes que van destinadas a un cliente.
Sesiones
El profesional hará varias imágenes que revisará con el cliente. El cliente escogerá únicamente las mejoras y que más le gusten. El profesional revisará esas imágenes, con un límite numérico de imágenes totales. El cliente recibirá una colección de esas imágenes. Múltiples clientes y profesionales podrán trabajar en una única sesión. Durante el proceso, debe existir una colaboración mutua mediante feedback.
Multiples clientes
El profesional quiere poder trabajar sobre un proyecto y poder enviar el resultado del proyecto a multiples clientes.
Venta del servicio
El profesional quiere cobrar una imágen única, una o varias colecciones, o una sesión. Un cliente pagará por una imágen, una o diversas colección premaquetadas, y por una sesión. Muchos clientes podrán pagar conjuntamente el servicio.
Usuarios
Existirán 4 tipos de usuarios:
- Anonimo
- Cliente
- Profesional
- Administrador
El usuario anónimo podrá consultar el portfolio y ver los diferentes botones y enlaces para ver el resto de imágenes públicas, redes sociales, blog o identificarse.
El cliente, o usuario identificado, podrá hacer lo mismo que el anónimo. También podrá comprar las diferentes imágenes y colecciones disponibles. Además, podrá contratar una sesión, interactuar con la sesión que tenga activa dando feedback o escogiendo las imágenes; y consultar pedidos anteriores para descargar las imágenes, publicarlas en redes sociales o compartirlas de forma directa con otros clientes identificados.
El profesional, podrá editar las imágenes y colecciones públicas que haya en el portfolio; organizar nuevas sesiones, editar las sesiones en marcha y actualizarlas; crear y editar nuevas colecciones; crear y editar eventos y categorías.
El administrador, podrá hacer lo mismo que el profesional y además podrá añadir profesionales y editar aspectos clave de la web.
Para facilitar el registro y el inicio de sesión, los usuarios podrán iniciar sesión con Google, Microsoft, Meta y Apple. Además, contarán con la opción de usar correo y contraseña. Para ello nos adaptaremos a OpenId y OAuth 2. Todos los usuarios tendrán un método MFA como sms o passkeys. Aquellos usuarios que inicien sesión con contraseña, recibirán un magic link para entrar.
Conexiones lentas
Todas las imágenes subidas se procesarán en 3 categorías:
- Baja resolución: 360p, comprimidas en WebP
- Media resolución: 720p, comprimidas en WebP
- Resolución Nativa: nativa, sin compresión
Pagos
Se establecerá como recomendación el uso de linkpay o servicios como google wallet.
Tecnologías a usar
Back: JWT, OpenId + OAuth 2 -> Duende Identity Server DDD con CQRS -> MediatR Entity Framework Core + sqlite -> Base de datos AutoMapper -> Mapeo de objetos Serilog + OpenTelemetry -> Logging y trazabilidad Scalar + OpenApi -> Documentación y pruebas de API FluentValidation -> Validación de modelos Redis -> Almacenamiento en caché mailkit -> Envío de correos electrónicos ImageSharp -> Procesamiento de imágenes
Front: TailwindCSS -> Estilos Angular -> Framework RxJS -> Programación reactiva NgRx -> Manejo del estado scss -> Preprocesador CSS axios -> Cliente HTTP Vite -> Bundler Typescript -> Lenguaje