← Proyectos

App a medida · 2026

Gestión de clientes y tareas

Asesoría laboral, fiscal y contable. Las capturas son de la interfaz real de la aplicación funcionando con datos inventados: ningún cliente, compañero, tarea ni cifra de los que aparecen es real.

Sustituye un Excel de 84 hojas por una aplicación interna: ficha, seguimiento y cuaderno por cliente, tareas que se crean hablando, cambios en tiempo real y un historial que nadie puede reescribir.

El problema

El equipo llevaba años trabajando sobre un único Excel compartido de 84 hojas: una maestra y una por cliente. Funcionaba, pero con tres fallos que el propio equipo señalaba.

  • Apuntar cuesta, así que se apunta tarde

    Abrir el Excel, buscar la pestaña del cliente y escribir. Muchas tareas se apuntaban a final del día, o no se apuntaban.

  • Buscar en el histórico es lento

    Saber qué se hizo con un cliente hace ocho meses obligaba a bajar a mano por su pestaña.

  • Cero trazabilidad

    Cualquiera podía cambiar cualquier celda y no quedaba rastro de quién movió qué.

Y una condición de partida dura: el Excel se jubilaba el primer día. Sin convivencia ni vuelta atrás, la aplicación pasaba a ser la única copia de años de trabajo de la asesoría.

El proceso

  1. Fase 1

    Entender

    Leer el Excel real: sus columnas, sus colores, los estados que de verdad se usaban y el vocabulario del equipo.

  2. Fase 2

    Importar

    Un script repetible que convierte las 84 hojas en datos limpios y avisa de lo que no cuadra: códigos repetidos, hojas huérfanas, nombres dudosos.

  3. Fase 3

    Modelar

    Esquema SQLite de 14 tablas: clientes, tareas, responsables, pasos, historial, cuaderno, accesos cifrados, chat…

  4. Fase 4

    Interfaz

    Mismos términos, mismas columnas y misma lógica de color que el Excel. Lo nuevo se gana su sitio; no se impone.

  5. Fase 5

    Producción

    Servicio de Windows en el servidor de la oficina, HTTPS con Caddy, acceso externo por Cloudflare Tunnel y copia diaria.

Crear una tarea hablando

El problema número uno era que apuntar daba pereza, así que la respuesta es que apuntar cueste menos que no apuntar.

Un micrófono flotante transcribe en directo lo que dices. Un intérprete de reglas local saca de la frase el cliente, el responsable, la fecha límite —«mañana», «el viernes», «el 20 de octubre»— y las marcas de alerta o prioridad, y enseña una confirmación editable antes de guardar.

Usa la Web Speech API del navegador, sin servidor de voz ni claves de API; donde no hay micrófono, se escribe la frase y se interpreta igual. La salida ya tiene la forma del JSON que devolvería un LLM, así que pasar a Whisper y Claude no obliga a tocar la pantalla de confirmación.

Ventana «Crear tarea hablando» mientras escucha, con el texto reconocido apareciendo
Pantalla de confirmación de la tarea dictada, con el cliente, el responsable y la fecha límite ya rellenos
Arriba, la aplicación escuchando; abajo, lo que ha entendido: el cliente, quién la lleva y la fecha del viernes, listos para revisar antes de guardar.

El modelo

Cliente, tarea, responsables y pasos, con un historial que solo admite inserciones. La forma es sencilla; lo que no lo es son las reglas que la recorren, que salen de cómo trabaja de verdad el despacho.

Clienteficha, cuaderno, accesos, certificados
Tarea
Responsablesuno o varios, con aceptación por persona
Pasosrepartidos solo entre quienes la llevan
Historialsolo inserciones
Ficha de un cliente con sus datos, certificados y la tabla de seguimiento de sus tareas
La ficha de un cliente: los mismos campos que tenía su hoja del Excel y, debajo, su seguimiento.
Formulario de nueva tarea con cliente, asunto, pasos, fechas, estado y selección de varias personas responsables
El formulario de una tarea. «Quién la lleva» admite varias personas a la vez, los pasos se reparten entre ellas y una tarea puede ser repetitiva.
  • Varias personas, en igualdad

    No hay un dueño con ayudantes: en el despacho, una parte del trabajo es de uno y otra de otro.

  • La aceptación es de cada persona

    A una misma tarea uno puede decir que sí y otro que no, y la tarea sigue viva con quien la aceptó.

  • Las repetitivas se contestan una vez

    Son varias tareas, una por fecha, pero para quien las recibe es una única decisión.

  • Se archiva, no se borra

    Borrar de verdad es cosa del administrador.

