Baby Monitor Timmy की शुरुआत एक साधारण विचार से हुई: ऐसा बेबी मॉनिटर जो घर की निजता का सम्मान करे। कोई क्लाउड रिकॉर्डिंग नहीं और नर्सरी से डेटा बाहर भेजने के कोई गैर-ज़रूरी रास्ते नहीं। बहुत से लोगों को यह मालूम नहीं कि मैं ज़्यूरिख़ में Timmy को अकेले ही बना रहा हूँ, और GitHub Copilot मेरा बेहद तेज़ पेयर प्रोग्रामर है।
इंसान-AI वर्कफ़्लो
काम का बँटवारा साफ़ है: फीचर तय करना, प्राथमिकताएँ तय करना और आर्किटेक्चर के फ़ैसले मैं करता हूँ। Copilot इम्प्लीमेंटेशन में मदद करता है: कोड लिखने, टेस्ट जोड़ने, बग की वजह तक पहुँचने और रिलीज़ के चरण तैयार करने में।
मेरे लिए एक सामान्य स्प्रिंट लगभग ऐसा होता है:
- फीचर का विवरण: मैं बताता हूँ कि फीचर को क्या करना चाहिए, साथ ही असामान्य स्थितियाँ और सीमाएँ भी।
- इम्प्लीमेंटेशन: Copilot कोड सुझाता है और प्रोजेक्ट के मौजूदा नियमों का पालन करता है।
- टेस्टिंग: ऑटोमेटेड एंड-टू-एंड टेस्ट दो एमुलेटर पर चलते हैं और बेबी व पेरेंट डिवाइस के बीच वास्तविक कनेक्शन की जाँच करते हैं।
- डिस्ट्रिब्यूशन: टेस्ट पास होने पर Android और iOS बिल्ड सही स्टोर और टेस्टिंग ट्रैक के लिए तैयार किए जाते हैं।
फीचरों और बग फ़िक्स के लिए यह चक्र दोहराया जाता है। मैं हर लाइन खुद नहीं लिखता, लेकिन मैं तय करता हूँ क्या बनाया जाएगा, क्यों वह बनाया जाएगा, और क्या कोई सुझाव Timmy के लिए सही है।
कॉन्सेप्ट से WebRTC तक
शुरू से ही मुख्य तकनीकी काम साफ़ था: दो फ़ोनों के बीच रियल-टाइम ऑडियो और वीडियो। WebRTC स्पष्ट विकल्प था, लेकिन इसे Flutter के साथ इंटीग्रेट करना आसान नहीं है: ICE candidates, SDP negotiation, TURN fallback और DataChannels को सही क्रम में साथ काम करना होता है।
Copilot ने इन हिस्सों को चरण-दर-चरण जोड़ने में मदद की: peer connection सेट करना, ज़रूरी क्रम सही रखना (offer से पहले DataChannel, setRemoteDescription से पहले onTrack), और signaling को Firebase Firestore पर रखना। आगे बढ़ने से पहले हर हिस्सा दो एमुलेटर पर चलना ज़रूरी था।
ECDH के साथ सुरक्षित पेयरिंग
सबसे महत्वपूर्ण फीचरों में से एक था सुरक्षित पेयरिंग सिस्टम। दो डिवाइसों को अपनी पहचान की पुष्टि के लिए किसी केंद्रीय सर्वर पर भरोसा किए बिना एक-दूसरे पर भरोसा स्थापित करना होता है। समाधान: Firebase के ज़रिए ECDH P-256 key exchange, साथ में एक विज़ुअल वेरिफ़िकेशन नंबर (SAS), जो man-in-the-middle हमलों का पता लगाता है।
Copilot ने क्रिप्टोग्राफ़िक चेन लागू करने में मदद की: key generation, public key exchange, shared secret derivation, SAS computation और बाद के सभी signaling डेटा के लिए AES-256-GCM encryption। मैं पेयरिंग key बैकएंड को नहीं भेजता; केवल उसका SHA-256 hash Firestore document identifier के रूप में इस्तेमाल होता है।
सुरक्षा ऑडिट: कमज़ोरियाँ ढूँढना और ठीक करना
मेरे लिए AI-सहायित डेवलपमेंट सिर्फ़ तेज़ टाइपिंग नहीं है। यह व्यवस्थित तरीके से बग ढूँढने में भी मदद करता है। एक केंद्रित सुरक्षा ऑडिट स्प्रिंट में Copilot ने कोडबेस का विश्लेषण किया और छह समस्याएँ ढूँढीं जिन्हें मुझे ठीक करना था:
- signaling डेटा में input validation का न होना
- ICE candidate handling में संभावित race conditions
- पुराना session डेटा, जो ठीक से साफ़ नहीं हो रहा था
- Firestore security rules का ज़रूरत से ज़्यादा ढीला होना
- सर्टिफ़िकेट पिनिंग से जुड़ी ज़रूरी सावधानियों पर विचार न किया जाना
- TURN credential flow में अपर्याप्त error handling
सभी छह समस्याएँ उसी स्प्रिंट में ठीक कर दी गईं। Copilot की ताकत यहीं है: बहुत-सी फ़ाइलें पढ़ना, पैटर्न की तुलना करना और उन जगहों को चिन्हित करना जिन्हें मुझे और ध्यान से देखना है।
क्रमिक स्प्रिंट: ऐप कैसे विकसित हुआ
Timmy तेज़, लेकिन साफ़ दायरे वाले स्प्रिंट के ज़रिए विकसित हुआ। कुछ अहम पड़ाव:
- v1.8: पेयरिंग का पूरा नया डिज़ाइन — पुराने direct-key तरीके की जगह Firebase पर 4-कैरेक्टर कोड + ECDH P-256 आया।
- v1.10: सुरक्षा मज़बूत करने वाला स्प्रिंट — छह कमज़ोरियों का ऑडिट और उन्हें ठीक करने का चक्र।
- v1.11: सभी स्क्रीन पर डार्क मोड, साथ ही वह होमपेज और ब्लॉग जिसे आप अभी पढ़ रहे हैं।
- v1.12: पेरेंट स्क्रीन का बड़ा बदलाव, नाइट विज़न मोड और कैमरा फ़्रेम विश्लेषण से मोशन डिटेक्शन।
हर स्प्रिंट का मूल तरीका एक जैसा है: लक्ष्य बताना, सुझावों की समीक्षा करना, ऑटोमेटिक टेस्ट चलाना और फिर टेस्टर्स के लिए रिलीज़ करना।
डिवाइसों पर E2E टेस्टिंग
एक डिवाइस पर बेबी मॉनिटर की सही टेस्टिंग नहीं हो सकती। मुझे एक बेबी डिवाइस और एक पेरेंट डिवाइस चाहिए। प्रोजेक्ट की शुरुआत दो Android एमुलेटर को एक साथ चलाकर हुई थी और अब इसमें स्थानीय iOS simulator और असली डिवाइस की जाँच भी शामिल है। ऑटोमेटेड Android टेस्ट स्क्रिप्ट अब भी:
- दोनों एमुलेटर पर ऐप इंस्टॉल करती है
- दोनों डिवाइसों पर पेयरिंग की प्रक्रिया पूरी करती है
- पुष्टि करती है कि ऑडियो और वीडियो कनेक्शन स्थापित हो गए हैं
- push-to-talk, कैमरा कंट्रोल और दूसरे फीचरों का टेस्ट करती है
क्योंकि दोनों एमुलेटर का IP address एक ही है (10.0.2.15), इसलिए STUN के ज़रिए सीधा peer-to-peer कनेक्शन संभव नहीं है। हर टेस्ट रन को Cloudflare TURN relay से होकर गुजरना पड़ता है। यह परेशान करने वाला है, लेकिन उपयोगी भी: हर बार सबसे जटिल कनेक्शन मार्ग की टेस्टिंग हो जाती है।
मैंने क्या सीखा
AI पेयर प्रोग्रामर के साथ एक पूरा ऐप बनाने से मैंने कुछ बातें सीखीं:
- आर्किटेक्चर पहले से भी ज़्यादा मायने रखता है। स्पष्ट नियम और अच्छी तरह दस्तावेज़ित कोडबेस AI को एक-जैसा कोड सुझाने में मदद करते हैं। अस्पष्टता जल्द ही महँगी पड़ती है।
- टेस्टिंग से समझौता नहीं हो सकता। AI से बने कोड को भी इंसानों के लिखे कोड जितनी कड़ी टेस्टिंग चाहिए। ऑटोमेटेड E2E टेस्ट ने ऐसी समस्याएँ पकड़ीं जिन्हें मैन्युअल रूप से आसानी से नज़रअंदाज़ किया जा सकता था।
- इंसान प्रक्रिया में बना रहता है। आर्किटेक्चर का हर फ़ैसला, सुरक्षा से जुड़ा हर संतुलन और उत्पाद की हर सीमा मैं ही तय करता हूँ। AI इम्प्लीमेंटेशन को तेज़ करता है, लेकिन निर्णय क्षमता की जगह नहीं लेता।
- रफ़्तार से गुणवत्ता संभव होती है। क्योंकि फीचर दिनों की बजाय घंटों में रिलीज़ होते हैं, इसलिए उन्हें निखारने और बग ठीक करने के लिए ज़्यादा बार सुधार करने का मौका मिलता है। तेज़ होने का मतलब अपने-आप अच्छा होना नहीं है।
आगे की राह
Baby Monitor Timmy लगातार विकसित हो रहा है। iOS रिलीज़ करीब है; उसके बाद अतिरिक्त sensor फीचर और सुरक्षा को लगातार मज़बूत करने का काम आएगा। वर्कफ़्लो लगभग वैसा ही रहेगा: दिशा और सीमाएँ मैं तय करता हूँ, Copilot तेज़ी से इम्प्लीमेंट करने और जाँचने में मदद करता है।
सुरक्षा से जुड़े मूल घटक अब स्पष्ट सीमाओं के तहत सार्वजनिक baby-monitor-timmy-core repositoryमें मौजूद हैं। वहीं पेयरिंग, signaling और backend interfaces से जुड़े आर्किटेक्चर फ़ैसले भी दस्तावेज़ित हैं।