Multi-branch

Per-branch storefronts: one platform, local price, local stock, local staff

Chains and franchise networks rarely need separate websites. They need one website that tells the truth about each store, its price, its stock, whether it delivers, and who is allowed to change any of it.

GoGee does that with branch records as the structural unit. The catalogue, content and design are central; price, stock, fulfilment and staff permissions are per branch.

GoGee feature series · 12 of 33

How it's actually built

Branch record
Slug, name, address, coordinates, contact and active flag
Pricing
Per-branch price override on the inventory row
Stock
One inventory row per product and branch, with reserved quantity
Fulfilment
Per-branch delivery and collection configuration
Staff
Branch staff and branch manager attachments
Enforcement
Row-level security via security-definer branch helper functions
Central catalogue, branch reality
  1. 01Database

    Central catalogue

    Products, content, imagery and SEO shared

  2. 02Database

    Branch record

    Slug, address, coordinates, contact, active flag

  3. 03Database

    Inventory row

    Per product and branch: on hand, reserved, price override, in-store-only

  4. 04Deterministic

    Branch fulfilment

    Delivery and collection settings per branch

  5. 05Output

    Branch storefront

    Local price and stock on one deployment

Guardrails and fallbacks

  • Branch staff may write only their own branch
  • Design and product data stay central

Per-branch storefronts, data flow, generated from the shared GoGee feature diagram template.

What actually varies by branch

The parts of a storefront that differ between locations are narrow and predictable: what is on the shelf, what it costs there, whether the store delivers or is collection only, and its address and trading hours. Those are the fields GoGee makes branch-level.

Everything else, product data, imagery, page content, design, SEO, stays central, because duplicating it per branch is how chains end up with eleven different descriptions of the same product.

  • Branch price override sits on the product/branch inventory row
  • Quantity on hand, reserved quantity and low-stock threshold per branch
  • In-store-only products can be marked at branch level
  • Delivery and collection settings configured per branch

Staff see one branch; head office sees the network

Branch staff and branch managers are attached to branches through their own tables, and a security-definer helper answers whether a given user is staff at a given branch. That helper is used inside the row-level security policies on inventory and orders.

So a branch user updating stock is physically unable to write to another branch, and head office roles operate across all of them without a separate codebase or a second admin.

The shopper's experience

A visitor is matched to the nearest active branch by distance, and product availability is shown for that branch, including the branch price override where one is set. Search results can be filtered to what that branch actually has.

This is what stops the most damaging kind of ecommerce disappointment: a confirmed order the local store cannot fill.

What this is not

It is not a multi-tenant site builder where each branch designs its own pages. Branches do not get separate themes, separate content trees or separate domains by default.

It is a single storefront that is honest per location. If a client genuinely needs independent sites per region, that is a different build and we will say so rather than pretend the branch model covers it.

Questions we get asked

Can a branch charge a different price?

Yes. Each product/branch inventory row can carry its own price override, otherwise the central price applies.

Can a branch manager edit another branch?

No. Branch attachments are checked by database functions inside row-level security policies.

Does each branch get its own website design?

No. Design, content and product data stay central; price, stock, fulfilment and staff are branch-level.