git log — 183 giorni di storia

La nascita di Taski

Da un primo commit incerto a un ecosistema completo su 6 piattaforme. Sei mesi di codice, notti insonni, bug impossibili e piccole vittorie.

0Commit
0Piattaforme
0Giorni
0Deploy
$ git log --since="2025-11-26" --oneline | wc -l
Scorri
01 La Scintilla

Initial Commit

Tutto parte da una cartella vuota e un'idea: un'app di messaggistica che metta la privacy al primo posto. Il primo commit è nudo — uno scheletro Xcode, un progetto SwiftUI con più speranza che codice. "tentativo sistemazione login" recita il secondo commit, pochi minuti dopo. Non funziona ancora niente, ma il viaggio è iniziato.

Initial Commit
Il secondo commit: tentativo sistemazione login — WebSocketService.swift

Le prime parole

In 24 ore, push notification e WebSocket funzionano. Il backend riesce a mandare messaggi in tempo reale. L'implementazione della foto profilo fallisce al primo tentativo — "App compila update profilo fallito" ma la mattina dopo funziona. I messaggi appaiono. Per la prima volta, due dispositivi parlano tra loro.

Chat funzionante!

Il commit message dice tutto: "Chat funzionante, profilo funzionante" Per la prima volta le chat persistono, i messaggi arrivano, il profilo si aggiorna. La foundation c'e. Da qui in poi si costruisce.

Le notti bianche

I timestamp non mentono: commit alle 00:52, alle 2:13, alle 2:30, alle 4:53, alle 5:07. Una raffica di commit notturni porta l'app da "funziona" a "sembra vera". Indicatore di digitazione, spunte di lettura, deeplink, badge. Alle 4:53 arriva il primo dei fantasmi che perseguiteranno il progetto: "fix chat fantasma e push" Alle 5:07, esausto: "risolti" Una sola parola. Poi silenzio fino a domani.

02 La Fortezza

E2EE Implementata

Cinque giorni dopo il primo commit, la crittografia end-to-end è attiva. Ogni messaggio cifrato con chiavi Curve25519. Il server non può leggere nulla. Non è un'aggiunta: è il DNA di Taski. Da questo momento, nemmeno chi gestisce il server può vedere i messaggi degli utenti.

"TUTTO FUNZIONANTE DA QUESTO PUNTO"

Il commit message in maiuscolo non mente. Notifiche push con anteprima cifrata, risposte ai messaggi, messaggi cifrati con ora corretta. In soli 6 giorni, Taski ha le basi complete di un messenger sicuro. "NOTIFICHE FUNZIONANTI" grida un commit poco prima. L'entusiasmo è palpabile nel git log.

Contatti e verifica SMS

Ancora di notte, all'1:06. Match utenti per numero di telefono. Login via SMS. Taski smette di essere un esperimento e diventa qualcosa che potresti installare sul telefono di tua madre.

Gruppi: la montagna russa

Il 4 dicembre, i gruppi entrano nel codice. Il git log racconta un'epopea in quattro atti: "Gruppi funzionanti" "Gruppi perfettamente funzionanti" "Gruppi quasi perfetti" "GRUPPI PERFETTI" Il giorno dopo, ancora: "Logica gruppi perfetta" Cinque commit, cinque livelli crescenti di certezza. O forse di autoconvincimento.

La settimana dei "forse"

21 commit in 4 giorni, e il dubbio permea ogni riga: "Per ora BENE" "Sistamazione spunte? Forse!" "chat eliminate sembra funzionare" "Abbinamento chat quasi perfetto" "sistemato forse tutto" Non è sicurezza: è speranza. Le spunte funzionano, poi smettono. Le chat fantasma appaiono e scompaiono. I typo nei commit tradiscono la stanchezza: "Sistamato", "nofifiche", "implemenzazione". Ma il codice avanza.

Il limbo natalizio

Mentre il mondo festeggia, i commit non si fermano. Trascrizione messaggi vocali. Anteprime link. Video. Il 23 dicembre: "Posizionamento messaggi quasi perfetto" Il 27: "Forse ci siamo, chat sistamata" "Chat sembra ok" "Sembra". "Forse". "Quasi". Le parole di chi ha imparato a non fidarsi. Il 26 dicembre, giorno di Santo Stefano: "Sistemato problema freeze UI in chat" Nessun giorno di riposo per l'app.

03 La Maturità

Chiamate vocali e video

