Blog

Kako izrađujem Baby Monitor Timmy uz GitHub Copilot

AI mi pomaže raditi brže. Odgovornost za Timmy i dalje je na meni.

Baby Monitor Timmy nastao je iz jednostavne ideje: monitora za bebe koji poštuje privatnost u domu. Bez snimki u oblaku i bez nepotrebnog slanja podataka iz dječje sobe. Ono što mnogi ne vide jest da Timmy razvijam samostalno u Zürichu, a GitHub Copilot moj je vrlo brzi programerski partner.

Suradnja čovjeka i AI-ja

Podjela je jasna: ja definiram značajke, postavljam prioritete i donosim arhitekturne odluke. Copilot pomaže u implementaciji: pisanju koda, dodavanju testova, pronalaženju uzroka grešaka i pripremi izdanja.

Moj tipičan sprint otprilike izgleda ovako:

  1. Opis značajke: Opisujem što značajka treba raditi, uključujući rubne slučajeve i ograničenja.
  2. Implementacija: Copilot predlaže kôd i prati postojeće konvencije projekta.
  3. Testiranje: Automatizirani end-to-end testovi rade na dva emulatora i provjeravaju stvarnu vezu između djetetova i roditeljskog uređaja.
  4. Distribucija: Kad testovi prođu, pripremaju se verzije aplikacije za Android i iOS za odgovarajuće trgovine i kanale za testiranje.

Ovaj se ciklus ponavlja za nove značajke i ispravke grešaka. Ne pišem svaku liniju sâm, ali odlučujem što se izrađuje, zašto se izrađuje i odgovara li prijedlog Timmyju.

Od koncepta do WebRTC-a

Središnji tehnički zadatak od početka je bio jasan: zvuk i video u stvarnom vremenu između dvaju telefona. WebRTC je bio očit izbor, no integracija s Flutterom nije jednostavna: ICE kandidati, SDP pregovaranje, rezervna veza putem TURN-a i DataChannel kanali moraju djelovati zajedno pravilnim redoslijedom.

Copilot mi je pomogao povezati te dijelove korak po korak: postaviti peer vezu, zadržati ispravan redoslijed ključnih koraka (DataChannel prije ponude, onTrack prije setRemoteDescription) i signalizaciju smjestiti u Firebase Firestore. Svaki je dio morao raditi na dva emulatora prije nego što sam nastavio dalje.

Sigurno uparivanje uz ECDH

Među najvažnijim značajkama bio je siguran sustav uparivanja. Dva uređaja moraju uspostaviti međusobno povjerenje bez oslanjanja na središnji poslužitelj koji jamči za njihov identitet. Rješenje je razmjena ključeva ECDH P-256 putem Firebasea, u kombinaciji s vizualnim brojem za provjeru (SAS) koji otkriva napade posrednika.

Copilot je pomogao implementirati cijeli kriptografski postupak: generiranje ključeva, razmjenu javnih ključeva, izvođenje zajedničke tajne, izračun SAS-a i šifriranje svih kasnijih signalizacijskih podataka algoritmom AES-256-GCM. Ključ za uparivanje ne šaljem pozadinskom sustavu; samo se njegov kriptografski sažetak SHA-256 upotrebljava kao identifikator dokumenta u Firestoreu.

Sigurnosna revizija: pronalaženje i otklanjanje ranjivosti

Razvoj uz pomoć AI-ja za mene nije samo brže tipkanje. Pomaže i u sustavnom traženju grešaka. U fokusiranom sprintu sigurnosne revizije Copilot je analizirao bazu koda i pronašao šest problema koje sam morao ispraviti:

Svih šest problema ispravljeno je u istom sprintu. Tu je Copilot snažan: čita mnogo datoteka, uspoređuje obrasce i označava mjesta koja trebam pažljivije provjeriti.

Iterativni sprintovi: kako se aplikacija razvijala

Timmy se razvijao kroz brze, ali jasno omeđene sprintove. Neke od prekretnica bile su:

Svaki sprint slijedi isti osnovni obrazac: opiši cilj, pregledaj prijedloge, automatski testiraj, zatim pošalji testerima.

E2E testiranje na više uređaja

Monitor za bebe ne može se pravilno testirati na samo jednom uređaju. Trebaju mi jedan uređaj postavljen uz dijete i jedan roditeljski uređaj. Projekt je počeo s dva Android emulatora koja rade istodobno, a taj se postupak sada nadopunjuje lokalnim provjerama u simulatoru iOS-a i na stvarnim uređajima. Automatizirana skripta za testiranje Androida i dalje:

  1. Instalira aplikaciju na oba emulatora
  2. Prolazi kroz uparivanje na oba uređaja
  3. Provjerava uspostavljaju li se audio i video veze
  4. Testira govor pritiskom na gumb, upravljanje kamerom i druge značajke

Budući da oba emulatora dijele istu IP adresu (10.0.2.15), izravna veza između ravnopravnih uređaja putem STUN-a nije moguća. Svako testiranje mora proći kroz Cloudflareov relejni poslužitelj TURN. To je nezgodno, ali korisno: svaki se put testira najsloženiji način povezivanja.

Što sam naučio

Izrada potpune aplikacije uz AI programerskog partnera naučila me nekoliko stvari:

Pogled unaprijed

Baby Monitor Timmy nastavlja se razvijati. Izdanje za iOS uskoro stiže; nakon toga slijede dodatne senzorske značajke i kontinuirano jačanje sigurnosti. Postupak ostaje sličan: ja određujem smjer i granice, a Copilot pomaže u brzoj implementaciji i provjeri.

Sigurnosno važni sastavni dijelovi sada se nalaze unutar jasno definiranih granica u javnom repozitoriju baby-monitor-timmy-core. Ondje su dokumentirane i arhitekturne odluke o uparivanju, signalizaciji i backend sučeljima.


Više članaka