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.
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.