cat ~/projects/sawt.md

صوت

أتمتة العملية الانتخابية، من التصويت إلى النتائج.

تطبيق يُرقمن العملية الانتخابية من طرف إلى طرف: تسجيل الناخبين، والدخول بهوية مُتحقَّق منها، والإدلاء بالصوت، وإعلان النتائج. مبني للشفافية في كل مرحلة.

الدور
منفردًا: الموبايل والخادم
السنة
2025
الحالة
صدر
الفئة
الجوّال
بُني بـ
React NativeTypeScriptOTP verificationFirebaseZustandReact QueryReanimatedRestyleZod
apps/sawt-1.png2400×1350
واجهة صوت

head -n 40 overview

ما هو

التصويت أقلّ ما يُبنى تسامحًا. فالخلل في تطبيق عادي يزعج شخصًا؛ والخلل هنا يُبطل نتيجة ومعها الثقة.

يغطي «صوت» الدورة كلها: يسجّل الناخبون ويدخلون حساباتهم بهوية مُتحقَّق منها، ويدلون بأصواتهم، وتُعلن النتائج عبر النظام نفسه. وكانت الأولوية الهندسية طوال العمل أن تكون كل مرحلة قابلة للتحقق لا سريعة فحسب.

diff before after

التحديات

سطر يُحذف وسطر يحلّ محلّه. المشكلة أولًا، ثم ما الذي حلّ مكانها فعلًا.

  1. شخص واحد وصوت واحد على جهاز لا تتحكم به

    يستطيع أي أحد تثبيت التطبيق مرتين، على هاتفين، برقمين. فالهوية القائمة على الجهاز ليست هوية، وفحوص جانب العميل تُتجاوَز ببساطة.

    تُربط الأهلية بهوية مُتحقَّق منها تُفحص على الخادم عبر رمز لمرة واحدة، ويفرض سجل الاقتراع نفسه التفرّد لكل ناخب في كل انتخاب. ويُعامَل الجهاز كغير موثوق طوال الوقت.

  2. الجميع يصوّت في الساعة الأخيرة

    حركة الانتخاب ليست منتظمة: لا شيء لأيام ثم كل شيء دفعة واحدة قبيل الإغلاق. والنظام الذي يعمل في الاختبار قد ينهار في اللحظة التي تهمّ بالضبط.

    تُبقى عمليات الكتابة صغيرة وعديمة الأثر التكراري فلا يستطيع إرسال مُعاد أن يُحسب مرتين، وتُقدَّم قراءات النتائج من تجميعات لا بإعادة حسابها مع كل طلب.

tail outcomes

النتائج

  • منشور على Google Play.
  • هوية مُتحقَّق منها وفرض صوت واحد لكل ناخب على الخادم.

open ./shots/*

الشاشات نفسها

Keep readingتابع القراءة

openkheir

كل المشاريع

التصميم التالي — بنتوشاهد التصاميم الـ14