Claude के साथ अपना खुद का Newsletter बनाना

Hacker News ट्रैफिक स्पाइक का दूसरा दिन। चालीस हज़ार विज़िटर्स, उन तक फिर से पहुँचने का कोई रास्ता नहीं। मुझे एक newsletter साइनअप की आवश्यकता थी।

मैंने Buttondown, Beehiiv, Substack, ConvertKit को देखा। सब ओवरकिल था। मुझे बस ईमेल एकत्र करने थे। मुझे campaigns, analytics, या subscriber management की आवश्यकता नहीं थी। और मैं अपने डेटा का मालिक बनना चाहता था।

इसलिए मैंने 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 को environment variable के माध्यम से Cloudflare API टोकन दिया और बताया कि मुझे क्या चाहिए: एक फॉर्म जो ईमेल एकत्र करता है और उन्हें कहीं स्टोर करता है जिसे मैं नियंत्रित करता हूं।

30 मिनट से भी कम समय में, मेरे पास एक काम करने वाला newsletter था।

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" });
  }

  // Store in KV with metadata
  await env.SUBSCRIBERS.put(emailKey, JSON.stringify({
    subscribedAt: new Date().toISOString(),
    source: sanitizedReferer
  }));

  return Response.json({ success: true }, { status: 201 });
}

एक GitHub Actions वर्कफ़्लो प्रतिदिन चलता है ताकि सब्सक्राइबर्स को Cloudflare KV से रिपॉजिटरी में JSONL फाइल में सिंक किया जा सके। मेरी subscriber लिस्ट version control में रहती है। अगर Cloudflare कल मेरा account बंद कर दे, तो भी मेरे पास मेरा डेटा है। और यह एक ऐसे format में है जिसके साथ LLM आसानी से काम कर सकते हैं।

वर्कफ़्लो

Claude ने locally iterate किया जब तक सब कुछ काम नहीं कर गया—फॉर्म submission, KV स्टोरेज, error handling। फिर preview app पर push किया, पूरे flow को test किया, और main में merge कर दिया।

फॉर्म तब live हो गया जब ट्रैफिक अभी भी आ रहा था।

यह सब एक session में बनाया गया।

SaaS क्यों नहीं?

अगर आपको ज़रूरत है तो Buttondown बढ़िया है। मुझे नहीं थी। मेरी आवश्यकताएँ:

  1. ईमेल एकत्र करना
  2. उन्हें कहीं स्टोर करना जिसे मैं नियंत्रित करता हूं
  3. तेज़ी से ship करना

बस इतना ही। मुझे drip campaigns या A/B testing या fancy templates की आवश्यकता नहीं है। मुझे email addresses की एक लिस्ट चाहिए जो मेरी है।

एक और monthly subscription के बजाय 42 लाइनें कोड की। कभी-कभी सरल समाधान ही सही होता है।

सबक: अपूर्ण और live, परफेक्ट और planned को हरा देता है। मैं newsletter services का मूल्यांकन करने, features की तुलना करने, reviews पढ़ने में घंटों बिता सकता था। इसके बजाय मैंने 30 मिनट में कुछ ship किया और आगे बढ़ गया।