الميزات
كل ما يقدّمه Seed، وما لا يقدّمه بعد
Seed قالب انطلاق SaaS مجاني بترخيص MIT، فيه الدخول بالبريد وعبر Google وGitHub، ومفاتيح المرور، والروابط السحرية، وحسابات الضيوف، و2FA، ومجموعات بأدوار، وفوترة لكل عضو عبر Stripe، وتحديثات فورية، وتطبيق يعمل دون اتصال، ومنطقة إدارة، ومراقبة، ونسخ احتياطية يومية مشفرة اختيارية. كل قسم أدناه يربط بشيفرته.
بقلم Anton Shubinآخر تحديث
Seed قيد العمل ويُبنى علنًا. ما لم يُبنَ بعد موسوم بـ «لم يُبنَ بعد» بجوار الادعاء الذي يقيّده، مع القضية الخاصة به حين تكون مفتوحة.
محسوم لأجلك
قالب انطلاق SaaS بمجموعات وفوترة موصولة مسبقًا
الحسابات والمجموعات والمال: الأجزاء التي يحتاجها كل منتج قبل ميزته الأولى، وهي الأسهل في الخطأ.
يعمل اليوممختبَر في CI. يحتاج الدخول عبر Google وGitHub وStripe إلى مفاتيحك الخاصة، لذا فهي متوقفة في العرض.
الحسابات
تسجيل دخول جاهز
يسجّل الناس ببريد إلكتروني وكلمة مرور، ويثبتون العنوان برمز يصلهم بالبريد، ويعيدون تعيين كلمة مرور منسية، ويتابعون عبر Google أو GitHub، ويتلقّون بالبريد رابط دخول يسجّلهم أيضًا، أو يدخلون بمفتاح مرور، أو يجرّبون التطبيق أولًا بحساب ضيف ثم يضيفون طريقة دخول لاحقًا. ويضيف تطبيق مصادقة المصادقة الثنائية (2FA). يرون كل جهاز سجّلوا الدخول عليه ويستطيعون إخراج الأجهزة الأخرى. وتغيير طريقة الدخول يتطلب إثباتًا ويرسل رسالة بريد.
- كلمات المرور مُجزّأة بـ PBKDF2-SHA-256 عبر Web Crypto، بـ 600٬000 جولة افتراضيًا
- ملفات تعريف ارتباط موقّعة للجلسات، وسجل تدقيق لكل حدث دخول
- رموز API شخصية، تُخزَّن فقط كقيم تجزئة بمفتاح
- مفاتيح المرور: يُخزَّن المفتاح العام وحده، وكل تحدٍّ للدخول يعمل مرة واحدة
- الروابط السحرية: رابط واحد يُدخلك أو يسجّلك، ويعمل مرة واحدة لمدة 15 دقيقة، ويُخزَّن كقيمة تجزئة فقط
- حسابات الضيوف (الدخول المجهول): يبدأ الزائر بنقرة واحدة دون طريقة دخول، ثم يضيف إلى الحساب نفسه بريدًا وكلمة مرور أو Google أو GitHub أو مفتاح مرور
- تُعدّ كلمات المرور الخاطئة لكل اسم دخول، مع قفل قصير، من أي عنوان شبكة

المجموعات
مجموعات بأدوار، من الدقيقة الأولى
يحصل كل حساب على مجموعة شخصية عند التسجيل. ينشئ الناس مجموعات مشتركة، ويدعون غيرهم، ويمنحونهم أدوارًا من قارئ إلى مالك، وينقلون الملكية بخطوة واحدة. يمكن استعادة المجموعة المحذوفة خلال 30 يومًا، ولكل مجموعة سجل نشاط.
- المجموعة هي حد العزل الوحيد بين المستأجرين: البيانات الشخصية والمشتركة تمر بالفحص نفسه
- التطبيق وشيفرته وهذا الموقع كلها تسمّيها مجموعة
- لا نموذج صلاحيات ثانيًا يجب إبقاؤه متزامنًا مع الأول
- الدعوات وتغيير الأدوار ونقل الملكية، لكلٍّ منها اختباراته

