Skip to content
Mozn Jamousمزن جاموس
Back to workعودة إلى الأعمال

Mobile · Backend · Three-app marketplaceجوال · خادم · سوق بثلاثة تطبيقات

CareConnect: one backend, three audiences.CareConnect: خادم واحد، ثلاثة جماهير.

A childcare marketplace built as three native Flutter apps, each shaped around a different person's mental model, all sitting on one Supabase backend. I wrote the information architecture before I opened Figma.سوق لرعاية الأطفال بُني كثلاثة تطبيقات Flutter أصلية، كل واحد مصوغ حول النموذج الذهني لشخص مختلف، وكلها على خادم Supabase واحد. كتبتُ هندسة المعلومات قبل أن أفتح Figma.

Yearالسنة
2024
Roleالدور
Engineer + designer (lead)مهندسة + مصمّمة (قيادة)
Stackالتقنيات
FigmaFlutterDartSupabasePostgreSQLRLSRESTRBACIEEE 830
3 apps3 تطبيقات
One per audience, with no role-switching compromisesواحد لكل جمهور، دون تنازلات تبديل الأدوار
1 backendخادم واحد
Supabase RLS decides access at the database layerيقرّر Supabase RLS الوصول في طبقة قاعدة البيانات
Spec-firstالمواصفة أولاً
IEEE 830 requirements written before any wireframeمتطلبات IEEE 830 كُتبت قبل أي مخطّط هيكلي
Auditableقابل للتدقيق
Admin actions logged, and access provable in SQLإجراءات المشرف مسجّلة، والوصول قابل للإثبات بـSQL

§ Overviewنظرة عامة

What it is, and what I owned.ما هو، وما الذي تولّيته.

The three sides are mothers booking care, babysitters offering it, and admins keeping the platform honest. I designed all three apps and led the build, with the babysitter app developed together with a collaborator.الأطراف الثلاثة هي أمّهات يحجزن الرعاية، وجليسات يعرضنها، ومشرفون يحفظون نزاهة المنصّة. صمّمتُ التطبيقات الثلاثة وقدتُ البناء، وطُوّر تطبيق الجليسة بالتعاون مع زميل.

Roleالدور
Designed all three, led the buildصمّمتُ الثلاثة، وقدتُ البناء
Timelineالإطار الزمني
2024
Platformالمنصّة
3× Flutter · iOS + Android
Audiencesالجماهير
Mother · Babysitter · Adminأمّ · جليسة · مشرف
Backendالخادم
Supabase · Postgres · RLS
Scopeالنطاق
Requirements, Figma, Flutterمتطلبات، وFigma، وFlutter

§ Problemالمشكلة

A marketplace lives or dies on trust between three sides.السوق يحيا أو يموت على الثقة بين أطرافه الثلاثة.

Childcare doesn't fit in one app. A mother wants a vetted match quickly. A babysitter wants a schedule she can rely on and clarity about what she'll be paid. An admin wants control over who's verified, who's been flagged, and how to step in without breaking anything.رعاية الأطفال لا تتّسع لتطبيق واحد. الأمّ تريد تطابقاً مُدقَّقاً بسرعة. والجليسة تريد جدولاً تعتمد عليه ووضوحاً في ما ستُقبضه. والمشرف يريد تحكّماً بمن هو موثَّق، ومن أُبلغ عنه، وكيف يتدخّل دون أن يكسر شيئاً.

Each side only trusts the platform if the other two are being held to rules they can't see but can feel. That makes trust an information-architecture and permissions problem long before it becomes a UI one.كل طرف لا يثق بالمنصّة إلا إن كان الطرفان الآخران مُلزَمَين بقواعد لا يرونها لكن يشعرون بها. وهذا يجعل الثقة مشكلة هندسة معلومات وصلاحيات قبل أن تصبح مشكلة واجهة بزمن طويل.

§ Researchالبحث

One spec, three mental models.مواصفة واحدة، ثلاثة نماذج ذهنية.

