ہر ویب سائٹ کو فیڈ بیک ملتا ہے، اور اس میں سے زیادہ تر کچھ عجیب و غریب ہوتا ہے۔ ایک وزیٹر ٹوٹا ہوا بٹن دیکھتا ہے اور ایک ای میل بھیجتا ہے۔ دوسرے لوگوں نے اپنے فون پر صفحہ لوڈ نہ ہونے کے بارے میں سوشل میڈیا پر تبصرہ کیا۔ جب کوئی تیسرا فریق آپ کے رابطہ فارم کو فیچر آئیڈیا کے ساتھ پُر کرتا ہے، تو یہ آپ کے نیوز لیٹر اور آپ کی رسید کے درمیان آپ کے ان باکس میں رکھ دیا جاتا ہے۔
جب آپ آخر کار مسئلہ کو حل کرنے کے لیے بیٹھتے ہیں، تو بگ رپورٹ تین جگہوں پر پھیل جاتی ہے۔ ان میں سے نصف تفصیلات غائب تھیں، GitHub پر شامل آئٹمز کو براہ راست کاپی کیا گیا تھا، اور بعض اوقات زائرین کے ای میل ایڈریس اب بھی عوامی مسائل میں چسپاں کیے جاتے تھے۔
میں نے اسے بنایا کیونکہ میں اپنے پروجیکٹ کے لیے کچھ بہتر چاہتا تھا۔ ایشو ریلے اپنی React ویب سائٹ پر ایک چھوٹا سپورٹ ویجیٹ فراہم کریں جہاں زائرین سوالات پوچھ سکتے ہیں، کیڑے کی اطلاع دے سکتے ہیں اور خصوصیات تجویز کر سکتے ہیں۔ تمام رپورٹس پہلے آپ کے اپنے ڈیٹا بیس میں محفوظ کی جاتی ہیں۔ Jev نامی ایک AI ماڈل پھر اس کی درجہ بندی کرتا ہے، اس بات کا تعین کرتا ہے کہ یہ کوڈ میں قواعد کے ایک عام سیٹ کی بنیاد پر کہاں جاتا ہے، اور نجی ڈیش بورڈ میں اس کا جائزہ لیتا ہے۔
اگر ہم تصدیق کرتے ہیں کہ رپورٹ واقعی ایک بگ ہے، تو IssueRelay وزیٹر کی ذاتی معلومات کو ہٹانے کے ساتھ ایک صاف GitHub مسئلہ پیدا کرتا ہے۔ اگر GitHub بعد میں اس مسئلے کو بند کر دیتا ہے، تو سپورٹ ٹکٹ بھی بند ہو جائے گا۔
اس ٹیوٹوریل میں، آپ سیکھیں گے کہ پورا سسٹم کیسے کام کرتا ہے، آپ کے براؤزر کے ویجٹس سے لے کر ویب ہکس تک جو آپ کے ڈیش بورڈ کو GitHub کے ساتھ مطابقت پذیر رکھتے ہیں۔ ہم یہ بھی دیکھیں گے کہ آپ تقریباً 15 منٹ میں اپنی کاپیاں کیسے تقسیم کر سکتے ہیں۔
IssueRelay GitHub (andrewbaisden/issuerelay) پر اوپن سورس ہے اور ویجیٹ npm پر درج ذیل شائع ہوتا ہے: @issuerelay/widgetمیں فی الحال اسے اپنی پورٹ فولیو ویب سائٹ پر پروڈکشن میں چلا رہا ہوں۔
میں اس مضمون میں پورے کوڈ بیس کو پیسٹ نہیں کروں گا۔ ریپوزٹری میں تمام فائلیں شامل ہیں اور سیٹ اپ گائیڈ آپ کو مرحلہ وار انسٹالیشن کے ذریعے لے جاتا ہے۔ اس کے بجائے، میں آپ کو کوڈ کے چھوٹے چھوٹے ٹکڑے دکھاؤں گا جن میں اہم آئیڈیاز ہوں گے، اس بات کی وضاحت کروں گا کہ کوڈ کا ہر ٹکڑا کیا کرتا ہے، اور کوڈ کو بنانے، جانچنے، اور تعینات کرنے کے دوران میں نے جو کچھ سیکھا ہے اس کا اشتراک کروں گا۔
انڈیکس
شرطیں
اس کے ساتھ عمل کرنے اور اپنی کاپیاں تقسیم کرنے کے لیے، آپ کو ضرورت ہو گی:
-
React، Next.js اور TypeScript کا کام کا علم: پلیٹ فارم Next.js ایپ راؤٹر کا استعمال کرتا ہے اور ویجٹ React اجزاء ہیں۔
-
Node.js 24 اور pnpm: اگر آپ پروجیکٹ کو مقامی طور پر چلانا چاہتے ہیں یا GitHub ایپ بنانے کے لیے کمانڈ استعمال کرنا چاہتے ہیں تو یہ انسٹال ہے۔
-
GitHub اکاؤنٹ: ویب سائٹ یا ایپ کا ذخیرہ بھی داخل کریں جہاں آپ ویجیٹ انسٹال کرنا چاہتے ہیں۔ تصدیق شدہ کیڑے پریشانی کا شکار ہیں۔
-
ورسل اکاؤنٹ: مفت شوق کا منصوبہ کافی ہے۔ آپ Vercel کے بازار کے ذریعے Neon PostgreSQL ڈیٹا بیس شامل کر سکتے ہیں، اور Neon کے پاس بھی ایک مفت منصوبہ ہے۔
-
ٹائپ سیف اکاؤنٹ: یہ Jev’s typesafe.ai میں ہے، ایک AI ماڈل جو رپورٹس کی درجہ بندی کرتا ہے۔ اس سے پہلے کہ آپ کی رپورٹ GitHub کا مسئلہ بن جائے، آپ کو TypeSafe کنسول سے ایک API کلید کی ضرورت ہوگی۔
-
ردعمل ویب سائٹ: یہ وہ جگہ ہے جہاں آپ اجزاء شامل کرسکتے ہیں۔ Next.js سائٹ شروع کرنے کے لیے سب سے آسان جگہ ہے۔
-
اختیاری: اکاؤنٹ دوبارہ بھیجیں: اگر آپ اپنے اکاؤنٹ کا ای میل چاہتے ہیں، جیسے کہ پاس ورڈ دوبارہ ترتیب دینا۔
ساتھ چلنے کے لیے آپ کو AI ماہر بننے کی ضرورت نہیں ہے۔ Jev کا استعمال SDKs کے ایک چھوٹے سے سیٹ کے ذریعے کیا جاتا ہے اور زیادہ تر دلچسپ چیزیں عمومی ویب انجینئرنگ جیسے ڈیٹا بیس، توثیق، تصدیق اور ویب ہکس ہیں۔
کس طرح AI کی مدد سے چلنے والے سسٹم ہر ویب سائٹ کی مدد کر سکتے ہیں۔
سپورٹ سسٹم کسی ایسی چیز کی طرح لگ سکتا ہے جس کی صرف بڑی کارپوریشنوں کو ضرورت ہوتی ہے، لیکن ان کے حل کردہ مسائل تقریباً ہر ویب سائٹ پر ظاہر ہوتے ہیں۔
-
پورٹ فولیو سائٹ بھرتی کرنے والوں سے پیغامات موصول کریں، اپنے پروجیکٹس کے بارے میں سوالات، اور مخصوص براؤزرز میں کام نہ کرنے والے صفحات کے بارے میں رپورٹس حاصل کریں۔
-
SaaS پروڈکٹ بلنگ کے سوالات اور فیچر کی درخواستوں پر مشتمل بگ رپورٹس میں سے ہر ایک کو مختلف لوگوں یا عمل کی ضرورت ہوتی ہے۔
-
دستاویز سائٹ "یہ مثال کام نہیں کرتی” رپورٹس حاصل کریں جو دراصل پروڈکٹ میں کیڑے ہیں۔
-
اوپن سورس پروجیکٹ ایسے صارفین حاصل کریں جو GitHub کے مسائل کو براہ راست نہیں کھولیں گے، لیکن وہ آپ کی ویب سائٹ کے بٹن پر کلک کرنے کے لیے تیار ہیں۔
-
کلائنٹ سائٹ آپ جو تاثرات کسی اور کے لیے بناتے ہیں وہ کچھ دن بعد کلائنٹ کے ذریعے آپ کو بغیر کسی تفصیلات کے بھیج دیا جاتا ہے۔
ایک اچھا نظام ایک جگہ فراہم کرتا ہے جہاں آپ کی تمام رپورٹس پہنچ جاتی ہیں، ہر رپورٹ کو محفوظ رکھتا ہے چاہے دوسری سروسز ناکام ہو جائیں، اور رپورٹس کو ترتیب دیں تاکہ آپ اہم خدمات پر وقت گزار سکیں۔
AI حصہ سیدھ میں مدد کرتا ہے، لیکن کبھی بھی انچارج نہیں ہونا چاہئے۔ ماڈل اعتماد کے ساتھ غلط ہوسکتا ہے، اور عوامی GitHub مسئلہ ایسی چیز نہیں ہے جس کے بارے میں آپ اندازہ لگانا چاہتے ہیں۔ لہذا IssueRelay ایک سادہ اصول کی پیروی کرتا ہے: AI تجویز کرتا ہے، انسان تصدیق کرتا ہے، اور کوڈ قوانین کو نافذ کرتا ہے۔
جو ہم تعمیر کریں گے۔
یہاں IssueRelay کے ذریعے ایک رپورٹ کا سفر ہے:

