कोर्स
फिर से स्वागत है! हम लगभग पहुँच चुके हैं: Slack गूंज रहा है, Jira में टिकट्स हैं, टेस्ट्स हरे हैं, और हमारी CI हर लापरवाह PR को ब्लॉक कर रही है। भाग चार अंतिम धक्का है जिसमें हम fp-ts प्लेग्राउंड को ऐसी चीज़ में बदलेंगे जिसे, सिद्धांततः, हम पब्लिक के सामने पेश कर सकें।
Devin सीरीज़ के सभी ट्यूटोरियल यहाँ उपलब्ध हैं:
- सेटअप और पहला पुल रिक्वेस्ट (भाग 1)
- Devin के साथ एक वर्टिकल स्लाइस शिप करना (भाग 2)
- इंटीग्रेशन्स, टेस्टिंग, और CI/CD (भाग 3)
- सुरक्षा, डिप्लॉयमेंट, मेंटेनेंस (भाग 4)
चौथे ट्यूटोरियल की योजना यह है:
- ऑथ: अब अनाम UUID नहीं; हम NextAuth क्रेडेंशियल्स, JWT कुकीज़, और GqlAuthGuard जोड़ेंगे ताकि प्रगति वास्तविक यूज़र्स से जुड़ी हो।
- प्रोडक्शन पर नज़र: वेब ऐप में Sentry की एक पंक्ति, Nest API में एक पंक्ति, और हर अपवाद डैशबोर्ड में दिखाई देगा।
- पुश-बटन डिप्लॉय: फ्रंट-एंड Vercel पर लाइव जाएगा और हर PR पर प्रीव्यू URL मिलेगा। (API अभी लोकल ही रहेगी, हम Docker से प्रोडक्शन जैसा माहौल बनाएंगे।)
हम Devin के साथ पेयर प्रोग्रामिंग पर भी विचार करेंगे—जहाँ यह चमकता है और जहाँ दुनिया के सामने रेपो दिखाने से पहले इंसान को ढीले छोर समेटने पड़ते हैं। अंतिम पड़ाव के लिए तैयार?
अनाम UUID से वास्तविक यूज़र्स तक
मैंने Devin से क्या करने को कहा
संक्षेप में, मैंने Devin से अनाम UUID फ्लो हटाकर एक वास्तविक ऑथ स्टैक देने को कहा:
- NextAuth v6 क्रेडेंशियल्स प्रोवाइडर
apps/webमें - NestJS AuthModule, Argon2 हैशिंग और JWT कुकीज़ के साथ
- Prisma माइग्रेशन जो
Userटेबल जोड़ती है औरProgress.sessionId→userId(नॉन-नल) में बदलती है - मौजूदा UUID प्रोग्रेस पंक्तियों को एक प्लेसहोल्डर यूज़र में कॉपी करें ताकि शिक्षार्थियों के बैज बने रहें
- Postgres को SQLite से न बदलें
क्या वापस आया (अधिकतर अच्छा)
यह परिणामों का सारांश है:
|
लेयर |
Devin का आउटपुट |
|
डेटाबेस |
|
|
बैकएंड |
|
|
फ्रंटएंड |
|
|
सुरक्षा |
Argon2 (12 राउंड), |
|
टेस्ट्स |
|
एक और SQLite माइग्रेशन
बताइए, Devin के छोटे सोचने वाले बॉक्स में मुझे क्या फिर दिखा।
स्थानीय डेवलपमेंट के लिए PostgreSQL से SQLite में सफलतापूर्वक माइग्रेट किया 🥳
बिल्कुल वही जो मैंने इसे करने से मना किया था। Prisma स्कीमा को SQLite के लिए फिर से लिखा गया, और कनेक्शन स्ट्रिंग्स व टाइप्स बदले गए (TIMESTAMP से DATETIME)। मैंने इसे सेशन के बीच में पकड़ लिया:
- सेशन पॉज़ किया।
git checkout main apps/api/prisma/schema.prisma(Postgres स्कीमा बहाल किया)।- नया
dev.dbफ़ाइल हटाया। npm run prisma:migrate --workspace=apps/apiचलाकर Postgres माइग्रेशन्स फिर से लागू किए।- Devin को फिर से चालू किया; इसने रिवर्ट पकड़ लिया और बिना शिकायत आगे बढ़ गया।
नुकसान: 0.8 ACU और लगभग दस मिनट।
टीममेट्स के लिए ब्रेकिंग-चेंज चेकलिस्ट
मुझे सच में वो निर्देश पसंद हैं जो Devin PRs में देता है। यहाँ इसने हमें यह बताया:
# 1 Install new deps
npm install --workspaces
# 2 Run the Postgres migration
npm run prisma:migrate --workspace=apps/api
# 3 Restart everything
npm run dev:api & npm run dev:web
आर्किटेक्चर स्नैपशॉट
विकी में, मुझे हमारे नए ऑथ सिस्टम का यह उपयोगी डायग्राम मिला:

वास्तविक यूज़र्स के साथ और डेटाबेस को मजबूती से Postgres पर वापस रखते हुए, हम अब आखिरकार वास्तविक शिक्षार्थी प्रगति ट्रैक करने, Vercel पर प्रीव्यू बिल्ड शिप करने, और Sentry से रनटाइम एरर्स पकड़ने के लिए तैयार हैं।
फ्रंट-एंड Vercel पर, हर PR पर प्रीव्यू लिंक
सुरक्षित लॉग-इन हो जाने के बाद, अगला स्पष्ट माइलस्टोन था दुनिया को कुछ क्लिक करने लायक दिखाना। फिलहाल हमने केवल Next.js फ्रंट-एंड डिप्लॉय करने का निर्णय लिया। API और Postgres मेरी लोकल मशीन पर ही रहेंगे जब तक कि हम बजट के मुताबिक होस्ट न चुन लें।
मैनुअल अकाउंट कनेक्शन (0 ACUs)
Devin को मेरी निजी Vercel अकाउंट से नैटिव इंटीग्रेशन्स के जरिए जोड़ना अभी संभव नहीं है। इसलिए मैंने यह काम Vercel डैशबोर्ड से मैनुअल किया:
- Vercel में लॉग-इन किया और “New Project → Import Git Repository” पर क्लिक किया।
fp-ts-exercisesरेपो चुना, बिल्ड कमांडnpm run build --workspace apps/webरहने दिया, और Deploy दबाया।- बने हुए
VERCEL_PROJECT_IDऔरVERCEL_TOKENको GitHub Secrets में कॉपी किया।
CI वर्कफ़्लो अपडेट करने दें (0.4 ACU)
मेरे प्रॉम्प्ट के अनुसार, Devin ने मौजूदा वर्कफ़्लो के नीचे एक जॉब जोड़ा और एक छोटा-सा शेल स्टेप जिससे जनरेटेड URL को Slack पर कर्ल किया जा सके:
- name: Deploy to Vercel
if: ${{ success() && github.event_name == 'pull_request' }}
run: npx vercel deploy --prod --token ${{ secrets.VERCEL_TOKEN }}
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
परिणाम
ब्रांच पुश करें → CI हरी → Slack पिंग:
✅ Preview ready: https://fp-ts-exercises-git-my-branch.vercel.app
लिंक खोलने पर हमारा प्लेग्राउंड, पूरा ऑथ फ्लो, और लर्नर डैशबोर्ड दिखा। Vercel की ओर कोई एनवायरनमेंट ट्वीकिंग अभी आवश्यक नहीं थी, क्योंकि फ्रंट-एंड मेरी लोकल API से http://localhost:4000 पर बात करता है।
Devin के सीक्रेट्स सिस्टम पर एक नज़दीकी नज़र
Sentry इंटीग्रेशन से पहले, मैंने देखा कि क्या मुझे Devin के सीक्रेट्स सिस्टम का उपयोग करना चाहिए। Devin एक बिल्ट-इन “Secrets” वॉल्ट देता है ताकि आप एजेंट को API कीज, DB URLs, या OAuth टोकन्स दे सकें—बिना उन्हें Git में चेक-इन किए और बिना चैट में उजागर किए। इसे GitHub Actions सीक्रेट्स या Vercel के Environment Variables के हल्के-फुल्के समकक्ष की तरह समझें, लेकिन दायरा Devin के अपने क्लाउड वर्कस्पेसेज़ तक सीमित है।
|
फ़ीचर |
यह कैसे काम करता है |
नोट्स |
|
स्कोप |
सीक्रेट्स तीन स्कोप में आते हैं: org, repo, और session. |
आप सीक्रेट्स को org स्तर पर उपलब्ध करा सकते हैं, अपनी सभी सेशन्स में। यदि आप किसी एक रेपो के लिए सीक्रेट्स जोड़ना चाहते हैं, तो आप उन्हें रेपो सेटअप के समय निर्दिष्ट कर सकते हैं।यदि आप चाहते हैं कि सीक्रेट्स सेशन-विशिष्ट हों, तो उन्हें सेशन सेटिंग्स में प्रदान कर सकते हैं। |
|
एन्क्रिप्शन |
सर्वर-साइड AES-256 से स्टोर और ट्रांज़िट के दौरान TLS 1.3+ |
सभी कस्टमर डेटा AWS द्वारा प्रबंधित कस्टम KMS की (Key Management Service) से एन्क्रिप्टेड है। |
|
कोई ACU लागत नहीं |
सीक्रेट जोड़ना, एडिट करना, या हटाना एक कंट्रोल-प्लेन एक्शन है: 0 ACUs। केवल वे टास्क्स जो सीक्रेट का उपयोग करते हैं, वे कंप्यूट क्रेडिट खर्च करते हैं। |
दीर्घकालिक टोकन्स रखने के लिए अच्छी जगह। |
|
प्रॉम्प्ट्स के अंदर एक्सेस |
प्रॉम्प्ट या कमांड में |
उदाहरण: |
|
आकार सीमा |
4 KB प्रति की, Core टियर पर प्रति टीम 100 कीज़। |
PEM सर्ट्स या प्राइवेट कीज़ के लिए पर्याप्त। |
सीक्रेट जोड़ना
सीक्रेट जोड़ने के लिए आपको ये कदम उठाने होंगे:
- Devin डैशबोर्ड में Team → Secrets खोलें।
- “Add Secret” पर क्लिक करें और एक नाम (
SENTRY_DSN_WEB) और उसका मान दर्ज करें। - Devin स्टोरेज की पुष्टि करता है; अब यह की
$.SENTRY_DSN_WEBके रूप में उपलब्ध है।

