๐Ÿ“Š Status Report
๐Ÿ“‹ Product Backlog
๐Ÿƒ Sprint 1
๐Ÿ”€ Strategic Fork

Project Status โ€” Report #002

Post Brendon sync (May 28). Scope refined. Priority order updated. Two strategic paths identified.

57h
Human Hours (All Phases)
~$3.3K
AI Inference
12โ€“16wk
Timeline
<2mo
Payback
๐Ÿ“‹ Changes from Brendon Sync (May 28)
Bottom Line

Portal is built. Real data ingestion is the immediate unlock. After UAT with a few trusted clients, Victor and Brendon decide: AI email intake first, or portal adoption first.

At a Glance
Portal Build
Live (Staging)
Admin + Customer views working
Data Ingestion
In Progress
Price list received; customer list pending
UAT
Blocked
Waiting on complete data
QB Integration
Deferred
Post-UAT decision
Strategic Path
Pending
A vs B โ€” decide after UAT
Budget
On Track
No scope creep
Immediate Action Items
Context: Shopify + Wholesale Split
ChannelSystemProcessPortal Role
RetailShopifyAutomatedNo change โ€” Shopify handles retail
WholesaleManual (email/text)~24h/week manual entryThis portal replaces manual process
Shopify syncTBDโ€”Possible future: Shopify โ†” portal stock sync (not committed)
Next Decision Point
After data ingestion + UAT

Victor and Brendon decide between two strategic paths. See Strategic Fork tab for full breakdown. This decision drives Phase 2 scope.

Phase Roadmap (Updated)
PhaseScopeStatusChange
Pre-SprintWholesale price list + customer list ingestionIn Progress๐Ÿ†• New โ€” not in original spec
Phase 1 โ€” MVPPortal live, UAT with trusted clientsReady after dataQB deferred to post-UAT
Phase 2 โ€” Path A or BAI email parsing OR portal adoption push โ€” TBDPending decision๐Ÿ†• Fork introduced by Brendon sync
Phase 3QB integration + remaining pathNot StartedMoved later by Brendon's request

Product Backlog โ€” Updated

Post Brendon sync. QB reprioritized. Bulk import added. Strategic fork reflected.

18
P0 โ€” Must Ship
19
P1 โ€” Core Value
9
P2 โ€” Complete MVP
9
P3/P4 โ€” Future
What changed from v1

๐Ÿ†• Epic 0 โ€” Pre-Sprint Data Ingestion

Portal is built. Real data must be loaded before UAT can start.
โ–พ
IDStoryPriorityDone When
DI-01Ingest Brendon's wholesale price list into product catalog (correct prices)P0All products showing correct wholesale prices in portal
DI-02Receive Brendon's QB customer export (wholesale only, Excel)P0File received from Brendon
DI-03Bulk-import customers from Excel into portal (no duplicate risk)P0All wholesale customers visible in admin; no duplicates
DI-04Share admin login + portal link with Brendon for UATP0Brendon confirms access; can browse and test

Epic 1 โ€” Foundation & Access Control

Everything depends on auth. No portal without this.
โ–พ
IDStoryPriorityDone When
AC-01Owner logs in โ†’ full admin navigation visibleP0Owner login โ†’ all menu items present
AC-02Staff logs in with restricted access (no Settings, QB, Staff Mgmt)P0Staff login โ†’ limited nav; delete returns 403
AC-03B2B client logs in โ†’ Customer Portal onlyP0Customer login โ†’ Customer Portal only
AC-04Guest browses catalog without loginP0Unauthenticated โ†’ catalog visible
AC-05Brendon can deactivate a customer (access revoked, history preserved)P1Deactivated โ†’ "Account inactive" on next login
AC-06No public self-registration โ€” invite flow is the only pathP0No sign-up page exists

Epic 2 โ€” Product Catalog

Pre-requisite for all ordering flows.
โ–พ
IDStoryPriorityDone When
PC-01Create product (name, desc, category, unit, price, availability, up to 10 images)P0Created โ†’ visible in customer catalog within 30s
PC-02Set primary image and reorder via drag-and-dropP1Reorder โ†’ customer carousel reflects change
PC-03Update product availability in real-timeP0Set to 0 โ†’ "Out of Stock"; can't add to cart
PC-04Set product status (Active / Inactive / Seasonal)P1Inactive โ†’ removed from customer view
PC-05Soft-delete product (history preserved)P1Deleted โ†’ off catalog; past orders still reference it
PC-06Manage categories (create, edit, delete)P1New category โ†’ available in product form immediately
PC-07Image validation: max 5MB, JPEG/PNG/WebP onlyP0Wrong size/format โ†’ rejection message
PC-08Price updates reflect in customer view within 60sP1Admin updates price โ†’ customer sees it on next load