ایک وزیٹر آپ کی سائٹ پر ایک ویجیٹ کھولتا ہے اور ایک موضوع کا انتخاب کرتا ہے۔

وہ مسئلہ بیان کر سکتے ہیں اور اختیاری طور پر اپنا نام اور ای میل چھوڑ سکتے ہیں تاکہ ہم فالو اپ کر سکیں۔

ویجیٹ رپورٹ کو IssueRelay پلیٹ فارم پر بھیجتا ہے، جو رپورٹ کو محفوظ کرتا ہے اور ایک معاون حوالہ کے ساتھ جواب دیتا ہے جسے دیکھنے والا بعد میں حوالہ دے سکتا ہے۔

رپورٹ پھر آپ کے ڈیش بورڈ میں ایک ٹکٹ بن جاتی ہے۔ Jev اسے ترتیب دے گا، اس کا جائزہ لے گا، اور اگر یہ ایک حقیقی بگ ہے، تو ایک کلک کے ساتھ آپ کے ذخیرے میں GitHub کا مسئلہ پیدا ہو جائے گا۔
مکمل خصوصیت کی فہرست مندرجہ ذیل ہے:
-
وجیٹس جو داخل کیے جاسکتے ہیں: یہ شیڈو DOM کے اندر ایک React جزو کے طور پر بنایا گیا ہے، اس لیے اسے کسی CSS سیٹنگ کی ضرورت نہیں ہے اور یہ آپ کی سائٹ کے انداز سے متصادم نہیں ہے۔ Next.js ایپ روٹر اور مواد کی سخت حفاظتی پالیسیوں کے ساتھ کام کرتا ہے۔
-
پائیدار انٹیک: تمام رپورٹیں PostgreSQL میں محفوظ کر لی جاتی ہیں اس سے پہلے کہ کوئی بھی دوسرے آپریشنز چلائے جائیں، اور انہیں نقل کی روک تھام، فی پروجیکٹ کی شرح کو محدود کرنے، اور سائٹ کے اجازت شدہ پتوں کی فہرست فراہم کی جاتی ہے۔
-
محدود AI درجہ بندی: Jev صرف پیغام کی بنیاد پر قسم اور شدت کی سفارش کرتا ہے۔
-
پرائیویٹ ڈیش بورڈ: یہ فلٹرز، درجہ بندی کے ریکارڈ، اور انسانی جائزے کے فیصلوں کا استعمال کرتا ہے جو AI کے آؤٹ پٹ سے الگ محفوظ کیے جاتے ہیں۔
-
پروڈنٹ GitHub اضافہ: GitHub ایپ میں مسائل صرف اس کے بعد بنائے جاتے ہیں جب مالک نے پیش نظارہ کی تصدیق کی ہے، اور ان کے رابطے کی تفصیلات کبھی بھی IssueRelay کو نہیں چھوڑتی ہیں۔
-
دو طرفہ مطابقت پذیری: جب آپ GitHub میں کسی مسئلے کو بند یا دوبارہ کھولتے ہیں، تو ٹکٹ کو دستخط شدہ ویب ہک کے ذریعے اپ ڈیٹ کیا جاتا ہے۔
-
خود میزبان: تعیناتی بٹن، پہلے چلائیں ترتیبات کا صفحہ، اور ترتیبات کا صفحہ آپ کو ڈیٹا بیس کو چھوئے بغیر اپنی کاپی چلانے کی اجازت دیتا ہے۔
زیب کیا ہے؟
Jev TypeSafe کا ماڈل ہے جسے TypeSafe "System One” کام کہتے ہیں: طویل، کھلی تحریر کے بجائے فوری، محدود فیصلہ۔
ماڈل سے پیراگراف لکھنے اور پھر اس کی تجزیہ کرنے کی کوشش کرنے کے بجائے، ہم Jev کو کئی ریاستیں اور سوالات کی ایک سیریز دیتے ہیں، ہر ایک کے پاس ممکنہ جوابات کی ایک مقررہ فہرست ہے۔ Jev ہر سوال کے جواب کا انتخاب کرتا ہے اور ہر آپشن کو تفویض کردہ امکان واپس کرتا ہے۔
یہ فارم بالکل وہی ہے جو سپورٹ کی درجہ بندی کے لیے درکار ہے۔ ٹکٹیں کیڑے، سوالات، خصوصیت کی درخواستیں، بلنگ کے مسائل، یا اسپام ہیں۔ کم، درمیانے، اعلی، یا نازک۔ ماڈل کے لیے پیدا کرنے کے لیے کوئی ٹیکسٹ نہیں ہے، آپ کو ایشو ٹائٹل لکھنے کے قابل بنانے کے لیے کوئی آن دی فلائی انسرٹس نہیں ہے، اور بعد میں صاف کرنے کے لیے کوئی مفت ٹیکسٹ نہیں ہے۔ آؤٹ پٹ ایک لیبل اور ایک نمبر ہے، اور آپ دونوں کوڈ میں دیکھ سکتے ہیں۔
یہ سستا اور تیز ہے۔ لکھنے کے وقت، TypeSafe Jev کو $42 فی بلین ان پٹ ٹوکن پر درج کرتا ہے، درجنوں ٹوکنز کے لیے سپورٹ پیغامات کے ساتھ۔ IssueRelay انضمام صرف وزیٹر کا پیغام اور وہ موضوعات بھیجتا ہے جو وزیٹر Jev کو منتخب کرتا ہے۔ ہم آپ کو آپ کا نام، ای میل پتہ، ٹکٹ آئی ڈی، یا کوئی اور چیز نہیں بھیجیں گے جو آپ کی ذاتی طور پر شناخت کرتی ہو۔
ٹیکنالوجی اسٹیک
IssueRelay ایک جدید TypeScript اسٹیک کے ساتھ بنایا گیا ہے، وہی اسٹیک جو میں اپنے پروجیکٹس کے لیے استعمال کرتا ہوں۔ اگر آپ نے میرے دوسرے مضامین پڑھے ہیں، تو اس میں سے بہت کچھ واقف نظر آئے گا۔
-
Next.js 16 (App Router) اور React 19 پلیٹ فارمز اور ڈیش بورڈز کے لیے
-
سخت ٹائپ اسکرپٹ کہیں بھی، ایک ساتھ زورڈ عوامی API درخواستوں، ماحولیاتی متغیرات، AI آؤٹ پٹ، اور GitHub ویب ہک پے لوڈز سمیت اعتماد کی حدود کو عبور کرنے والے تمام ان پٹ کی توثیق کریں۔
-
Drizzle ORM کا استعمال کرتے ہوئے PostgreSQL ایس کیو ایل مائیگریشن کا جائزہ
-
بہتر تصدیق ڈیش بورڈ اکاؤنٹس کے لیے
-
آفیشل ٹائپ سیف SDK زیب کے لیے آکٹوکیٹ GitHub ایپس کے لیے
-
Vitest، React ٹیسٹنگ لائبریری اور ڈرامہ نگار جانچ کے لیے اور بایوم لنٹ اور فارمیٹنگ کے لیے
-
pnpm ورک اسپیس ہر چیز کو ایک monorepo میں ڈالنا
-
ورسل، نیون اور ری ڈائریکٹ پیداوار میں
ایک monorepo چھوٹے پیکجوں میں تقسیم کیا جاتا ہے، ہر ایک سخت کام انجام دیتا ہے.
| پیکج | ذمہ داری |
|---|---|
apps/web |
پلیٹ فارم: پبلک ٹکٹ API، ڈیش بورڈ، سیٹنگز، اور گٹ ہب ویب ہکس |
packages/widget |
یہ ایک براؤزر ویجیٹ ہے جو npm پر شائع ہوتا ہے۔ کوئی سرور کوڈ درآمد نہیں کیا گیا ہے۔ |
packages/support-contracts |
درخواست اور جواب کا فارمیٹ ویجیٹ اور API کے درمیان مشترکہ ہے۔ |
packages/db |
بوندا باندی سکیما، منتقلی اور ڈیٹا بیس کے تمام سوالات |
packages/ai |
Jev اڈاپٹر، درجہ بندی کی خدمت، اور روٹنگ پالیسی |
packages/github |
GitHub ایپ کلائنٹ، ڈرافٹ شائع کریں، پرائیویسی گیٹ اور ویب ہک ہینڈلنگ |
packages/auth |
بہتر توثیق کی ترتیبات، سیشن اور ورک اسپیس ممبرشپ کی تصدیق |
حدیں اس سے کہیں زیادہ اہم ہیں جتنا کہ لگتا ہے۔ رد عمل کے اجزاء کبھی بھی GitHub، Jev، یا ڈیٹا بیس کے ساتھ براہ راست بات چیت نہیں کرتے ہیں۔ براؤزر کوڈ میں کوئی راز نہیں ہے۔ AI پیکجز ڈیٹا بیس درآمد نہیں کر سکتے۔
ان لائنوں کو سخت رکھنے سے آپ کے سسٹم کو جانچنا اور اس کے بارے میں استدلال کرنا بہت آسان ہو جاتا ہے، یہی وجہ ہے کہ آپ سرور کوڈ کو گھسیٹے بغیر npm پر ویجٹ شائع کر سکتے ہیں۔
رپورٹس سسٹم کے ذریعے کیسے منتقل ہوتی ہیں۔
آئیے وزٹرز کے براؤزرز سے GitHub کے بند مسائل سے متعلق رپورٹس پر عمل کریں۔
مرحلہ 1: وجیٹس
وجیٹس عام ردعمل کے اجزاء ہیں جو آپ npm سے انسٹال کرتے ہیں۔
npm install @issuerelay/widget
پھر اسے ایک بار رینڈر کریں، مثال کے طور پر روٹ لے آؤٹ میں کلائنٹ کے جزو میں۔
"use client";
import {
HttpSupportSubmissionClient,
SupportWidget,
} from "@issuerelay/widget";
const submissionClient = new HttpSupportSubmissionClient({
apiBaseUrl: "https://your-issuerelay.vercel.app",
});
export function Support() {
return (
);
}
HttpSupportSubmissionClient یہ وہ حصہ ہے جو آپ کے پلیٹ فارم سے بات کرتا ہے۔ کوکیز یا اسناد کے بغیر ہر رپورٹ کو IssueRelay API پر شائع کریں، اور ہر رپورٹ کے لیے ایک جمع کرانے کی ID فراہم کریں تاکہ نیٹ ورک کی خرابی کے بعد دوبارہ کوشش کرنے سے دوسرا ٹکٹ نہ بنے۔
SupportWidget یہ وہ بٹن اور پینل ہیں جو دیکھنے والے دیکھتے ہیں۔ کہ projectKey یہ پلیٹ فارم کو بتاتا ہے کہ رپورٹ کس پروجیکٹ سے تعلق رکھتی ہے۔ چونکہ یہ عوامی شناخت ہے، پاس ورڈ نہیں، اس لیے سائٹ کوڈ درج کرنا محفوظ ہے۔ اصل تحفظ ان سرورز میں ہے جو صرف سائٹ کے ایڈریس کی رپورٹس کو قبول کرتے ہیں جو آپ اس پروجیکٹ کے لیے درج کرتے ہیں۔
کہ "use client" لائن موجود ہے کیونکہ جمع کرانے والا کلائنٹ براؤزر میں بنایا گیا تھا۔ Next.js ایپ راؤٹر اس طرح کے چھوٹے کلائنٹ کے اجزاء میں وجیٹس کو لپیٹتا ہے اور ان اجزاء کو لے آؤٹ میں پیش کرتا ہے۔
اندرونی طور پر، ویجٹس شیڈو DOM کے اندر ان کے اپنے بنڈل اسٹائلز کا استعمال کرتے ہوئے پیش کیے جاتے ہیں، اس لیے آپ کی سائٹ کو Tailwind یا CSS امپورٹس کی ضرورت نہیں ہے، اور آپ کے اسٹائلز غلطی سے اپنے اسٹائلز کو تبدیل نہیں کریں گے۔
آپ کو یہ کوڈ خود لکھنے کی بھی ضرورت نہیں ہے۔ IssueRelay کے پروجیکٹ کی ترتیبات کا صفحہ پلیٹ فارم ایڈریس اور پروجیکٹ کلید کے ساتھ صحیح ٹکڑا دکھاتا ہے جو پہلے سے آباد ہے۔
مرحلہ 2: پہلے محفوظ کریں، بعد میں سوچیں۔
جب کوئی رپورٹ API سے ٹکرا جاتی ہے تو، IssueRelay سب سے پہلے رپورٹ کو محفوظ کرنا ہے۔ اسے ترتیب نہ دیں، اسے کہیں بھی نہ بھیجیں، بس اسے لین دین کے اندر PostgreSQL میں اسٹور کریں۔
یہ پورے نظام میں ڈیزائن کا سب سے اہم فیصلہ ہے۔ AI فراہم کنندہ بند ہے۔ GitHub کو بندش کا سامنا ہے۔ اگر پلیٹ فارم رپورٹ کو محفوظ کرنے سے پہلے Jev کو کال کرتا ہے اور Jev کا وقت ختم ہو جاتا ہے، تو وزیٹر کا پیغام ضائع ہو جائے گا اور وزیٹر اسے کبھی نوٹس نہیں کرے گا۔
تو اصول سادہ ہیں۔ رپورٹس کو صرف تب ہی قبول کیا جاتا ہے جب وہ محفوظ طریقے سے محفوظ ہوجاتی ہیں اور انہیں کبھی نہیں مٹایا جاتا ہے، چاہے بعد کے مرحلے میں غلطیاں پیش آئیں۔ اگر Jev ڈاؤن ہے، ٹکٹ ڈیش بورڈ میں اس وقت تک انتظار کرے گا جب تک آپ دوبارہ ٹرائیج نہیں چلاتے۔
محفوظ کرنے سے پہلے، API کئی چیزوں کو چیک کرتا ہے:
-
درخواست کا باڈی مشترکہ Zod معاہدے سے مماثل ہے، اس لیے غلط ان پٹ کو واضح غلطی کے ساتھ مسترد کر دیا جاتا ہے۔
-
پروجیکٹ کلید موجود ہے اور درخواست کی اصل سائٹ کے پتوں میں سے ایک ہے جسے پروجیکٹ میں اجازت دی گئی ہے۔
-
آپ کا پروجیکٹ اپنی رفتار کی حد تک پہنچ گیا ہے۔
-
جمع کرانے کی شناخت پہلے استعمال نہیں کی گئی ہے۔ بار بار جمع کرانے سے اصل ٹکٹ کا حوالہ کاپی بنانے کے بجائے واپس آ جائے گا۔
مرحلہ 3: Jev کے ساتھ ترتیب دینا
ٹکٹ محفوظ ہونے کے بعد، درجہ بندی سروس جیو سے ٹکٹ کی درجہ بندی کرنے کو کہتی ہے۔ جیو اڈاپٹر کا جوہر ہے: packages/ai/src/jev-classifier.ts (جگہ کے لیے قدرے کٹا ہوا):
const response = await this.client.systemOne({
state: {
message: input.message,
category_hint: input.categoryHint ?? null,
},
questions: {
ticket_type: choice(
"What kind of support ticket is this? The visitor-selected category hint is a weak signal, not ground truth: judge from the message content.",
{
question: "The visitor asks how something works or what something is.",
bug: "Something is broken, errors, or behaves incorrectly.",
feature_request: "The visitor requests new functionality or an improvement.",
spam: "Unsolicited advertising, scams, or irrelevant bulk content.",
// ...account, billing, feedback, and other
},
),
severity: choice("How urgent is this ticket?", {
low: "Minor inconvenience, cosmetic issue, or general question.",
medium: "Broken functionality with a workaround, or a routine request.",
high: "Major functionality unavailable, no workaround, time-sensitive.",
critical: "Security breach, data loss, privacy exposure, or billing harm.",
}),
},
});
systemOne یہ ایک محدود سوال کے لیے TypeSafe SDK کال ہے۔ کہ state آبجیکٹ وہ چیز ہوتی ہے جسے Jev دیکھ سکتا ہے – وزیٹر کے ذریعہ منتخب کردہ پیغام اور موضوع۔
چیک کریں کہ کیا غائب ہے۔ کوئی نام، ای میل یا ٹکٹ آئی ڈی نہیں۔ اس میں سے کوئی بھی درجہ بندی میں مدد نہیں کرتا، کیونکہ وہ تمام ذاتی ڈیٹا ہیں جو پلیٹ فارم کو چھوڑ رہے ہیں۔
ہر ایک choice ایک سوال اور ممکنہ جوابات کی وضاحت کریں۔ ہر لیبل کے آگے کی تفصیل Jev کو بتاتی ہے کہ لیبل کا کیا مطلب ہے۔ مزید برآں، ٹکٹ کی قسم کا سوال Jev کو ہدایت دیتا ہے کہ وہ وزیٹر کے منتخب کردہ موضوع کو ایک کمزور اشارہ سمجھے۔ اس کی وجہ یہ ہے کہ لوگ اکثر سوال پوچھنے کے لیے "بگ کی اطلاع دینا” کا انتخاب کرتے ہیں، یا کسی ایسی چیز کے لیے "سوال پوچھنا” کا انتخاب کرتے ہیں جو واضح طور پر غلط ہے۔
جو واپس آتا ہے اس پر خود بخود بھروسہ نہیں ہوتا۔ اڈاپٹر جوابات کی توثیق کرنے کے لیے Zod اسکیما کا استعمال کرتا ہے، چیک کرتا ہے کہ آیا دونوں جوابات وائٹ لسٹ میں لیبل ہیں، اور Jev کی طرف سے منتخب قسم کے لیبل کو اعتماد کے اسکور کے طور پر استعمال کرتا ہے۔
اگر یہ امکان غائب ہے یا 0 سے 1 کی حد سے باہر ہے، تو نتیجہ مسترد کر دیا جائے گا اور ٹکٹ جعلی نمبر حاصل کرنے کے بجائے زیر نظر رہے گا۔

