Baby Monitor Timmy एउटा सरल सोचबाट सुरु भएको हो: घरको गोपनीयतालाई सम्मान गर्ने बेबी मोनिटर। क्लाउडमा रेकर्डिङ हुँदैन, नर्सरीबाट बाहिर जाने अनावश्यक डाटा मार्ग पनि हुँदैन। धेरैले नदेख्ने कुरा के हो भने: म ज्युरिखमा एक्लै Timmy बनाउँछु, र GitHub Copilot मेरो निकै छिटो पेयर प्रोग्रामर हो।
मानव-AI कार्यप्रवाह
कामको बाँडफाँट स्पष्ट छ: फिचर म तय गर्छु, प्राथमिकता राख्छु र आर्किटेक्चरसम्बन्धी निर्णय गर्छु। Copilot ले कार्यान्वयनमा सहयोग गर्छ: कोड लेख्न, परीक्षण थप्न, बगको कारण पत्ता लगाउन र रिलिजका चरण तयार गर्न।
मेरो लागि सामान्य स्प्रिन्ट लगभग यस्तै हुन्छ:
- फिचरको विवरण: किनारी अवस्थाहरू र सीमिततासहित फिचरले के गर्नुपर्छ भनेर म वर्णन गर्छु।
- कार्यान्वयन: Copilot ले कोड सुझाउँछ र परियोजनाका विद्यमान नियमहरू पालना गर्छ।
- परीक्षण: स्वचालित end-to-end परीक्षण दुई इमुलेटरमा चल्छन् र बच्चा/अभिभावकबीचको वास्तविक जडान जाँच्छन्।
- वितरण: परीक्षण सफल भएपछि 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 र man-in-the-middle आक्रमण पत्ता लगाउने दृश्य प्रमाणीकरण नम्बर (SAS)।
Copilot ले क्रिप्टोग्राफिक शृङ्खला कार्यान्वयन गर्न मद्दत गर्यो: key generation, public key exchange, shared secret derivation, SAS computation, र पछिका सबै signaling डाटाका लागि AES-256-GCM encryption। म pairing key backend मा पठाउँदिनँ; यसको SHA-256 hash मात्र Firestore document identifier का रूपमा प्रयोग हुन्छ।
सुरक्षा अडिट: कमजोरी पत्ता लगाउने र समाधान गर्ने
मेरो लागि AI-सहायित विकास भनेको छिटो टाइप गर्नु मात्र होइन। यसले व्यवस्थित रूपमा बग खोज्न पनि मद्दत गर्छ। केन्द्रित सुरक्षा अडिट स्प्रिन्टमा, Copilot ले codebase विश्लेषण गर्यो र छ वटा समस्या फेला पार्यो, जुन मैले समाधान गर्नुपर्थ्यो:
- signaling डाटामा input validation नभएको
- ICE candidate ह्यान्डलिङमा हुन सक्ने race condition
- राम्ररी सफा नगरिएको पुरानो session data
- अत्यधिक खुला Firestore security rules
- certificate pinning बारे विचार नगरिएको
- TURN credential flow मा पर्याप्त error handling नहुनु
सबै छ वटा समस्या त्यही स्प्रिन्टमा समाधान गरियो। Copilot यहीं बलियो छ: धेरै फाइल पढ्ने, ढाँचा तुलना गर्ने, र मैले नजिकबाट जाँच्नुपर्ने ठाउँ चिन्ह लगाउने।
पुनरावृत्त स्प्रिन्टहरू: एप कसरी विकसित भयो
Timmy छिटो तर स्पष्ट रूपमा सीमित स्प्रिन्टहरूमार्फत विकसित भयो। केही माइलस्टोन:
- v1.8: पेयरिङको पूर्ण पुनःडिजाइन — Firebase मार्फत 4-अक्षर कोड + ECDH P-256 ले पुरानो direct-key तरिका बदल्यो।
- v1.10: सुरक्षा मजबुतीकरण स्प्रिन्ट — छ कमजोरीको अडिट र समाधान चक्र।
- v1.11: सबै स्क्रिनमा dark mode, साथै तपाईंले अहिले पढिरहनुभएको homepage र blog।
- v1.12: अभिभावक स्क्रिनको ठूलो सुधार, night vision mode, र क्यामेरा frame analysis मार्फत motion detection।
हरेक स्प्रिन्टले एउटै आधारभूत ढाँचा पछ्याउँछ: लक्ष्य वर्णन गर्ने, सुझाव समीक्षा गर्ने, स्वचालित परीक्षण गर्ने, अनि परीक्षकहरूलाई पठाउने।
उपकरणहरूमा E2E परीक्षण
बेबी मोनिटरलाई एउटा उपकरणमा मात्र राम्रोसँग परीक्षण गर्न सकिँदैन। मलाई एउटा बच्चाको उपकरण र एउटा अभिभावकको उपकरण चाहिन्छ। परियोजना दुई Android इमुलेटर एकसाथ चलाएर सुरु भयो र अहिले त्यसमा स्थानीय iOS simulator र वास्तविक उपकरण परीक्षण पनि थपिएको छ। स्वचालित Android परीक्षण स्क्रिप्टले अझै पनि:
- दुवै इमुलेटरमा एप इन्स्टल गर्छ
- दुवै उपकरणमा पेयरिङका चरणहरू पार गर्छ
- अडियो र भिडियो जडान स्थापित भएको पुष्टि गर्छ
- push-to-talk, क्यामेरा नियन्त्रण र अन्य फिचर परीक्षण गर्छ
दुवै इमुलेटरले एउटै IP ठेगाना साझा गर्ने भएकाले (10.0.2.15), STUN मार्फत सिधै पियर-टु-पियर जडान सम्भव हुँदैन। हरेक परीक्षण रन Cloudflare TURN रिलेबाट जानुपर्छ। यो झन्झटिलो छ, तर उपयोगी पनि छ: सबैभन्दा जटिल जडान मार्ग हरेक पटक परीक्षण हुन्छ।
मैले के सिकेँ
AI पेयर प्रोग्रामरसँग पूर्ण एप बनाउँदा मैले केही कुरा सिकेँ:
- आर्किटेक्चर पहिलेभन्दा पनि बढी महत्त्वपूर्ण हुन्छ। स्पष्ट नियम र राम्रोसँग दस्तावेज गरिएको codebase ले AI लाई एकरूप कोड सुझाव दिन मद्दत गर्छ। अस्पष्टता चाँडै महँगो पर्छ।
- परीक्षणमा सम्झौता हुँदैन। AI ले बनाएको कोडलाई पनि मानिसले लेखेको कोडजत्तिकै कडा परीक्षण चाहिन्छ। स्वचालित E2E परीक्षणले हातैले गर्दा सजिलै छुट्न सक्ने समस्याहरू भेटायो।
- मानिस प्रक्रियामै रहन्छ। हरेक आर्किटेक्चर निर्णय, हरेक सुरक्षा सम्झौता र हरेक उत्पादनसम्बन्धी सीमा तय गर्ने जिम्मा ममै रहन्छ। AI ले कार्यान्वयन छिटो बनाउँछ, तर विवेकको ठाउँ लिँदैन।
- गतिले गुणस्तर सम्भव बनाउँछ। फिचरहरू दिनको सट्टा घण्टामै पठाउन सकिने भएकाले, परिष्करण र बग समाधानका लागि थप पुनरावृत्ति बाँकी रहन्छ। छिटो हुनुको अर्थ स्वतः राम्रो हुनु होइन।
अगाडि हेर्दा
Baby Monitor Timmy निरन्तर विकसित हुँदैछ। iOS रिलिज नजिकै छ; त्यसपछि थप sensor features र निरन्तर सुरक्षा मजबुतीकरण आउँछन्। कार्यप्रवाह उस्तै रहन्छ: दिशा र सीमा म तय गर्छु, Copilot ले छिटो कार्यान्वयन र जाँच्न सहयोग गर्छ।
सुरक्षासँग सम्बन्धित मुख्य भागहरू अब स्पष्ट रूपमा छुट्याइएका सीमाभित्र र सार्वजनिक baby-monitor-timmy-core repositoryमा छन्। पेयरिङ, signaling र backend interfaces सम्बन्धी आर्किटेक्चर निर्णयहरू पनि त्यहीँ दस्तावेज गरिएका छन्।