■ space · دفتر ميداني · fig 1

■ الإجابة أولًا

النشرة كلها 1,258 سطرًا: اشتراك مزدوج، إلغاء بنقرة واحدة، CLI إرسال — بلا حساب منصة.

الإلغاء بنقرة واحدة هو ترويسة واحدة — RFC 8058، مطلوبة من Google وYahoo منذ فبراير 2024.

سقف أمانة: بدون DKIM مستوٍ، mail-tester ~5/10 وقد يرمي المستقبل الصارم البريد إلى الرغام — جيّد لقائمة صغيرة؛ الوسيط يصلح ذلك.

1,258سطرًا — كلها مقروءة
2جدولان — المشتركون + الإرسالات
1الترويسة هي من يفعل الإلغاء

النشرة ثلاثة endpoints وجدولان، وترويسة بريد واحدة تخفيها عنك معظم المنصات.

01لماذا الاستضافة الذاتية أصلًا؟

الجرد الصادق — المقايضة في شاشة واحدة؛ الملف يكسب الملكية، والمنصة تكسب عدم-الاضطرار-إلى-التفكير

هذا الخادممنصة مُستضافة
أسطر الكود التي أستطيع قراءتهاالـ1,258 كلها0
ملكية القائمةملف SQLite واحدزر تصدير
إلغاء الاشتراكترويسة RFC 8058، موقَّعة ذاتيًاإعداد في لوحة القيادة
سقف الوصول~5/10 mail-tester إلى أن يستوي DKIMسمعتهم
الوقت إلى أول إرسالنهاية أسبوعسهرة
المنصة تكسب—سمعة الوصول، وعدم-الاضطرار-إلى-التفكير
الملف يكسب—قائمة قابلة للتدقيق في محرر، على بعد rsync واحد من الاختفاء
المطلب—في فبراير 2024 جعلت Google وYahoo الإلغاء بنقرة واحدة قاعدة للمرسلين بالجملة — RFC 8058

02طريق الاشتراك

POST واحد، ثلاثة حُرَّاس — التوقيع هي السلطة الوحيدة، فتُفتح الباب والدفتر نائم

شكل 1 · باب النائممفاتيح 1 · 2 · 3 — أو الأزرار
باب النائمHMAC-SHA256 · RFC 8058 · بلا جلسةدفتر · نائممشتركون · إرسالاتمطفابلا سلكضربتأكيدمختوم∞ بلا-انقضاء

مسار 2 · تأكيد — المقياس يقرأ الختم · الدفتر نائم · الحكم يؤكد ما يزال

الوسم يحمل base64url(email|action) مع ختم HMAC-SHA256 — لا جلسة، ولا جدول token، ولا شيء للاستعلام

endpoint — POST واحد
curl -X POST https://mrsaynothing.dev/letters/api/subscribe \
  -H 'content-type: application/json' \
  -d '{"email":"[email protected]"}'
db.ts—جدولان: subscribers، وCHECK يقيد status بـpending · confirmed · unsubscribed، وsends، أثر التدقيق
وعاء العسل—حقل استمارة مسمًّى website humans never see — a filled field buys a fake ok لا يراه البشر قط — حقل ممتلئ يشتري زائفًا في مقدار
the bucket، لا غيرالدلو
enumeration10 طلبات في الساعة لكل IP · إعادة إرسال واحدة لكل عنوان كل 10 دقائقالتعداد
the status lockردود متطابقة قصدًا، كان العنوان مشتركًا أم لاقفل الحالةSET status='maybe' is refused

قيد CHECK يأدي وظيفة واحدة — THE TOKEN PRESS

مكبس token

شطرتك تحسب في أي مكان — شطر الصندوق مبني بجدار؛ هذا الجدار هو الأمان
import { createHmac, timingSafeEqual } from 'node:crypto';