مرحلہ 4: کوڈ فیصلہ کرتا ہے۔
Jev قسم اور شدت کی سفارش کرتا ہے۔ یہ اس بات کا تعین نہیں کرتا کہ ٹکٹ کہاں جاتا ہے یا یہ GitHub کا مسئلہ بن جاتا ہے۔ کام مندرجہ ذیل عام افعال کے تحت آتا ہے: packages/ai/src/policy.ts:
export function routeForType(type: TicketType): TicketRoute {
switch (type) {
case "bug":
return "engineering";
case "feature_request":
return "product";
case "spam":
return "ignore";
default:
return "support";
}
}
export function evaluateGitHubEscalation(input: {
type: TicketType;
route: TicketRoute;
confidence: number;
}): EscalationEvaluation {
const reasons: string[] = [];
if (input.type !== "bug") reasons.push(`type is ${input.type}, not bug`);
if (input.route !== "engineering") reasons.push(`route is ${input.route}, not engineering`);
if (!(input.confidence >= GITHUB_ESCALATION_CONFIDENCE_THRESHOLD)) {
reasons.push(`confidence ${input.confidence} is below ${GITHUB_ESCALATION_CONFIDENCE_THRESHOLD}`);
}
return { eligible: reasons.length === 0, reasons };
}
routeForType ہر ٹکٹ کی قسم کو قطار میں نقشہ بنائیں۔ بگز کو انجینئرنگ میں منتقل کر دیا گیا ہے، فیچر کی درخواستوں کو پروڈکٹ میں منتقل کر دیا گیا ہے، اسپام کو قرنطینہ کر دیا گیا ہے، اور باقی سب کچھ سپورٹ میں منتقل کر دیا گیا ہے۔ کیونکہ یہ معمول ہے۔ switch بیانات کو AI کو چھوئے بغیر پڑھا، جانچا اور تبدیل کیا جا سکتا ہے۔
evaluateGitHubEscalation اس بات کا تعین کریں کہ آیا ٹکٹ GitHub کا مسئلہ بن سکتا ہے۔ یہ ایک بگ ہونا چاہیے، انجینئرنگ کی قطار میں ہونا چاہیے، اور اس کی اعتماد کی درجہ بندی 0.9 یا اس سے زیادہ ہونی چاہیے۔ بجائے برہنہ واپس بھیجنے کے true یا falseہم آپ کے ٹکٹ کے ناکام ہونے کی وجوہات جمع کرتے ہیں اور اسے آپ کے ڈیش بورڈ میں ڈسپلے کرتے ہیں، تاکہ آپ کو ہمیشہ معلوم ہو کہ آپ کا ٹکٹ کیوں ناکام ہوا۔ GitHub مسئلہ بنائیں کوئی بٹن نہیں ہیں۔
0.9 تھریشولڈ ایک کنفیگریشن فائل میں اس وضاحت کے ساتھ ہے کہ یہ ایک غیر منقطع نقطہ آغاز ہے نہ کہ پیمائش شدہ درستگی۔ میں اس کوڈ میں ایمانداری سے بیان کرنا چاہتا تھا۔ 0.99 کے ماڈل سکور کا مطلب یہ نہیں ہے کہ ماڈل 99% درست ہے۔
مرحلہ 5: ڈیش بورڈ میں انسانی جائزہ
تمام ٹکٹ آپ کے نجی ڈیش بورڈ میں ظاہر ہوتے ہیں۔ پروجیکٹ کا صفحہ دکھاتا ہے کہ ہر ریاست میں کتنے ٹکٹ ہیں۔

