Designo Studio CRM

CRM interno · web

CRM interno de una agencia de marketing: área comercial, proyectos, tareas y presupuestos en una sola aplicación. Fui el principal contribuidor del frontend.

Autoría
Colaborativo · 4 desarrolladores
Rol
Desarrollador full-stack
Contexto
Prácticas de DAM en Designo Studio
Periodo
Mar – Jun 2026
Plataformas
Web · React Native
Panel de inicio del CRM: navegación lateral, proyectos activos, tareas pendientes por prioridad, calendario del mes y próximas tareas.
Pantalla de acceso del CRM en móvil: logotipo de Designo Studio y formulario de correo y contraseña, vacío.

El proyecto

Reúne en una sola aplicación web el trabajo diario de una agencia de marketing: seguimiento comercial, clientes, proyectos, tareas, presupuestos y contenidos, con permisos por rol.

Designo Studio es una agencia de marketing digital de Valencia. Durante mis prácticas de DAM formé parte del equipo de cuatro desarrolladores que construyó su CRM interno: la herramienta con la que el equipo comercial registra llamadas y oportunidades, y con la que la agencia organiza clientes, proyectos, tareas, presupuestos y contenidos.

El frontend es una única aplicación React Native + Expo desplegada como web; el backend, una API REST en NestJS sobre PostgreSQL. Ambas piezas se publican en un VPS desde GitHub Actions, con la API en contenedores Docker.

Funcionalidades principales

  • Registro de llamadas comerciales con filtros, búsqueda y contadores
  • Presupuestos con plantillas y exportación a PDF
  • Tareas en lista, tablero Kanban, calendario y cronograma
  • Clientes, servicios contratados y proyectos
  • Guiones de vídeo, blog y material comercial
  • Chat interno, informes y facturación

Mi aportación

Fui el principal contribuidor del frontend y responsable de varios módulos de la API. La autenticación, la gestión de clientes y proyectos, la facturación, los informes, el chat y la configuración inicial del despliegue son, sobre todo, trabajo de mis compañeros.

  • Área comercial

    Registro de llamadas con filtros avanzados, búsqueda y contadores por resultado; alta guiada con selector de sector y municipio y aviso de duplicados por empresa o teléfono. Presupuestos con plantillas y exportación a PDF, comisiones por servicio, guiones comerciales y casos de éxito con subida de imágenes.

  • Tareas y planificación

    Vistas de lista, tablero Kanban, calendario y cronograma de proyecto, con prioridades, fechas límite y redes sociales asociadas a cada tarea.

  • Capa de datos del cliente

    Un cliente HTTP tipado, con token configurable, gestión centralizada del 401 y errores normalizados, y los hooks de TanStack Query sobre los que se apoya toda la aplicación.

  • Módulos de la API

    Presupuestos y plantillas, comisiones, registros comerciales, guiones, guiones de vídeo y blog: entidades TypeORM, DTOs validados, servicios y controladores documentados con Swagger. También las reglas de las tareas: prioridad, validación de fecha límite y quién puede editar qué.

  • Contenido y experiencia de uso

    Gestión de guiones de vídeo por escenas y de entradas de blog, búsqueda global con atajos de teclado, avisos, estados de carga con esqueletos y adaptación de las pantallas a móvil.

  • Mantenimiento del despliegue

    Ajustes del pipeline de GitHub Actions que publica en el VPS: paso a Node 22, versión fija de pnpm y corrección de la recarga de nginx.

commits del frontend
158 / 393 (40 % del total)
commits de la API
59 / 305 (19 % del total)
del código actual del frontend
> 50 %
personas en el equipo
4

Commits sin fusiones en la rama principal, según el historial de Git.

Decisiones técnicas

  • Una interfaz que no espera al servidor

    Al editar una tarea, la caché de TanStack Query se actualiza al instante. Antes se guarda una instantánea de las listas afectadas y, si la API rechaza el cambio, se restaura. Al terminar se invalidan las consultas relacionadas para reconciliar con el servidor. Tareas, proyectos y registros se refrescan además cada 3 s mientras la pestaña está en primer plano.

  • Permisos en dos capas

    Un trabajador solo puede editar o completar sus propias tareas. La interfaz lo explica con un aviso en lugar de fallar en silencio, y el servicio de NestJS vuelve a comprobarlo y responde 403 a quien se salte la interfaz.

  • Un presupuesto, dos plataformas

    El documento se genera a partir de una plantilla HTML propia. En móvil, expo-print lo convierte en PDF y se comparte con el diálogo nativo; en web se abre listo para imprimir o guardar.

  • Errores de base de datos que se entienden

    Al crear un presupuesto, las violaciones de clave foránea, unicidad o nulos de PostgreSQL se traducen en respuestas 400 con un mensaje útil, en lugar de un 500 genérico.

Evolución

  1. Mar 2026

    Primeros módulos de la API (registros y trabajadores) y documentación Swagger. En el frontend, inicio de sesión, navegación lateral, panel con calendario y tareas.

  2. Mar 2026

    Área comercial: registros de llamadas, guiones y casos de éxito.

  3. Abr 2026

    Filtros avanzados, diseño adaptable, capa de datos con TanStack Query, comisiones y presupuestos.

  4. May 2026

    PDF de presupuestos, permisos por rol, perfil de cliente con avatar, guiones de vídeo, tablero Kanban y estados de carga.

  5. Jun – Ago 2026

    Gestión del blog, aviso de duplicados y ajustes posteriores a las prácticas.

Stack

  1. Frontend

    • React Native
    • Expo Router
    • TypeScript
    • TanStack Query
    • React Hook Form
    • Zod
  2. API

    • NestJS
    • TypeORM
    • PostgreSQL
    • JWT
    • Swagger
  3. Infraestructura

    • Docker Compose
    • GitHub Actions
    • VPS + nginx

Capturas