Blog

Sådan bygger jeg Baby Monitor Timmy med GitHub Copilot

AI hjælper mig med at komme hurtigere frem. Ansvaret for Timmy ligger stadig hos mig.

Baby Monitor Timmy begyndte med en enkel idé: en babyalarm, der respekterer privatlivet derhjemme. Ingen optagelser i skyen, ingen unødvendige dataveje ud af børneværelset. Det, mange ikke ser, er, at jeg bygger Timmy som soloprojekt i Zürich, og GitHub Copilot er min meget hurtige programmeringsmakker.

Samarbejdet mellem menneske og AI

Fordelingen er klar: Jeg definerer funktioner, sætter prioriteter og træffer arkitekturbeslutninger. Copilot hjælper med implementeringen: at skrive kode, tilføje tests, indkredse fejl og forberede udgivelsestrin.

En typisk sprint ser cirka sådan ud for mig:

  1. Funktionsbeskrivelse: Jeg beskriver, hvad funktionen skal gøre, inklusive særlige tilfælde og begrænsninger.
  2. Implementering: Copilot foreslår kode og følger projektets eksisterende konventioner.
  3. Test: Automatiserede end-to-end-tests kører på to emulatorer og kontrollerer den reelle forbindelse mellem baby- og forældreenheden.
  4. Distribution: Når testene består, klargøres Android- og iOS-builds til de rette appbutikker og testspor.

Denne cyklus gentages for funktioner og fejlrettelser. Jeg skriver ikke hver eneste linje selv, men jeg beslutter hvad der bliver bygget, hvorfor det bliver bygget, og om et forslag passer til Timmy.

Fra koncept til WebRTC

Den centrale tekniske opgave var klar fra starten: lyd og video i realtid mellem to telefoner. WebRTC var det oplagte valg, men integration med Flutter er ikke ligetil: ICE-kandidater, SDP-forhandling, TURN-fallback og DataChannels skal fungere sammen i den rigtige rækkefølge.

Copilot hjalp mig med at samle de dele trin for trin: opsætte peer-forbindelsen, holde den kritiske rækkefølge korrekt (DataChannel før offer, onTrack før setRemoteDescription) og lægge signalering på Firebase Firestore. Hver del skulle køre på to emulatorer, før jeg gik videre.

Sikker parring med ECDH

En af de mest kritiske funktioner var det sikre parringssystem. To enheder skal kunne oprette gensidig tillid uden at være afhængige af, at en central server bekræfter deres identitet. Løsningen: en ECDH P-256-nøgleudveksling over Firebase kombineret med et visuelt bekræftelsesnummer (SAS), der opdager man-in-the-middle-angreb.

Copilot hjalp med at implementere den kryptografiske kæde: nøglegenerering, udveksling af offentlige nøgler, udledning af en fælles hemmelighed, SAS-beregning og AES-256-GCM-kryptering af alle efterfølgende signaleringsdata. Jeg sender ikke parringsnøglen til backend; kun dens SHA-256-hash bruges som id for Firestore-dokumentet.

Sikkerhedsaudit: Find og ret sårbarheder

AI-assisteret udvikling er ikke kun hurtigere tastning for mig. Det hjælper også med systematisk fejljagt. I en fokuseret sprint med sikkerhedsaudit analyserede Copilot kodebasen og fandt seks problemer som jeg skulle rette:

Alle seks blev rettet i samme sprint. Her er Copilot stærk: at læse mange filer, sammenligne mønstre og markere steder, jeg skal undersøge nærmere.

Iterative sprints: Sådan udviklede appen sig

Timmy voksede gennem hurtige, men tydeligt afgrænsede sprints. Nogle milepæle:

Hver sprint følger det samme grundmønster: Beskriv målet, gennemgå forslag, test automatisk, og send derefter til testere.

E2E-test på tværs af enheder

Du kan ikke teste en babyalarm ordentligt på én enhed. Jeg har brug for én babyenhed og én forældreenhed. Projektet begyndte med to Android-emulatorer, der kørte samtidig, og supplerer nu dette forløb med lokale iOS-simulatortests og tests på rigtige enheder. Det automatiserede Android-testscript gør stadig følgende:

  1. Installerer appen på begge emulatorer
  2. Går gennem parringen på begge enheder
  3. Kontrollerer, at lyd- og videoforbindelser bliver oprettet
  4. Tester push-to-talk, kamerastyring og andre funktioner

Da begge emulatorer deler den samme IP-adresse (10.0.2.15), er en direkte peer-to-peer-forbindelse via STUN umulig. Hver testkørsel skal gå gennem Cloudflares TURN-relæ. Det er irriterende, men nyttigt: Den mest komplicerede forbindelsesvej bliver testet hver gang.

Hvad jeg lærte

At bygge en komplet app med en AI-programmeringsmakker har lært mig nogle ting:

Fremadrettet

Baby Monitor Timmy udvikler sig fortsat. iOS-udgivelsen er tæt på; derefter kommer flere sensorfunktioner og løbende sikkerhedsforbedringer. Arbejdsgangen forbliver den samme: Jeg sætter retning og grænser, og Copilot hjælper med at implementere og tjekke hurtigt.

De sikkerhedsrelevante byggesten er nu klart afgrænset i det offentligt tilgængelige kodearkiv baby-monitor-timmy-core. Det er også her, arkitekturbeslutningerne om parring, signalering og backendgrænseflader er dokumenteret.


Flere artikler