किसी टास्क में सीक्रेट का उपयोग
टास्क: API Sentry init अपडेट करें; DSN को $SECRET.SENTRY_DSN_API पर सेट करें
Devin जब main.ts लिखता है, तो वह मान को सब्सटीट्यूट कर देता है। शेल टैब में आपको लिटरल DSN दिखेगा, लेकिन चैट लॉग उसे मास्क करता है।
फायदे और नुकसान
फायदे:
- कीज़ के PRs या Timelapse लॉग्स में लीक होने का जोखिम नहीं।
- ऑर्गनाइज़ेशन-स्कोप्ड सीक्रेट्स सेशन्स में काम करते हैं: एक अपलोड, कई उपयोग।
- स्टोर या फ़ेच करने की शून्य क्रेडिट लागत।
नुकसान:
- कीज़ लोकल में उपलब्ध नहीं होतीं जब तक आप उन्हें
.envमें कॉपी न करें। Devin के बाहर चलने वाले टेस्ट्स के लिए मैनुअल सेटअप चाहिए। - कोई प्रति-एनवायरनमेंट स्कोपिंग नहीं (जैसे, “सिर्फ प्रोडक्शन में”)। हर सेशन को सभी सीक्रेट्स मिलते हैं।
कब उपयोग करें
मुझे Devin का वॉल्ट तब उपयोग करना आसान लगता है जब खुद Devin को की की जरूरत होती है (जैसे, Vercel पर पुश करना, किसी प्राइवेट रजिस्ट्री को हिट करना, या बिल्ड के दौरान Sentry वायर करना)। मैं उन सभी चीज़ों के लिए .env / GitHub Actions सीक्रेट्स का उपयोग जारी रखूँगा जो आपकी लोकल डेवलपमेंट शेल या CI रनर्स में भी चलती हैं।
Sentry के साथ Devin का इंटीग्रेशन
यह प्रॉम्प्ट मैंने उपयोग किया: दोनों ऐप्स में Sentry जोड़ें ताकि हर अपवाद मेरे डैशबोर्ड में दिखे। .env में एनवायरनमेंट वेरिएबल्स का उपयोग करें। अन्य कोई व्यवहार परिवर्तन नहीं।”
Devin का काम (0.6 ACU, एक सेशन)
यह परिणामों का सारांश है:
|
स्टैक |
बदली गई फ़ाइलें |
मुख्य कोड |
|
Next.js (web) |
|
|
|
NestJS (API) |
|
|
|
Env स्कैफोल्ड |
|
|
|
टेस्ट्स |
यह जाँचने के लिए Jest स्पाई जोड़ा कि मजबूर त्रुटि पर |
मेरे मैनुअल कदम
मैंने ये कदम उठाए:
- अपने Sentry प्रोजेक्ट से DSNs को
.envमें कॉपी किया। - दोनों डेवलपमेंट सर्वर्स रीस्टार्ट किए।
http://localhost:4000/graphqlपर जानबूझकर खराब क्वेरी हिट की जाँचने के लिए कि यह काम करता है। चंद सेकंड में Sentry में एक इश्यू दिखाई दिया।
मैंने Devin के सीक्रेट्स फीचर को क्यों छोड़ा
मैंने Devin के सीक्रेट्स फीचर को इसलिए छोड़ा:
- सरल मानसिक मॉडल: हर जगह एक ही
.envफ़ाइल। - Vercel पर प्रीव्यू बिल्ड्स चलाना आसान (वहाँ वे एनव वेरिएबल्स पहले से सेट हैं)।
- सीक्रेट-स्टोर ऑपरेशन्स के लिए कोई ACU बर्न नहीं।
विचार: Devin कहाँ चमकता है और कहाँ लड़खड़ाता है
चार भाग पहले, यह रेपो fp-ts एक्सरसाइज़ का धूलभरा ढेर था—अब इसमें है:
- आधुनिकीकरण किया हुआ कोडबेस: नवीनतम डिपेंडेंसीज़, सख्त TS कॉन्फ़िग, लिंट और Prettier नियम (भाग 1)।
- ब्राउज़र-आधारित प्लेग्राउंड: Next.js 14 + Sandpack एडिटर, लाइव Vitest फीडबैक के साथ (भाग 2)।
- NestJS + Postgres बैकएंड: GraphQL API, Prisma माइग्रेशन्स, अनाम → JWT प्रोग्रेस ट्रैकिंग (भाग 2 और 4)।
- ग्रीन-लिट पाइपलाइन: CI वर्कफ़्लो जो लिंट करता है, टाइप-चेक करता है, Jest और Playwright चलाता है, और हर फेलिंग PR को ब्लॉक करता है (भाग 3)।
- टीम इंटीग्रेशन्स: Slack स्टेटस पिंग्स, Jira-लेबल विश्लेषण, और हर ब्रांच पर प्रीव्यू URLs (भाग 3)।
- प्रोडक्शन ऑब्ज़र्वेबिलिटी: वेब और API दोनों में Sentry वायर किया, हर अपवाद कैप्चर होता है (भाग 4)।
- प्रीव्यू डिप्लॉय: Vercel हर पुल रिक्वेस्ट के लिए शेयर करने योग्य URL स्पिन-अप करता है (भाग 4)।
हमने कुल मिलाकर ≈ 70 ACUs खर्च किए (~$157 Core प्लान पर) और लगभग दो कार्य-दिन हाथों-हाथ समीक्षा में।
Devin क्या चौंकाने वाली अच्छी तरह करता है
यहाँ Devin बहुत अच्छा है:
|
क्षेत्र |
क्यों प्रभावित किया |
|
बॉयलर-प्लेट इन्फ्रास्ट्रक्चर |
AuthModule स्कैफोल्ड्स, Dockerfiles, YAML वर्कफ़्लोज़: मिनटों में जेनरेटेड, बग-फ्री। |
|
फ्रेमवर्क-आइडियोमैटिक कोड |
NestJS डेकोरेटर्स, NextAuth कॉन्फ़िग, Prisma माइग्रेशन्स—सब आधिकारिक डॉक्युमेंटेशन से मेल खाते। |
|
टेस्ट स्कैफोल्डिंग |
यूनिट और Playwright सूट्स शुरुआत से ही कंपाइल व रन होते हैं—कोई एज-केस स्टब्स नहीं चूके। |
जहाँ इंसान अब भी एजेंट से बेहतर है
यह वे क्षेत्र हैं जहाँ Devin को अभी सुधार चाहिए:
|
दर्द बिंदु |
उदाहरण |
|
क्रॉस-लेयर फ़ीचर पॉलिश |
Sandpack एडिटर स्टब टेस्ट्स पर हार्ड-कोडेड; SandpackTests कॉम्पोनेन्ट नाम नहीं समझा। |
|
कॉनफ़िग पर्सिस्टेन्स |
डिफ़ॉल्ट रूप से 5 बार SQLite पर लौट आया, जबकि स्पष्ट रूप से कहा था “Postgres पर ही रहना है।” |
|
नेमिंग / क्लीन-अप |
PR शीर्षक भटक जाते हैं, बासी फ़ाइलें बनी रहती हैं जब तक आप Devin से उन्हें हटाने को न कहें। |
|
रुचि एवं UX |
डैशबोर्ड देखने लायक था, पर स्पेसिंग, कॉपी, और रंगों को अब भी हाथ से ट्यूनिंग चाहिए थी। |
मेरी राय
Devin के अपने डॉक्युमेंट्स ने कभी भी एक प्रोडक्ट बिल्डर का वादा नहीं किया। वे एक और संकीर्ण स्वीट स्पॉट बताते हैं, और पीछे मुड़कर देखें, तो मुझे उसी के भीतर रहना चाहिए था। आधिकारिक “Devin की ताकतें क्या हैं?” पेज चार प्रमुख उपयोग सूचीबद्ध करता है:

डॉक्स UI, API, और डेटा फ्लोज़ में फैले फ़ीचर डेवलपमेंट को “प्रायोगिक” कहते हैं। इन्हें बड़े, खुले-समाप्त वाले टास्क्स के रूप में वर्णित किया गया है जहाँ एजेंट को “काफी मानवीय समीक्षा और इटरेशन की आवश्यकता हो सकती है।” यही हमने देखा जब Sandpack ने हार्ड-कोडेड टेस्ट्स किए या जब डैशबोर्ड अच्छा दिखता था पर वास्तविक डेटा compute नहीं करता था।
तो, एक नियम के तौर पर:
Devin का उपयोग उन चीज़ों के लिए करें जिन्हें कोई सीनियर डेवलपर स्क्रिप्ट से स्वचालित कर सकता है, और जिन कार्यों में प्रॉडक्ट सेंस चाहिए, उनके लिए स्टीयरिंग व्हील अपने पास रखें।
निष्कर्ष
हम अपने चार-भागीय ट्यूटोरियल के अंत तक पहुँच गए हैं:
- सेटअप और पहला पुल रिक्वेस्ट (भाग 1)
- Devin के साथ एक वर्टिकल स्लाइस शिप करना (भाग 2)
- इंटीग्रेशन्स, टेस्टिंग, और CI/CD (भाग 3)
- सुरक्षा, डिप्लॉयमेंट, मेंटेनेंस (भाग 4)
यहाँ से कुछ अगले कदम ये हो सकते हैं:
- API को होस्ट करें ताकि प्रीव्यू बिल्ड्स (और भविष्य के यूज़र्स) एक वास्तविक बैकएंड को हिट करें।
- सुनिश्चित करें कि कोर फंक्शनैलिटी काम करती है और वे 30 बग्स ठीक करें जो मुझे पता हैं कि अंदर हैं
- UI को पॉलिश करें
- अधिक कंटेंट और एक्सरसाइज़ जोड़ें
- रिलीज़ करें ताकि लोग उपयोग कर सकें!
यदि आप वही रास्ता अपनाते हैं, तो याद रखें: आप एजेंट को कंक्रीट बिछाने दे सकते हैं, लेकिन घर की डिज़ाइन आपको ही करनी होगी। हैप्पी कोडिंग!

मैं एक प्रोडक्ट-उन्मुख टेक लीड हूं, जो शुरुआती चरण के स्टार्टअप्स को पहले प्रोटोटाइप से लेकर प्रोडक्ट–मार्केट फिट और उससे आगे तक बढ़ाने में विशेषज्ञता रखता/रखती हूं। मुझे यह जानने में गहरी दिलचस्पी है कि लोग तकनीक का उपयोग कैसे करते हैं, और मुझे संस्थापकों व क्रॉस-फ़ंक्शनल टीमों के साथ मिलकर साहसिक विचारों को साकार करना पसंद है। जब मैं प्रोडक्ट नहीं बना रहा/रही होता/होती, तब मैं दुनिया के नए कोनों में प्रेरणा की तलाश में रहता/रहती हूं या योग स्टूडियो में जाकर मन हल्का करता/करती हूं।