← All projects
Main project

Zad

Multi-tenant SaaS · Web + Mobile web · Live · Arabic-first

Zad — Restaurant Operations Platform

Visit the live site ↗

A platform that runs a restaurant's day: owners set up their branches and team, build checklists from ready-made restaurant templates — opening, closing, food safety, municipality readiness — and schedule them as tasks once, daily or weekly. Employees work through their tasks on their phones: photos, readings and yes/no checks, inside the branch's location, with out-of-range answers flagged automatically. Managers follow everything from one dashboard, turn flagged answers into violations or tickets, log customer ratings, and export reports. It is live on Laravel Cloud, with a view-only demo that anyone can open in one click.

Architecture sketch

DashboardReact · InertiaEmployee appmobile web · GPSLaravelmulti-tenantTask engineonce a day, no cronPrivate photosR2 · signed URLstasks
zad.laravel.cloud/dashboard
Zad dashboard — the week's completion rate, done and missed tasks per day, Arabic RTL
zad.laravel.cloud/tasks
Tasks page — every scheduled task across branches with its status and progress
zad.laravel.cloud/checklists
Checklist editor — item types, required items, expected answers and branch location check
Employee phone — today's tasks with their time windows and progress

Employee — today's tasks

Employee phone — a completed closing checklist, every item answered

Employee — a finished checklist

StackLaravel 13, Inertia 3, React 19 + TS, Tailwind v4
TenancyRestaurants → branches, scoped queries, owner / manager / employee
Checklists7 item types, expected answers, points, ready-made templates
SchedulingOnce / daily / weekly, generated on demand — no cron
Employee flowPhone-first, photos, branch geofence, auto-flagged answers
OperationsViolations, internal tickets, ratings, reports with CSV export
HostingLaravel Cloud, serverless Postgres, private R2 photos, scale-to-zero
Public demoView-only, rebuilt daily in the background
106PHPUnit tests
7ready templates
9modules
No scheduler: the first page view of the day tops up the coming week's tasks exactly once, so the app can sleep when nobody uses it. · app/Actions/Tasks/GenerateTasks.php
// Stands in for the daily scheduler so the app can sleep.
public function onceToday(int $restaurantId): void
{
    $key = "tasks-generated:{$restaurantId}:".today()->toDateString();

    // Atomic: only the first request of the day gets through.
    if (Cache::add($key, true, now()->endOfDay())) {
        $this->upcoming($restaurantId);
    }
}

// Idempotent: running it twice never duplicates a task.
$task = Task::withoutGlobalScope('restaurant')->firstOrCreate(
    ['task_assignment_id' => $assignment->id, 'user_id' => $userId, 'starts_at' => $startsAt],
    ['ends_at' => $endsAt, 'status' => TaskStatus::Upcoming, /* … */],
);
→ كل المشاريع
المشروع الرئيسي

زاد

SaaS متعدد المطاعم · ويب + جوال · منشور · عربي أولًا

زاد — منصة تشغيل المطاعم

اذهب إلى الموقع ↖

منصة تدير يوم المطعم: يجهّز المالك فروعه وفريقه، ويبني قوائم التحقق من قوالب جاهزة للمطاعم — افتتاح الفرع وإغلاقه وسلامة الغذاء والجاهزية لزيارة البلدية — ثم يجدولها مهامًا لمرة واحدة أو يوميًا أو أسبوعيًا. ينجز الموظفون مهامهم من جوالاتهم: صور، وقراءات، وأسئلة نعم/لا، من داخل موقع الفرع، مع إبلاغ تلقائي عن أي إجابة خارج المتوقع. ويتابع المدير كل ذلك من لوحة واحدة، فيحوّل الإبلاغات إلى مخالفات أو تذاكر، ويسجّل تقييمات العملاء، ويصدّر التقارير. المنصة منشورة على Laravel Cloud، ومعها نسخة للعرض يدخلها أي زائر بضغطة.

مخطط البنية

لوحة الإدارةReact · Inertiaجوال الموظفويب للجوال · GPSLaravelمتعدد المطاعممحرك المهاممرة يوميًا بلا مجدولالصور الخاصةR2 · روابط موقّعةالمهام
zad.laravel.cloud/dashboard
لوحة تحكم زاد — نسبة الإنجاز في الأسبوع والمهام المنجزة والفائتة يومًا بيوم
zad.laravel.cloud/tasks
صفحة المهام — كل المهام المجدولة في الفروع بحالتها ونسبة تقدمها
zad.laravel.cloud/checklists
محرر قوائم التحقق — أنواع البنود والبنود الإلزامية والإجابة المتوقعة والتحقق من موقع الفرع
جوال الموظف — مهام اليوم بمواعيدها ونسبة تقدمها

الموظف — مهام اليوم

جوال الموظف — قائمة إغلاق الفرع منجزة بكل بنودها

الموظف — قائمة منجزة

التقنياتLaravel 13 وInertia 3 وReact 19 مع TypeScript وTailwind v4
تعدد المطاعممطاعم ← فروع، عزل البيانات لكل مطعم، مالك / مدير / موظف
قوائم التحقق7 أنواع بنود، إجابات متوقعة، نقاط، وقوالب جاهزة
الجدولةمرة / يوميًا / أسبوعيًا، تُولَّد عند الحاجة بلا مجدول
شاشة الموظفللجوال أولًا، صور، نطاق الفرع، إبلاغ تلقائي
التشغيلمخالفات، تذاكر داخلية، تقييمات، تقارير مع تصدير CSV
الاستضافةLaravel Cloud، وPostgres بلا خادم، وصور خاصة على R2، وينام بلا زوار
نسخة العرضللتصفح فقط، تُجدَّد يوميًا في الخلفية
١٠٦اختبار PHPUnit
٧قوالب جاهزة
٩أقسام
بلا مجدول: أول صفحة تُفتح في اليوم تجهّز مهام الأسبوع القادم مرة واحدة فقط، فينام التطبيق حين لا يستخدمه أحد. · app/Actions/Tasks/GenerateTasks.php
// Stands in for the daily scheduler so the app can sleep.
public function onceToday(int $restaurantId): void
{
    $key = "tasks-generated:{$restaurantId}:".today()->toDateString();

    // Atomic: only the first request of the day gets through.
    if (Cache::add($key, true, now()->endOfDay())) {
        $this->upcoming($restaurantId);
    }
}

// Idempotent: running it twice never duplicates a task.
$task = Task::withoutGlobalScope('restaurant')->firstOrCreate(
    ['task_assignment_id' => $assignment->id, 'user_id' => $userId, 'starts_at' => $startsAt],
    ['ends_at' => $endsAt, 'status' => TaskStatus::Upcoming, /* … */],
);