Baby Monitor Timmy nisi me një ide të thjeshtë: një monitor për bebe që respekton privatësinë në shtëpi. Pa regjistrime në cloud, pa rrugë të panevojshme të të dhënave jashtë dhomës së bebes. Ajo që shumë njerëz nuk e shohin: Timmy e ndërtoj i vetëm në Zyrih, dhe GitHub Copilot është partneri im shumë i shpejtë në programim.
Rrjedha e punës njeri-AI
Ndarja është e qartë: unë përcaktoj funksionet, vendos prioritetet dhe marr vendimet e arkitekturës. Copilot ndihmon me zbatimin: shkruan kod, shton teste, ngushton shkakun e gabimeve dhe përgatit hapat e publikimit.
Për mua, një sprint tipik duket përafërsisht kështu:
- Përshkrimi i funksionit: Përshkruaj çfarë duhet të bëjë funksioni, duke përfshirë rastet e veçanta dhe kufizimet.
- Zbatimi: Copilot sugjeron kod dhe ndjek rregullat ekzistuese të projektit.
- Testimi: Testet e automatizuara nga fillimi në fund ekzekutohen në dy emulatorë dhe kontrollojnë lidhjen reale bebe/prind.
- Shpërndarja: Kur testet kalojnë, versionet Android dhe iOS përgatiten për dyqanin dhe kanalet e duhura të testimit.
Ky cikël përsëritet për funksione të reja dhe rregullime gabimesh. Nuk e shkruaj vetë çdo rresht, por vendos çfarë ndërtohet, pse ndërtohet dhe nëse një sugjerim i përshtatet Timmy.
Nga koncepti te WebRTC
Detyra kryesore teknike ishte e qartë që në fillim: audio dhe video në kohë reale mes dy telefonave. WebRTC ishte zgjedhja e natyrshme, por integrimi me Flutter nuk është i thjeshtë: kandidatët ICE, negocimi SDP, zgjidhja rezervë TURN dhe DataChannels duhet të funksionojnë së bashku në rendin e duhur.
Copilot më ndihmoi t'i bashkoja këto pjesë hap pas hapi: të konfiguroja lidhjen peer-to-peer, të ruaja rendin kritik të saktë (DataChannel para offer, onTrack para setRemoteDescription), dhe të vendosja sinjalizimin në Firebase Firestore. Çdo pjesë duhej të funksiononte në dy emulatorë para se të vazhdoja.
Çiftim i sigurt me ECDH
Një nga funksionet më kritike ishte sistemi i sigurt i çiftimit. Dy pajisje duhet të krijojnë besim të ndërsjellë pa u mbështetur te një server qendror që garanton identitetin e tyre. Zgjidhja: shkëmbim çelësash ECDH P-256 përmes Firebase, i kombinuar me një numër verifikimi vizual (SAS) që zbulon sulmet man-in-the-middle.
Copilot ndihmoi në zbatimin e zinxhirit kriptografik: gjenerimin e çelësave, shkëmbimin e çelësave publikë, nxjerrjen e sekretit të përbashkët, llogaritjen e SAS dhe enkriptimin AES-256-GCM për të gjitha të dhënat e sinjalizimit më vonë. Çelësin e çiftimit nuk e dërgoj në backend; si identifikues dokumenti në Firestore përdoret vetëm hashi i tij SHA-256.
Auditimi i sigurisë: gjetja dhe rregullimi i cenueshmërive
Zhvillimi me ndihmën e AI për mua nuk është vetëm të shkruarit më i shpejtë. Ai ndihmon edhe në gjetjen sistematike të gabimeve. Në një sprint të përqendruar auditimi sigurie, Copilot analizoi bazën e kodit dhe gjeti gjashtë çështje që duhej t'i rregulloja:
- Mungesë validimi të të dhënave hyrëse të sinjalizimit
- Kushte të mundshme gare gjatë trajtimit të kandidatëve ICE
- Të dhëna sesioni të vjetra që nuk pastroheshin siç duhet
- Rregulla sigurie të Firestore që ishin tepër lejuese
- Mungesë konsideratash për certificate pinning
- Trajtim i pamjaftueshëm i gabimeve në rrjedhën e kredencialeve TURN
Të gjashta u rregulluan në të njëjtin sprint. Këtu Copilot është i fortë: lexon shumë skedarë, krahason modele dhe shënon vendet që duhet t'i kontrolloj më nga afër.
Sprinte përsëritëse: si evoluoi aplikacioni
Timmy u zhvillua përmes sprinteve të shpejta, por me kufij të qartë. Disa momente kyçe:
- v1.8: Ridizajnim i plotë i çiftimit — kodi me 4 karaktere + ECDH P-256 përmes Firebase zëvendësuan qasjen e vjetër me çelës të drejtpërdrejtë.
- v1.10: Sprint për forcimin e sigurisë — cikli i auditimit dhe rregullimit të gjashtë cenueshmërive.
- v1.11: Modalitet i errët në të gjitha ekranet, plus faqja kryesore dhe blogu që po lexoni tani.
- v1.12: Rinovim i madh i ekranit të prindit, modalitet shikimi natën dhe zbulim lëvizjeje përmes analizës së kuadrove të kamerës.
Çdo sprint ndjek të njëjtin model bazë: përshkruaj qëllimin, shqyrtoj sugjerimet, testoj automatikisht dhe më pas ua publikoj testuesve.
Testim E2E në pajisje të ndryshme
Nuk mund ta testosh siç duhet një monitor për bebe në një pajisje të vetme. Më duhet një pajisje për beben dhe një për prindin. Projekti nisi me dy emulatorë Android që funksiononin njëkohësisht dhe tani e plotëson këtë cikël me kontrolle lokale në simulatorin iOS dhe në pajisje reale. Skripti i automatizuar i testimit për Android ende:
- Instalon aplikacionin në të dy emulatorët
- Kryen çiftimin në të dyja pajisjet
- Verifikon që lidhjet audio dhe video krijohen
- Teston push-to-talk, kontrollin e kamerës dhe funksione të tjera
Meqë të dy emulatorët ndajnë të njëjtën adresë IP (10.0.2.15), një lidhje e drejtpërdrejtë peer-to-peer përmes STUN është e pamundur. Çdo ekzekutim i testit duhet të kalojë përmes rele-së Cloudflare TURN. Kjo është bezdisëse, por e dobishme: rruga më e ndërlikuar e lidhjes testohet çdo herë.
Çfarë mësova
Ndërtimi i një aplikacioni të plotë me një programues AI në çift më mësoi disa gjëra:
- Arkitektura ka më shumë rëndësi se kurrë. Rregullat e qarta dhe një bazë kodi e dokumentuar mirë e ndihmojnë AI të sugjerojë kod të qëndrueshëm. Paqartësia kushton shpejt.
- Testimi nuk negociohet. Kodi i krijuar nga AI ka nevojë për të njëjtin testim rigoroz si kodi i shkruar nga njeriu. Testet e automatizuara E2E kapën probleme që do të ishte e lehtë të mos vëreheshin me testim manual.
- Njeriu mbetet në qendër të procesit. Çdo vendim arkitekturor, çdo kompromis sigurie dhe çdo kufi i produktit mbetet tek unë. AI e përshpejton zbatimin, por nuk e zëvendëson gjykimin.
- Shpejtësia mundëson cilësinë. Meqë funksionet publikohen brenda disa orësh, jo ditësh, mbeten më shumë cikle për përmirësime dhe rregullime gabimesh. Shpejtësia nuk garanton automatikisht cilësi.
Duke parë përpara
Baby Monitor Timmy vazhdon të evoluojë. Publikimi për iOS është afër; pas tij vijnë funksione shtesë me sensorë dhe forcimi i vazhdueshëm i sigurisë. Rrjedha e punës mbetet e ngjashme: unë përcaktoj drejtimin dhe kufijtë, Copilot ndihmon të zbatohet dhe kontrollohet shpejt.
Pjesët bazë që lidhen me sigurinë tani ndodhen nën kufij të qartë në repositorin publik baby-monitor-timmy-core. Aty dokumentohen edhe vendimet e arkitekturës për çiftimin, sinjalizimin dhe ndërfaqet e backend-it.