git log — 183 días de historia

El nacimiento de Taski

De un primer commit incierto a un ecosistema completo en 6 plataformas. Seis meses de código, noches sin dormir, bugs imposibles y pequeñas victorias.

0Commit
0Plataformas
0Días
0Deploy
$ git log --since="2025-11-26" --oneline | wc -l
Desplaza
01 La Chispa

Initial Commit

Todo empieza con una carpeta vacía y una idea: una app de mensajería que ponga la privacidad por delante de todo. El primer commit está desnudo — un esqueleto Xcode, un proyecto SwiftUI con más esperanza que código. "tentativo sistemazione login" reza el segundo commit, pocos minutos después. Nada funciona todavía, pero el viaje ha comenzado.

Initial Commit

Las primeras palabras

En 24 horas, push notifications y WebSocket funcionan. El backend logra enviar mensajes en tiempo real. La implementación de la foto de perfil falla en el primer intento — "App compila update profilo fallito" pero a la mañana siguiente funciona. Los mensajes aparecen. Por primera vez, dos dispositivos hablan entre sí.

Chat funcionando!

El mensaje del commit lo dice todo: "Chat funzionante, profilo funzionante" Por primera vez los chats persisten, los mensajes llegan, el perfil se actualiza. Los cimientos están puestos. A partir de aquí se construye.

Las noches en blanco

Los timestamps no mienten: commit a las 00:52, a las 2:13, a las 2:30, a las 4:53, a las 5:07. Una ráfaga de commits nocturnos lleva la app de "funciona" a "parece real". Indicador de escritura, marcas de lectura, deeplink, badge. A las 4:53 llega el primero de los fantasmas que perseguirán al proyecto: "fix chat fantasma e push" A las 5:07, agotado: "risolti" Una sola palabra. Luego silencio hasta mañana.

02 La Fortaleza

E2EE implementado

Cinco días después del primer commit, el cifrado de extremo a extremo está activo. Cada mensaje cifrado con claves Curve25519. El servidor no puede leer nada. No es un añadido: es el ADN de Taski. Desde este momento, ni quien gestiona el servidor puede ver los mensajes de los usuarios.

"TUTTO FUNZIONANTE DA QUESTO PUNTO"

El mensaje del commit en mayúsculas no miente. Push notifications con previsualización cifrada, respuestas a mensajes, mensajes cifrados con hora correcta. En solo 6 días, Taski tiene las bases completas de un messenger seguro. "NOTIFICHE FUNZIONANTI" grita un commit poco antes. El entusiasmo es palpable en el git log.

Contactos y verificación SMS

De nuevo de noche, a la 1:06. Match de usuarios por número de teléfono. Login vía SMS. Taski deja de ser un experimento y se convierte en algo que podrías instalar en el teléfono de tu madre.

Grupos: la montaña rusa

El 4 de diciembre, los grupos entran en el código. El git log narra una epopeya en cuatro actos: "Gruppi funzionanti" "Gruppi perfettamente funzionanti" "Gruppi quasi perfetti" "GRUPPI PERFETTI" Al día siguiente, de nuevo: "Logica gruppi perfetta" Cinco commits, cinco niveles crecientes de certeza. O quizá de autoconvencimiento.

La semana de los "quizás"

21 commits en 4 días, y la duda impregna cada línea: "Per ora BENE" "Sistamazione spunte? Forse!" "chat eliminate sembra funzionare" "Abbinamento chat quasi perfetto" "sistemato forse tutto" No es seguridad: es esperanza. Las marcas de lectura funcionan, luego dejan de hacerlo. Los chats fantasma aparecen y desaparecen. Los typos en los commits delatan el cansancio: "Sistamato", "nofifiche", "implemenzazione". Pero el código avanza.

El limbo navideño

Mientras el mundo celebra, los commits no se detienen. Transcripción de mensajes de voz. Previsualizaciones de enlaces. Video. El 23 de diciembre: "Posizionamento messaggi quasi perfetto" El 27: "Forse ci siamo, chat sistamata" "Chat sembra ok" "Sembra". "Forse". "Quasi". Las palabras de quien ha aprendido a no fiarse. El 26 de diciembre, día de San Esteban: "Sistemato problema freeze UI in chat" Ningún día de descanso para la app.

03 La Madurez

Llamadas de voz y video

Integración de Agora SDK para llamadas en tiempo real. Tono de espera, gestión de llamadas perdidas, altavoz automático en videollamada. También las llamadas están cifradas E2EE con claves Curve25519. "Nascondi tasto videochiamata (da riabilitare)" revela la lucha entre ambición y estabilidad. El 5 de enero: "Chiamate quasi perfette" Otra vez ese "quasi". Y luego el verdadero enemigo: "Fix call zombie: terminate active call when app goes to background or is killed" Las llamadas fantasma — esas que siguen activas cuando la app muere — perseguirán al código durante semanas.

