Portfolio / MiTaller.art

MiTaller.art

Marketplace vertical para artesanos de Menorca. No es un Etsy genérico — es una plataforma con identidad local que gestiona perfiles de creadores, tienda online, pagos divididos multi-vendor y envío por zonas geográficas.

Next.js 15 React 19 TypeScript Django 5 DRF PostgreSQL Stripe Connect Cloudinary Railway Vercel Tailwind CSS shadcn/ui Zustand TanStack Query next-intl
Ver proyecto
MiTaller.art — Marketplace para artesanos de Menorca

El problema que resuelve

Los artesanos de Menorca tienen talleres y productos únicos pero carecen de una plataforma propia donde vender online. Las soluciones genéricas (Etsy, Amazon Handmade) no reflejan la identidad local ni permiten el control que un artesano necesita sobre su presencia digital.

MiTaller.art les da un perfil propio con URL corta tipo /tonimercadal, una tienda configurada a su medida, gestión de envíos por zonas y cobro directo en su cuenta bancaria vía Stripe Connect — sin que el marketplace toque su dinero.

Retos técnicos principales

Pagos multi-vendor

Stripe Connect Express con application fee automático. Cada artesano cobra directamente en su cuenta. El marketplace retiene una comisión dinámica (5% en beta, 8%/5% post-beta según plan) sin intermediar el dinero.

Sistema de aprobación de artesanos

Flujo de estados incomplete → ready → pending → approved/rejected con emails transaccionales en cada transición. Los artesanos no pueden vender hasta ser revisados manualmente — control de calidad real.

Envío por zonas geográficas

Cada artesano define sus tarifas por zona (Menorca local, Baleares, Península, Internacional). Detección automática por código postal en el checkout. El coste se calcula dinámicamente antes de confirmar el pedido.

Internacionalización completa

Soporte para Español, Catalán e Inglés con next-intl en App Router. Detección automática de idioma, selector en navbar y cookie de persistencia. ~70KB de traducciones por idioma.

Guest checkout

Los compradores no necesitan crear cuenta. Solo email para seguir el pedido. Decisión deliberada de UX para maximizar conversión — los compradores ocasionales no deberían tener fricción.

Inmutabilidad de pedidos

Los OrderItem guardan un snapshot del precio y nombre del producto en el momento de la compra. Si el artesano modifica o elimina un producto, el historial de pedidos permanece íntegro — requerimiento legal de auditoría.

Decisiones arquitectónicas

Decisión Elección Por qué
API REST DRF lo hace trivial, debuggeable, HTTP caching gratis
Auth JWT + rotación Frontend y backend en dominios separados, logout real con blacklist
Estado global Zustand Menos boilerplate que Redux, TypeScript nativo
Imágenes Cloudinary Subida directa cliente → CDN, el servidor Django no toca los archivos
Monorepo Sin Turborepo/Nx Deploy separado (Railway + Vercel), sin código compartido FE/BE, un solo dev
Tipos TS Manuales Control total, sin dependencia de openapi-generator

Arquitectura

Monorepo con backend y frontend completamente desacoplados, comunicados únicamente por contrato REST.

Frontend (Vercel)          Backend (Railway)
Next.js 15 App Router  →   Django 5 + DRF
React 19 + TypeScript  ←   JWT Auth (SimpleJWT)
Zustand + TanStack Q       PostgreSQL 15
shadcn/ui + Tailwind       Stripe Connect webhooks
next-intl (ES/CA/EN)       Cloudinary (imágenes)
                           SendGrid (emails)

Estado actual

El proyecto está en producción en mitaller.art, con staging desplegado en Railway + Vercel y entrando en fase de beta testing con artesanos reales de Menorca.

Desarrollado en solitario combinando planificación propia con Claude Code para acelerar la implementación — un workflow que me ha permitido mantener la coherencia arquitectónica de un proyecto de esta escala sin equipo.

Top