ہر پروجیکٹ میں ٹکٹوں کی فہرست ہوتی ہے جس میں سٹیٹس، راستے، قسم، شدت اور حوالہ کے فلٹرز ہوتے ہیں۔

جب آپ ٹکٹ کھولتے ہیں، تو آپ کو وزیٹر کی رپورٹ، موجودہ AI درجہ بندی، مکمل درجہ بندی کی تاریخ، اور جو کچھ ہوا اس کی ٹائم لائن نظر آئے گی۔ آپ نظرثانی کے فیصلوں کو لاگ ان کر سکتے ہیں جو ایک جائزہ کو دوبارہ چلاتے ہیں، ٹکٹ کو حل کرتے ہیں، یا راستہ، حیثیت، یا GitHub کی سفارشات کو تبدیل کرتے ہیں۔
ایک تفصیل جس میں مجھے دلچسپی ہے وہ یہ ہے کہ انسانی فیصلے ان کے مصنف کے ساتھ ان کی اپنی میز میں محفوظ ہیں اور ان کی ضرورت کیوں ہے۔ AI کی تاریخ کو دوبارہ کبھی نہیں لکھا جائے گا۔ اگر آپ Jev کو اوور رائیڈ کرتے ہیں، تو آپ بالکل دیکھ سکتے ہیں کہ Jev نے کیا کہا اور کب۔ یہ اہم ہے جب آپ جاننا چاہتے ہیں کہ آپ کا ماڈل عملی طور پر کتنی اچھی کارکردگی کا مظاہرہ کرتا ہے۔
ڈیش بورڈ Better Auth کے ساتھ محفوظ ہے اور تمام پڑھنے اور لکھنے کا دائرہ ورک اسپیس تک ہے۔ تبدیلیوں کے لیے وہی اصل درخواست درکار ہوتی ہے اور صرف ورک اسپیس کے مالک کے ذریعے ہی GitHub پر شائع کیا جا سکتا ہے۔
مرحلہ 6: بگ رپورٹ سے لے کر گٹ ہب کے مسئلے تک
جب کوئی ٹکٹ پالیسی پاس کرتا ہے، تو ڈیش بورڈ عین اس مسئلے کا پیش نظارہ دکھاتا ہے جو بنایا جائے گا۔

