Το Baby Monitor Timmy ξεκίνησε από μια απλή ιδέα: μια ενδοεπικοινωνία μωρού που σέβεται την ιδιωτικότητα στο σπίτι. Χωρίς εγγραφές στο cloud, χωρίς περιττές διαδρομές δεδομένων έξω από το παιδικό δωμάτιο. Αυτό που πολλοί δεν βλέπουν είναι ότι δημιουργώ το Timmy μόνος μου στη Ζυρίχη, και GitHub Copilot είναι ο πολύ γρήγορος συνεργάτης μου στον προγραμματισμό.
Η συνεργασία ανθρώπου και AI
Ο διαχωρισμός είναι ξεκάθαρος: εγώ καθορίζω τα χαρακτηριστικά, βάζω προτεραιότητες και παίρνω τις αρχιτεκτονικές αποφάσεις. Το Copilot βοηθά στην υλοποίηση: γράφει κώδικα, προσθέτει δοκιμές, εντοπίζει σφάλματα και προετοιμάζει τα βήματα κυκλοφορίας.
Ένα τυπικό sprint για μένα μοιάζει περίπου έτσι:
- Περιγραφή λειτουργίας: Περιγράφω τι πρέπει να κάνει η λειτουργία, μαζί με ειδικές περιπτώσεις και περιορισμούς.
- Υλοποίηση: Το Copilot προτείνει κώδικα και ακολουθεί τις υπάρχουσες συμβάσεις του έργου.
- Δοκιμές: Αυτοματοποιημένες δοκιμές end-to-end τρέχουν σε δύο εξομοιωτές και ελέγχουν την πραγματική σύνδεση μωρού/γονέα.
- Διανομή: Όταν περνούν οι δοκιμές, οι εκδόσεις 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 ανέλυσε τη βάση κώδικα και βρήκε έξι ζητήματα που έπρεπε να διορθώσω:
- Ελλιπής επικύρωση εισόδου στα δεδομένα signaling
- Πιθανές συνθήκες ανταγωνισμού στον χειρισμό υποψήφιων ICE
- Παρωχημένα δεδομένα συνεδρίας που δεν καθαρίζονταν σωστά
- Υπερβολικά ελαστικοί κανόνες ασφαλείας στο Firestore
- Ελλιπείς προβλέψεις για certificate pinning
- Ανεπαρκής χειρισμός σφαλμάτων στη ροή διαπιστευτηρίων TURN
Και τα έξι διορθώθηκαν στο ίδιο sprint. Εκεί το Copilot είναι δυνατό: διαβάζει πολλά αρχεία, συγκρίνει μοτίβα και επισημαίνει σημεία που χρειάζεται να ελέγξω πιο προσεκτικά.
Επαναληπτικά sprints: πώς εξελίχθηκε η εφαρμογή
Το Timmy αναπτύχθηκε μέσα από γρήγορα αλλά σαφώς οριοθετημένα sprints. Μερικά ορόσημα:
- v1.8: Πλήρης ανασχεδιασμός της σύζευξης — ένας κωδικός 4 χαρακτήρων και ανταλλαγή κλειδιών ECDH P-256 μέσω Firebase αντικατέστησαν την παλιά προσέγγιση άμεσου κλειδιού.
- v1.10: Sprint ενίσχυσης ασφάλειας — ο έλεγχος των έξι ευπαθειών και ο κύκλος διορθώσεων.
- v1.11: Σκοτεινή λειτουργία σε όλες τις οθόνες, καθώς και η αρχική σελίδα και το ιστολόγιο που διαβάζετε τώρα.
- v1.12: Μεγάλη ανανέωση της οθόνης γονέα, λειτουργία νυχτερινής όρασης και ανίχνευση κίνησης μέσω ανάλυσης καρέ της κάμερας.
Κάθε sprint ακολουθεί το ίδιο βασικό μοτίβο: περιγράφω τον στόχο, εξετάζω τις προτάσεις, κάνω αυτοματοποιημένες δοκιμές και έπειτα το στέλνω στους δοκιμαστές.
Δοκιμές E2E σε συσκευές
Δεν μπορείς να δοκιμάσεις σωστά μια ενδοεπικοινωνία μωρού σε μία συσκευή. Χρειάζομαι μία συσκευή μωρού και μία συσκευή γονέα. Το έργο ξεκίνησε με δύο εξομοιωτές Android που έτρεχαν ταυτόχρονα και τώρα συμπληρώνει αυτόν τον κύκλο με τοπικούς ελέγχους σε προσομοιωτή iOS και πραγματικές συσκευές. Το αυτοματοποιημένο script δοκιμών Android εξακολουθεί να:
- Εγκαθιστά την εφαρμογή και στους δύο εξομοιωτές
- Περνά από τη διαδικασία σύζευξης και στις δύο συσκευές
- Επαληθεύει ότι έχουν δημιουργηθεί συνδέσεις ήχου και βίντεο
- Δοκιμάζει την επικοινωνία με πάτημα για ομιλία, τον έλεγχο κάμερας και άλλες λειτουργίες
Επειδή και οι δύο εξομοιωτές έχουν την ίδια διεύθυνση IP (10.0.2.15), μια άμεση σύνδεση peer-to-peer μέσω STUN είναι αδύνατη. Κάθε εκτέλεση δοκιμών πρέπει να περνά από το relay Cloudflare TURN. Είναι ενοχλητικό, αλλά χρήσιμο: η πιο περίπλοκη διαδρομή σύνδεσης δοκιμάζεται κάθε φορά.
Τι έμαθα
Η δημιουργία μιας ολοκληρωμένης εφαρμογής με έναν συνεργάτη προγραμματισμού AI μού έμαθε μερικά πράγματα:
- Η αρχιτεκτονική μετρά περισσότερο από ποτέ. Οι ξεκάθαρες συμβάσεις και μια καλά τεκμηριωμένη βάση κώδικα βοηθούν την AI να προτείνει συνεπή κώδικα. Η ασάφεια κοστίζει γρήγορα.
- Οι δοκιμές δεν είναι διαπραγματεύσιμες. Ο κώδικας που δημιουργεί η AI χρειάζεται τις ίδιες αυστηρές δοκιμές με τον κώδικα που γράφουν άνθρωποι. Οι αυτοματοποιημένες δοκιμές E2E εντόπισαν ζητήματα που θα ήταν εύκολο να μη φανούν με χειροκίνητο έλεγχο.
- Ο άνθρωπος παραμένει στη διαδικασία. Κάθε αρχιτεκτονική απόφαση, κάθε συμβιβασμός ασφάλειας και κάθε όριο του προϊόντος παραμένει δικό μου. Η AI επιταχύνει την υλοποίηση, αλλά δεν αντικαθιστά την κρίση.
- Η ταχύτητα δημιουργεί περιθώριο για ποιότητα. Επειδή οι λειτουργίες κυκλοφορούν σε ώρες αντί για ημέρες, υπάρχει χρόνος για περισσότερους κύκλους βελτίωσης και διόρθωσης σφαλμάτων. Η ταχύτητα δεν εγγυάται από μόνη της την ποιότητα.
Κοιτάζοντας μπροστά
Το Baby Monitor Timmy συνεχίζει να εξελίσσεται. Η κυκλοφορία για iOS είναι κοντά· μετά ακολουθούν επιπλέον λειτουργίες αισθητήρων και συνεχής ενίσχυση ασφάλειας. Η διαδικασία παραμένει παρόμοια: εγώ ορίζω την κατεύθυνση και τα όρια, και το Copilot βοηθά να υλοποιούνται και να ελέγχονται γρήγορα.
Τα δομικά στοιχεία που σχετίζονται με την ασφάλεια βρίσκονται πλέον, με σαφή οριοθέτηση, στο δημόσιο αποθετήριο baby-monitor-timmy-core. Εκεί τεκμηριώνονται επίσης οι αρχιτεκτονικές αποφάσεις γύρω από τη σύζευξη, το signaling και τις διεπαφές backend.