Блог

Как създавам Baby Monitor Timmy с GitHub Copilot

AI ми помага да се движа по-бързо. Отговорността за Timmy обаче остава при мен.

Baby Monitor Timmy започна с проста идея: бебефон, който уважава личното пространство у дома. Без записи в облака и без излишни пътища за данните извън детската стая. Много хора не знаят, че разработвам Timmy сам в Цюрих, а GitHub Copilot е моят много бърз партньор за програмиране.

Работният процес между човека и AI

Разделението е ясно: аз определям функциите, подреждам приоритетите и вземам архитектурните решения. Copilot помага с изпълнението: писане на код, добавяне на тестове, стесняване на причините за бъгове и подготовка на стъпките за издаване.

Един типичен спринт при мен горе-долу изглежда така:

  1. Описание на функцията: Описвам какво трябва да прави функцията, включително граничните случаи и ограниченията.
  2. Изпълнение: Copilot предлага код и следва установените конвенции на проекта.
  3. Тестване: Автоматизирани end-to-end тестове се изпълняват на два емулатора и проверяват реалната връзка между бебешкото и родителското устройство.
  4. Разпространение: Когато тестовете минат, се подготвят версии за Android и iOS за правилните магазини и канали за тестване.

Този цикъл се повтаря за нови функции и поправки на бъгове. Не пиша всеки ред сам, но решавам какво се разработва, защо се разработва и дали дадено предложение подхожда на Timmy.

От концепцията до WebRTC

Основната техническа задача беше ясна от самото начало: аудио и видео в реално време между два телефона. WebRTC беше очевидният избор, но интегрирането му с Flutter не е лесно: ICE кандидати, SDP договаряне, TURN резервен вариант и DataChannels трябва да работят заедно в правилния ред.

Copilot ми помогна да свържа тези части стъпка по стъпка: да настроя peer connection, да запазя правилния ред за критичните стъпки (DataChannel преди offer, onTrack преди setRemoteDescription) и да поставя сигнализацията във Firebase Firestore. Всяка част трябваше да работи на два емулатора, преди да продължа нататък.

Сигурно сдвояване с ECDH

Една от най-критичните функции беше системата за сигурно сдвояване. Двете устройства трябва да установят взаимно доверие, без да разчитат на централен сървър, който да потвърди идентичността им. Решението: обмен на ключове ECDH P-256 през Firebase, съчетан с визуален номер за потвърждение (SAS), който открива атаки тип „човек по средата“.

Copilot помогна за реализирането на криптографската верига: генериране на ключове, обмен на публични ключове, извеждане на споделена тайна, изчисляване на SAS и AES-256-GCM криптиране на всички последващи данни за сигнализация. Не изпращам ключа за сдвояване към бекенда; само неговият SHA-256 хеш се използва като идентификатор на документ във Firestore.

Одит на сигурността: откриване и отстраняване на уязвимости

Разработването с помощта на AI не означава за мен само по-бързо писане. То помага и за систематично търсене на бъгове. В рамките на фокусиран спринт за одит на сигурността Copilot анализира кодовата база и откри шест проблема които трябваше да поправя:

И шестте бяха поправени в същия спринт. Тук Copilot е силен: чете много файлове, сравнява модели и отбелязва местата, които трябва да прегледам по-внимателно.

Итеративни спринтове: как се разви приложението

Timmy се разви чрез бързи, но ясно ограничени спринтове. Някои важни етапи:

Всеки спринт следва един и същ основен модел: описвам целта, преглеждам предложенията, тествам автоматично и след това изпращам версията на тестери.

E2E тестване между устройства

Не можете да тествате правилно бебефон само на едно устройство. Трябват ми едно бебешко устройство и едно родителско устройство. Проектът започна с два Android емулатора, работещи едновременно, а сега допълва този процес с проверки на локален iOS симулатор и реални устройства. Автоматизираният Android тестов скрипт все още:

  1. Инсталира приложението на двата емулатора
  2. Преминава през сдвояването и на двете устройства
  3. Проверява дали са установени аудио и видео връзки
  4. Тества функцията „натисни, за да говориш“, управлението на камерата и други функции

Тъй като двата емулатора споделят един и същ IP адрес (10.0.2.15), директна peer-to-peer връзка чрез STUN е невъзможна. Всеки тест трябва да мине през релейния сървър Cloudflare TURN. Това е досадно, но полезно: най-сложният път за свързване се тества всеки път.

Какво научих

Създаването на цялостно приложение с AI партньор за програмиране ме научи на няколко неща:

Какво предстои

Baby Monitor Timmy продължава да се развива. Излизането на версията за iOS наближава; след това предстоят допълнителни функции, използващи сензорите, и непрекъснато подобряване на сигурността. Работният процес остава подобен: аз задавам посоката и границите, а Copilot помага за бързото реализиране и проверка.

Компонентите, важни за сигурността, вече се намират зад ясно определени граници в публичното хранилище baby-monitor-timmy-core. Там са документирани и архитектурните решения за сдвояването, сигнализацията и интерфейсите към бекенда.


Още статии