0
Integrated modules at launch
0
User role types supported
0+
Products in the existing catalog
0
Countries, one platform

How the Platform Is Layered

From the franchisee's browser to Dynamics GP, every request flows through a consistent stack. Authentication is checked first. Access scope is derived from the Admin System. Data lives in Azure. Integrations are first-class, not add-ons.

Users
Franchisees Entities Marketing Team Admin Corporate View Vendors
Auth
Entra ID (corporate) Entra External ID (franchise + vendor) App Role RBAC
Application
Next.js App Router TypeScript React Server-Side Rendering API Routes
Data
Azure SQL (app data) Azure Blob Storage (assets + PDFs) Azure Application Insights
Integrations
Admin System (CRM) Dynamics GP FranConnect / LRC Payment Processor (TBD) Vendors UPS / FedEx / USPS

Explore Each Module

Every module is documented in full, including RFP requirements addressed, key capabilities, and technical approach. Use the cards below to navigate.


Why the Modules Integrate, Not Just Coexist

The platform's value isn't in any individual module — it's in what happens at the intersection. A franchisee's Zee Fund balance shows up at checkout because it's the same balance the claims module tracks and the reporting module displays. An admin's scope in the RBAC layer determines what they see in every module, consistently, without per-module configuration. A vendor's order status update reaches the franchisee's order history without any manual intervention.

Shared Identity Layer

Every user action in every module passes through the same authentication and authorization layer. A Marketing user emulating a franchisee sees exactly what that franchisee sees — scoped to their office, their fund balance, their order history — because the same permission check runs regardless of which module is rendering the page.

Shared Data Model

An office record is one object with one ID. When the Admin System updates an office's address, that update propagates everywhere — to the Design Builder's auto-populate fields, to the shipping address on the checkout, to the claims form. No module maintains its own copy of location data that can drift out of sync.