Claude के साथ अपना खुद का न्यूज़लेटर बनाना
Hacker News ट्रैफिक स्पाइक का दूसरा दिन। चालीस हजार विज़िटर, उन तक फिर से पहुंचने का कोई तरीका नहीं। मुझे एक न्यूज़लेटर साइनअप चाहिए था।
मैंने Buttondown, Beehiiv, Substack, ConvertKit को देखा। सब अति थे। मुझे सिर्फ ईमेल इकट्ठा करने थे। मुझे कैम्पेन, एनालिटिक्स, या सब्सक्राइबर मैनेजमेंट की ज़रूरत नहीं थी। और मैं अपना डेटा खुद रखना चाहता था।
तो मैंने Claude से इसे बनाने के लिए कहा।
flowchart LR
User([User]) --> Form[Newsletter Form]
Form -->|POST /api/subscribe| Worker[Cloudflare Worker]
Worker --> KV[(Cloudflare KV)]
KV -.->|Daily sync| GHA[GitHub Actions]
GHA -.-> Repo[(subscribers.jsonl)]
flowchart TB
User([User]) --> Form[Newsletter Form]
Form -->|POST /api/subscribe| Worker[Cloudflare Worker]
Worker --> KV[(Cloudflare KV)]
KV -.->|Daily sync| GHA[GitHub Actions]
GHA -.-> Repo[(subscribers.jsonl)]
सेटअप
मैंने Claude को एनवायरमेंट वेरिएबल के ज़रिए एक Cloudflare API टोकन दिया और बताया कि मुझे क्या चाहिए: एक फॉर्म जो ईमेल इकट्ठा करे और उन्हें कहीं स्टोर करे जहां मेरा नियंत्रण हो।
30 मिनट से कम समय में, मेरे पास एक काम करने वाला न्यूज़लेटर था।
Claude ने क्या बनाया
| कॉम्पोनेन्ट | टेक्नोलॉजी |
|---|---|
| फॉर्म | HTML + vanilla JS |
| बैकएंड | Cloudflare Worker |
| स्टोरेज | Cloudflare KV |
| सिंक | GitHub Actions |
फॉर्म एक Hugo partial है जो /api/subscribe पर पोस्ट करता है:
<form id="newsletter-form">
<input type="email" name="email" placeholder="[email protected]" required>
<button type="submit">Subscribe</button>
</form>
बैकएंड एक 42-लाइन का Cloudflare Worker है जो वैलिडेशन, नॉर्मलाइज़ेशन, डुप्लीकेट डिटेक्शन, और रेफरर सैनिटाइज़ेशन को हैंडल करता है:
export async function onRequestPost(context) {
const { email } = await request.json();
// Validate, normalize, check for duplicates
const emailKey = email.trim().toLowerCase();
const existing = await env.SUBSCRIBERS.get(emailKey);
if (existing) {
return Response.json({ success: true, message: "Already subscribed" });
}
// Sanitize referer (strip query params for privacy)
const referer = request.headers.get("Referer");
const source = referer ? new URL(referer).origin + new URL(referer).pathname : "direct";
// Store in KV with metadata
await env.SUBSCRIBERS.put(emailKey, JSON.stringify({
subscribedAt: new Date().toISOString(),
source
}));
return Response.json({ success: true }, { status: 201 });
}
रेट लिमिटिंग Cloudflare की बिल्ट-इन प्रोटेक्शन से आती है—कोई अतिरिक्त कोड की ज़रूरत नहीं।
एक GitHub Actions वर्कफ़्लो रोज़ाना चलता है ताकि सब्सक्राइबर्स को Cloudflare KV से रेपो में एक JSONL फाइल में सिंक किया जा सके। मेरी सब्सक्राइबर लिस्ट वर्जन कंट्रोल में रहती है। अगर Cloudflare कल मेरा अकाउंट बंद कर देता है, तो भी मेरे पास मेरा डेटा है। और यह एक ऐसे फॉर्मेट में है जिसके साथ LLM आसानी से काम कर सकते हैं।
वर्कफ़्लो
Claude ने लोकली तब तक इटरेट किया जब तक सब काम नहीं करने लगा—फॉर्म सबमिशन, KV स्टोरेज, एरर हैंडलिंग। फिर एक प्रीव्यू ऐप पर पुश किया, पूरे फ्लो को टेस्ट किया, और main में मर्ज कर दिया।
फॉर्म लाइव हो गया जबकि ट्रैफिक अभी भी आ रहा था।
यह पूरी चीज़ एक सेशन में बनाई गई।
SaaS क्यों नहीं?
Buttondown बढ़िया है अगर आपको इसकी ज़रूरत है। मुझे नहीं थी। मेरी आवश्यकताएँ:
- ईमेल इकट्ठा करना
- उन्हें कहीं स्टोर करना जहां मेरा नियंत्रण हो
- जल्दी से लॉन्च करना
बस इतना ही। मुझे ड्रिप कैम्पेन या A/B टेस्टिंग या फैंसी टेम्पलेट्स की ज़रूरत नहीं। मुझे ईमेल एड्रेस की एक लिस्ट चाहिए जो मेरी हो।
एक और मासिक सब्सक्रिप्शन के बजाय 42 लाइनें कोड की। कभी-कभी सरल समाधान सही होता है।
निष्कर्ष: अपूर्ण और लाइव, परफेक्ट और प्लान्ड को हरा देता है। मैं घंटों न्यूज़लेटर सर्विसेज़ को इवैल्यूएट करने, फीचर्स की तुलना करने, रिव्यू पढ़ने में बिता सकता था। इसके बजाय मैंने 30 मिनट में कुछ शिप कर दिया और आगे बढ़ गया।