Baby Monitor Timmy започна со едноставна идеја: бебефон што ја почитува приватноста во домот. Без снимки во облакот и без непотребно испраќање податоци надвор од детската соба. Она што многумина не го знаат е дека го развивам Timmy самостојно во Цирих, а GitHub Copilot е мојот многу брз партнер во програмирањето.
Работниот процес човек–ВИ
Поделбата е јасна: јас ги дефинирам функциите, ги поставувам приоритетите и носам архитектонски одлуки. Copilot помага со имплементацијата: пишување код, додавање тестови, стеснување на причините за грешки и подготовка на чекорите за издавање.
Еден типичен спринт кај мене приближно изгледа вака:
- Опис на функцијата: Опишувам што треба да прави функцијата, вклучително и граничните случаи и ограничувањата.
- Имплементација: Copilot предлага код и ги следи постојните правила на проектот.
- Тестирање: Автоматизирани end-to-end тестови работат на два емулатори и ја проверуваат вистинската врска меѓу уредот за бебето и родителскиот уред.
- Дистрибуција: Кога тестовите ќе поминат, Android и iOS верзиите се подготвуваат за соодветната продавница и каналите за тестирање.
Овој циклус се повторува за функции и поправки на грешки. Не ја пишувам секоја линија сам, но јас одлучувам што се развива, зошто се развива и дали предлогот одговара на Timmy.
Од концепт до WebRTC
Главната техничка задача беше јасна уште од почетокот: аудио и видео во реално време меѓу два телефона. WebRTC беше очигледен избор, но неговото интегрирање со Flutter не е едноставно: ICE кандидати, SDP преговарање, TURN резервна опција и DataChannels мора да работат заедно во правилен редослед.
Copilot ми помогна чекор по чекор да ги поврзам тие делови: да ја поставам peer конекцијата, да го задржам точниот редослед на критичните чекори (DataChannel пред понудата, onTrack пред setRemoteDescription) и сигнализацијата да ја поставам на Firebase Firestore. Секој дел мораше да работи на два емулатори пред да продолжам понатаму.
Безбедно спарување со ECDH
Една од најкритичните функции беше системот за безбедно спарување. Двата уреда треба да воспостават меѓусебна доверба без да се потпираат на централен сервер што ќе го потврди нивниот идентитет. Решението е размена на клучеви со ECDH P-256 преку Firebase, во комбинација со визуелен број за потврда (SAS) што открива напади со посредник (man-in-the-middle).
Copilot помогна во имплементирањето на криптографскиот синџир: генерирање клучеви, размена на јавни клучеви, изведување заедничка тајна, пресметување на SAS и шифрирање со AES-256-GCM на сите последователни сигнализациски податоци. Клучот за спарување не го испраќам до заднинскиот систем; само неговиот SHA-256 хаш се користи како идентификатор на документ во Firestore.
Безбедносна ревизија: наоѓање и поправање ранливости
Развојот со помош на ВИ за мене не е само побрзо пишување. Помага и во систематското барање грешки. Во фокусиран спринт за безбедносна ревизија, Copilot ја анализираше кодната база и пронајде шест проблеми што требаше да ги поправам:
- Недостасува валидација на влезните податоци за сигнализација
- Можни услови на трка при обработката на ICE кандидатите
- Застарени податоци за сесијата што не се чистеа правилно
- Премногу попустливи безбедносни правила во Firestore
- Не беше земено предвид прицврстувањето на сертификатот (certificate pinning)
- Недоволна обработка на грешки во процесот на добивање акредитиви за TURN
Сите шест беа поправени во истиот спринт. Тука Copilot е силен: чита многу датотеки, споредува обрасци и ги означува местата што треба повнимателно да ги прегледам.
Итеративни спринтови: како се развиваше апликацијата
Timmy растеше преку брзи, но јасно ограничени спринтови. Некои пресвртници:
- v1.8: Целосно преработено спарување — код од 4 знаци + ECDH P-256 преку Firebase го заменија стариот пристап со директен клуч.
- v1.10: Спринт за зајакнување на безбедноста — ревизија на шесте ранливости и циклус на поправки.
- v1.11: Темна тема на сите екрани, плус почетната страница и блогот што го читате во моментов.
- v1.12: Голема преработка на родителскиот екран, режим за ноќно гледање и детекција на движење преку анализа на кадри од камерата.
Секој спринт ја следи истата основна шема: опиши ја целта, прегледај ги предлозите, тестирај автоматски, па достави ја верзијата до тестерите.
E2E тестирање на повеќе уреди
Бебефон не може правилно да се тестира на еден уред. Потребни ми се уред за бебето и родителски уред. Проектот почна со два Android емулатори што работеа истовремено, а сега тој циклус е надополнет со проверки на локален iOS симулатор и на вистински уреди. Автоматизираната Android тест-скрипта сè уште:
- Ја инсталира апликацијата на двата емулатори
- Го поминува спарувањето на двата уреди
- Проверува дали се воспоставени аудио и видео врски
- Ги тестира зборувањето со притискање (push-to-talk), контролата на камерата и другите функции
Бидејќи двата емулатори ја делат истата IP-адреса (10.0.2.15), директна peer-to-peer врска преку STUN е невозможна. Секое тестирање мора да оди преку Cloudflare TURN релејот. Тоа е досадно, но корисно: најсложената патека за поврзување се тестира секојпат.
Што научив
Градењето целосна апликација со ВИ програмерски партнер ме научи на неколку работи:
- Архитектурата е поважна од кога било. Јасните правила и добро документираната кодна база ѝ помагаат на ВИ да предлага доследен код. Нејаснотиите брзо стануваат скапи.
- Тестирањето е задолжително. Кодот генериран од ВИ бара исто толку ригорозно тестирање како и кодот напишан од луѓе. Автоматизираните E2E тестови открија проблеми што лесно би можеле да се пропуштат при рачно тестирање.
- Човекот останува вклучен. Секоја архитектонска одлука, секој безбедносен компромис и секоја граница на производот остануваат кај мене. ВИ ја забрзува имплементацијата, но не го заменува расудувањето.
- Брзината овозможува квалитет. Бидејќи функциите се испорачуваат за неколку часа наместо за неколку дена, има повеќе можности за доработка и поправање грешки. Брзината сама по себе не гарантира квалитет.
Поглед напред
Baby Monitor Timmy продолжува да се развива. Изданието за iOS е блиску; потоа следуваат дополнителни функции со сензори и континуирано зајакнување на безбедноста. Работниот процес останува сличен: јас ги одредувам насоката и границите, а Copilot помага сè брзо да се имплементира и провери.
Безбедносно важните компоненти сега се организирани во јасно разграничени целини во јавниот репозиториум baby-monitor-timmy-core. Таму се документирани и архитектонските одлуки за спарувањето, сигнализацијата и интерфејсите на заднинскиот систем.