نظرة عامة
نظرة عامة لكل مجموعة
أرقام أساسية ورسم بياني لأي نطاق تواريخ. يخفي كل شخص العناصر ويعيد ترتيبها، ويتبعه التخطيط إلى أجهزته الأخرى.
- يُقارَن كل رقم بالفترة السابقة، دون حكم بالألوان
- أعداد فقط: لا نص لأي ملاحظة ولا ترتيب للأشخاص
- كل عنصر يُحمَّل ويفشل ويعيد المحاولة وحده
- يضيف أي تجميع جديد عناصره الخاصة، وتعرضها منطقة الإدارة أيضًا
المال
فوترة لكل عضو، عبر Stripe
يرى الناس جدول أسعار، وخطة مجانية بحدود، وتجربة لمدة 14 يومًا للخطة المدفوعة. ويرى المالك كلفة عضو إضافي قبل دعوته، وتنبيهًا واضحًا بتاريخ حين تفشل بطاقة.
- Stripe Checkout وبوابة العملاء؛ والـ webhook هو المصدر الوحيد للخطة
- كميات تتبع عدد الأعضاء
- مهلة سماح بعد فشل الدفع، 7 أيام افتراضيًا
- حدود الخطة تُفحص على الخادم، لا في التطبيق وحده
- تعيش الخطط في ملف كتالوج واحد؛ وصفحة الأسعار تقرؤه
- مزوّدو دفع غير Stripe