Epic 3 โ€” Customer Management & Onboarding Updated

Bulk import added from Brendon sync โ€” avoids QB duplicates.
โ–พ
IDStoryPriorityChange
CM-01Create customer profile (business name, contact, email, phone, address, schedule, tier, notes)P0โ€”
CM-02Send invite email to customerP0โ€”
CM-03Customer activates via invite link (pre-filled data, set password or magic link)P0โ€”
CM-04Invite links expire after 7 days (configurable)P1โ€”
CM-05Resend invite (new link, old link invalidated)P1โ€”
CM-06Convert guest order to registered customer (one click, data pre-filled)P2โ€”
CM-07Customer lifecycle: Invited โ†’ Active โ†’ InactiveP1โ€”
CM-08๐Ÿ†• Bulk customer import from CSV/Excel (QB export format) โ€” maps columns, deduplicates by email, creates accounts in batchP0๐Ÿ†• Added from Brendon sync

Epic 8 โ€” QuickBooks Integration Reprioritized

QB-01/02 downgraded P0โ†’P1. Brendon: test portal first, then QB.
โ–พ
IDStoryPriorityChange
QB-01Connect QuickBooks via OAuth 2.0P1Was P0 โ†’ downgraded. Post-UAT.
QB-02QB invoice auto-created on order confirmationP1Was P0 โ†’ downgraded. Post-UAT.
QB-03QB invoice cross-referenced with portal order numberP1โ€”
QB-04Access token auto-refreshedP1โ€”
QB-05QB error โ†’ admin notified; order still processedP2โ€”
QB-06๐Ÿ†• Customer sync QB โ†” portal โ€” when customer added to portal, sync to QB to avoid duplicates (Brendon explicitly requested)P1๐Ÿ†• Added from Brendon sync

Sprint 1 Backlog โ€” Updated

Pre-sprint data ingestion added. QB removed from Sprint 1 scope per Brendon's direction.

Pre
Data Ingestion First
19
Sprint 1 Stories
2wk
Duration
UAT
Exit Criteria
Sprint Goal
"By end of Sprint 1, Brendon can log in with real data, manage his catalog, invite real clients, and run UAT with a few trusted customers."

๐Ÿ†• Pre-Sprint โ€” Data Ingestion

Must complete before Sprint 1 UAT ยท Victor executes
The portal is built but has wrong data. Real prices + real customers must be loaded before Brendon can meaningfully test anything. This unblocks Sprint 1 UAT.
TaskInputDone When
DI-01 โ€” Ingest price listWholesale price list (received from Brendon)All products showing correct wholesale prices
DI-02 โ€” Receive customer exportBrendon's QB export (wholesale clients only, Excel)File received
DI-03 โ€” Bulk import customersExcel from DI-02All wholesale customers in admin; no duplicates
DI-04 โ€” Share admin accessโ€”Brendon confirms he can log in and stress-test

Track A โ€” Infrastructure & Auth

Est: 3 days ยท AC-01 to AC-06
Foundation for everything. Build first, in full.
TaskWhat It MeansDone When
A1 โ€” Supabase SetupCreate project, configure auth, define 4 roles: owner, staff, customer, guest4 roles working; local env connects
A2 โ€” Cloudflare ScaffoldInit frontend repo, deploy to stagingstaging.marisgardens.com returns 200
A3 โ€” Owner LoginEmail + password; redirect to Admin PortalOwner logs in โ†’ full nav
A4 โ€” Staff LoginRestricted nav (no Settings, QB, Staff Mgmt)Staff login โ†’ limited nav; delete returns 403
A5 โ€” Customer LoginRedirect to Customer Portal; admin URL blockedCustomer login โ†’ portal only
A6 โ€” Route GuardsAll routes protected per roleUnauthenticated /admin โ†’ login redirect

Track B โ€” Product Catalog

Est: 4 days ยท PC-01 to PC-08
Build the full CRUD + image pipeline so Sprint 2 can focus entirely on ordering. Prices must reflect Brendon's wholesale list (not Shopify retail).
TaskWhat It MeansDone When
B1 โ€” Product Data ModelSupabase table: products (id, name, desc, category_id, unit, price, availability, status)Migration runs clean
B2 โ€” Image StorageSupabase Storage; max 5MB; JPEG/PNG/WebP onlyUpload validates type + size
B3 โ€” Image Orderingsort_order join table; drag-and-drop UIReorder โ†’ persisted; carousel reflects
B4 โ€” Category CRUDcategories table; admin CRUDCreate/edit/delete โ†’ available in product form
B5 โ€” Product CRUDCreate, edit, soft-delete; status toggleFull CRUD; soft delete preserves history
B6 โ€” Real-time AvailabilityAdmin update โ†’ customer sees <60sSet to 0 โ†’ OOS shown; can't add to cart
B7 โ€” Customer Catalog ViewProduct grid; filter by category; searchCustomer sees catalog; OOS disabled

