Everything left to build, in the order it has to happen. 109 numbered jobs across eight phases. Thirty are ticked. The multi-storefront engine is deployed to production, this domain is live on a Cloudflare origin cert, and the brand system is built off the real logo file. Phase 1 is done: Cups for Trade now has its own ERP tenant, with cupsbyaa and cupsfactory registered as its two storefronts.
Phase 1 blocks everything else. You told me BHD and CupsByAA are separate legal entities and CupsFactory sits under CupsByAA financially. So CupsFactory's orders, money and production have to land in CupsByAA's books, and CupsByAA does not have an ERP tenant yet. Building the website first would leave it with nowhere to post.
One thing I cannot decide for you, flagged at job 24: whether CupsFactory takes card payments through CupsByAA's existing Paymob merchant or needs its own. That is a merchant-account and settlement question, not a code one.
The multi-storefront engine is built and reviewed, 22 commits after a final adversarial pass found three Criticals that were fixed. It is what lets cupsbyaa and cupsfactory share one set of books while staying separately trackable, which is exactly what “cupsfactory sits under cupsbyaa financially” requires. Not re-listed as tasks.
| Commit | What it does |
|---|---|
da4f2d6…977735f | Storefront registry, tenant-keyed cache, partial unique index so a retired brand's code is reusable |
0c6f3d7…c6a3188 | Brand resolver on every public request, path-scoped after it was caught 400-ing the whole admin API |
85e2e6e…22dcf2f | Storefront label on all six chain documents, with real propagation tests |
7b4e6da | Per-suite test databases, fixing a 40% flake rate caused by a shared-DB wipe |
c58808d | Optional portal auth and price-list resolution |
8747e24 | Per-brand invoiced-value endpoint |
38b43f6…d6f03ba | Brand seed, per-tenant sets, refuses to guess a database or a set |
505bfcf | Trade pricing wired into product page and checkout, retail path proven unchanged (91 tests) |
d2928f5 | Admin page for the per-brand report, tenant-neutral |
Done. A Paper & Pen tenant with its own database and its own general ledger, serving two storefronts. BHD's ERP is not touched. The monthly BHD↔CupsByAA intercompany settlement continues unchanged, because the two stay separate entities.
✓Provision the cupsbyaa P&P tenant
✓Decide and register the ERP host
✓Seed the storefront registry for this tenant
✓Chart of accounts for CupsByAA
!Opening balances and cutover date
✓Company identity: CR, VATIN, address, bank
✓Tenant branding: logo, colours, PDF letterhead
✓Module entitlements
Migrate the cup product catalogue
Migrate the pricing ladders
Create the CupsFactory wholesale price list
Migrate customers and open balances from the Laravel app
Migrate order history
Staff accounts and OTP login
The Cloudflare zone is active with zero DNS records. Everything here is greenfield.
✓DNS: A and www, proxied
✓Cloudflare Origin CA certificate
✓nginx vhost on the VPS
Laravel app skeleton at the web root
✓Mail: DKIM, SPF, DMARC for cupsfactory.om
✓Mailboxes: info@ and sales@
✓Deploy script with a fail-closed preflight
✓Staging host before production
✓ERP bridge credentials
✓Paymob merchant decision
Two inks and a bilingual lowercase wordmark is a tight brief, which is a gift. The whole identity has to come from type, spacing and paper, not from a colour palette. Arabic is set at parity with English in the logo, so it must be at parity on the site too.
✓Extract logo masters from Final Logo.ai
✓Identify the wordmark typeface
✓Host the type on fonts.bhd.om
✓Arabic face paired to the Latin
✓Build the token layer on design.bhd.om
✓Tailwind config bound to the tokens
✓Wire FontAwesome Pro 7.2 from design.bhd.om/fa
✓OMR rendering via BHDCurrency
✓Accessible contrast pass on the two inks
✓Favicon, app icons, maskable icon
✓Open Graph share card, 1200×630
✓Brand sheet for the team
The base is custom-v2.blade.php plus the OrderFormV2 Livewire component: pick a quantity, then compare what every cup costs at that quantity, then check out. The audit (job 37) established that v2 is a VIEW on a shared engine, so this phase rebuilds the view against that engine. Refactoring the engine is real work but it is shared with the live cupsbyaa.com surface, so it is deliberately NOT bundled in here.
✓Audit v2 honestly before copying it
Three creative directions, not one
Run the jury and pick a direction
Page architecture and routes
RTL as a first-class layout
Hero: the factory thesis
Quantity ladder, rebuilt
Trade-scale tiers
Price board, rebuilt
Unavailable tiers stay readable
Best-value marker that is actually true
Live unit price and line total
To-scale size guide
Product photography set
Artwork upload with real validation
Live cup preview from uploaded artwork
Dieline download per size
Digital proof and approval step
Phone field with country selector
Trade account application
Logged-in trade pricing on the storefront
Reorder from a past order
Order tracking page
Customer portal: quotes, invoices, statements
Capability page: machines, capacity, lead times
Quality and food-safety page
Sample request flow
Motion pass
Empty, loading and error states
WhatsApp contact and share links
Short links for anything sent to a customer
Cookie and consent handling
Every job here can lose a real order or misstate a real number, so each one gets a test that fails when it is wrong.
Paymob integration
Apple Pay, including non-Safari desktop
Inline Pixel card form
Webhook with HMAC verification
Bank transfer and credit-terms checkout
Order pushes into the CupsByAA ERP
Two-way production status sync
Stale-order notification guard
✓VAT handling and the tax invoice
Abandoned-cart definition
Order confirmation email and WhatsApp
End-to-end money test on staging
Bilingual copy pass, written not translated
Keyword and intent map
Landing pages per product and city
Structured data
hreflang for the EN and AR mirror
Sitemap and robots
Canonicals
llms.txt, llms-full.txt, ai.txt
Entity and sameAs graph
IndexNow wired to deploy
Google Search Console verification
Bing verification, by API
Analytics and conversion events
Truth pass on every public claim
Deterministic checks, not opinions. Each produces evidence that can be re-run.
Responsive and overflow audit
Accessibility audit
Contrast audit against the two inks
Lighthouse to 100 on mobile
Core Web Vitals on real hardware
Link and asset audit
Playwright end-to-end suite
Cross-browser and real-device pass
Security review
Independent design jury before launch
Staging sign-off
!Seed the registry on production
Cut over DNS and watch
Post-launch monitoring
Log the launch and hand over