اس اسکرین شاٹ کو قریب سے دیکھیں۔ وزیٹر نے اپنا نام اور ای میل چھوڑ دیا، جو دونوں اوپر والے ڈیش بورڈ میں نظر آتے ہیں، لیکن ان میں سے کوئی بھی مسئلہ پیش نظارہ میں ظاہر نہیں ہوتا ہے۔
یہ کوئی اتفاق نہیں ہے۔ کوئی مسئلہ پیدا ہونے سے پہلے رپورٹس پرائیویسی گیٹ سے گزر جاتی ہیں۔ packages/github/src/privacy.ts ای میل پتے، فون نمبرز، کارڈ نمبرز، پرائیویٹ کیز، API ٹوکنز، JSON ویب ٹوکنز، اور پاس ورڈ اسائنمنٹس تلاش کریں۔ ہم وزیٹر کی طرف سے جمع کرائی گئی رابطے کی تفصیلات کے خلاف بھی اپنی رپورٹس چیک کرتے ہیں، اس لیے "ہیلو، سیم وزیٹر” آپ کا نام عوامی مسائل میں لیک نہیں کر سکتا۔ اگر کوئی آئٹم پایا جاتا ہے تو، پیش نظارہ کو بلاک کر دیا جائے گا اور کچھ بھی شائع نہیں کیا جائے گا۔
جب آپ کلک کریں۔ GitHub مسئلہ بنائیںکچھ اضافی حفاظتی اقدامات نافذ کیے گئے ہیں:
-
GitHub ایپس جو نجی ٹوکن نہیں ہیں: ایپ صرف آپ کے منتخب کردہ ریپوزٹریز میں انسٹال ہوگی اور اسے صرف ایشوز بنانے اور میٹا ڈیٹا پڑھنے کی اجازت ہوگی۔
-
پہلے اس کا دعوی کریں، پھر بنائیں: ٹکٹ کہتا ہے:
creatingGitHub کو بلانے سے پہلے یہ ڈیٹا بیس میں محفوظ ہے، لہذا دو کلکس دو مسائل پیدا نہیں کر سکتے۔ -
پوشیدہ مارکر: ہر سوال کا باڈی ٹکٹ سے منسلک ایک مبہم HTML تبصرے کے ساتھ ختم ہوتی ہے۔ اگر کسی درخواست کا وقت ختم ہو جاتا ہے اور نتیجہ معلوم نہیں ہوتا ہے، تو IssueRelay دوبارہ کوشش کرنے سے پہلے اس کی اپنی ایپ سے صحیح مارکر بازیافت کرتا ہے۔ پہلے سے پیش آنے والے مسائل پر آنکھیں بند کرکے دوبارہ کوشش نہ کریں۔

یہاں وہ اصل مسائل ہیں جو IssueRelay نے میرے پورٹ فولیو کے عوامی ذخیروں میں وزیٹر رپورٹس کے ذریعے بنائے ہیں: ایپ کے بوٹ کے ذریعے تیار کردہ اور لیبل لگا ہوا ہے۔ bugرپورٹس اور اے آئی کی درجہ بندی شامل ہیں، لیکن رابطے کی تفصیلات شامل نہیں ہیں۔

مرحلہ 7: اپنے ڈیش بورڈ کو GitHub کے ساتھ مطابقت پذیر رکھیں
آخری ٹکڑا لوپ کو بند کرتا ہے۔ جب آپ GitHub میں کسی مسئلے کو بند کرتے ہیں، GitHub IssueRelay کو ایک ویب ہک بھیجتا ہے اور ٹکٹ حل شدہ پر چلا جاتا ہے۔ اگر آپ مسئلہ کو دوبارہ کھولتے ہیں، تو ٹکٹ واپس قطار میں چلا جائے گا۔
ویب ہک اینڈ پوائنٹس تعریف کے لحاظ سے عوامی ہیں، لہذا ہم سب سے پہلے یہ ثابت کرتے ہیں کہ درخواست دراصل GitHub سے آئی ہے۔ یہ ایک تصدیقی فنکشن ہے جو . packages/github/src/webhook-auth.ts:
export function verifyWebhookSignature(input: {
secret: string;
rawBody: Uint8Array;
signatureHeader: string | null;
}): boolean {
const { secret, rawBody, signatureHeader } = input;
if (!secret || !signatureHeader?.startsWith("sha256=")) {
return false;
}
const hex = signatureHeader.slice("sha256=".length);
if (!/^[0-9a-f]{64}$/.test(hex)) return false;
const expected = createHmac("sha256", secret).update(rawBody).digest();
const actual = Buffer.from(hex, "hex");
if (expected.length !== actual.length) return false;
return timingSafeEqual(expected, actual);
}
GitHub صرف GitHub اور آپ کے پلیٹ فارم کو معلوم رازوں کا استعمال کرتے ہوئے تمام ترسیل پر دستخط کرتا ہے۔ X-Hub-Signature-256 ہیڈر یہ فنکشن اپنے HMAC SHA256 دستخط کی گنتی کرتا ہے۔ خام درخواست بائٹس اور دونوں کا موازنہ کریں۔
دو تفصیلات غلط ہونا آسان ہیں۔ سب سے پہلے، JSON کو پارس کرنے سے پہلے، ہمیں GitHub کے ذریعے بھیجے گئے عین بائٹس کے لیے دستخط کا حساب لگانا ہوگا۔ اس کی وجہ یہ ہے کہ تجزیہ اور دوبارہ فارمیٹنگ بائٹس کو تبدیل کرتی ہے۔ دوسرا، موازنہ استعمال کرتا ہے: timingSafeEqualکیونکہ اس میں ایک ہی وقت لگتا ہے چاہے پہلا یا آخری بائٹ مختلف ہو، حملہ آور جوابی وقت کی پیمائش کرکے ایک وقت میں دستخط کے ایک حرف کا اندازہ نہیں لگا سکتا۔ یہ فنکشن بھی واپس آتا ہے۔ false کسی بھی قسم کی ناکامی کے بارے میں کچھ نہ بتائیں اور نہ ہی لیک کریں۔
دستخط کی تصدیق کے بعد، IssueRelay ہر ڈیلیوری آئی ڈی کو اسٹور کرتا ہے، اس لیے دوبارہ ڈیلیوری کو نظر انداز کر دیا جاتا ہے۔ یہ صرف ان مسائل کو اپ ڈیٹ کرتا ہے جو مماثل ایپ انسٹالیشنز اور ریپوزٹریز سے تعلق رکھتے ہیں، اور ایونٹس کو اس ترتیب سے لاگو کرتا ہے جس ترتیب سے وہ GitHub میں ہوتے ہیں، نہ کہ ان کے پہنچنے کے ترتیب سے۔
اپنے ایشو ریلے کو کیسے تعینات کریں۔
آپ Vercel اور Neon پر تقریباً 15 منٹ میں اپنا IssueRelay چلا سکتے ہیں۔ ایک مکمل واک تھرو، بشمول ٹربل شوٹنگ، docs/SELF_HOSTING.md میں ہے۔ یہاں مختصر ورژن ہے.
مرحلہ 1: تعینات کریں۔
تجویز کردہ راستہ ہے۔ Vercel کے ساتھ تعینات کریں۔ README بٹن پر کلک کریں۔ ذخیرہ کو اپنے GitHub اکاؤنٹ میں کاپی کریں، نیون ڈیٹا بیس شامل کریں، اور تین بے ترتیب راز طلب کریں۔
پہلی تعمیر جان بوجھ کر ناکام ہوجاتی ہے کیونکہ ورسل کی کلوننگ اسکرین میں روٹ ڈائرکٹری سیٹنگ نہیں ہے، اس لیے ہم نے روٹ ڈائرکٹری کو اس پر سیٹ کیا: apps/web براہ کرم پروجیکٹ کی ترتیبات میں دوبارہ تعینات کریں۔ پروڈکشن بلڈ پھر تمام ڈیٹا بیس ٹیبل بناتا ہے۔
گائیڈ یہ بھی بتاتا ہے: کانٹا اور بازیافت مستقبل کی تازہ کاریوں کے لیے ایک کلک کا راستہ ہے، لیکن ابھی تک اس راستے کا شروع سے اختتام تک تجربہ نہیں کیا گیا ہے۔
مرحلہ 2: ترتیبات کا صفحہ شروع کریں۔
کھلا /setup نئی سائٹ پر۔ یہ صرف اس وقت کام کرتا ہے جب ڈیٹا بیس میں کوئی اکاؤنٹ نہ ہو اور آپ ٹائپ کریں: SETUP_TOKEN چونکہ اسے تعیناتی کے دوران بنایا گیا تھا، اس لیے کوئی بھی شخص جو آپ کے URL کو پہلے تلاش کرتا ہے وہ آپ کے پلیٹ فارم کا دعوی نہیں کر سکتا۔ ایک مالک اکاؤنٹ اور پہلا پروجیکٹ بنائیں، پھر ویجیٹ کیز اور پیسٹ ایبل ویجیٹ کوڈ ڈسپلے کریں۔