Integrazione Agora SDK per chiamate real-time. Ringback tone, gestione missed calls, speaker automatico in videochiamata. Anche le chiamate sono cifrate E2EE con chiavi Curve25519. "Nascondi tasto videochiamata (da riabilitare)" racconta la lotta tra ambizione e stabilità. Il 5 gennaio: "Chiamate quasi perfette" Di nuovo quel "quasi". E poi il vero nemico: "Fix call zombie: terminate active call when app goes to background or is killed" Le chiamate fantasma — quelle che restano attive quando l'app muore — perseguiteranno il codice per settimane.

Il Watchdog

Il codice di errore più temuto dagli sviluppatori iOS: 0x8BADF00D ("ate bad food"). Significa che il sistema ha ucciso l'app perché il thread principale era bloccato. "fix: prevent watchdog crash (0x8BADF00D) from background reloadData" Apparira tre volte nella storia di Taski. Ogni volta, ore di debug per capire quale operazione stava tenendo in ostaggio il main thread. In aprile il backup. In maggio l'AI search. Il watchdog non perdona.

Nasce il Worker

Il backend diventa un Cloudflare Worker: serverless, edge-first, distribuito globalmente. v54.13.0. Il primo commit del repo dedicato. Da qui partiranno 717 deploy in 5 mesi. Giphy proxy con KV cache, endpoint per GIF, privacy fix. Il motore di Taski ha un nuovo cuore.

L'infrastruttura cresce

Key versioning per rotazione chiavi E2EE. Call heartbeat system. Sticker con storage dedicato e TTL. Push queue con Durable Objects e ACK dal client. Rate limit anti-abuso sugli SMS. Presence pub/sub system. Ogni settimana, un nuovo sistema.

Forza bruta

A volte l'eleganza non basta. Le push si duplicano, il dedupe non regge. "Forza retry push bypassando dedupe" Il giorno dopo: "Fix push duplicate" E il ciclo classico: il fix del fix. Un pattern che diventa familiare. Ci saranno versioni del worker deployate 34 volte in un solo giorno.

Febbraio 2026

Zero query D1 per push notification

v56.2.0: il sistema di push non tocca più il database. Tutto in KV cache. È l'inizio di un'ossessione per le performance che definirà i mesi successivi: ogni query eliminata è una vittoria, ogni millisecondo risparmiato è un utente servito meglio.

I fantasmi del backend

I Durable Objects introducono un nuovo tipo di bug: le sessioni zombie. WebSocket che sembrano aperte ma sono morte. Presenza che lampeggia. "Fix forceDelivery for zombie WS sessions" "alarm-based stale sweep for zombie WS detection" "self-heal stale state" Il codice impara ad auto-guarirsi. Quando un WebSocket non risponde, il sistema lo dichiara morto e pulisce lo stato. Non è elegante. Funziona.

04 L'Espansione

Nasce Taski Web

React + Vite + Tailwind. Il client web arriva con pairing QR code, E2EE completa, WebSocket real-time. In 17 giorni sarà un client completo: chat, media, chiamate. "SECURITY: Remove open user search" La paranoia è già parte del DNA.

Storie e reazioni

Le Storie arrivano su Taski: come Instagram, ma cifrate. Reazioni ai messaggi con emoji. Like alle storie con push avatar. L'app comincia a sentirsi completa, non più un progetto ma un prodotto.

Siri e verifica chiavi QR

"Hey Siri, manda un messaggio con Taski" e arriva cifrato E2EE. Verifica chiavi via QR code e safety number, come Signal. Share Extension per condividere foto e video da qualsiasi app, tutto cifrato.

Apple Watch companion

In un solo giorno, 6 commit portano Taski sull'Apple Watch. Chat, foto, avatar, logo nella toolbar. Sync real-time, spinner di caricamento, fetch parallelo. Taski è sul polso. Il giorno dopo, fix per freeze UI, decrypt off-main thread, lock async. Il Watch e piccolo ma i problemi sono grandi.

Taski Desktop: Mac e Windows

Tauri 2 wrappa il client web in un'app nativa. macOS e Windows in un solo giorno. Menu bar nativo, notifiche native con anteprima E2EE, risposta diretta dalla notifica, badge nel dock. Auto-update, Handoff con iOS per continuità. 76 commit costruiranno un client desktop completo.

05 L'Intelligenza

TaskiAI: riscrittura messaggi

Claude Haiku entra in Taski. Un bottone sparkle nella barra di input riscrive i tuoi messaggi: più formale, più casual, corretto, tradotto. Il primo passo verso l'AI integrata e discreto — non imposto, offerto.

TaskiAI Chatbot

In un giorno, 10 commit costruiscono un chatbot completo. Claude Sonnet come conversazione nella lista chat. Allegati foto e PDF. Markdown rendering. Generazione documenti PDF. Rate limit 20/ora. Auto-switch modello. "AI memo creation with reminders + Siri App Shortcut" L'AI crea promemoria dai messaggi e li programma via Siri.