I started with an IEEE 830 requirements document covering every entity, relation and user flow, before a single screen got designed. Writing it produced the insight the whole product rests on: a mother is shopping, a babysitter is selling her time, and an admin is moderating. Three different tasks, which means three different information architectures.بدأتُ بوثيقة متطلبات IEEE 830 تغطّي كل كيان وعلاقة وتدفّق مستخدم، قبل أن تُصمَّم شاشة واحدة. وأنتجت كتابتها الاستنتاج الذي يقوم عليه المنتج كله: الأمّ تتسوّق، والجليسة تبيع وقتها، والمشرف يُدير. ثلاث مهامّ مختلفة، وهذا يعني ثلاث هندسات معلومات مختلفة.

§ Users & personasالمستخدمون والـ Personas

Three audiences, three personas.ثلاثة جماهير، ثلاثة personas.

The user types from the requirements document became three personas, each with a different primary task and the frustration that shaped its app.فئات المستخدمين من وثيقة المتطلبات صارت ثلاثة personas، لكل واحد مهمّة أساسية مختلفة والإحباط الذي شكّل تطبيقه.

Huda, a working motherهُدى، أمّ عاملة

Mother app · books careتطبيق الأمّ · تحجز الرعاية

“I want to find a babysitter I can actually trust, and quickly, instead of gambling on a stranger with my child.أريد أن أجد جليسة أثق بها فعلاً، وبسرعة، بدل أن أقامر بغريبة مع طفلي.”

Goalsالأهداف

Vetted matches near her, a fast booking, and a clear sense of who has actually been verified.تطابقات مُدقَّقة قريبة منها، وحجز سريع، وإحساس واضح بمن تمّ توثيقه فعلاً.

Frustrationsالإحباطات

Not knowing who to trust, and platforms where anyone can list themselves with no checks at all.ألّا تعرف بمن تثق، ومنصّات يُدرج فيها أي أحد نفسه دون أي تدقيق.

Sara, a babysitterسارة، جليسة أطفال

Babysitter app · offers careتطبيق الجليسة · تعرض الرعاية

“I want a steady schedule, and I want to know exactly what a booking expects of me before I accept it.أريد جدولاً ثابتاً، وأريد أن أعرف بالضبط ما يتوقّعه الحجز منّي قبل أن أقبله.”

Goalsالأهداف

Bookings she can count on, a schedule she can read, and the right context about each child.حجوزات تعتمد عليها، وجدول تستطيع قراءته، والسياق الصحيح عن كل طفل.

Frustrationsالإحباطات

No-shows, vague expectations, and being shown personal data she has no business seeing.عدم الحضور، وتوقّعات غامضة، وأن تُعرَض عليها بيانات شخصية لا شأن لها برؤيتها.

Maya, a platform moderatorمايا، مشرفة المنصّة

Admin app · moderatesتطبيق المشرف · يُدير

“I want to verify people, flag problems and step in without breaking the platform, and I want a record of everything I did.أريد أن أوثّق الناس وأُبلّغ عن المشكلات وأتدخّل دون أن أكسر المنصّة، وأريد سجلاً بكل ما فعلته.”

Goalsالأهداف

Control over who's verified or flagged, with a clean trail behind every decision.تحكّم بمن هو موثَّق أو مُبلَّغ عنه، مع أثر نظيف خلف كل قرار.

Frustrationsالإحباطات

Abuse slipping through, and having no way to see why a past decision was made.تجاوزات تتسلّل، وألّا تجد طريقة لمعرفة سبب قرار سابق.

§ Design strategyاستراتيجية التصميم

Decide the structure before drawing a single screen.احسم البنية قبل رسم شاشة واحدة.

My bet was that the hardest problem in a marketplace is keeping three audiences and one backend coherent. So the schema and the permission model led, and the interface followed.كان رهاني أن أصعب مشكلة في سوق هي إبقاء ثلاثة جماهير وخادم واحد متماسكين. فقاد المخطّط ونموذج الصلاحيات، وتبعت الواجهة.