سائٹ ایڈریس فیلڈ اس سے شروع ہوتا ہے: http://localhost:3000یہ وہ جگہ ہے جہاں آپ کے کمپیوٹر پر Next.js ایپس چلتی ہیں۔ اپنا جسمانی پتہ بھی اس طرح شامل کریں: https://my-site.vercel.app یا آپ کا اپنا ڈومین۔ اگر آپ بھول جاتے ہیں، تو ویجیٹ شائستگی کے ساتھ آنے والے کو مطلع کرے گا کہ "آپ کا پیغام نہیں بھیجا جا سکا،” لہذا یہ پہلی چیز ہے کہ آپ یہ چیک کریں کہ آیا آپ کی رپورٹ نہیں پہنچی۔
مرحلہ 3: ایک GitHub ایپ بنائیں
GitHub ایپ کو خود ترتیب دیتے وقت کرنے کے لیے کچھ آسان غلطیاں ہیں۔ سب سے خراب صورت حال یہ ہے کہ ٹیسٹنگ کے دوران میں ایشوز ایونٹ کو سبسکرائب کرنا بھول گیا، جو میں نے خود کیا۔ لہذا، IssueRelay مینی فیسٹ سے ایک ایپ بنانے کے لیے ایک کمانڈ پر مشتمل ہے۔
pnpm github:create-app --platform https://your-issuerelay.vercel.app
اس سے آپ کے براؤزر میں GitHub کھل جائے گا جس میں پہلے سے موجود ہر چیز موجود ہے۔ ایشوز بنانے اور میٹا ڈیٹا پڑھنے، ایشو ایونٹس کو سبسکرائب کرنے اور پلیٹ فارم کی طرف اشارہ کرنے والا ویب ہک رکھنے کی اجازت کے ساتھ ایک نجی ایپ۔
آپ کلک کریں ایک GitHub ایپ بنائیںGitHub آپ کو کمانڈ کے ذریعہ شروع کردہ عارضی لوکل سرور پر واپس بھیج دے گا، اور کمانڈ آپ کی ایپ آئی ڈی، پرائیویٹ کلید، اور ویب ہک سیکرٹ کو اس فائل میں لکھے گی جسے گٹ نظر انداز کرتا ہے۔ یہ ٹرمینل میں پرنٹ نہیں ہوتا ہے۔ اس کے بعد ٹرمینل مندرجہ ذیل سیٹ اپ اقدامات کی فہرست دے گا۔
مرحلہ 4: چابیاں شامل کریں اور دوبارہ تقسیم کریں۔
تین GitHub ایپ کی اقدار اور TYPESAFE_API_KEY اسے اپنے ورسل پروجیکٹ کے ماحولیاتی متغیرات میں شامل کریں اور پھر دوبارہ تعینات کریں۔ GitHub کے مسائل میں Jev کی ضرورت ہوتی ہے۔ جیو کے بغیر، رپورٹس ڈیش بورڈ میں پہنچ جائیں گی، لیکن یہ مسئلہ نہیں ہونا چاہیے۔
مرحلہ 5: اپنے ذخیرہ کو مربوط کریں۔
ایپ کو ویب سائٹ کے ذخیرے میں انسٹال کریں جہاں ویجیٹ واقع ہوگا، اور پھر ترتیب ڈیش بورڈ صفحہ سے جڑیں۔ صفحہ GitHub سے انسٹالیشن اور ریپوزٹری آئی ڈیز کے لیے پوچھے گا جو اس نام سے تعلق رکھتے ہیں۔ لہذا آپ ٹائپنگ کی وجہ سے غلط ذخیرہ کو جوڑ نہیں سکتے۔