El Watchdog

El código de error más temido por los desarrolladores iOS: 0x8BADF00D ("ate bad food"). Significa que el sistema mató la app porque el hilo principal estaba bloqueado. "fix: prevent watchdog crash (0x8BADF00D) from background reloadData" Aparecerá tres veces en la historia de Taski. Cada vez, horas de depuración para entender qué operación estaba secuestrando el main thread. En abril, el backup. En mayo, la búsqueda con IA. El watchdog no perdona.

Nace el Worker

El backend se convierte en un Cloudflare Worker: serverless, edge-first, distribuido globalmente. v54.13.0. El primer commit del repo dedicado. Desde aquí saldrán 717 deploys en 5 meses. Giphy proxy con KV cache, endpoint para GIF, privacy fix. El motor de Taski tiene un nuevo corazón.

La infraestructura crece

Key versioning para rotación de claves E2EE. Call heartbeat system. Stickers con almacenamiento dedicado y TTL. Push queue con Durable Objects y ACK del cliente. Rate limit anti-abuso en los SMS. Presence pub/sub system. Cada semana, un nuevo sistema.

Fuerza bruta

A veces la elegancia no basta. Las push se duplican, el dedupe no aguanta. "Forza retry push bypassando dedupe" Al día siguiente: "Fix push duplicate" Y el ciclo clásico: el fix del fix. Un patrón que se vuelve familiar. Habrá versiones del worker desplegadas 34 veces en un solo día.

Febrero 2026

Cero queries D1 para push notifications

v56.2.0: el sistema de push ya no toca la base de datos. Todo en KV cache. Es el inicio de una obsesión por el rendimiento que definirá los meses siguientes: cada query eliminada es una victoria, cada milisegundo ahorrado es un usuario mejor servido.

Los fantasmas del backend

Los Durable Objects introducen un nuevo tipo de bug: las sesiones zombie. WebSocket que parecen abiertas pero están muertas. Presencia que parpadea. "Fix forceDelivery for zombie WS sessions" "alarm-based stale sweep for zombie WS detection" "self-heal stale state" El código aprende a autocurarse. Cuando un WebSocket no responde, el sistema lo declara muerto y limpia el estado. No es elegante. Funciona.

04 La Expansión

Nace Taski Web

React + Vite + Tailwind. El cliente web llega con pairing QR code, E2EE completo, WebSocket en tiempo real. En 17 días será un cliente completo: chat, media, llamadas. "SECURITY: Remove open user search" La paranoia ya es parte del ADN.

Historias y reacciones

Las Historias llegan a Taski: como Instagram, pero cifradas. Reacciones a mensajes con emoji. Like a las historias con push de avatar. La app empieza a sentirse completa, ya no un proyecto sino un producto.

Siri y verificación de claves QR

"Hey Siri, manda un messaggio con Taski" y llega cifrado E2EE. Verificación de claves vía QR code y safety number, como Signal. Share Extension para compartir fotos y videos desde cualquier app, todo cifrado.

Apple Watch companion

En un solo día, 6 commits llevan a Taski al Apple Watch. Chat, fotos, avatar, logo en la toolbar. Sync en tiempo real, spinner de carga, fetch en paralelo. Taski está en la muñeca. Al día siguiente, fix para freeze UI, decrypt fuera del main thread, lock async. El Watch es pequeño pero los problemas son grandes.

Taski Desktop: Mac y Windows

Tauri 2 envuelve el cliente web en una app nativa. macOS y Windows en un solo día. Barra de menú nativa, notificaciones nativas con previsualización E2EE, respuesta directa desde la notificación, badge en el dock. Auto-update, Handoff con iOS para continuidad. 76 commits construirán un cliente de escritorio completo.

05 La Inteligencia

TaskiAI: reescritura de mensajes

Claude Haiku entra en Taski. Un botón sparkle en la barra de entrada reescribe tus mensajes: más formal, más casual, corregido, traducido. El primer paso hacia la IA integrada es discreto — no impuesto, ofrecido.

TaskiAI Chatbot

En un día, 10 commits construyen un chatbot completo. Claude Sonnet como conversación en la lista de chats. Adjuntos de fotos y PDF. Renderizado Markdown. Generación de documentos PDF. Rate limit 20/hora. Auto-switch de modelo. "AI memo creation with reminders + Siri App Shortcut" La IA crea recordatorios desde los mensajes y los programa vía Siri.

