MRA-01 — Reseller app — home
Greeting, notifications bell, search entry with scanner, banner carousel/daily offer, quick access, popular categories, recommended products, balance/credit tiles.
| Field | Details |
|---|---|
| Task code | MRA-01 |
| Phase | P1 — V1 build & integration |
| Product scope | V1 |
| Status | Planned |
| Start | Sun 8 Nov 2026 |
| Due | Mon 9 Nov 2026 |
| Responsible | Imad — Mobile developer (Flutter) |
| Co-responsible | — |
| Effort | 1.25 person-day(s) planned · 4 from scratch · size S |
| Area · app | Reseller app · mobile |
| Depends on | MOB-06, DES-07 |
| Unblocks | — |
| Milestones | — |
Summary
Greeting, notifications bell, search entry with scanner, banner carousel/daily offer, quick access, popular categories, recommended products, balance/credit tiles.
Description
The home screen (RA-09) is where resellers land every day and where guests discover the offer, so it must load fast and adapt to the session: guests see merchandising without prices, signed-in resellers see their prices, balance and credit. Scope: greeting, notifications bell with unread badge, search entry with scanner shortcut, banner carousel and daily offer with countdown, quick-access tiles, popular categories, recommended products, balance/credit tiles, the pending-validation or guest banner and the regional WhatsApp button placement (the button itself is built in MRA-08). Data comes from catalog.home (auth optional), finance.summary, banners.list / promotions.list and notifications.unreadCount. It needs SRV-11/SRV-19/SRV-18 or Prism examples from Anis and Akram's DES-07 home (guest and signed-in). MRA-02, MRA-03 and MRA-06 are reached from here.
Subtasks
| # | Subtask | Owner |
|---|---|---|
| 1 | HomeScreen RA-09 with a HomeController calling GET /catalog/home once (guest or signed-in) and rendering sections in the server's order; skeletons while loading | Imad |
| 2 | Header: greeting with store name (signed-in) or « Bienvenue » (guest), bell with notifications.unreadCount badge, search field opening RA-10 and scanner icon opening RA-11 | Imad |
| 3 | BannerCarousel (auto-scroll, indicators) whose targets resolve to routes: product, category with filters, promotion detail RA-25 | Imad |
| 4 | DailyOfferCard with a countdown computed from server time (offset from the response Date header) and stopping at expiry | Imad |
| 5 | Quick-access tiles (« Commandes », « Factures », « Favoris », « Promotions ») hidden or prompting sign-up for guests | Imad |
| 6 | Popular categories row and recommended products grid using ProductCard with PriceText (lock for guests) and AvailabilityPill | Imad |
| 7 | Balance & credit tiles from finance.summary (balance due, available credit) for active resellers only, linking to RA-29 | Imad |
| 8 | Contextual banners: guest « Créez un compte pour voir les prix », pending « Compte en attente de validation »; placement of the MRA-08 WhatsApp button | Imad |
| 9 | Stale-while-revalidate cache of the last home payload for offline launches, pull-to-refresh | Imad |
Deliverables
- apps/reseller/lib/src/features/home/ (screen, controller, sections)
- packages/hoco_catalog/lib/src/widgets/banner_carousel.dart and daily_offer_card.dart
- Widget tests and goldens for guest and signed-in home
Acceptance criteria
- A guest home shows banners, daily offer, categories and products with no price and no finance tiles (AUTH-10)
- A signed-in active reseller sees their customer-type prices, balance and available credit (FIN-10)
- The bell badge matches notifications.unreadCount and updates after reading a notification (NOT-01)
- The daily-offer countdown reaches zero at the server's end time even if the phone clock is wrong (PRM-05)
- Home is usable within 3 s on a mid-range phone on 4G and shows the cached version offline (NFR-01)
- No product card shows a stock quantity, only « En stock » / « En rupture » (STK-07)
Requirements covered
| Requirement | Title | Release |
|---|---|---|
| CAT-11 | Home merchandising: popular categories and recommended products (rules-based) | V1 |
| PRM-05 | Home banners and daily offer carousel with countdown | V1 |
| FIN-10 | Reseller finance view: balance, available credit, invoices, payments | V1 |
| NOT-01 | In-app notification inbox with read/unread in every app | V1 |
| AUTH-10 | Guest mode: the reseller app and web can be browsed without an account; prices stay hidden until the visitor signs up and declares a customer type | V1 |
Screens
| Screen | Name | App |
|---|---|---|
| RA-09 | Home | RA |
API surface
| Endpoint group | Operations |
|---|---|
| Catalog & favorites | 12 |
| Promotions, banners & packs | 5 |
| Reseller finance | 6 |
| Notifications & announcements | 10 |
Test measures
- Golden tests of the home in guest, pending and active states
- Widget test of the countdown with a fake clock and a skewed device time
- Integration test against Prism: open app → home → tap banner → promotion detail
Risks
- The home aggregate grows heavy — agree payload limits with Anis (e.g. 10 recommended products) and lazy-load below the fold
KPI
- Delivered by Mon 9 Nov 2026 within 1.25 person-day(s).
- Every acceptance criterion above demonstrated before hand-off; linked requirements' acceptance criteria pass.
- Zero open critical defects, permission gaps or data-integrity regressions at sign-off.
Generated from content/plan/tasks.json by scripts/generate-team-tasks.mjs. Dates are computed by the scheduler (Sunday–Thursday weeks, holidays excluded) — change the plan, not this page.
MOB-11 — Media capture & uploads
Camera/gallery capture, compression, EXIF-free uploads to pre-signed URLs with retry, offline upload queue for the delegate app.
MRA-02 — Reseller app — catalog, search, scanner, filters
Catalog grid with tabs and category chips, search with suggestions and recents, barcode scanner, advanced filters (price range, category/sub-category, brand, attributes, availability, promotion) with live counts from facets, sort, infinite scroll; guest mode shows no prices.