Baby Monitor Timmy vznikol z jednoduchej myšlienky: detská pestúnka, ktorá rešpektuje súkromie doma. Žiadne nahrávky v cloude, žiadne zbytočné cesty dát z detskej izby von. Čo mnohí nevidia: Timmy vyvíjam sám v Zürichu a GitHub Copilot je môj veľmi rýchly programátorský parťák.
Spolupráca človeka a AI
Rozdelenie je jasné: ja určujem funkcie, priority a rozhodujem o architektúre. Copilot pomáha s implementáciou: píše kód, pridáva testy, zužuje okruh možných chýb a pripravuje kroky pred vydaním.
Môj bežný šprint približne vyzerá takto:
- Popis funkcie: Popíšem, čo má funkcia robiť, vrátane okrajových prípadov a obmedzení.
- Implementácia: Copilot navrhne kód a drží sa existujúcich konvencií projektu.
- Testovanie: Automatizované end-to-end testy bežia na dvoch emulátoroch a kontrolujú skutočné spojenie medzi detským a rodičovským zariadením.
- Distribúcia: Keď testy prejdú, pripravia sa verzie pre Android a iOS pre príslušné obchody a testovacie kanály.
Tento cyklus sa opakuje pri funkciách aj opravách chýb. Nepíšem každý riadok sám, ale rozhodujem, čo sa bude vyvíjať, prečo sa to vyvíja a či návrh zodpovedá projektu Timmy.
Od nápadu k WebRTC
Hlavná technická úloha bola od začiatku jasná: zvuk a video v reálnom čase medzi dvoma telefónmi. WebRTC bola jasná voľba, no jej integrácia s Flutterom nie je jednoduchá: ICE kandidáti, vyjednávanie SDP, náhradné spojenie cez TURN a dátové kanály musia spolu fungovať v správnom poradí.
Copilot mi pomohol tieto časti postupne poskladať: nastaviť spojenie medzi zariadeniami, zachovať správne kritické poradie (DataChannel pred ponukou, onTrack pred setRemoteDescription) a signalizáciu umiestniť do Firebase Firestore. Každá časť musela fungovať na dvoch emulátoroch, kým som pokračoval ďalej.
Bezpečné párovanie s ECDH
Jednou z najdôležitejších funkcií bol systém bezpečného párovania. Dve zariadenia si musia vytvoriť vzájomnú dôveru bez toho, aby sa spoliehali na centrálny server, ktorý potvrdí ich identitu. Riešenie: výmena kľúčov ECDH P-256 cez Firebase v kombinácii s vizuálnym overovacím číslom (SAS), ktoré odhalí útoky typu man-in-the-middle.
Copilot pomohol implementovať kryptografický reťazec: generovanie kľúčov, výmenu verejných kľúčov, odvodenie zdieľaného tajomstva, výpočet SAS a šifrovanie AES-256-GCM všetkých neskorších signalizačných dát. Párovací kľúč neposielam na backend; ako identifikátor dokumentu vo Firestore sa používa iba jeho hash SHA-256.
Bezpečnostný audit: hľadanie a oprava zraniteľností
Vývoj s pomocou AI pre mňa nie je iba rýchlejšie písanie. Pomáha mi aj so systematickým hľadaním chýb. Počas cieleného šprintu bezpečnostného auditu Copilot analyzoval kódovú základňu a našiel šesť problémov ktoré som musel opraviť:
- Chýbajúca validácia vstupov pri signalizačných dátach
- Možné súbehové podmienky pri spracovaní ICE kandidátov
- Zastaralé údaje relácie, ktoré sa riadne neodstraňovali
- Príliš benevolentné bezpečnostné pravidlá Firestore
- Chýbajúce zohľadnenie pripínania certifikátov
- Nedostatočné spracovanie chýb v procese prihlasovacích údajov TURN
Všetkých šesť problémov bolo opravených v tom istom šprinte. Práve tu je Copilot silný: prečíta veľa súborov, porovná vzory a označí mi miesta, ktoré potrebujem preskúmať podrobnejšie.
Iteratívne šprinty: ako sa aplikácia vyvíjala
Timmy rástol v rýchlych, no jasne ohraničených šprintoch. Niekoľko míľnikov:
- v1.8: Kompletné prepracovanie párovania — 4-znakový kód + ECDH P-256 cez Firebase nahradili pôvodný prístup s priamym kľúčom.
- v1.10: Šprint na posilnenie bezpečnosti — audit šiestich zraniteľností a ich oprava.
- v1.11: Tmavý režim na všetkých obrazovkách a tiež domovská stránka a blog, ktorý práve čítate.
- v1.12: Veľké prepracovanie rodičovskej obrazovky, režim nočného videnia a detekcia pohybu pomocou analýzy snímok z kamery.
Každý šprint má rovnaký základný postup: popísať cieľ, skontrolovať návrhy, automaticky otestovať a potom odoslať testerom.
E2E testovanie na viacerých zariadeniach
Detskú pestúnku nemožno poriadne otestovať na jednom zariadení. Potrebujem jedno detské zariadenie a jedno rodičovské zariadenie. Projekt začal s dvoma Android emulátormi bežiacimi súčasne a teraz tento postup dopĺňajú lokálne kontroly v iOS simulátore a na reálnych zariadeniach. Automatizovaný testovací skript pre Android stále:
- Nainštaluje aplikáciu na oba emulátory
- Prejde párovaním na oboch zariadeniach
- Overí, že sa vytvorilo zvukové aj video spojenie
- Testuje push-to-talk, ovládanie kamery a ďalšie funkcie
Keďže oba emulátory majú rovnakú IP adresu (10.0.2.15), priame peer-to-peer spojenie cez STUN nie je možné. Každé spustenie testu musí prejsť cez relé Cloudflare TURN. Je to otravné, ale užitočné: pri každom teste sa overí najzložitejšia cesta pripojenia.
Čo som sa naučil
Vývoj kompletnej aplikácie s AI programátorským parťákom ma naučil niekoľko vecí:
- Architektúra je dôležitejšia než kedykoľvek predtým. Jasné konvencie a dobre zdokumentovaná kódová základňa pomáhajú AI navrhovať konzistentný kód. Nejednoznačnosti sa rýchlo predražia.
- Testovanie nie je na diskusiu. Kód vytvorený AI potrebuje rovnako dôkladné testovanie ako kód napísaný človekom. Automatizované E2E testy zachytili problémy, ktoré by sa pri manuálnom testovaní ľahko prehliadli.
- Človek zostáva súčasťou procesu. Každé architektonické rozhodnutie, každý bezpečnostný kompromis a každé vymedzenie produktu je na mne. AI zrýchľuje implementáciu, no nenahrádza úsudok.
- Rýchlosť umožňuje kvalitu. Keďže funkcie sa vydávajú v priebehu hodín namiesto dní, zostáva viac priestoru na ďalšie iterácie, dolaďovanie a opravy chýb. Rýchle neznamená automaticky dobré.
Čo ďalej
Baby Monitor Timmy sa neustále vyvíja. Vydanie pre iOS sa blíži; potom prídu ďalšie funkcie využívajúce senzory a priebežné posilňovanie bezpečnosti. Postup zostáva podobný: ja určujem smer a hranice, Copilot pomáha s rýchlou implementáciou a kontrolou.
Bezpečnostne dôležité stavebné bloky sú teraz jasne oddelené vo verejnom repozitári baby-monitor-timmy-core. Práve tam sú zdokumentované aj rozhodnutia o architektúre párovania, signalizácie a backendových rozhraní.