// payload = base64url(email|action), MAC = HMAC-SHA256(payload)
export function sign(email: string, action: 'confirm' | 'unsub'): string {
  const payload = Buffer.from(`${email}|${action}`).toString('base64url');
  const mac = createHmac('sha256', config.hmacSecret).update(payload).digest('base64url');
  return `${payload}.${mac}`;
}
شطرتك — قابلة للحساب هناpayload = base64url(email|action) → cmVhZGVyQGV4YW1wbGUuY29tfGNvbmZpcm0
شطر الصندوق — مبني بجدارMAC = HMAC-SHA256(payload, secret) · 43 محرفًا — يُحسب على صندوق الخدمة
token على الوصلةtoken = cmVhZGVyQGV4YW1wbGUuY29tfGNvbmZpcm0.mac
التحقق—timingSafeEqual على MAC محسوب من جديد — لا جدول token، ولا انقضاء لإدارته
المفتاح—يسكن خارج المستودع، مُركَّب للقراءة فقط وقت التشغيل — المكبس يحسب شطرتك ويأبى تزوير الآخر
tokens الإلغاء—لا تنقضي أبدًا، بقصد — ميكانيكية الرضا يجب أن تعمل إلى الأبد؛ إبطالها يعني دوران المفتاح
خصلة Gmail—الإلغاء بنقرة واحدة يطلق POST عبر مصادر مختلفة — تلك الخطة تثق بالـMAC؛ والصمام الأصلي يتراجع

وصلة تأكيد ما تزال تعمل والقاعدة نائمة، وحدة أقل يمكن أن يتعفن.

04ما انكسر، وما لن يفعله

ثلاثة أعطال، سُدت — والسقف، مطبوع من التنصيب نفسه

ERR_PNPM_IGNORED_BUILDSpnpm install --frozen-lockfile اشتغل محليًا بسلام ومات داخل الحاوية — سكربت postinstall في esbuild لم يُمنح اعتمادًا قط. الإصلاح: اسكب في الصورة الصغير pnpm-workspace.yaml معلنًا سكربتات البناء المرخصة. نصف يوم ليجده، ملف واحد ليصلحه.
الـCSRF حاجب GmailPOST النقرة الواحدة من مخادم Gmail لا يحمل مخلصات same-origin، بديهيًا. الخطة الآن تثق بالـtoken — والـtoken غير قابل للتزييف.
سقف الوصولبدون DKIM مستوٍ، يقيم mail-tester التنصيب نحو 5/10، والمستقبل الصارم قد يرمي الرسالة إلى الرغام. هذا كلفة الأمانة في تجنب وسيط مدفوع — الإصلاح معروف وينتظر، حتى تتبرر به القائمة.
tracking—لا تعقّب الفتح — مبدأ: بكسلات التتبع هي سبب انعدام ثقة الناس بالنشرات
النطاق—قائمة واحدة، بلا شرائح، بلا جدولة عدا CLI يستدعى يدًا أو موقّتًا
نسخ احتياطي—انقل الملف، استعده — وضع WAL يبقي النسخة متسقة ما دام الخادم يعمل
الباقي—متابعة إقلاعه تحت وصاية شبيهة بـsystemd — هذا جهد التشغيل المتبقي
الإرسال — أمر واحد
# the --dry flag renders the full text and HTML for review before anything moves
cli.mjs send --subject ... --file post.md
■ ختم الأمانة مُختبَر على: node:sqlite (WAL) · tokens بـHMAC-SHA256 · ترويسات RFC 8058 · SMTP عادي. نُشر أول مرة 2026-09-26. عدد الأسطر وحدود المعدل ودرجة mail-tester أرقام الخادم نفسها؛ اقتبستُ RFC من سجل IETF ومطلب Gmail/Yahoo من إرشاداتهما للمرسلين. ملاحظة من الهجرة: المنصة التي اشتغلت عليها هذه القطعة أُسرحت منذ ذلك — القطعة تبقى سجلًا لما بُني ولتعليمه.

نهاية النشرة ذات الملف الواحد · لم يُجلب شيء · كل شيء محلي