Goalالهدف
Trust across all three sides of the marketplaceالثقة عبر أطراف السوق الثلاثة
Hypothesisالفرضية
Three focused apps beat one app with a role switchثلاثة تطبيقات مركّزة تتفوّق على تطبيق فيه مبدّل أدوار
Priorityالأولوية
Data model and access rules ahead of UIنموذج البيانات وقواعد الوصول قبل الواجهة
Tradeoffالمفاضلة
A costlier build for surfaces that stay honestبناء أكلف مقابل واجهات تبقى أمينة

§ Design processعملية التصميم

Three audiences. Three mental models. Three apps.ثلاثة جماهير. ثلاثة نماذج ذهنية. ثلاثة تطبيقات.

Choosing three separate apps over one with a role switch is a design decision before it's an engineering one. Each app got its own Figma file, its own navigation and its own vocabulary.اختيار ثلاثة تطبيقات منفصلة بدل واحد فيه مبدّل أدوار قرار تصميمي قبل أن يكون هندسياً. ولكل تطبيق ملف Figma خاص به، وتنقّله ومفرداته.

01

Three dedicated apps rather than one with a role switch.ثلاثة تطبيقات مخصّصة بدل واحد فيه مبدّل أدوار.

Challengeالتحدّي

One app with a role switch is cheaper to build and cheaper to maintain, and plenty of marketplaces ship exactly that: one codebase, one store listing, one onboarding flow.تطبيق واحد فيه مبدّل أدوار أرخص في البناء وأرخص في الصيانة، وكثير من الأسواق تُطلق هذا بالضبط: قاعدة كود واحدة، وإدراج واحد في المتجر، وتهيئة واحدة.

Decisionالقرار

Three apps. Each audience has a different primary action, a different vocabulary and different expectations. Nobody has to read “you are logged in as: Mother”.ثلاثة تطبيقات. لكل جمهور فعل أساسي مختلف، ومفردات مختلفة، وتوقّعات مختلفة. ولا أحد مضطرّ أن يقرأ «أنتِ مسجَّلة الدخول كـ: أمّ».

Outcomeالنتيجة

Each app ended up with navigation built for one job and a store listing that describes what it actually does. It cost more up front, and each surface stays honest to the person using it.انتهى كل تطبيق بتنقّل مبنيّ لمهمّة واحدة وإدراج في المتجر يصف ما يفعله فعلاً. كلّف أكثر في البداية، وتبقى كل واجهة أمينة لمن يستخدمها.

01 / 04

A friendly face to startوجه ودود للبداية

The mascot and a calm sky-blue palette set a reassuring tone rather than a clinical one, and the whole app works in Arabic and English.الشخصية ولوحة زرقاء هادئة تضبطان نبرة مُطمئنة لا سريرية، والتطبيق كله يعمل بالعربية والإنجليزية.

§ Technical architectureالبنية التقنية

One Postgres, three clients, no shared-state tricks.قاعدة Postgres واحدة، وثلاثة عملاء، وبلا حِيَل للحالة المشتركة.

Every read and write goes through Supabase row-level security. A mother sees active babysitters inside her search radius. A babysitter sees and edits her own profile and bookings. An admin sees everything, and everything an admin does is written to a log. The role enforcement lives in the database, so the client never has to be trusted with it.كل قراءة وكتابة تمرّ عبر أمان مستوى الصف في Supabase. الأمّ ترى الجليسات النشطات داخل نطاق بحثها. والجليسة ترى وتحرّر ملفها وحجوزاتها. والمشرف يرى كل شيء، وكل ما يفعله المشرف يُكتب في سجلّ. وفرض الأدوار يعيش في قاعدة البيانات، فلا يُضطرّ أحد لائتمان العميل عليه.

