MRA-03 — Reseller app — product detail & favorites
Gallery, variants, prices, availability, quantity stepper with limits, add to cart / order now, specs sheet, similar products, favorites, share.
| Field | Details |
|---|---|
| Task code | MRA-03 |
| Phase | P1 — V1 build & integration |
| Product scope | V1 |
| Status | Planned |
| Start | Wed 11 Nov 2026 |
| Due | Thu 12 Nov 2026 |
| Responsible | Imad — Mobile developer (Flutter) |
| Co-responsible | — |
| Effort | 0.75 person-day(s) planned · 3 from scratch · size S |
| Area · app | Reseller app · mobile |
| Depends on | DES-08 |
| Unblocks | — |
| Milestones | — |
Summary
Gallery, variants, prices, availability, quantity stepper with limits, add to cart / order now, specs sheet, similar products, favorites, share.
Description
The product page is where the reseller decides and orders, so it must show their own price, availability and quantity rules exactly as the cart will enforce them (CAT-08, ORD-02). Scope: product detail RA-14 (gallery, variant selector, customer-type price with promotion and recommended price, availability pill, quantity stepper with min/step/max, « Ajouter au panier » and « Commander maintenant », similar products, share), full specifications RA-15 and favorites RA-16. Guests see everything except prices and cannot add to cart or favorites (AUTH-10). It needs catalog.products.get|similar, favorites.* and cart.items.add (SRV-11, SRV-12, SRV-15) and Akram's DES-08 frames. Reusable parts (variant selector, stepper wiring, price block) go to hoco_catalog for MDA-09; MRA-04 picks up the cart lines created here.
Subtasks
| # | Subtask | Owner |
|---|---|---|
| 1 | ProductDetailScreen RA-14 on catalog.products.get: hero gallery with swipe and pinch-zoom, brand and reference, VariantSelector (colour, length, power…) switching price, availability and images | Imad |
| 2 | PriceBlock: the caller's price (customer type), promotion price with strike-through and end date, « Prix conseillé » (recommendedPrice), HT/TTC per the display decision; lock state for guests | Imad |
| 3 | AvailabilityPill (« En stock » / « En rupture ») — out-of-stock variants cannot be added; no quantity ever shown | Imad |
| 4 | QuantityStepper bound to minQty, qtyStep and maxQty from the variant; inline message instead of a server QUANTITY_NOT_ALLOWED | Imad |
| 5 | « Ajouter au panier » → POST /cart/items with an Idempotency-Key, cart badge refresh, snackbar « Ajouté au panier » with « Voir le panier »; « Commander maintenant » → add then open RA-17 | Imad |
| 6 | SpecificationsScreen RA-15: attribute table (from VariantAttributeValue), description, package contents | Imad |
| 7 | Similar and complementary products rail (catalog.products.similar) | Imad |
| 8 | Favorites: optimistic heart toggle (PUT/DELETE /favorites/{productId}, rollback on failure) and FavoritesScreen RA-16 (favorites.list) with add-to-cart | Imad |
| 9 | Share via share_plus: product name, image and public product link (URL scheme to confirm with Anis), works for guests | Imad |
| 10 | Guest and pending behaviour: lock + SignUpPromptSheet for add and favorite; pending resellers may fill the cart (checkout blocked later) | Imad |
Deliverables
- apps/reseller/lib/src/features/product/ (detail, specifications) and features/favorites/
- packages/hoco_catalog/lib/src/product/variant_selector.dart, price_block.dart
- Goldens of product detail for guest, in-stock, out-of-stock and promotion states
Acceptance criteria
- The price shown equals the cart line price after adding (same customer type, same promotion) (PRC-05)
- The stepper never lets the user go below minQty, off-step or above maxQty (ORD-02)
- An out-of-stock variant shows « En rupture » and its add button is disabled; no quantity appears anywhere (STK-07)
- A guest sees the lock instead of every price and is sent to sign-up on « Ajouter au panier »; after sign-up the same product reopens (AUTH-10)
- Favorites toggle survives a restart and syncs with the web app (CAT-09)
- Double-tapping « Ajouter au panier » adds the quantity once
Requirements covered
| Requirement | Title | Release |
|---|---|---|
| CAT-08 | Product detail: gallery, specifications, description, prices, availability, quantity limits, similar/complementary products, share | V1 |
| CAT-09 | Favorites | V1 |
| ORD-02 | Cart rules: minimum amount, minimum quantities and steps, maximum per order, stock and credit checks | 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
API surface
| Endpoint group | Operations |
|---|---|
| Catalog & favorites | 12 |
| Cart & checkout | 8 |
Test measures
- Widget tests of the stepper bounds and of variant switching
- Golden tests of PriceBlock (guest lock, promotion, recommended price)
- Integration test: product → add → cart badge → cart line matches price and quantity
Risks
- HT vs TTC display is still an open decision — keep it in one PriceText setting so the switch is one line
KPI
- Delivered by Thu 12 Nov 2026 within 0.75 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.
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.
MRA-04 — Reseller app — cart, checkout & confirmation
Cart with live re-validation messages, address book, payment method with credit availability, order note, idempotent checkout, confirmation.