Ιστολόγιο

Πώς δημιουργώ το Baby Monitor Timmy με το GitHub Copilot

Η AI με βοηθά να προχωρώ πιο γρήγορα. Η ευθύνη για το Timmy παραμένει δική μου.

Το Baby Monitor Timmy ξεκίνησε από μια απλή ιδέα: μια ενδοεπικοινωνία μωρού που σέβεται την ιδιωτικότητα στο σπίτι. Χωρίς εγγραφές στο cloud, χωρίς περιττές διαδρομές δεδομένων έξω από το παιδικό δωμάτιο. Αυτό που πολλοί δεν βλέπουν είναι ότι δημιουργώ το Timmy μόνος μου στη Ζυρίχη, και GitHub Copilot είναι ο πολύ γρήγορος συνεργάτης μου στον προγραμματισμό.

Η συνεργασία ανθρώπου και AI

Ο διαχωρισμός είναι ξεκάθαρος: εγώ καθορίζω τα χαρακτηριστικά, βάζω προτεραιότητες και παίρνω τις αρχιτεκτονικές αποφάσεις. Το Copilot βοηθά στην υλοποίηση: γράφει κώδικα, προσθέτει δοκιμές, εντοπίζει σφάλματα και προετοιμάζει τα βήματα κυκλοφορίας.

Ένα τυπικό sprint για μένα μοιάζει περίπου έτσι:

  1. Περιγραφή λειτουργίας: Περιγράφω τι πρέπει να κάνει η λειτουργία, μαζί με ειδικές περιπτώσεις και περιορισμούς.
  2. Υλοποίηση: Το Copilot προτείνει κώδικα και ακολουθεί τις υπάρχουσες συμβάσεις του έργου.
  3. Δοκιμές: Αυτοματοποιημένες δοκιμές end-to-end τρέχουν σε δύο εξομοιωτές και ελέγχουν την πραγματική σύνδεση μωρού/γονέα.
  4. Διανομή: Όταν περνούν οι δοκιμές, οι εκδόσεις Android και iOS προετοιμάζονται για το κατάλληλο κατάστημα και τα κανάλια δοκιμών.

Αυτός ο κύκλος επαναλαμβάνεται για νέες λειτουργίες και διορθώσεις σφαλμάτων. Δεν γράφω κάθε γραμμή μόνος μου, αλλά αποφασίζω τι θα δημιουργηθεί, γιατί θα δημιουργηθεί και αν μια πρόταση ταιριάζει στο Timmy.

Από την ιδέα στο WebRTC

Η βασική τεχνική πρόκληση ήταν ξεκάθαρη από την αρχή: ήχος και βίντεο σε πραγματικό χρόνο μεταξύ δύο τηλεφώνων. Το WebRTC ήταν η προφανής επιλογή, αλλά η ενσωμάτωσή του με το Flutter δεν είναι απλή: οι υποψήφιοι ICE, η διαπραγμάτευση SDP, η εναλλακτική μέσω TURN και τα DataChannels πρέπει να λειτουργούν μαζί με τη σωστή σειρά.

Το Copilot με βοήθησε να συνδέσω αυτά τα κομμάτια βήμα προς βήμα: να ρυθμίσω τη σύνδεση peer, να κρατήσω σωστή την κρίσιμη σειρά (DataChannel πριν από το offer, onTrack πριν από το setRemoteDescription), και να βάλω το signaling στο Firebase Firestore. Κάθε κομμάτι έπρεπε να τρέξει σε δύο εξομοιωτές πριν προχωρήσω.

Ασφαλής σύζευξη με ECDH

Μία από τις πιο κρίσιμες λειτουργίες ήταν το ασφαλές σύστημα σύζευξης. Δύο συσκευές πρέπει να δημιουργήσουν αμοιβαία εμπιστοσύνη χωρίς να βασίζονται σε έναν κεντρικό διακομιστή που επιβεβαιώνει την ταυτότητά τους. Η λύση: ανταλλαγή κλειδιών ECDH P-256 μέσω Firebase, σε συνδυασμό με έναν αριθμό οπτικής επαλήθευσης (SAS) που εντοπίζει επιθέσεις man-in-the-middle.

