Baby Monitor Timmy je počeo od jednostavne ideje: bebi-monitor koji poštuje privatnost u domu. Nema snimanja u oblaku, nema nepotrebnog slanja podataka iz dečje sobe. Ono što mnogi ne vide jeste da Timmy razvijam samostalno iz Ciriha, a GitHub Copilot je moj veoma brzi programski partner.
Radni tok čoveka i AI-ja
Podela je jasna: ja definišem funkcije, postavljam prioritete i donosim arhitektonske odluke. Copilot pomaže u implementaciji: pisanju koda, dodavanju testova, sužavanju uzroka grešaka i pripremi koraka za izdanje.
Moj tipičan sprint otprilike izgleda ovako:
- Opis funkcije: Opisujem šta funkcija treba da radi, uključujući rubne slučajeve i ograničenja.
- Implementacija: Copilot predlaže kod i prati postojeće konvencije projekta.
- Testiranje: Automatizovani end-to-end testovi rade na dva emulatora i proveravaju stvarnu vezu između bebe i roditelja.
- Distribucija: Kada testovi prođu, Android i iOS verzije se pripremaju za odgovarajuće prodavnice i kanale za testiranje.
Ovaj ciklus se ponavlja za nove funkcije i ispravke grešaka. Ne pišem svaki red koda sam, ali odlučujem šta se razvija, zašto se razvija i da li se neki predlog uklapa u Timmy.
Od ideje do WebRTC-a
Centralni tehnički zadatak bio je jasan od početka: zvuk i video uživo između dva telefona. WebRTC je bio očigledan izbor, ali integracija s Flutterom nije jednostavna: ICE kandidati, SDP pregovaranje, TURN rezerva i DataChannels moraju raditi zajedno pravim redosledom.
Copilot mi je pomogao da te delove postepeno povežem: da postavim peer konekciju, održim pravilan redosled ključnih koraka (DataChannel pre offer-a, onTrack pre setRemoteDescription), i postavim signalizaciju na Firebase Firestore. Svaki deo morao je da radi na dva emulatora pre nego što nastavim dalje.
Bezbedno uparivanje uz ECDH
Jedna od najvažnijih funkcija bio je sistem bezbednog uparivanja. Dva uređaja moraju da uspostave međusobno poverenje bez oslanjanja na centralni server koji potvrđuje njihov identitet. Rešenje je ECDH P-256 razmena ključeva preko Firebase-a, zajedno sa vizuelnim brojem za proveru (SAS) koji otkriva napade posrednika.
Copilot je pomogao u implementaciji kriptografskog lanca: generisanje ključeva, razmena javnih ključeva, izvođenje zajedničke tajne, izračunavanje SAS-a i AES-256-GCM šifrovanje svih kasnijih signalizacionih podataka. Ključ za uparivanje ne šaljem backendu; samo se njegov SHA-256 heš koristi kao identifikator Firestore dokumenta.
Bezbednosna revizija: pronalaženje i otklanjanje ranjivosti
Razvoj uz pomoć AI-ja za mene nije samo brže kucanje. Pomaže i u sistematskom traženju grešaka. Tokom fokusiranog sprinta bezbednosne revizije, Copilot je analizirao bazu koda i pronašao šest problema koje je trebalo da ispravim:
- Nedostajuća provera unosa u signalizacionim podacima
- Moguća stanja trke pri obradi ICE kandidata
- Zastareli podaci sesije koji se nisu pravilno brisali
- Previše permisivna Firestore bezbednosna pravila
- Nedostajuća razmatranja certificate pinning-a
- Nedovoljna obrada grešaka u toku za TURN kredencijale
Svih šest problema rešeno je u istom sprintu. Tu je Copilot jak: čita mnogo fajlova, upoređuje obrasce i označava mesta koja treba pažljivije da proverim.
Iterativni sprintovi: kako se aplikacija razvijala
Timmy je rastao kroz brze, ali jasno ograničene sprintove. Neke prekretnice:
- v1.8: Potpuno redizajnirano uparivanje — kod od 4 znaka + ECDH P-256 preko Firebase-a zamenili su stari pristup s direktnim ključem.
- v1.10: Sprint za jačanje bezbednosti — revizija šest ranjivosti i ciklus njihovog otklanjanja.
- v1.11: Tamni režim na svim ekranima, kao i početna stranica i blog koji upravo čitate.
- v1.12: Veliko unapređenje roditeljskog ekrana, režim noćnog vida i detekcija pokreta analizom kadrova kamere.
Svaki sprint prati isti osnovni obrazac: opiši cilj, pregledaj predloge, automatski testiraj, pa pošalji testerima.
E2E testiranje na različitim uređajima
Bebi-monitor ne možete pravilno testirati na jednom uređaju. Potrebni su mi jedan uređaj za bebu i jedan za roditelja. Projekat je počeo s dva Android emulatora koja rade istovremeno, a sada taj ciklus dopunjuju lokalne provere na iOS simulatoru i stvarnim uređajima. Automatizovana Android test skripta i dalje:
- Instalira aplikaciju na oba emulatora
- Prolazi kroz uparivanje na oba uređaja
- Proverava da su uspostavljene audio i video veze
- Testira razgovor pritiskom na dugme, upravljanje kamerom i druge funkcije
Pošto oba emulatora dele istu IP adresu (10.0.2.15), direktna peer-to-peer veza preko STUN-a nije moguća. Svako testiranje mora da ide preko Cloudflare TURN releja. To jeste nezgodno, ali je korisno: svaki put se testira najsloženiji put povezivanja.
Šta sam naučio
Razvoj kompletne aplikacije uz AI programskog partnera naučio me je nekoliko stvari:
- Arhitektura je važnija nego ikad. Jasne konvencije i dobro dokumentovana baza koda pomažu AI-ju da predlaže dosledan kod. Nejasnoće brzo postaju skupe.
- Testiranje nije predmet pregovora. Kod koji generiše AI zahteva isto rigorozno testiranje kao i kod koji piše čovek. Automatizovani E2E testovi otkrili su probleme koje bi bilo lako propustiti pri ručnom testiranju.
- Čovek ostaje uključen. Svaka arhitektonska odluka, svaki bezbednosni kompromis i svaka granica proizvoda ostaju na meni. AI ubrzava implementaciju, ali ne zamenjuje procenu.
- Brzina omogućava kvalitet. Zato što se funkcije isporučuju za sate umesto za dane, ostaje više iteracija za doterivanje i ispravljanje grešaka. Brzo ne znači automatski i dobro.
Pogled unapred
Baby Monitor Timmy se i dalje razvija. iOS izdanje je blizu; zatim dolaze dodatne funkcije senzora i kontinuirano jačanje bezbednosti. Radni tok ostaje sličan: ja postavljam smer i granice, a Copilot pomaže da se brzo implementira i proveri.
Komponente važne za bezbednost sada se nalaze unutar jasno definisanih granica u javnom baby-monitor-timmy-core repozitorijumu. Tu su dokumentovane i arhitektonske odluke o uparivanju, signalizaciji i backend interfejsima.