Track C โ€” Customer Management & Onboarding

Est: 3 days + bulk import ยท CM-01 to CM-08
Now includes bulk import (CM-08) from Brendon's QB export. Build invite flow + bulk import in Sprint 1 so data ingestion can happen immediately after.
TaskWhat It MeansDone When
C1 โ€” Customer Data ModelSupabase table: customers (all fields)Migration runs clean
C2 โ€” Admin Customer CreationForm + Supabase auth inviteProfile saved; visible in list
C3 โ€” Invite Email FlowResend integration; branded email; 7-day linkEmail within 60s; link works
C4 โ€” Customer ActivationPre-filled form โ†’ confirm โ†’ account activeActivation completes end-to-end
C5 โ€” Invite Expiry + ResendDay 8 โ†’ error page; resend invalidates old linkBoth cases handled
C6 โ€” ๐Ÿ†• Bulk CSV/Excel ImportUpload QB export โ†’ map columns โ†’ deduplicate by email โ†’ batch create accountsBrendon's QB export imported cleanly; no duplicates
Definition of Done โ€” Sprint 1
What's NOT in Sprint 1 (updated)
FeatureWhenWhy Deferred
QB integrationPost-UATBrendon explicitly: test portal first, then QB
AI email/SMS parsingPath A decisionDepends on UAT + strategic fork decision
Ordering flowsSprint 2Depends on auth + catalog (this sprint)
Packing sheetsSprint 3Depends on ordering (Sprint 2)
Standing ordersSprint 3Depends on ordering (Sprint 2)
Shopify syncTBD / Phase 3+Mentioned by Victor โ€” not committed by Brendon

Strategic Fork

After data ingestion + UAT, Victor and Brendon choose one path. Each solves the core problem differently.

The Core Problem

Brendon's team spends ~24h/week manually processing orders received by email and text. Every restaurant has a different format. This is the bottleneck โ€” and there are two ways to remove it.

The Two Paths
Path A โ€” Remove the Bottleneck

AI Email + SMS โ†’ Order Pipeline

Build AI that reads inbound emails and texts, maps them to the product catalog, and creates orders automatically. Restaurants keep doing exactly what they do today.

  • AI parses "3 cases romaine, 2 bags herbs" from email
  • Maps to product catalog; flags ambiguous items
  • Draft order presented to Brendon โ†’ one-click confirm
  • Confirmed order โ†’ QB invoice auto-created
  • SMS channel supported (some clients text)
"If this works, you don't need your customers to use the portal." โ€” Victor, May 28 sync
Path B โ€” Change Client Behavior

Portal Adoption Push

Invest in getting the 70+ B2B clients to actively use the ordering portal instead of email/text. Higher long-term payoff, harder adoption curve.

  • Client onboarding + training materials
  • Mobile optimization (orders from the field)
  • Customer self-service (address, preferences)
  • Analytics dashboard for Brendon
  • Delivery tracking visible to clients
Higher ceiling โ€” clients who use the portal generate cleaner data, less ambiguity, faster processing. But adoption takes time and trust.
Path Comparison
DimensionPath A โ€” AI EmailPath B โ€” Portal Adoption
Client behavior changeNone โ€” zero frictionHigh โ€” requires onboarding + habit shift
Time to valueFast โ€” works with existing email/textSlow โ€” depends on client adoption rate
Data qualityMedium โ€” AI can misparse ambiguous requestsHigh โ€” structured input, no ambiguity
QB integration dependencyRequired for full chainOptional (enhances but not required)
Effort estimate~10h + ~$650 inference~12h + ~$650 inference
RiskAI parsing accuracy โ€” wrong fillsClient resistance โ€” low adoption
These paths exclusive?No โ€” both can be built. The decision is which to do first.
Recommendation
Victor's framing from the sync

Path A removes the bottleneck immediately and requires no behavior change from clients. If AI parsing accuracy is high enough, Brendon sees ROI before a single client logs into the portal. Path B is the long-term play โ€” cleaner data, higher engagement. The strongest outcome: ship Path A first to prove ROI, then use that credibility to drive Path B adoption.

Decision gate โ€” after UAT

Victor and Brendon sync after data ingestion + UAT. Brendon's experience using the admin portal with real data will inform which pain point feels most urgent to solve next.