مرحلہ 6: ویجیٹ انسٹال کریں۔
اپنی سائٹ پر ویجیٹ انسٹال کرنے اور اپنی پہلی رپورٹ بھیجنے کے لیے ترتیبات کے صفحہ پر موجود کوڈ کا استعمال کریں۔
اگر آپ مستقبل میں اپنی کاپی کو اپ ٹو ڈیٹ رکھنا چاہتے ہیں، تو اپنی تبدیلیاں بنیادی ذخیرے سے کھینچیں۔ یہ گائیڈ ڈیپلو بٹن کا استعمال کرتے ہوئے بنائی گئی کاپیوں کے لیے درکار ایک قدم کا احاطہ کرتا ہے۔ کیونکہ وہ کاپی GitHub فورک نہیں ہے۔
اسے ایک حقیقی ویب سائٹ پر چلائیں۔
ڈیمو اہم ہے، لیکن میں اصل میں IssueRelay استعمال کرنا چاہتا تھا، لہذا ویجیٹ اب andrewbaisden.com پر میرے پورٹ فولیو میں لائیو ہے۔
ویب سائٹ کا ڈیزائن ممکنہ طور پر تبدیل ہو جائے گا، لہذا اگر آپ مستقبل میں اسے پڑھ رہے ہیں، تو آپ میرے GitHub پر پچھلی تعمیرات تلاش کر سکتے ہیں۔
اسے انسٹال کرتے وقت میں نے کچھ چیزیں سیکھیں۔ میرا پورٹ فولیو جانچ کے لیے ابھی بھی React 18 میں تھا اور App Router کو پہلے ہی React 19 میں پیش کیا گیا تھا۔ اس لیے میں نے پہلے React 19 میں اپ گریڈ کیا اور اس بات کو یقینی بنایا کہ کوئی بھی ویجٹ شامل کرنے سے پہلے تمام موجودہ ٹیسٹ پاس ہو جائیں۔ ویجیٹ سائٹ کے ہلکے اور تاریک تھیمز سے میل کھاتا ہے، نیچے دائیں جانب واقع ہے، اور پورٹ فولیو ریپوزٹری میں اس کے اپنے یونٹ ٹیسٹ اور براؤزر ٹیسٹ ہیں۔
پھر میں نے ایک مہمان کی طرح اس کا تجربہ کیا۔ میں نے لائیو سائٹ سے تین اصل رپورٹیں بھیجی ہیں: ایک سوال، ایک بگ، اور فیچر کی درخواست۔ Jev نے تینوں کو 0.95 سے 1.00 تک کے اسکور میں درجہ بندی کیا، جیسا کہ میرا ارادہ تھا، اور انہیں پالیسی کے مطابق سپورٹ، انجینئرنگ اور پروڈکٹ کی طرف بھیج دیا گیا۔ یہ بگ میرے پبلک پورٹ فولیو ریپوزٹری میں مسئلہ نمبر 3 بن گیا ہے، جو پچھلے اسکرین شاٹ میں دکھایا گیا مسئلہ ہے۔ میں نے اس رپورٹ میں اپنا نام اور ای میل شامل کیا، لیکن دونوں میں سے کوئی بھی عوامی شمارے میں شامل نہیں ہوا۔
شروع سے آخر تک تجربہ کیا (اور میں نے کیا سیکھا)
میں کوئی ایسا پروجیکٹ نہیں چاہتا تھا جو صرف میرے کمپیوٹر پر کام کرتا ہو، اس لیے ٹیسٹنگ ہر قدم کا حصہ تھی، بجائے اس کے کہ آخری کے لیے کچھ محفوظ کیا جائے۔
ٹیسٹ سویٹ میں کئی پرتیں ہیں۔
-
یونٹ ٹیسٹنگ وجیٹس، API معاہدے، AI پالیسیاں، رازداری کے دروازے، ترتیبات کے صفحات، اور بہت کچھ ہیں۔ ان میں سے 180 ہیں اور کسی ڈیٹا بیس کی ضرورت نہیں ہے۔
-
ڈیٹا بیس انٹیگریشن ٹیسٹنگ یہ ایک علیحدہ PostgreSQL ٹیسٹ ڈیٹا بیس کے خلاف چلتا ہے، بشمول کنکرنسی ٹیسٹ جو ثابت کرتے ہیں کہ آپ کو دو کلکس کے ساتھ GitHub کے دو مسائل نہیں ہو سکتے۔
-
پلے رائٹ کے ساتھ براؤزر ٹیسٹنگ یہ ایک علیحدہ ڈیٹا بیس کے ساتھ ایک علیحدہ پورٹ پر اپنا سرور شروع کرتا ہے جو ہر بار چلنے پر دوبارہ بن جاتا ہے، لہذا آپ کے ٹیسٹ حقیقی ڈیٹا کو چھو نہیں سکتے۔ ان سرورز میں سے ایک پہلے رن سیٹ اپ پیج کو جانچنے کے لیے خالی ڈیٹا بیس کے خلاف چلایا جاتا ہے۔
-
پیکیج چیک کریں۔ یہ صحیح npm ٹربال بناتا ہے، اسے Vite ایپ میں سخت مواد کی حفاظتی پالیسیوں اور Monorepo سے باہر ایک Next.js ایپ میں انسٹال کرتا ہے، اور پھر ہر ایک کو رپورٹ پیش کرتا ہے۔
-
ریئل ٹائم ٹریول ٹیسٹنگ اصلی GitHub ایپس اور ڈسپوزایبل ریپوزٹریز پر 20 چیکس: رپورٹس جمع کروائیں، ٹرائیج، پیش نظارہ، ایشوز بنائیں، یقینی بنائیں کہ کوئی پرائیویٹ ڈیٹا شائع نہیں ہوا ہے، GitHub پر ایشوز بند کریں اور ویب ہکس کا انتظار کریں، پھر دوبارہ کھولیں اور ٹائم لائن چیک کریں۔
میں نے اس لائیو سفر کو تین بار دوڑایا۔ میں نے اسے پہلے سرنگ کے ذریعے اپنی مقامی مشین کے خلاف چلایا، پھر پروڈکشن کے خلاف، اور آخر کار بالکل نئی کاپی کے خلاف جو میں نے سیٹ اپ گائیڈ کی پیروی کی تھی۔ تینوں نے 20 میں سے 20 پوائنٹس حاصل کیے۔
پاسز سے زیادہ دلچسپ بات یہ ہے کہ وہ مسائل ہیں جو ہر سطح پر سامنے آتے ہیں۔
-
مسائل کے واقعات آسانی سے بھول جاتے ہیں۔ جب میں نے پہلی بار اپنی GitHub ایپ بنائی تو میرے پاس کوئی ایونٹ سبسکرپشن نہیں تھا، اس لیے GitHub نے IssueRelay کو مطلع نہیں کیا جب مسائل بند تھے۔ یہ غلطی بالکل اسی لیے ہے۔
create-appحکم موجود ہے۔ -
ایک ملاقاتی اپنے نام کا ذکر کرتا ہے۔ اگر سارہ نامی کسی وزیٹر نے کچھ اس طرح کی اطلاع دی کہ "سارہ یہاں، صفحہ ٹوٹ گیا ہے،” اس کا نام عوامی ہو جائے گا۔ پرائیویسی گیٹ اب ہر رپورٹ کا موازنہ اس کے ساتھ فراہم کردہ رابطے کی تفصیلات سے کرتا ہے۔
-
زوڈ اور سخت سی ایس پی براؤزرز میں مکس نہیں ہوتے ہیں۔ Zod 4 یہ دیکھنے کے لیے ایک سادہ ٹیسٹ ہے کہ آیا یہ قابل استعمال ہے۔
new Functionسخت مواد کی حفاظتی پالیسیوں والی سائٹیں اس کی خلاف ورزی کے طور پر رپورٹ کریں گی۔ میں نے ویجیٹ سے Zod کو ہٹا دیا اور اس کے بجائے ٹیسٹوں کے ساتھ ایک چھوٹی سی توثیق لکھی جس سے ثابت ہوا کہ یہ 270 فارم کے مجموعوں کے لیے سرور پر Zod اسکیما سے مماثل ہے۔ -
ورسل کے نقل کے بہاؤ میں روٹ ڈائرکٹری کا اختیار نہیں ہے اور ورسل صرف ایک بار فریم ورک کا انتخاب کرتا ہے۔ نئی تعیناتی دو بار ناکام ہوئی۔ ایک بار اس لیے کہ ورسل نے ریپوزٹری روٹ بنایا، ایک بار اس لیے کہ فریم ورک ابھی بھی "دیگر” پر سیٹ تھا۔ ریپوزٹری اب Next.js کو پن کرتی ہے۔
vercel.jsonگائیڈ پہلی ناکامی کے خلاف خبردار کرتا ہے۔ -
تعیناتی بٹن کی ایک کاپی کانٹا نہیں ہے۔ سادہ
git pullہم ڈیفالٹ ریپوزٹری کو ضم کرنے سے انکار کرتے ہیں، اس لیے گائیڈ کے پاس اب کاپی کو ڈیفالٹ ریپوزٹری سے منسلک کرنے کے لیے ایک وقتی کمانڈ ہے۔ -
GitHub کے مسائل میں Jev کی ضرورت ہوتی ہے۔ میں نے اصل میں Jev کو ایک آپشن کے طور پر درج کیا تھا۔ گائیڈ کو قریب سے دیکھنے سے معلوم ہوا کہ اس کے بغیر حقیقی دنیا کی رپورٹس اعتماد کی حد تک نہیں پہنچ پائیں گی۔ یہ اب گائیڈ اور سیٹنگز کے صفحات میں بہت واضح طور پر ظاہر ہوتا ہے۔
-
لاگ شور کا مسئلہ: تمام ڈیٹا بیس کنکشنز نے غلطی کی سطح پر SSL انتباہات کو لاگ ان کیا، جس سے یہ ظاہر ہوتا ہے کہ جیسے کسی عام تعیناتی سے سمجھوتہ کیا گیا ہو۔ حل یہ بتانا تھا کہ ڈرائیور پہلے سے کون سا SSL موڈ استعمال کر رہا ہے۔ لہذا انتباہ ختم ہو گیا ہے جبکہ سرٹیفکیٹ کی تصدیق بالکل وہی رہتی ہے۔
میرے لیے سب سے یادگار سبق: اگر آپ اپنے دستاویزی لفظ کو لفظ کے بدلے تقسیم کرتے ہیں، تو آپ کو ایسے کیڑے ملیں گے جنہیں کوئی ٹیسٹ نہیں ڈھونڈ سکتا۔ مندرجہ بالا تعیناتی کے تمام مسائل خودکار جانچ میں پوشیدہ تھے اور اس وقت واضح تھے جب ایک حقیقی انسان گائیڈ کی پیروی کرتا تھا۔
اسے کیسے بنایا جائے: اقدامات اور AI کی مدد سے ترقی
IssueRelay چھوٹے قدموں میں بنایا گیا تھا، ہر قدم اگلا مرحلہ شروع ہونے سے پہلے تحریری مواصلت کے ساتھ ختم ہوتا ہے۔
| قدم | نتیجہ |
|---|---|
| 0 | مصنوعات کی تعریف، فن تعمیر، فیصلے، سیکورٹی اور ٹیسٹ پلاننگ |
| 1 اور 2 | Monorepo بیس، ڈومین ماڈل، PostgreSQL اسکیما اور بیج کا ڈیٹا |
| 3 اور 4 | وجیٹس، ڈیمو سائٹ، اور عوامی ٹکٹ API |
| 5 اور 6 | جیو اور آپریٹر ڈیش بورڈ کے ساتھ اے آئی کی درجہ بندی |
| 7 اور 8 | GitHub کے اضافے اور دستخط شدہ ویب ہک مطابقت پذیری کی تصدیق کریں۔ |
| 9 | ایک واحد استعمال کے ذخیرے میں حقیقی وقت میں پورے سفر کی توثیق کریں۔ |
| 10 | پیداوار کو مضبوط بنانا |
| 11 اور 12 | npm پر ویجٹ کی توثیق اور شائع کریں۔ |
| تقسیم | Vercel، Neon، اور Resend پروڈکشن میں ہیں۔ |
| 13 | میرے پورٹ فولیو میں ویجٹ انسٹال کرنا |
| 14 اور 15 | Dogfooding (جاری ہے) |
| 16 | خود میزبانی: بٹن، ترتیبات کا صفحہ، پروجیکٹ کی ترتیبات، اور ایپ مینی فیسٹ کمانڈز تعینات کریں۔ |
میری ڈویلپر کی ترتیبات
میں نے اپنا زیادہ تر کام ٹرمینل میں کیا۔ میری ترتیبات یہ ہیں:
-
گوسٹی کو میرے ٹرمینل کے بطور کلاڈ کوڈ، کوڈیکس اور اوپن کوڈ کو استعمال کرنا
-
میرے ایڈیٹر کو کرسر
-
ChatGPT، Claude، اور OpenCode کے لیے مقامی ڈیسک ٹاپ ایپس
IsueRelay کی تعمیر کے لیے میرا بنیادی ماڈل یہ ہے: کاروبار کا اختتام 5.5 کلاڈ کوڈ سے۔ ہم نے کوڈ کے جائزے اور منظوری سے پہلے کی تصدیق کے لیے مختلف ماڈلز کا استعمال کیا، بشمول: GPT-6 سول گروک اور دیگر، متعدد دیگر فرنٹیئر اور مفت ماڈلز کے ساتھ۔
اسی کوڈ کو تازہ آنکھوں سے پڑھنے والے دوسرے ماڈل نے اصل مسئلہ دریافت کیا۔ مثال کے طور پر، اقدامات 7 اور 8 کے گروک جائزے سے 15 نتائج برآمد ہوئے۔ سات درست تھے، بشمول مقابلہ شدہ ایشو تخلیق کے دعوے اور قابل اندازہ ایشو مارکر، اور ساتوں کو آگے بڑھنے سے پہلے طے کر دیا گیا تھا۔ تین جزوی طور پر درست اور پانچ کو تحریری وجوہات کی بنا پر ملتوی کر دیا گیا۔
اینتھروپک کو نیا ریلیز کیا گیا ہے۔ سونیٹ 5.5 اور اوپن اے آئی GPT-6.1 سول اس منصوبے میں استعمال نہیں کیا گیا۔
کتنے بہتر اشارے نے آپ کے کوڈ بیس کو بہتر بنایا
معیار میں سب سے بڑی بہتری زیادہ ہوشیار ماڈلز سے نہیں آتی۔ اس کا نتیجہ ماڈل کو بہتر رہنمائی اور بہتر کام کرنے کا ڈھانچہ دینے سے ہوتا ہے۔ اثرات درج ذیل ہیں:
-
ایک وقت میں ایک قدم: ہر پرامپٹ کو واضح نتیجہ کے ساتھ بالکل ایک قدم درکار ہوتا ہے، اور AI اس وقت تک اگلا مرحلہ شروع نہیں کر سکتا جب تک کہ میں اسے منظور نہ کر دوں۔ چھوٹی، قابل جائزہ تبدیلیاں ایک بڑی خصوصیت کے مقابلے میں شناخت کرنا بہت آسان تھیں۔
-
کوڈ سے پہلے منصوبہ: بڑے مراحل میں، ہم نے پہلے ایک منصوبہ طلب کیا ("ایک منصوبہ بنائیں، پھر اسے منظور کریں اور پھر آگے بڑھیں”)۔ پلان کو پڑھنے میں 2 منٹ لگتے ہیں۔ ایک خراب نفاذ کا انتخاب ایک دوپہر لگتا ہے.
-
ذخیرہ میں قواعد: نہیں
AGENTS.mdفائل میں پروجیکٹ کے قواعد شامل ہیں جیسے کہ "بیرونی AI یا GitHub کالز سے پہلے ٹکٹوں کی اجازت رکھیں”، "GitHub پر رابطہ ڈیٹا شائع نہ کریں”، اور "GitHub کے مبہم مسائل پیدا کرنے کی دوبارہ کوشش نہ کریں”۔ میں اسے ہر AI سیشن میں پڑھتا ہوں، لہذا قواعد مجھ پر انحصار نہیں کرتے ہیں کہ ان کو دہرانا یاد رکھیں۔ -
ایماندارانہ رپورٹنگ: ہدایات میں کہا گیا ہے کہ ‘انڈو چیک’ کو گزرنے کے طور پر رپورٹ نہ کریں، اور ہر ہینڈ آف اصل نتیجہ کو لاگ کرتا ہے، بشمول کمانڈ پر عمل درآمد اور کوئی ناکامی۔
-
عہد کے لیے واضح شرائط: "کمیٹ اینڈ پش جب ٹیسٹ پاس ہوتے ہیں اور کوئی دوسرا مسئلہ نہیں” جیسے پرامپٹ کا مطلب ہے کہ مین برانچ تک پہنچنے سے پہلے پورا ٹیسٹ سویٹ چلایا گیا ہے۔
-
ثبوت مانگیں، وعدہ نہیں: "کیا سیلف ہوسٹنگ کام کرتی ہے؟” پوچھنے کے بجائے، ہم نے نئی تعیناتی کے لیے اپنے گائیڈ کی پیروی کی اور AI سے کہا کہ وہ ہمارے لیے اسے چیک کرے۔ اس ایک درخواست نے سات دستاویزات اور ترتیب کے مسائل کو بے نقاب کیا۔
-
حقیقی استعمال کی رائے: جب میں نے اپنی ٹیسٹ سائٹ کو متعین کیا اور ہر وہ چیز لکھ دی جو مبہم تھی، تو وہ نوٹس گائیڈ، سیٹ اپ پیج، اور سیٹ اپ پیج پر واپس چلے گئے۔
ویجیٹ IssueRelay کا واحد حصہ ہے جو اس طرح شائع ہوتا ہے: @issuerelay/widget. مونوریپو کے اندر باقی سب کچھ نجی رکھا گیا ہے۔
میں کوئی ایسی چیز شائع نہیں کرنا چاہتا تھا جو صرف میرے ورک اسپیس میں کام کرتا ہے، اس لیے ریلیز چیک npm کو وصول کرنے اور معائنہ کرنے کے لیے درست ٹربال بناتا ہے۔
اس میں صرف 5 فائلیں ہونی چاہئیں۔ اسے کسی بھی ایسی چیز کا حوالہ نہیں دینا چاہئے جو نجی پیکیج، نوڈ بلٹ ان، ماحولیاتی متغیر، یا کلید کی طرح نظر آئے۔ اس کے بعد آپ کو دو نئی ایپس کو ریپوزٹری کے باہر سے انسٹال کرنا چاہیے اور انہیں کام کرنا چاہیے۔ ان میں سے ایک ہماری سخت مواد کی حفاظتی پالیسی ہے، جو یقینی بناتی ہے کہ پالیسی کی کوئی خلاف ورزی نہیں ہے۔
ریلیزز GitHub ایکشنز سے npm-ٹرسٹڈ پبلشنگ اور origination کے ذریعے شائع کی جاتی ہیں، اس لیے لیک ہونے کے لیے لمبے عرصے تک رہنے والے npm ٹوکن نہیں ہیں۔
نتیجہ تقریباً 10KB کا ایک کمپیکٹ پیکیج ہے جس کے لیے CSS سیٹ اپ کی ضرورت نہیں ہے اور یہ مکمل طور پر React اور React Hook Form پر انحصار کرتا ہے۔ ویجیٹ README تمام پروپس کو دستاویز کرتا ہے۔
آگے کیا ہے
IssueRelay سیلف ہوسٹنگ کے لیے بہت اچھا ہے اور میں اسے ہر روز اپنے پورٹ فولیو میں استعمال کرتا ہوں۔ یہاں کچھ چیزیں ہیں جو میں آگے دریافت کرنا چاہوں گا:
-
میزبان ورژن IssueRelay آپ کو سائن اپ کرنے اور وجیٹس کو خود تعینات کیے بغیر شامل کرنے کی اجازت دیتا ہے۔
-
اپنے کانٹے اور کھینچنے والے راستے کی جانچ کریں۔ اینڈ ٹو اینڈ تجویز کردہ تعیناتی طریقہ ہو سکتا ہے۔
-
روڈ میپ سے آئیڈیاز بشمول ڈپلیکیٹ رپورٹس کا پتہ لگانا، ایک سے زیادہ رپورٹس کو ایک ایشو سے جوڑنا، نوٹیفیکیشنز، GitHub تبصروں کی مطابقت پذیری وغیرہ۔
نتیجہ
اس ٹیوٹوریل میں، آپ نے سیکھا کہ AI سے چلنے والا سسٹم کیسے بنایا جائے جو کہ تقسیم شدہ ویب سائٹ کے تاثرات کو نظرثانی شدہ ٹکٹوں اور گٹ ہب کے راستے شناخت شدہ کیڑوں میں بدل دیتا ہے۔ راستے میں، میں نے سیکھا کہ کیسے:
-
ایمبیڈ ایبل ری ایکٹ ویجٹس بنائیں جو کسی بھی سائٹ پر بغیر CSS سیٹنگز یا اسٹائل کے تنازعات کے کام کریں۔
-
فراہم کنندہ کی بندش کی صورت میں ڈیٹا ضائع ہونے سے بچنے کے لیے بیرونی خدمات کو کال کرنے سے پہلے تمام رپورٹس کو محفوظ کریں۔
-
محدود، توثیق شدہ درجہ بندی کے لیے Jev کا استعمال کریں جو مفت متن کے بجائے لیبلز اور احتمالات واپس کرتا ہے۔
-
لوگوں کو لوپ میں رکھ کر فیصلوں کو آسان، قابل جانچ کوڈ میں روٹنگ اور شائع کرتے رہیں۔
-
GitHub ایپ، پرائیویسی گیٹس، اور اینٹی ڈپلیکیٹ مارکر کا استعمال کرتے ہوئے محفوظ طریقے سے GitHub مسائل بنائیں۔
-
دستخط شدہ اور تصدیق شدہ ویب ہکس کا استعمال کرتے ہوئے اپنے ڈیش بورڈ کو GitHub کے ساتھ مطابقت پذیر رکھیں۔
-
Vercel اور Neon میں اپنی کاپی تقسیم کریں اور اپنی دستاویزات سمیت اینڈ ٹو اینڈ ٹیسٹ کریں۔
IssueRelay کو سمجھنے کا بہترین طریقہ یہ ہے کہ اسے خود آزمائیں۔ آپ GitHub پر کوڈ کو دریافت کر سکتے ہیں، ہماری سیلف ہوسٹنگ گائیڈ کا استعمال کرتے ہوئے اپنی کاپی تعینات کر سکتے ہیں، اور ویجیٹ کو اپنی سائٹ میں شامل کر سکتے ہیں: npm install @issuerelay/widget این پی ایم سے۔ اگر آپ کو یہ کارآمد معلوم ہوا، تو براہ کرم ذخیرہ میں ستارہ کی درجہ بندی چھوڑ دیں۔