▦ Architectureالبنية · CareConnect: three apps, one backendCareConnect: ثلاثة تطبيقات، وخادم واحد

SVG

MOTHER APPFlutter AppDiscover · Book · PayBABYSITTER APPFlutter AppProfile · ScheduleADMIN APPFlutter AppModerate · AuditSHARED BACKEND · POSTGRES + RLSSupabaserow-level security · role-based access · single source of truthpolicy: mother → only active babysitters in radius
Single Postgres + Supabase RLS enforces role boundaries. Apps cannot drift.قاعدة Postgres واحدة + سياسات RLS في Supabase تفرض حدود الأدوار، فلا تنحرف التطبيقات.
Mother appتطبيق الأمّ
Discover · Book · Payاكتشاف · حجز · دفع
Babysitter appتطبيق الجليسة
Profile · Scheduleملف · جدول
Admin appتطبيق المشرف
Moderate · Auditإدارة · تدقيق
Authالمصادقة
Supabase Auth
Realtimeالزمن الحقيقي
Postgres CDC
Policiesالسياسات
RLS · RBAC
ADR-001

Supabase and RLS instead of Firebase with client-side guards.Supabase وRLS بدل Firebase بحُرّاس من جهة العميل.

Contextالسياق

Firebase is what student marketplaces usually reach for, and auth with Firestore is quick to wire. Its security rules are a JSON dialect that's easy to get subtly wrong, and the client is modifiable.Firebase ما تلجأ إليه عادة أسواق الطلاب، وربط المصادقة مع Firestore سريع. لكن قواعد أمانه لهجة JSON يسهل أن تُخطئ فيها دون أن تنتبه، والعميل قابل للتعديل.

Decisionالقرار

Postgres with Supabase RLS. The policies are ordinary SQL, they run on every query, and there is no client-side path around them. A mother's query cannot return another mother's bookings.Postgres مع Supabase RLS. السياسات SQL عادية، تُنفَّذ مع كل استعلام، ولا يوجد طريق من جهة العميل يلتفّ حولها. استعلام أمّ لا يمكنه إعادة حجوزات أمّ أخرى.

Consequencesالنتائج

The security model is something a reviewer can read and check. It's also what made the three-app split safe: each client asks the database for what it's allowed to see, and the database is the access layer.نموذج الأمان شيء يستطيع المراجع أن يقرأه ويتحقّق منه. وهو أيضاً ما جعل فصل التطبيقات الثلاثة آمناً: كل عميل يسأل قاعدة البيانات عمّا يُسمح له برؤيته، وقاعدة البيانات هي طبقة الوصول.

§ Challengesالتحدّيات

Keeping three apps and one backend from drifting apart.منع ثلاثة تطبيقات وخادم واحد من التباعد.

It's tempting to treat three apps as three projects. The apps turned out to be the easy part. The hard part was holding one schema and one permission model steady across three quite different experiences without ending up with three copies of the same code.من المغري أن تتعامل مع ثلاثة تطبيقات كثلاثة مشاريع. تبيّن أن التطبيقات هي الجزء السهل. والصعب كان تثبيت مخطّط واحد ونموذج صلاحيات واحد عبر ثلاث تجارب مختلفة تماماً دون أن تنتهي بثلاث نسخ من الكود نفسه.

ADR-002

A full requirements document before any screen.وثيقة متطلبات كاملة قبل أي شاشة.

Contextالسياق

Most projects skip the requirements document and discover the spec while implementing it. That starts faster and hurts in the middle.معظم المشاريع تتخطّى وثيقة المتطلبات وتكتشف المواصفة أثناء تنفيذها. يبدأ ذلك أسرع ويؤلم في الوسط.

Decisionالقرار

I wrote the IEEE 830 document first, covering every entity, relation and user flow. Then Figma. Then Flutter.كتبتُ وثيقة IEEE 830 أولاً، تغطّي كل كيان وعلاقة وتدفّق مستخدم. ثم Figma. ثم Flutter.