AKD: Auditable Key Directory

Hash-chain audit delle chiavi pubbliche. Ed25519 per firme client. Se qualcuno prova a cambiare la tua chiave, la catena crittografica lo rileva. Come Certificate Transparency, ma per le chiavi di messaggistica. "Houston, we have a problem!" recita la maintenance screen a tema spaziale aggiunta il giorno dopo.

Aprile 2026

Spotify, Voice AI e Anti-Abuso

Aprile è un mese di esplosione creativa. Integrazione Spotify con PKCE auth. Voice TaskiAI con GPT Realtime per conversazioni vocali. Sistema anti-abuso AI con Llama Guard 3 + Haiku double-check, auto-sospensione 7 giorni. Ban system con broadcast real-time via WebSocket. L'app non è solo bella — è anche sicura.

Il giorno più lungo

59 commit in 24 ore. Il record assoluto del progetto. Il worker ne accumula 21 lo stesso giorno. E un giorno in cui tutto succede insieme: bug critici, feature nuove, hotfix su hotfix. Il git log di quel giorno è un romanzo a se stante. Piu commit di quanti ne abbia l'intero repo Desktop.

Le 72 ore

Tre giorni consecutivi con 34, 34 e 41 commit tra iOS e Worker. Anti-abuso AI, ban system, broadcast real-time, push queue dedup, TaskiAI image context. Il worker raggiunge 34 deploy in un singolo giorno: una media di un deploy ogni 42 minuti. Dormire è opzionale.

06 La Corazzatura

Audit e Hardening

Due round di audit di sicurezza. timingSafeEqualString su tutti i confronti sensibili. AI mention con query D1 atomiche. Upload pre-size-check. Ogni endpoint controllato, ogni input validato. La paranoia paga.

Voice Web Search

TaskiAI Voice ottiene il tool web_search via Tavily. L'AI può cercare sul web durante una conversazione vocale, annunciando la ricerca per trasparenza. Country mapping per lingua, cap 3 ricerche per chiamata.

Taski arriva su Android

Prima come wrapper Capacitor, poi la migrazione verso un client nativo Kotlin. Il 17-18 maggio, in sessioni notturne con agenti AI paralleli che lavorano in autonomia, il client nativo prende forma: WebSocket, E2EE, push FCM, media cifrati. Un bug emerge tra iOS e Android: le push cifrate non arrivano. Servono due righe nel NSE di iOS che erano invisibili prima perché la cache copriva il path. 10 bug critici fixati nel post-audit. La sesta piattaforma è live.

Il bug accettato

A volte la risposta giusta non è "fix" ma "accetta". Una seconda push arriva dopo 60 secondi in condizioni di burst. Quattro sub-agent analizzano il problema in parallelo. La conclusione: il volume APNs è basso, iOS deduplica via collapse-id, e un fix architetturale romperebbe più cose di quante ne risolva. Il bug viene documentato e accettato. Non tutto va fixato. Alcune cose vanno capite.

Security Audit offensivo

Audit offensivo completo: 6 fix deployati. XSS protection, admin ratelimit, error oracle elimination, country block SMS, CORS whitelist. Cloudflare Access su admin panel. Non si aspetta l'attacco: si va a cercarlo.

Apple App Attest

Attestation e assertion Apple integrate. Trust tiers per i dispositivi. Solo app genuine possono parlare col backend. Il bypass header rimosso. La catena di fiducia e completa: dal silicio Apple fino al server Cloudflare.

07 L'Ecosistema
Maggio 2026 — Oggi

6 piattaforme, un ecosistema

iPhone. Apple Watch. Mac. Windows. Web. Android.
3.165 commit. 717 deploy del worker. 66 migrazioni database. 322 commit web. 76 commit desktop.
Crittografia end-to-end su ogni messaggio, chiamata, foto, video, sticker.
AI integrata che rispetta la privacy. Anti-abuso con doppio modello AI.
Hash-chained key directory per trasparenza crittografica.
Apple App Attest per fiducia hardware.

59 commit in un solo giorno. Commit alle 5 del mattino. Typo nei commit che tradiscono la stanchezza. "Forse", "sembra", "quasi perfetto" — le parole di chi costruisce qualcosa di più grande di se.

Da Initial Commit a qui: 183 giorni. Da una cartella vuota a un ecosistema.

La storia
continua

Ogni commit è un passo avanti. Ogni bug fixato è una lezione imparata. Ogni feature è una promessa mantenuta.

$ git log --oneline | wc -l 3165