Baby Monitor Timmy a pornit de la o idee simplă: un monitor pentru bebeluși care respectă viața privată în locuință. Fără înregistrări în cloud și fără transferuri inutile de date în afara camerei copilului. Ceea ce mulți nu știu este că dezvolt Timmy singur, în Zurich, iar GitHub Copilot este partenerul meu de programare foarte rapid.
Fluxul de lucru om–AI
Împărțirea e clară: eu definesc funcționalitățile, stabilesc prioritățile și iau deciziile de arhitectură. Copilot ajută la implementare: scrie cod, adaugă teste, ajută la identificarea cauzelor erorilor și pregătește pașii pentru lansare.
Un sprint tipic arată, în linii mari, așa pentru mine:
- Descrierea funcționalității: Descriu ce trebuie să facă funcționalitatea, inclusiv cazurile-limită și constrângerile.
- Implementare: Copilot propune cod și respectă convențiile deja existente în proiect.
- Testare: Testele automate end-to-end rulează pe două emulatoare și verifică legătura reală dintre dispozitivul copilului și cel al părintelui.
- Distribuție: Când testele trec, versiunile Android și iOS sunt pregătite pentru magazinele și canalele de testare potrivite.
Acest ciclu se repetă pentru funcționalități și remedieri de erori. Nu scriu fiecare linie singur, dar decid ce se construiește, de ce se construiește și dacă o sugestie se potrivește pentru Timmy.
De la concept la WebRTC
Sarcina tehnică centrală a fost clară de la început: transmisii audio și video în timp real între două telefoane. WebRTC a fost alegerea evidentă, însă integrarea lui cu Flutter nu e simplă: candidații ICE, negocierea SDP, soluția de rezervă TURN și canalele de date trebuie să funcționeze împreună în ordinea corectă.
Copilot m-a ajutat să combin aceste componente pas cu pas: să configurez conexiunea dintre dispozitive, să păstrez ordinea critică corectă (DataChannel înainte de ofertă, onTrack înainte de setRemoteDescription) și să implementez semnalizarea prin Firebase Firestore. Fiecare componentă trebuia să funcționeze pe două emulatoare înainte să merg mai departe.
Asociere sigură cu ECDH
Una dintre cele mai critice funcționalități a fost sistemul de asociere sigură. Două dispozitive trebuie să stabilească încredere reciprocă fără să se bazeze pe un server central care să le confirme identitatea. Soluția: un schimb de chei ECDH P-256 prin Firebase, combinat cu un număr de verificare vizuală (SAS) care detectează atacurile de tip man-in-the-middle.
Copilot m-a ajutat să implementez lanțul criptografic: generarea cheilor, schimbul de chei publice, derivarea secretului partajat, calcularea SAS și criptarea AES-256-GCM pentru toate datele de semnalizare ulterioare. Nu trimit cheia de asociere către backend; doar hash-ul ei SHA-256 este folosit ca identificator al documentului Firestore.
Audit de securitate: găsirea și remedierea vulnerabilităților
Dezvoltarea asistată de AI nu înseamnă pentru mine doar tastare mai rapidă. Mă ajută și la căutarea sistematică a erorilor. Într-un sprint dedicat auditului de securitate, Copilot a analizat baza de cod și a găsit șase probleme pe care trebuia să le rezolv:
- Lipsa validării datelor de intrare pentru datele de semnalizare
- Posibile condiții de cursă la gestionarea candidaților ICE
- Date de sesiune rămase care nu erau eliminate corespunzător
- Reguli de securitate Firestore prea permisive
- Lipsa luării în calcul a fixării certificatelor (certificate pinning)
- Gestionare insuficientă a erorilor în fluxul de credențiale TURN
Toate cele șase au fost rezolvate în același sprint. Aici Copilot este foarte util: citește multe fișiere, compară tipare și semnalează zonele pe care trebuie să le verific mai atent.
Sprinturi iterative: cum a evoluat aplicația
Timmy a crescut prin sprinturi rapide, dar cu limite clare. Câteva etape importante:
- v1.8: Refacere completă a asocierii — codul de 4 caractere + ECDH P-256 prin Firebase au înlocuit vechea abordare cu cheie directă.
- v1.10: Sprint de consolidare a securității — ciclul de audit și remediere pentru cele șase vulnerabilități.
- v1.11: Mod întunecat pe toate ecranele, plus pagina principală și blogul pe care îl citești acum.
- v1.12: Revizuire majoră a ecranului pentru părinte, mod de vedere nocturnă și detectarea mișcării prin analiza cadrelor camerei.
Fiecare sprint urmează același tipar de bază: descriu obiectivul, revizuiesc sugestiile, testez automat, apoi trimit versiunea către testeri.
Testare E2E pe dispozitive
Nu poți testa corect un monitor pentru bebeluși pe un singur dispozitiv. Am nevoie de un dispozitiv pentru copil și unul pentru părinte. Proiectul a început cu două emulatoare Android care rulau simultan, iar acum acest flux este completat de verificări locale pe simulatorul iOS și pe dispozitive reale. Scriptul automat de testare pentru Android continuă să:
- Instalează aplicația pe ambele emulatoare
- Parcurge asocierea pe ambele dispozitive
- Verifică stabilirea conexiunilor audio și video
- Testează push-to-talk, controlul camerei și alte funcționalități
Deoarece ambele emulatoare au aceeași adresă IP (10.0.2.15), o conexiune directă peer-to-peer prin STUN este imposibilă. Fiecare rulare de test trebuie să treacă prin releul TURN de la Cloudflare. Este enervant, dar util: cea mai complicată cale de conectare este testată de fiecare dată.
Ce am învățat
Dezvoltarea unei aplicații complete cu un partener de programare bazat pe AI m-a învățat câteva lucruri:
- Arhitectura contează mai mult ca oricând. Convențiile clare și o bază de cod bine documentată ajută AI-ul să propună cod consecvent. Ambiguitatea devine repede costisitoare.
- Testarea nu e negociabilă. Codul generat de AI are nevoie de aceeași testare riguroasă ca cel scris de oameni. Testele automate E2E au identificat probleme care ar fi fost ușor de omis în testarea manuală.
- Omul rămâne implicat. Fiecare decizie de arhitectură, fiecare compromis de securitate și fiecare limită a produsului rămân în sarcina mea. AI-ul accelerează implementarea, dar nu înlocuiește judecata.
- Viteza face posibilă calitatea. Pentru că funcționalitățile sunt lansate în câteva ore, nu în zile, rămân mai multe iterații pentru finisare și remedierea erorilor. Viteza nu garantează automat calitatea.
Ce urmează
Baby Monitor Timmy continuă să evolueze. Lansarea pentru iOS este aproape; după aceea urmează funcții suplimentare pentru senzori și consolidarea continuă a securității. Fluxul de lucru rămâne similar: eu stabilesc direcția și limitele, iar Copilot ajută la implementare și verificare rapidă.
Componentele importante pentru securitate sunt acum organizate în zone clar delimitate în depozitul public de cod baby-monitor-timmy-core. Acolo sunt documentate și deciziile de arhitectură privind asocierea, semnalizarea și interfețele backendului.