रनिंग रिकॉर्ड सेवा
रनिंग रिकॉर्ड सेवा फोन से दौड़ी गई दूरी, समय, पेस और रूट को उसी समय दर्ज करती है, और लॉग इन किए हुए व्यक्ति को केवल उसका अपना रिकॉर्ड दिखाती है। दौड़ पूरी होते ही आज का रिकॉर्ड सूची में जुड़ जाता है, और एक व्यक्ति का रिकॉर्ड दूसरे को दिखाई नहीं देता। वही रिकॉर्ड फोन ऐप में भी दिखता है, और वेब में भी।
यह उदाहरण एक ही बात दिखाता है। फोन ऐप और वेब, ये दोनों स्क्रीन एक ही WEEGLOO बैकएंड को साथ इस्तेमाल करती हैं। इसलिए यह पेज पहले उस बैकएंड को देखता है जिसे ऐप और वेब साथ इस्तेमाल करते हैं, और उसके बाद ऐप और वेब में से जिस ओर रुचि हो उस ओर बँट जाता है। आप कोई भी ओर चुनें, बैकएंड एक ही रहता है। यही मुख्य बात है।
हम क्या बनाते हैं
कपड़ों की दुकान या ब्लॉग की जगह, इस बार का उदाहरण एक व्यक्तिगत रनिंग रिकॉर्ड सेवा है। फोन ऐप और वेब, दो स्क्रीन से वही रिकॉर्ड देखते हैं। ऐप की स्क्रीन तीन तय की गई हैं।
- लॉगिन स्क्रीन: Google से लॉग इन करते हैं।
- रिकॉर्ड सूची: लॉग इन किया हुआ व्यक्ति अब तक दर्ज किए अपने रनिंग रिकॉर्ड को नवीनतम क्रम में देखता है।
- रिकॉर्ड जोड़ना: दौड़ी गई दूरी, समय, पेस, रूट और तारीख दर्ज करते हैं।
मूल बात यह है कि "हर कोई केवल अपना रिकॉर्ड देखता है"। लॉग इन किए हुए व्यक्ति को केवल उसके द्वारा दर्ज किया गया रिकॉर्ड ही पहुँचता है, और दूसरों का रिकॉर्ड दिखाई नहीं देता। यही शर्त आगे चलकर सदस्य लॉगिन और अधिकार को एक साथ ज़रूरी बना देती है।
![]()
![]()
![]()
जिस ओर रुचि हो सीधे उधर जा सकते हैं। फोन ऐप बनाने वाले ऐप के रूप में इस्तेमाल देखें, और वेब बनाने वाले वेब के रूप में इस्तेमाल देखें। बस, उसके नीचे "स्क्रीन के पीछे का बैकएंड" ऐप हो या वेब, दोनों के लिए साझा है, इसलिए पहले उसे एक बार देख लेने पर दोनों राहें अच्छी तरह जुड़ती हैं।
स्क्रीन के पीछे का बैकएंड (ऐप और वेब के लिए साझा)
स्क्रीन बनाकर उससे जुड़े एजेंट को "WEEGLOO से जोड़ दो" कहने पर (कनेक्ट करना, एक वाक्य में जोड़ना), एजेंट स्क्रीन को देखकर स्क्रीन के पीछे ज़रूरी चीज़ें तैयार कर देता है। रनिंग रिकॉर्ड रखने वाला डेटा ढाँचा (Content Type), Google लॉगिन (ServiceLogin), "केवल अपना" अधिकार (ServiceUserRole), और उस अधिकार के अनुसार हर सदस्य को केवल उसका अपना रिकॉर्ड भेजने वाला वितरण। यह बैकएंड चाहे ऐप स्क्रीन से शुरू करें या वेब स्क्रीन से, एक ही रहता है, और ऐप तथा वेब उसे ज्यों का त्यों साथ इस्तेमाल करते हैं। हर टुकड़े को अलग-अलग संभालने का तरीका सदस्य पंजीकरण और लॉगिन जोड़ना, अधिकार बाँटना, डेटा सहेजना और निकालकर इस्तेमाल करना में एक-एक करके बताया गया है।
नीचे इस उदाहरण के Stride Space में असल में बनाए गए संसाधन हैं। यह एक-एक चीज़ सेट करने का तरीका नहीं, बल्कि "जोड़ दो" के परिणामस्वरूप क्या बना, यह देखते हैं।
रनिंग रिकॉर्ड रखने वाला ढाँचा
पहला है, रनिंग रिकॉर्ड रखने वाला ढाँचा (Content Type) "Run"। एक रनिंग में जो मान आते हैं वे आइटम के हिसाब से अलग-अलग खानों में बँटे हैं।
![]()
| आइटम | खाने की किस्म | अनिवार्य | रखा जाने वाला मान |
|---|---|---|---|
Date | Date | अनिवार्य | दौड़ी गई तारीख। सूची में रिकॉर्ड को दर्शाने वाले शीर्षक के रूप में भी इस्तेमाल होती है। |
Distance (km) | Number | अनिवार्य | दौड़ी गई दूरी (किलोमीटर)। दशमलव तक डालते हैं। |
Duration (seconds) | Integer | अनिवार्य | लगा समय (सेकंड में)। स्क्रीन पर 41:05 जैसे मिनट-सेकंड में दिखाया जाता है। |
Notes | Long Text | वैकल्पिक | उस दिन की रनिंग का मेमो। |
Route photo | Media | वैकल्पिक | रूट मैप या फ़ोटो की एक फ़ाइल। |
औसत पेस को अलग से सहेजने वाला कोई खाना नहीं है। दूरी और समय हों तो यह अपने आप निकलने वाला मान है, इसलिए ऐप इसे उसी समय गणना करके दिखाता है (रिकॉर्ड जोड़ने की स्क्रीन का "auto-calculated")।
Google लॉगिन
दूसरा है, वह रास्ता जिससे सदस्य Google से लॉग इन करते हैं (ServiceLogin)। इस उदाहरण में इसका नाम "Stride" रखा गया है, और लॉगिन का तरीका केवल Google एक ही चालू किया गया है। नया लॉग इन करने वाला व्यक्ति डिफ़ॉल्ट रूप से नीचे दिया "Runner" अधिकार पाता है। लॉगिन पूरा होते ही उसका परिणाम स्क्रीन पर लौट आता है, पर लौटने का तरीका ऐप और वेब में थोड़ा अलग है। वह अंतर ऐप के रूप में इस्तेमाल और वेब के रूप में इस्तेमाल में अलग-अलग बताया गया है।
"केवल अपना रिकॉर्ड" अधिकार
तीसरा है, सदस्य को मिलने वाला अधिकार (ServiceUserRole) "Runner"। नियम ऐसे हैं।
| जो काम कर सकते हैं | लागू दायरा |
|---|---|
| रिकॉर्ड बनाना | लॉग इन किया हुआ कोई भी सदस्य |
| रिकॉर्ड पढ़ना | केवल अपना बनाया हुआ |
| रिकॉर्ड बदलना | केवल अपना बनाया हुआ |
| रिकॉर्ड मिटाना | केवल अपना बनाया हुआ |
"पढ़ना" "केवल अपना बनाया हुआ" तक सीमित होने से, सूची में हर किसी को केवल उसका अपना रिकॉर्ड ही दिखता है। हर सदस्य को केवल अपना रिकॉर्ड ही पढ़ने को मिलता है, तो वही उस व्यक्ति तक पहुँचने वाली सूची बन जाती है। यह नियम ऐप हो या वेब, एक जैसा ही लागू होता है।
रिकॉर्ड और फ़ोटो
चौथा है, एक-एक रनिंग रिकॉर्ड (Content) और रूट फ़ोटो (Media)। ये दोनों पहले से बनाकर नहीं रखे जाते, बल्कि जब सदस्य रनिंग दर्ज करता है तब उसके नाम से एक-एक करके बनते हैं। नीचे असल में दर्ज किया गया एक रिकॉर्ड है। पिछले "Run" ढाँचे में मान भरे गए हैं, और रूट फ़ोटो साथ जुड़ी हुई है।
![]()
दूरी 42.195 मैराथन की फुल कोर्स है। समय सेकंड में रखा जाता है (यहाँ 3 घंटे 53 मिनट का रिकॉर्ड), और स्क्रीन पर 3:53:00 जैसे दिखाया जाता है। रूट फ़ोटो फ़ाइल (Media) के रूप में अलग सहेजी जाती है, और रिकॉर्ड में उस फ़ाइल को दर्शाने वाला कनेक्शन भर रखा जाता है।
ऐप के रूप में इस्तेमाल
पहले फोन ऐप। ऐप की स्क्रीन बनाते हैं, और उस स्क्रीन के पीछे को ऊपर वाले स्क्रीन के पीछे का बैकएंड से भरते हैं।
ऐप स्क्रीन बनाना और जोड़ना
1. स्क्रीन डिज़ाइन बनाना। ऊपर "हम क्या बनाते हैं" की तीनों स्क्रीन LLM को नीचे जैसा प्रॉम्प्ट देकर निकाली गई हैं। किस काम का ऐप है यह एक पंक्ति में, स्क्रीन की सूची और हर स्क्रीन में रखी जाने वाली सामग्री, तथा डिज़ाइन की दिशा लिख देने भर से काम हो जाता है।
रनिंग रिकॉर्ड ऐप की स्क्रीन डिज़ाइन कर दो। यह वर्टिकल मोबाइल ऐप है।
स्क्रीन:
- लॉगिन: ऐप का एक पंक्ति का परिचय और "Continue with Google" बटन।
- रिकॉर्ड सूची (होम): कुल दूरी और रनिंग की संख्या का सारांश, रनिंग रिकॉर्ड कार्ड की सूची (तारीख, दूरी, समय, पेस, रूट थंबनेल), रिकॉर्ड जोड़ने का बटन।
- रिकॉर्ड जोड़ना: तारीख, दूरी, समय, पेस, मेमो और रूट फ़ोटो का इनपुट तथा सहेजना।
साफ़-सुथरे और सक्रिय अंदाज़ में, ताकि दूरी और पेस जैसे आँकड़े एक नज़र में पढ़े जा सकें। मोबाइल UI की प्रथा का पालन करता है।
इस तरह निकली स्क्रीन अभी न डेटा वाली है न लॉगिन वाली, केवल स्क्रीन की स्थिति है।
2. WEEGLOO से जोड़ना। एजेंट को WEEGLOO से कनेक्ट करके "WEEGLOO से जोड़ दो" कहने पर, एजेंट इन स्क्रीन को देखकर ऊपर वाला स्क्रीन के पीछे का बैकएंड तैयार कर देता है।
ऐप होने के कारण संभालनी दो बातें
बैकएंड वेब से बनाते समय जैसा ही है। ऐप होने के कारण संभालनी दो बातें हैं।
- वितरण: बनी हुई मोबाइल ऐप को लोगों के हाथ तक पहुँचाने का काम (ऐप मार्केट में पंजीकरण) WEEGLOO के बाहर होता है। WEEGLOO जो संभालता है वह ऐप स्क्रीन के पीछे का डेटा, सदस्य और अधिकार है। (वेब में ऐप मार्केट नहीं होता। यह वेब के रूप में इस्तेमाल में बताया गया है।)
- लॉगिन कॉलबैक: लॉगिन पूरा होने के बाद उसका परिणाम ऐप में वापस पाने वाला कनेक्शन वेब से अलग है। लॉगिन का परिणाम केवल वेब पते पर ही लौट सकता है, इसलिए उस परिणाम को ऐप तक पहुँचाने वाले बिचौलिए पुल की भूमिका वाला एक पेज एक कदम के तौर पर ज़रूरी होता है। यह तकनीकी कदम Auth API में बताया गया है।
जाँचना कि केवल अपना रिकॉर्ड ही दिखता है
मूल शर्त "हर कोई केवल अपना रिकॉर्ड देखता है" ऐप में असल में निभती है। नीचे दो अलग-अलग खातों से एक ही ऐप खोलने पर की होम स्क्रीन है। ऐप एक ही है, पर कुल दूरी भी, रनिंग की संख्या भी, और सूची में दिखने वाला रिकॉर्ड भी अलग है।
![]()
![]()
एक खाते में 5km का एक ही रिकॉर्ड, दूसरे खाते में मैराथन और 3km के दो ही रिकॉर्ड दिखते हैं। एक-दूसरे का रिकॉर्ड सामने वाले को दिखाई नहीं देता। Stride में ये तीनों रिकॉर्ड मौजूद हैं, पर हर सदस्य को केवल उसका दर्ज किया हुआ रिकॉर्ड ही पहुँचता है। ऊपर "केवल अपना रिकॉर्ड" अधिकार में पढ़ने को "केवल अपना बनाया हुआ" तक सीमित करने का यही नतीजा है।
वेब के रूप में इस्तेमाल
वेब ऐप जैसा ही बैकएंड ज्यों का त्यों इस्तेमाल करता है। ऊपर वाले स्क्रीन के पीछे का बैकएंड को वेब पढ़कर वही रिकॉर्ड दिखाता है।
वेब स्क्रीन बनाना और जोड़ना
वेब में भी ऐप जैसे ही दो कदम हैं।
1. वेब स्क्रीन डिज़ाइन बनाना। ऐप की तरह ही LLM को नीचे जैसा प्रॉम्प्ट देकर वेब स्क्रीन निकालते हैं। रखी जाने वाली सामग्री ऐप जैसी ही है, बस चौड़ी स्क्रीन के अनुरूप वेब लेआउट में बदल देते हैं।
रनिंग रिकॉर्ड वेब स्क्रीन डिज़ाइन कर दो। यह डेस्कटॉप वेब है।
स्क्रीन:
- लॉगिन: सेवा का एक पंक्ति का परिचय और "Continue with Google" बटन।
- रिकॉर्ड सूची (डैशबोर्ड): कुल दूरी, रनिंग की संख्या और औसत पेस का सारांश, रनिंग रिकॉर्ड की सूची (तारीख, दूरी, समय, पेस, रूट थंबनेल), रिकॉर्ड जोड़ने का बटन।
- रिकॉर्ड जोड़ना: तारीख, दूरी, समय, पेस, मेमो और रूट फ़ोटो का इनपुट तथा सहेजना।
चौड़ी स्क्रीन को साधने वाले लेआउट में, ताकि दूरी और पेस जैसे आँकड़े एक नज़र में पढ़े जा सकें। वेब UI की प्रथा का पालन करता है।
2. WEEGLOO से जोड़ना। कनेक्ट किए हुए एजेंट को "इस वेब को भी WEEGLOO से जोड़ दो" कहते हैं। यदि आप ऐप पहले ही बना चुके हैं, तो एजेंट ऊपर वाले स्क्रीन के पीछे का बैकएंड को दोबारा खड़ा नहीं करता, बल्कि उसी को ज्यों का त्यों जोड़ लेता है। कोई नया WEEGLOO संसाधन नहीं बनता। वेब में नया बनने वाला केवल वेब स्क्रीन है। (यदि आपने ऐप से गुज़रे बिना वेब से ही शुरू किया, तो वह बैकएंड इसी समय पहली बार बनता है, और बाद में ऐप जोड़ने पर भी उसे वैसे ही इस्तेमाल किया जाता है। कोई भी ओर हो, बैकएंड एक ही रहता है।)
![]()
यह वेब स्क्रीन जाँचना कि केवल अपना रिकॉर्ड ही दिखता है में आए खाते (इस महीने 45.2km, मैराथन 42.20km और 3km) को वेब में खोलने का रूप है। ऐप होम से कुल दूरी, रनिंग की संख्या और रिकॉर्ड एक जैसे ही हैं। बैकएंड एक ही होने से, ऐप ने जो डेटा दिखाया वही वेब डेस्कटॉप स्क्रीन पर ज्यों का त्यों दिखाता है।
वेब होने के कारण अलग दो बातें
वेब में भी ऐप से अलग दो बातें हैं, पर उनकी दिशा ऐप से उलटी है, इसलिए इस बार संभालने को उलटा कम है।
- वितरण: वेब को ऐप मार्केट की ज़रूरत नहीं होती। बनी हुई वेब फ़ाइल को Web Hosting से सीधे इंटरनेट पर डाला जाता है (साइट को इंटरनेट पर डालना)।
- लॉगिन कॉलबैक: वेब में लॉगिन का परिणाम वेब पते पर सीधे लौट आता है। ऐप में जिस बिचौलिए पुल वाले पेज की ज़रूरत थी, वह वेब में न हो तो भी चलता है।
अधिकार वैसा ही रहता है, इसलिए वेब में भी हर सदस्य को केवल अपना रिकॉर्ड ही दिखता है। ऊपर "केवल अपना रिकॉर्ड" अधिकार वेब में भी एक जैसा ही लागू होता है।
आगे क्या करना है
- सदस्य पंजीकरण और लॉगिन जोड़ना: अपने खुद के सदस्य लेने वाला लॉगिन अलग से जोड़ने का तरीका बताता है।
- Auth API: लॉगिन के परिणाम को ऐप में वापस लाने का तकनीकी कदम बताता है।
- अधिकार बाँटना: सदस्य केवल अपनी ही चीज़ें संभालें, इसके लिए अधिकार तय करने का तरीका बताता है।
- डेटा सहेजना और निकालकर इस्तेमाल करना: डेटा ढाँचा बनाने और सामग्री भरने का तरीका बताता है।
- साइट को इंटरनेट पर डालना: वेब को Web Hosting से परिनियोजित करने का तरीका बताता है।