Το Copilot βοήθησε στην υλοποίηση της κρυπτογραφικής αλυσίδας: δημιουργία κλειδιών, ανταλλαγή δημόσιων κλειδιών, παραγωγή κοινού μυστικού, υπολογισμό SAS και κρυπτογράφηση AES-256-GCM για όλα τα μεταγενέστερα δεδομένα signaling. Δεν στέλνω το κλειδί σύζευξης στο backend· μόνο το hash SHA-256 του χρησιμοποιείται ως αναγνωριστικό εγγράφου στο Firestore.

Έλεγχος ασφάλειας: εντοπισμός και διόρθωση ευπαθειών

Η ανάπτυξη με βοήθεια AI δεν είναι για μένα απλώς πιο γρήγορη πληκτρολόγηση. Βοηθά και στο συστηματικό κυνήγι σφαλμάτων. Σε ένα στοχευμένο sprint ελέγχου ασφάλειας, το Copilot ανέλυσε τη βάση κώδικα και βρήκε έξι ζητήματα που έπρεπε να διορθώσω:

Και τα έξι διορθώθηκαν στο ίδιο sprint. Εκεί το Copilot είναι δυνατό: διαβάζει πολλά αρχεία, συγκρίνει μοτίβα και επισημαίνει σημεία που χρειάζεται να ελέγξω πιο προσεκτικά.

Επαναληπτικά sprints: πώς εξελίχθηκε η εφαρμογή

Το Timmy αναπτύχθηκε μέσα από γρήγορα αλλά σαφώς οριοθετημένα sprints. Μερικά ορόσημα:

Κάθε sprint ακολουθεί το ίδιο βασικό μοτίβο: περιγράφω τον στόχο, εξετάζω τις προτάσεις, κάνω αυτοματοποιημένες δοκιμές και έπειτα το στέλνω στους δοκιμαστές.

Δοκιμές E2E σε συσκευές

Δεν μπορείς να δοκιμάσεις σωστά μια ενδοεπικοινωνία μωρού σε μία συσκευή. Χρειάζομαι μία συσκευή μωρού και μία συσκευή γονέα. Το έργο ξεκίνησε με δύο εξομοιωτές Android που έτρεχαν ταυτόχρονα και τώρα συμπληρώνει αυτόν τον κύκλο με τοπικούς ελέγχους σε προσομοιωτή iOS και πραγματικές συσκευές. Το αυτοματοποιημένο script δοκιμών Android εξακολουθεί να:

  1. Εγκαθιστά την εφαρμογή και στους δύο εξομοιωτές
  2. Περνά από τη διαδικασία σύζευξης και στις δύο συσκευές
  3. Επαληθεύει ότι έχουν δημιουργηθεί συνδέσεις ήχου και βίντεο
  4. Δοκιμάζει την επικοινωνία με πάτημα για ομιλία, τον έλεγχο κάμερας και άλλες λειτουργίες

Επειδή και οι δύο εξομοιωτές έχουν την ίδια διεύθυνση IP (10.0.2.15), μια άμεση σύνδεση peer-to-peer μέσω STUN είναι αδύνατη. Κάθε εκτέλεση δοκιμών πρέπει να περνά από το relay Cloudflare TURN. Είναι ενοχλητικό, αλλά χρήσιμο: η πιο περίπλοκη διαδρομή σύνδεσης δοκιμάζεται κάθε φορά.

Τι έμαθα

Η δημιουργία μιας ολοκληρωμένης εφαρμογής με έναν συνεργάτη προγραμματισμού AI μού έμαθε μερικά πράγματα:

Κοιτάζοντας μπροστά

Το Baby Monitor Timmy συνεχίζει να εξελίσσεται. Η κυκλοφορία για iOS είναι κοντά· μετά ακολουθούν επιπλέον λειτουργίες αισθητήρων και συνεχής ενίσχυση ασφάλειας. Η διαδικασία παραμένει παρόμοια: εγώ ορίζω την κατεύθυνση και τα όρια, και το Copilot βοηθά να υλοποιούνται και να ελέγχονται γρήγορα.

Τα δομικά στοιχεία που σχετίζονται με την ασφάλεια βρίσκονται πλέον, με σαφή οριοθέτηση, στο δημόσιο αποθετήριο baby-monitor-timmy-core. Εκεί τεκμηριώνονται επίσης οι αρχιτεκτονικές αποφάσεις γύρω από τη σύζευξη, το signaling και τις διεπαφές backend.


Περισσότερα άρθρα