Lo que hace

  • Mis tareas y panel general

    Alertas, temas prioritarios y fuera de plazo, en lista o en calendario mensual.

  • Ficha y seguimiento

    Todos los campos del Excel, con el estado editable en línea y tarjetas en el móvil.

  • Cuaderno por cliente

    Todo el equipo lee y escribe; cada uno solo edita, tacha o fija sus propios apuntes.

  • Accesos y certificados

    Contraseñas de las webs de cada cliente cifradas, y certificados digitales con semáforo de caducidad.

  • Tiempo real y avisos

    Los cambios de un compañero aparecen al momento, y las notificaciones push llegan con el navegador cerrado.

  • Chat y tres roles

    Chat interno uno a uno, y trabajador, jefe y administrador con los permisos aplicados en el servidor.

En el móvil

Quien sale a ver a un cliente se lleva la aplicación en el bolsillo. En el móvil, los contadores se apilan, el calendario reduce cada tarea a un punto de color y las tablas pasan a tarjetas.

  • Panel general en un móvil, con contadores y calendario
  • Panel general en lista en un móvil, con las tareas como tarjetas
La interfaz real de la aplicación, funcionando con datos inventados.

Las reglas que complican el problema

Una lista de tareas de manual se hace en una tarde. Estas reglas son las que la convierten en algo en lo que una asesoría puede confiar su única copia.

  • Permisos estrechos, trazabilidad ancha

    Casi todo lo edita cualquiera, pero el estado de una tarea solo lo cambia quien la lleva. Cada cambio queda en un historial que nadie puede editar ni borrar, ni el administrador.

  • Privacidad incluso frente al administrador

    No puede leer el chat de otros dos ni reescribir el cuaderno de nadie. Un cuaderno que otro puede reescribir deja de servir como recuerdo.

  • Las contraseñas no viajan en la copia

    Se cifran con AES-256-GCM y la llave vive fuera de la base de datos y fuera de las copias que salen cada noche hacia la nube.

  • Fechas y dinero, sin sorpresas

    Las fechas se calculan en hora local: toISOString() pasa a UTC y en horario de verano devuelve el día anterior. Los importes van en céntimos enteros, porque 0,1 + 0,2 no da 0,3.

  • Una sola fuente para las repetitivas

    El servidor, que crea la siguiente tarea, y el calendario, que dibuja las que aún no existen, comparten módulo. Por separado, el calendario enseñaría un día y la tarea nacería otro.

  • Copia en caliente

    VACUUM INTO copia SQLite de forma consistente aunque haya gente escribiendo en ese momento.

El proyecto en cifras

  • 86clientes migrados desde el Excel
  • 432tareas reales importadas
  • 14tablas en SQLite
  • 3roles con permisos en servidor
  • 12.000líneas en 26 commits
  • 5semanas, de agosto a septiembre

Qué me llevo

  • El vocabulario del cliente es parte del producto

    Mantener los términos, columnas y colores del Excel reduce al mínimo lo que hay que aprender: el equipo ya sabe usarla antes de abrirla.

  • Modelar lo que pasa de verdad

    Pasar de un responsable a varios en igualdad, con aceptación por persona, complicó el modelo. Es como trabaja el despacho.

  • Menos dependencias, menos problemas

    node:sqlite en lugar de un driver nativo evita compilar en el servidor Windows. Un proceso y un puerto se levantan como servicio sin más piezas.

  • Cuando es la única copia, la copia no es opcional

    Integridad, copias diarias y cifrado de secretos se diseñaron desde el principio, no al final.

¿Y en tu caso?

¿Tu equipo sigue trabajando sobre un Excel que nadie se atreve a tocar?

Esto se hizo para una asesoría, pero el patrón —un documento compartido que ha crecido hasta que cuesta más mantenerlo que usarlo— aparece en casi cualquier oficina. Cojo proyectos freelance compatibilizándolos con mi trabajo, y si me lo cuentas te digo con franqueza si te puedo ayudar.

Cuéntame tu caso →