سطح المكتب2026قيد التطوير
هورايزن
استراحات للعين تعرف متى تكون أمام الحاسوب فعلًا.
تطبيق سطح مكتب لماك وويندوز لاستراحات العين وفق قاعدة 20-20-20. وما يميّزه أنه ينمذج الحضور من وقت خمول وحالة قفل ونوم واستيقاظ وكتم للشاشة الكاملة، فلا يزعجك باستراحة لم تكن موجودًا لتفوّتها.
Project detailsتفاصيل المشروع
- الدور
- منفردًا
- السنة
- 2026
- الحالة
- قيد التطوير
- بُني بـ
- Electron
- TypeScript
- React
- electron-vite
- Vitest
- Native bridges
- أين تجده
- الشيفرة
ما هو
We blink around 60% less at a screen, and the fix is well known and never remembered: every 20 minutes, look 20 feet away for 20 seconds. The hard part of building the reminder is not the timer.
Horizon is the second attempt at this. The first, LookAway, established the shape: tray-resident, local-only, settings in a JSON file, no accounts and no backend. Horizon rebuilt it around an explicit domain model of a break loop, presence, suppression, an overlay and stats, because the first version's bugs were all really modelling problems wearing timer costumes.
نرمش أمام الشاشة أقل بنحو 60%، والعلاج معروف ولا يُتذكَّر أبدًا: كل 20 دقيقة، انظر إلى مسافة 20 قدمًا لمدة 20 ثانية. والجزء الصعب في بناء التذكير ليس المؤقّت.
«هورايزن» هو المحاولة الثانية. أرست الأولى، LookAway، الشكل: مقيم في شريط المهام، محلي بالكامل، إعدادات في ملف JSON، بلا حسابات وبلا خادم. وأعاد «هورايزن» بناءه حول نموذج مجال صريح من حلقة استراحة وحضور وكتم وطبقة عرض وإحصاءات، لأن أخطاء النسخة الأولى كانت كلها مشكلات نمذجة متنكرة في زي مؤقّتات.
التحديات
المؤقّت لا يعرف إن كنت موجودًا
المشكلة
المؤقّت الدوري البسيط يعمل وأنت في اجتماع، وبعد قفلك للشاشة، وفي لحظة استيقاظ الحاسوب بأربع استراحات فائتة متراكمة. وكلٌّ من ذلك يجعل التطبيق يبدو معطلًا.
ما فعلته
الحضور مفهوم من الدرجة الأولى لا فحص مُلحق بالمؤقّت: تُطبَّع حالات الخمول والقفل والنوم واليقظة في رؤية واحدة لِما إذا كان المستخدم أمام الحاسوب فعلًا، وتستهلك حلقة الاستراحة ذلك بدل الزمن المنقضي الخام.
مقاطعة عرض تقديمي لا تُغتفر
المشكلة
طبقة استراحة تملأ الشاشة وتظهر أثناء عرض المستخدم أمام قاعة، أو في منتصف فيلم، هي الفشل الوحيد الذي يضمن حذف التطبيق.
ما فعلته
الكتم سياسة قائمة بذاتها، تقودها حالات الشاشة الكاملة وما يشبه العرض التقديمي، ويُسمح لها بإلغاء استراحة مستحقة تمامًا لا بتأجيل الطبقة فحسب.
Electron لا يكشف ما يلزم
المشكلة
حالة القفل وكشف الخمول والوعي بالشاشة الكاملة تختلف بين الأنظمة وليست متاحة بالكامل عبر واجهات Electron العابرة للمنصات.
ما فعلته
جسور أصلية صغرى لكل منصة، تُستخدم فقط حيث يقصّر Electron فعلًا، ويبقى كل ما عداها في TypeScript مشترك. والجسر عمدًا أصغر سطح يعمل لا طبقة تجريد كاملة.
النتائج
- One codebase for macOS and Windows, with native bridges only where required.
- Breaks that respect idle, lock, sleep and fullscreen states.
- Local-only: no account, no backend, settings in a JSON file on disk.
- قاعدة شيفرة واحدة لماك وويندوز، مع جسور أصلية عند الضرورة فقط.
- استراحات تحترم حالات الخمول والقفل والنوم والشاشة الكاملة.
- محلي بالكامل: بلا حساب وبلا خادم، والإعدادات في ملف JSON على القرص.