cutty.dev का टेक स्टैक — सचेत विकल्प
cutty.dev के नीचे क्या है और क्यों। बिना किसी प्रचार के — दर्शन: उबाऊ, स्थिर स्टैक, यूरोपीय संघ में होस्टिंग और आर्किटेक्चर में निहित गोपनीयता, जिसे एक व्यक्ति बनाए रखने में सक्षम है।
"मेरा टेक स्टैक" (my tech stack) की अधिकांश पोस्ट नई चीज़ों की एक गर्वित सूची होती हैं। देखिए, मेरे पास यह है, मेरे पास वह है, और यहाँ पिछले सप्ताह की एक बिल्कुल ताज़ा लाइब्रेरी भी है। यह कुछ अलग होगा।
क्योंकि सच तो यह है कि जब आप अकेले किसी प्रोजेक्ट को चला रहे होते हैं, तो आप सबसे ट्रेंडी चीज़ नहीं ढूंढते। आप कुछ ऐसा ढूंढते हैं जो आपको रात के तीन बजे जगा न दे। और cutty.dev का यह पूरा टेक स्टैक इसी बारे में है: ट्रेंडी के बजाय उबाऊ, अमेरिकी के बजाय यूरोपीय, बुनियादी स्तर से निजी, और इतना सरल कि इसे एक व्यक्ति भी संभाल सके।
मैं एक-एक करके आगे बढ़ता हूँ, जैसे कि मैं आपको कॉफी पीते हुए यह समझा रहा हूँ।
सर्वर पर रेंडर किया गया Astro (और क्यों कुछ "बेहतर" नहीं)
cutty.dev सर्वर-साइड रेंडरिंग के साथ Astro है। प्रत्येक अनुरोध सर्वर के माध्यम से जाता है, पेज को असेंबल करता है और तैयार HTML वापस भेजता है। उबाऊ? बिल्कुल यही उद्देश्य है।
मैं तीन चीजें चाहता था: बिना भारी मशीनरी के सर्वर पर रेंडरिंग, तुरंत उपलब्ध उचित बहु-भाषा समर्थन, और बिना किसी ओवरहेड के गति। Astro यह सब प्रदान करता है, और कोड पठनीय रहता है। दो महीने के ब्रेक के बाद जब मैं वापस आता हूँ, तो मुझे पता होता है कि वहाँ क्या हो रहा है। सोलो प्रोजेक्ट के लिए, यह किसी भी ऐसे फैशनेबल प्लगइन से कहीं अधिक मूल्यवान है जिसका एक साल बाद कोई समर्थन नहीं करता है।
आतिशबाजी वाले डेटाबेस के बजाय एक फ़ाइल
SQLite. एक डेटाबेस, डिस्क पर एक फ़ाइल। इसके साथ ही TypeScript के साथ बात करने वाली क्वेरी लेयर भी है, इसलिए जब मैं डेटा संरचना बदलता हूँ, तो त्रुटि मुझे एडिटर में दिखाई देती है, न कि आधी रात को प्रोडक्शन में।
ऐसा ही क्यों? cutty "read-heavy" है। कोई छोटा लिंक क्लिक करता है, हम रीड (read) करते हैं और काउंटर बढ़ा देते हैं। बस इतना ही। SQLite इस तरह के ट्रैफ़िक को बहुत आसानी से संभाल लेता है, यहाँ तक कि प्रतिदिन बहुत बड़ी संख्या तक। और बैकअप? बस फ़ाइल कॉपी करें। खत्म। बिना किसी रेप्लिकेशन समारोह के, बिना ऐसे स्क्रिप्ट के जिन्हें कोई नहीं जानता कि वे कैसे काम करते हैं।
यहाँ एक बात का ध्यान रखें, क्योंकि यह एक सामान्य जाल है: लोग "SQLite" सुनते हैं और सोचते हैं "पास होने के लिए प्रोजेक्ट के लिए एक खिलौना"। ऐसा नहीं है। कम गतिशील हिस्से होने का मतलब है कम चीजें जो खराब हो सकती हैं। यह गुणवत्ता से समझौता करना नहीं है, बल्कि एक सचेत निर्णय है।
सर्वर यूरोप में स्थित है और यह कोई संयोग नहीं है
EU में समर्पित सर्वर। अपना स्वयं का TLS, स्वचालित HTTPS के साथ रिवर्स प्रॉक्सी, कंटेनरों में एप्लिकेशन।
यह इस बात की नींव है कि cutty डेटा के साथ कैसे व्यवहार करता है। मुझे ठीक से पता है कि वे भौतिक रूप से कहाँ स्थित हैं (EU और GDPR वाले ग्राहकों के लिए यह कोई दिलचस्प तथ्य नहीं, बल्कि एक शर्त है), मैं किसी एक प्रदाता से बंधा हुआ नहीं हूँ, कुछ भी स्वचालित रूप से महासागर के पार लीक नहीं होता है, और बिल ट्रैफ़िक के साथ उछलने के बजाय अनुमानित रहता है।
हाँ, पश्चिम के सुविधाजनक प्लेटफॉर्म तेज़ शुरुआत देते। आप क्लिक करते हैं, डिप्लॉय करते हैं, और यह काम करता है। बस बात यह है कि आप इसके लिए उस कीमत का भुगतान करते हैं जहाँ आपके उपयोगकर्ताओं का डेटा लैंड होता है। मेरे लिए यह एक बुरा सौदा था।
अनुवाद स्वयं का मॉडल बनाते हैं, अपने पास
cutty 25 भाषाओं में बात करता है। यह एक स्थानीय, ओपन-सोर्स AI मॉडल द्वारा अनुवादित किया जाता है, जो मेरे इंफ्रास्ट्रक्चर पर चलता है। मैं इंटरफ़ेस से किसी भी बाहरी प्रदाता को टेक्स्ट नहीं भेजता हूँ।
लाभ व्यावहारिक हैं। एकल अनुवाद की लागत शून्य है। मेरे पास गुणवत्ता पर पूर्ण नियंत्रण है और मैं उन्हें जब चाहूँ अपडेट कर सकता हूँ। और मशीन को हमेशा मानवीय दृष्टि की आवश्यकता होती है, इसलिए इन 25 भाषाओं में से प्रत्येक की समीक्षा की गई है। लेकिन तथ्य यह है कि मैं इसे अपने यहाँ करता हूँ, इसका अर्थ है कि गोपनीयता मूल्य सूची में कोई मद नहीं है। यह इस बात का गुण है कि पूरी संरचना कैसे बनाई गई है।
Tailwind, कंटेनर और कुछ छोटे निर्णय
स्टाइल? यूटिलिटी-फर्स्ट, यानी Tailwind। बिना CSS-in-JS के, बिना अलग स्टाइल फाइलों के, सब कुछ सीधे टेम्पलेट्स में। मैं क्लास के नाम सोचने, अप्रयुक्त स्टाइल (unused styles) में समय बर्बाद नहीं करता जो वैसे भी अंतिम पेज पर नहीं पहुँचते, और डिज़ाइन व्यवस्थित रहता है क्योंकि सिस्टम खुद इसे लागू करता है। एक व्यक्ति के लिए, हर वह मिनट मायने रखता है जो फालतू की चीजों पर बर्बाद न हो।
यह Docker का कार्यान्वयन है। स्थानीय और उत्पादन (production) दोनों पर एक ही वातावरण, "मेरे पास तो काम कर रहा था" का अंत। और यदि कभी आवश्यकता पड़ी, तो मैं लगभग आधे घंटे में पूरी चीज़ को दूसरे सर्वर पर स्थानांतरित कर देता हूँ। पोर्टेबिलिटी चुपचाप स्वतंत्रता का एक रूप है।
मैंने इससे क्या सीखा
बोरिंग स्टैक जीतता है। Astro, SQLite, Tailwind, कंटेनर। सब कुछ परिपक्व, परखा हुआ और प्रलेखित है। कुछ भी उस क्षण नहीं टूटता जब आपको इसकी सबसे कम आवश्यकता होती है।
EU में होस्टिंग वास्तव में प्रोडक्शन के लिए तैयार है। यह एक कहानी है कि "गंभीर होने के लिए आपको बड़े अमेरिकी क्लाउड पर जाना ही चाहिए", यह सिर्फ एक कहानी है। स्थानीय AI भी वास्तविक है, अच्छी गुणवत्ता वाले अनुवाद प्राप्त करने के लिए बाहरी API को डेटा देने की आवश्यकता नहीं है। और अंतिम बात: एक व्यक्ति कुछ ऐसा जारी कर सकता है जो पूरी टीम का काम लगता है। बस यह याद रखना होगा कि समय पैसे से अधिक महंगा है, और इस दृष्टिकोण से हर चीज़ का चयन करना होगा।
जब आप अपनी कोई चीज़ बना रहे हों, तो प्रत्येक तकनीक के लिए खुद से एक प्रश्न पूछें: क्या एक साल बाद मैं इसे खुद बनाए रख पाऊँगा? यदि नहीं, तो शायद आपके पास उत्तर है।
यह सब यहाँ काम करता है: cutty.dev। और यदि आप इनमें से किसी भी निर्णय के बारे में बात करना चाहते हैं, तो [email protected] पर लिखें, मैं उसी दिन उत्तर देता हूँ।