النشرة على عقدة واحدة: ملف sqlite — 1,258 سطرًا، بلا منصة
اشتراك مزدوج، إلغاء بنقرة واحدة، وواجهة CLI للإرسال على 1,258 سطرًا قابلة للتدقيق — ترويسة RFC 8058 التي جعلته قصيرًا، وسقف الوصول بصبر وأمانة.
■ space · دفتر ميداني · fig 1
النشرة كلها 1,258 سطرًا: اشتراك مزدوج، إلغاء بنقرة واحدة، CLI إرسال — بلا حساب منصة.
الإلغاء بنقرة واحدة هو ترويسة واحدة — RFC 8058، مطلوبة من Google وYahoo منذ فبراير 2024.
سقف أمانة: بدون DKIM مستوٍ، mail-tester ~5/10 وقد يرمي المستقبل الصارم البريد إلى الرغام — جيّد لقائمة صغيرة؛ الوسيط يصلح ذلك.
النشرة ثلاثة endpoints وجدولان، وترويسة بريد واحدة تخفيها عنك معظم المنصات.
01لماذا الاستضافة الذاتية أصلًا؟
الجرد الصادق — المقايضة في شاشة واحدة؛ الملف يكسب الملكية، والمنصة تكسب عدم-الاضطرار-إلى-التفكير
| هذا الخادم | منصة مُستضافة | |
|---|---|---|
| أسطر الكود التي أستطيع قراءتها | الـ1,258 كلها | 0 |
| ملكية القائمة | ملف SQLite واحد | زر تصدير |
| إلغاء الاشتراك | ترويسة RFC 8058، موقَّعة ذاتيًا | إعداد في لوحة القيادة |
| سقف الوصول | ~5/10 mail-tester إلى أن يستوي DKIM | سمعتهم |
| الوقت إلى أول إرسال | نهاية أسبوع | سهرة |
rsync واحد من الاختفاء02طريق الاشتراك
POST واحد، ثلاثة حُرَّاس — التوقيع هي السلطة الوحيدة، فتُفتح الباب والدفتر نائم
مسار 2 · تأكيد — المقياس يقرأ الختم · الدفتر نائم · الحكم يؤكد ما يزال
الوسم يحمل base64url(email|action) مع ختم HMAC-SHA256 — لا جلسة، ولا جدول token، ولا شيء للاستعلام
curl -X POST https://mrsaynothing.dev/letters/api/subscribe \
-H 'content-type: application/json' \
-d '{"email":"[email protected]"}'
subscribers، وCHECK يقيد status بـpending · confirmed · unsubscribed، وsends، أثر التدقيقwebsite humans never see — a filled field buys a fake ok لا يراه البشر قط — حقل ممتلئ يشتري زائفًا في مقدار 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}`;
}
timingSafeEqual على MAC محسوب من جديد — لا جدول token، ولا انقضاء لإدارتهوصلة تأكيد ما تزال تعمل والقاعدة نائمة، وحدة أقل يمكن أن يتعفن.
04ما انكسر، وما لن يفعله
ثلاثة أعطال، سُدت — والسقف، مطبوع من التنصيب نفسه
pnpm install --frozen-lockfile اشتغل محليًا بسلام ومات داخل الحاوية — سكربت postinstall في esbuild لم يُمنح اعتمادًا قط. الإصلاح: اسكب في الصورة الصغير pnpm-workspace.yaml معلنًا سكربتات البناء المرخصة. نصف يوم ليجده، ملف واحد ليصلحه.# the --dry flag renders the full text and HTML for review before anything moves
cli.mjs send --subject ... --file post.md
نهاية النشرة ذات الملف الواحد · لم يُجلب شيء · كل شيء محلي