الخصوصية
حسابات يمكن مغادرتها
ينزّل الناس نسخة من بياناتهم ويحذفون حساباتهم من الملف الشخصي، مع 7 أيام لتغيير رأيهم. تُحذف الإشعارات المقروءة بعد 90 يومًا.
- تنزيل بياناتي: ملف ZIP من ملفات JSON وCSV، يُجهَّز في الخلفية ويُحفظ 7 أيام
- ينتظر الحذف 7 أيام؛ وتسجيل الدخول مجددًا يلغيه
- تنظيف ليلي للإشعارات المقروءة والدعوات المنتهية وأحداث التدقيق القديمة
التصدير
بياناتك ترحل معك
صدّر أي مجموعة إلى ملف JSON مفتوح، واستورده لاحقًا مجموعةً جديدة. لا تُكتب المجموعة الأصلية فوقها أبدًا.
- يصدّر المالك؛ ويستورد كل من يحق له إنشاء مجموعة
- يُفحص الملف كاملًا قبل كتابة أي شيء، ثم يُستورد بخطوة واحدة
- تحصل كل ملاحظة ووسم على معرّف جديد، فلا يتصادم الاستيراد أبدًا مع الموجود
- يسجّل كل تجميع جزءه الخاص من الملف
اللغات
بست لغات منذ البداية
يتحدث التطبيق ومنطقة الإدارة وهذا الموقع: الإنجليزية والروسية والإسبانية والألمانية والبرتغالية البرازيلية والعربية. يختار كل شخص لغته في التطبيق، وتُحفظ مع حسابه. ولكل صفحة في هذا الموقع عنوانها الخاص بكل لغة.
- كتالوج JSON لكل لغة، يفحصه اختبار يسمّي كل رسالة ناقصة أو قديمة
- صيغ الجمع والأرقام والتواريخ عبر Intl المدمج في المنصة، دون مكتبة i18n
- روابط hreflang في كل صفحة من الموقع، وخريطة موقع تسرد كل لغة
- الصفحات العربية تُقرأ من اليمين إلى اليسار
- رسائل البريد بلغة القارئ (القضية #277)
- تخطيطات من اليمين إلى اليسار مكتملة في كل شاشة (القضية #215)
جاهز حين تحتاجه
التحديث الفوري والعمل دون اتصال والعمل في الخلفية
الأجزاء التي تتركها معظم القوالب لأنها صعبة: تحديثات حية، وتطبيق يعمل دون شبكة، وعمل يجب ألا يضيع.
يعمل اليومالكتابة دون اتصال تشمل الملاحظات والوسوم؛ وكل قائمة أخرى تُفتح دون اتصال بآخر ما عرضته.
التحديث الفوري
تظهر التغييرات دون إعادة تحميل
يظهر تغيير العضو في كل علامة تبويب مفتوحة للمجموعة، والحاسوب المحمول الذي يستيقظ من السكون يلحق بما فاته.
- WebSocket قياسي، مع رقم تسلسلي لكل تغيير
- علامة التبويب التي تظهر مجددًا بعد السكون تعيد الاتصال وتجلب ما فاتها
- يمكن إيقاف التحديث الفوري: عندها يستعلم التطبيق على فترات ويعمل بالطريقة نفسها


دون اتصال
تطبيق يُفتح دون شبكة
يُثبَّت التطبيق كتطبيق أصلي، ويُفتح دون شبكة، ويرسل التغييرات المنتظرة حين تعود الشبكة. التغيير القديم يظهر تعارضًا يجب حسمه، لا كتابةً صامتة فوق غيره.
- نسخة IndexedDB من كل قائمة، وطابور كتابة بمفاتيح عدم تكرار
- «احتفظ بنسختي» أو «استخدم نسخة الخادم» لكل تعارض
- يُوقف بإعداد واحد، أو يُزال بحذف مجلد واحد واتباع قائمة مكتوبة

لوحة المفاتيح
اختصارات لوحة المفاتيح في التطبيق ومنطقة الإدارة
اضغط ? لترى كل الاختصارات. يضيف N ملاحظة من أي صفحة دون مغادرتها، ويفتح G ثم حرف قسمًا. ولا تعترض الاختصارات طريقك وأنت تكتب في حقل.
- يفتح Ctrl K (⌘K على Mac) أو / البحث
- قائمة واحدة لكل تطبيق تربط المفاتيح وتملأ نافذة ?، فلا تعرض أبدًا مفتاحًا لا يفعل شيئًا
- يمكن إيقاف الاختصارات ذات المفتاح الواحد على جهاز؛ ويبقى Ctrl K وEscape يعملان
- في منطقة الإدارة، يفتح G ثم حرف كل وحدة
الإشعارات
إشعارات في التطبيق وعلى الهاتف وسطح المكتب وفي Telegram
يتلقى الناس تنبيهًا حين يُدعَون، أو يُمنحون دورًا جديدًا، أو تُنقل إليهم مجموعة: في التطبيق، وكإشعار ويب على الهاتف أو سطح المكتب، وفي Telegram بعد ربطه.
- إشعارات الويب بمفاتيحك الخاصة، تُنشأ بمهمة واحدة: deno task vapid-key:create
- عدّاد لغير المقروء في التطبيق، و«تعليم الكل كمقروء»
- اشتراك الإشعارات لكل جهاز مدرج في الملف الشخصي
- بوت Telegram، متوقف حتى تضبط رمزه: يُربط برمز لمرة واحدة، وتُضاف أوامر منتجك الخاصة في ملف واحد

العمل في الخلفية
عمل ينجو من الأعطال
يخرج البريد والإشعارات حتى لو أُعيد تشغيل الخادم في منتصف الطريق، لأن العمل يُحفظ قبل أن يُنجز. وتعمل مهامك الخاصة الآن أو لاحقًا أو وفق جدول.
- يكتب كل أمر حدثه في معاملة قاعدة البيانات نفسها التي فيها التغيير
- يُفرغ العامل صندوق الصادر هذا ويرسل البريد والإشعارات والتحديثات الحية
- المهمة تعريف واحد: اسم، ومعالج، وجدولها إن كانت تتكرر
- تُعاد المحاولة الفاشلة بفترات انتظار متزايدة؛ ويرى المشغّلون كل تشغيل في لوحة الإدارة
منتجك
أضف ميزة بنسخ ميزة موجودة
الملاحظات ميزة كاملة في كل طبقة: قاعدة البيانات، وAPI، والشاشة، والعمل دون اتصال، والاختبارات. تنسخها الميزة الجديدة ملفًا ملفًا، وفق قائمة تسمّي كل ملف بالترتيب.
- شكل واحد لكل ميزة، فيبقى العثور على الشيفرة سهلًا
- لكل طبقة اختباراتها التي تُنسخ معها
- كل معرّف هو UUID مرتب زمنيًا (الإصدار 7)
التشغيل
شغّله، وراقبه، وادعم الناس الذين يستخدمونه
خادم واحد تستأجره، وأدوات ترى بها ما يفعله، ومنطقة يساعد فيها مشغّلوك الناس الذين يستخدمون منتجك.
يعمل اليومكل وحدة أدناه متاحة اليوم. وما لم يُبنَ بعد مذكور تحت كل منها.
الدعم
منطقة إدارة لمشغّليك
يجد مشغّلوك شخصًا بالاسم أو العنوان ويرون طرق دخوله وجلساته ومجموعاته وسجله. ومن المكان نفسه يديرون المجموعات، ويستردّون دفعة، ويعتنون بمشتركي النشرة البريدية، ويرون كل مهمة في الخلفية، ويعيدون تشغيل الفاشلة، ويتحققون من سلامة النظام. شاهده في 59 ثانية.
- تطبيق منفصل على مضيف خاص به، بملف تعريف ارتباط جلسة خاص
- تسع وحدات، من لوحة المعلومات إلى رموز API
- الإجراءات الخطرة تطلب التأكيد أولًا، وكل إجراء يُكتب في سجل التدقيق
- الدخول باسم شخص لرؤية ما يراه
النشر
خادم واحد، وأمر واحد
يعمل Seed على أي خادم Linux تستأجره، مع Docker Compose للتطوير والإنتاج على حد سواء. يمكن لعدة منتجات أن تتشارك خادمًا واحدًا.
- Traefik في الواجهة، مع شهادات تلقائية
- Postgres وValkey بجوار التطبيقات
- Garage، مخزن ملفات S3: تحفظ فيه الملاحظات الصور وملفات PDF، والناس صور ملفاتهم الشخصية، تُرفع عبر روابط موقّعة وتُفحص ببايتاتها. وتتحول الصورة، بما فيها HEIC، إلى مقاسات AVIF وWebP صغيرة بعد إزالة الموقع وغيره من البيانات الوصفية
- VictoriaMetrics وVictoriaLogs وGrafana، مع تنبيهات
- نسخة احتياطية يومية مشفرة لقاعدة البيانات عبر restic عند تفعيلها، وخطوات استعادة مكتوبة
- صور إصدارات تُنشر من CI حين تدفع وسم إصدار
- Traefik
- Postgres
- Valkey
- VictoriaMetrics
- VictoriaLogs
- Grafana
- Alertmanager
- Garage file store
- restic backups
الموقع
موقع عام قابل للتكييف
هذا الموقع: سريع، يُعرض من الخادم، ويمكن استخدامه مع إيقاف JavaScript، فيه الأسعار والصفحات القانونية ومدونة ونشرة بريدية.
- Fresh على الخادم؛ وكل إجراء رابط أو نموذج حقيقي
- الأسعار مقروءة من كتالوج خطط التطبيق
- نشرة بريدية بتأكيد مزدوج وإلغاء اشتراك بنقرة واحدة
- مدونة تُكتب في لوحة الإدارة، بمواضيع وموجز RSS وبيانات منظمة للمقالات
- روابط تواصل تُضبط في لوحة الإدارة، وتظهر في التذييل وفي البيانات المنظمة
- كتالوج اختياري لمتجر، يُحرَّر في لوحة الإدارة: منتجات بصور وألوان ومقاسات وجدول مقاسات ومقاسات نفدت، بكل لغة تبيع بها، مع رابط تتبّع قصير لكل منتج ولكل مكان تشاركه فيه
- sitemap.xml وrobots.txt وروابط أساسية وصور Open Graph
- تحليلات اختيارية دون ملفات تعريف ارتباط في Umami الخاص بك، مع حدث لكل دعوة إلى إجراء
- كل صفحة بست لغات، لكلٍّ منها عنوانها مع روابط hreflang؛ وتبقى الصفحات القانونية بالإنجليزية
الجودة
مختبَر حيث يهم
بحسب عدّ 16 أكتوبر 2026: 34 حزمة اختبارات متصفح للتطبيق، إضافة إلى اختبارات الوحدات والشاشات، وكلها تعمل في CI. كل تغيير يمر بطلب دمج ومراجعة قبل دمجه.
- اختبارات متصفح بـ Playwright، على API وقاعدة البيانات الحقيقيتين
- اختبارات الوحدات والشاشات بجوار الشيفرة التي تختبرها
- اختبارات تكامل على Postgres
أسئلة
هل يستطيع Seed فعل ذلك؟
هل يعمل Seed على Vercel أو كدوال serverless؟
لا. يعمل Seed كحاويات طويلة العمر بـ Docker Compose على خادم Linux واحد تستأجره، لأن API تُبقي اتصالات WebSocket مفتوحة، وعاملًا يُفرغ طابورًا.
هل يعمل Seed على Node.js أو Bun؟
ليس اليوم. تعمل خوادم Seed على Deno 2 داخل Docker، وتستخدم مهامه واختباراته Deno. والشيفرة مبنية على معايير الويب مثل fetch وRequest وWeb Crypto.
هل يمكن لـ Seed استخدام قاعدة بيانات غير Postgres؟
لا. Seed مبني على Postgres: ترحيلاته واستعلاماته واختبارات التكامل فيه تفترض وجوده.
هل يمكن إصدار Seed كتطبيق للهاتف أو لسطح المكتب؟
ليس كتطبيق في المتجر بعد. اليوم يُثبَّت تطبيق الويب من المتصفح على الهواتف وأجهزة سطح المكتب ويُفتح دون شبكة؛ وتطبيقات Android وسطح المكتب مخطط لها.
شاهده يعمل في دقيقة
العرض هو التطبيق الذي تحصل عليه من اليوم الأول. افتحه دون تسجيل وابدأ في مجموعات مليئة بملاحظات تجريبية.