Consequencesالنتائج

When a payments change came in mid-development, the document told me which six screens across two apps had to change. The refactor was a search instead of an excavation.حين وصل تغيير في الدفع منتصف التطوير، أخبرتني الوثيقة أي ست شاشات في تطبيقين يجب أن تتغيّر. وصارت إعادة الهيكلة بحثاً بدل تنقيب.

§ Outcomesالنتائج

Three honest surfaces on a backend you can check.ثلاث واجهات أمينة على خادم يمكنك التحقّق منه.

CareConnect shipped as three focused apps on one Supabase backend, with access decided in the database rather than trusted to the client. Each side's data boundary can be demonstrated in SQL, and every admin action leaves a record.أُطلق CareConnect كثلاثة تطبيقات مركّزة على خادم Supabase واحد، والوصول فيه يُقرَّر في قاعدة البيانات بدل أن يُؤتمَن عليه العميل. وحدّ بيانات كل طرف يمكن إظهاره بـSQL، وكل إجراء مشرف يترك سجلاً.

The three-app split was a UX call that engineering then had to honour. And writing the spec first was the cheapest insurance I could buy against three apps and one backend drifting apart.كان فصل التطبيقات الثلاثة قراراً في التجربة كان على الهندسة بعده أن تحترمه. وكتابة المواصفة أولاً كانت أرخص تأمين أستطيع شراءه ضدّ تباعد ثلاثة تطبيقات وخادم واحد.

§ Validationالتحقّق

How I'd test three apps at once.كيف سأختبر ثلاثة تطبيقات معاً.

Since trust has to hold across all three sides, I'd run a usability study per app around its main task: a mother finding and booking vetted care, a babysitter accepting a booking, a moderator verifying and flagging. Then I'd cluster the findings and fix whatever blocks the marketplace loop first.بما أن الثقة يجب أن تصمد عبر الأطراف الثلاثة، سأُجري دراسة قابلية استخدام لكل تطبيق حول مهمّته الرئيسية: أمّ تجد وتحجز رعاية مُدقَّقة، وجليسة تقبل حجزاً، ومشرفة توثّق وتُبلّغ. ثم أعنقد النتائج وأُصلح ما يعيق حلقة السوق أولاً.

  • P0The trust signals in the mother's app, the verification badges and what they actually mean, have to be unmistakable, or she won't book at all.إشارات الثقة في تطبيق الأمّ، شارات التوثيق ومعناها الفعلي، يجب أن تكون لا تُخطئ، وإلا فلن تحجز أصلاً.
  • P1The babysitter's schedule and the context of a booking have to be readable at a glance before she accepts it.جدول الجليسة وسياق الحجز يجب أن يُقرآ بلمحة قبل أن تقبله.
  • P2The admin's moderation actions should be quick and obviously reversible, with the log one tap away.إجراءات الإدارة لدى المشرف ينبغي أن تكون سريعة وقابلة للتراجع بوضوح، والسجلّ على بُعد نقرة.

§ Reflectionتأمّل

What I'd carry forward.ما سأحمله معي.

What stuck with me is that most of the difficulty in a multi-sided product is information architecture and access control, not how many screens there are. Writing the spec first felt slow and turned out to be the fastest route. It's my default now for anything with more than one kind of user.ما بقي معي أن معظم الصعوبة في منتج متعدّد الأطراف هندسة معلومات وتحكّم بالوصول، لا عدد الشاشات. بدت كتابة المواصفة أولاً بطيئة وتبيّن أنها أسرع طريق. وهي الآن خياري الافتراضي لأي شيء فيه أكثر من نوع مستخدم.

Next time I'd build a shared component layer across the three apps much earlier, so visual consistency is held by code instead of by discipline.في المرة القادمة سأبني طبقة مكوّنات مشتركة عبر التطبيقات الثلاثة أبكر بكثير، ليحفظ الكودُ الاتّساق البصري بدل الانضباط.