AKD: Auditable Key Directory

Hash-chain audit de las claves públicas. Ed25519 para firmas del cliente. Si alguien intenta cambiar tu clave, la cadena criptográfica lo detecta. Como Certificate Transparency, pero para claves de mensajería. "Houston, we have a problem!" reza la pantalla de mantenimiento con temática espacial añadida al día siguiente.

Abril 2026

Spotify, Voice AI y Anti-Abuso

Abril es un mes de explosión creativa. Integración Spotify con PKCE auth. Voice TaskiAI con GPT Realtime para conversaciones de voz. Sistema anti-abuso con IA: Llama Guard 3 + Haiku double-check, auto-suspensión de 7 días. Sistema de ban con broadcast en tiempo real vía WebSocket. La app no solo es bonita — también es segura.

El día más largo

59 commits en 24 horas. El récord absoluto del proyecto. El worker acumula 21 el mismo día. Es un día en que todo sucede a la vez: bugs críticos, features nuevas, hotfix sobre hotfix. El git log de ese día es una novela en sí mismo. Más commits que los que tiene el repo Desktop entero.

Las 72 horas

Tres días consecutivos con 34, 34 y 41 commits entre iOS y Worker. Anti-abuso con IA, sistema de ban, broadcast en tiempo real, push queue dedup, TaskiAI image context. El worker alcanza 34 deploys en un solo día: una media de un deploy cada 42 minutos. Dormir es opcional.

06 La Armadura

Auditoría y Hardening

Dos rondas de auditoría de seguridad. timingSafeEqualString en todas las comparaciones sensibles. AI mention con queries D1 atómicas. Upload pre-size-check. Cada endpoint revisado, cada input validado. La paranoia rinde frutos.

Voice Web Search

TaskiAI Voice obtiene el tool web_search vía Tavily. La IA puede buscar en la web durante una conversación de voz, anunciando la búsqueda por transparencia. Country mapping por idioma, límite de 3 búsquedas por llamada.

Taski llega a Android

Primero como wrapper Capacitor, luego la migración hacia un cliente nativo Kotlin. El 17-18 de mayo, en sesiones nocturnas con agentes de IA trabajando en paralelo de forma autónoma, el cliente nativo toma forma: WebSocket, E2EE, push FCM, media cifrados. Un bug emerge entre iOS y Android: las push cifradas no llegan. Hacen falta dos líneas en el NSE de iOS que eran invisibles antes porque la caché cubría ese path. 10 bugs críticos corregidos en el post-audit. La sexta plataforma está viva.

El bug aceptado

A veces la respuesta correcta no es "fix" sino "acepta". Una segunda push llega tras 60 segundos en condiciones de burst. Cuatro sub-agentes analizan el problema en paralelo. La conclusión: el volumen APNs es bajo, iOS deduplica vía collapse-id, y un fix arquitectural rompería más cosas de las que resolvería. El bug se documenta y se acepta. No todo hay que arreglarlo. Algunas cosas hay que entenderlas.

Auditoría de seguridad ofensiva

Auditoría ofensiva completa: 6 fix desplegados. Protección XSS, ratelimit admin, eliminación de error oracle, bloqueo de SMS por país, whitelist CORS. Cloudflare Access en el panel de admin. No se espera al ataque: se va a buscarlo.

Apple App Attest

Attestation y assertion de Apple integradas. Trust tiers para los dispositivos. Solo apps genuinas pueden hablar con el backend. El bypass header eliminado. La cadena de confianza está completa: del silicio de Apple hasta el servidor de Cloudflare.

07 El Ecosistema
Mayo 2026 — Hoy

6 plataformas, un ecosistema

iPhone. Apple Watch. Mac. Windows. Web. Android.
3.165 commits. 717 deploys del worker. 66 migraciones de base de datos. 322 commits web. 76 commits desktop.
Cifrado de extremo a extremo en cada mensaje, llamada, foto, video, sticker.
IA integrada que respeta la privacidad. Anti-abuso con doble modelo de IA.
Hash-chained key directory para transparencia criptográfica.
Apple App Attest para confianza por hardware.

59 commits en un solo día. Commits a las 5 de la mañana. Typos en los commits que delatan el agotamiento. "Forse", "sembra", "quasi perfetto" — las palabras de quien construye algo más grande que él mismo.

De Initial Commit hasta aquí: 183 días. De una carpeta vacía a un ecosistema.

La historia
continúa

Cada commit es un paso adelante. Cada bug corregido es una lección aprendida. Cada feature es una promesa cumplida.

$ git log --oneline | wc -l 3165