613
613parts an APC associate store
MESSENGER BOT · DESIGN SPEC v2.0 · APR 2026
Facebook Messenger Bot · The Whole Catalog · v2

message us. we deliver, drop off, or have it ready at the counter.

A Messenger bot for the 613parts Facebook page that handles the entire ~5,000-SKU catalog — tire+rim packages, single parts, full job kits — across three fulfillment lanes: free in-store pickup at Belleville or Kingston, $15 flat-rate local drop-off, or free drop-off on tire+rim packages and any order over $300.

Platform ManyChat Catalog ~5,000 SKUs Sources DAI · AS400 · AMSOIL · ACDelco Fulfillment 3 lanes Local zone K8N · K7K-P + bordering Pay Stripe link
613
613parts
Active now · typically replies in seconds
👋 hey, you're chatting with 613parts.
parts and tires for every car on the road. pickup at our shop or we'll deliver — what're you after?
Tire+rim package
Find a part
I have a VIN
Talk to a human
Find a part
sure. what's the part?
i can search by name, SKU, or symptom (e.g. "squeaky brakes").
oil filter for my civic
found 3 in stock that fit a civic 1.5L turbo ↓
Aa
Why Messenger

a tire desk that fits in your pocket.

Most tire shoppers don't know their bolt pattern. They want to be guided. Messenger turns the awkward "what's my fit?" moment into a 6-tap conversation, with the same staff who'd answer the phone — only faster, after-hours, and traceable to a paid order.

~60sec
From "hi" to a real package quote with price, photo, and stock confirmed.
Vs. ~3 min on the phone, ~24 hr on email
3-5×
Lower cost-per-lead on click-to-Messenger ads vs. click-to-website ads in this category.
Source: Meta benchmark, auto-services 2025
$15/mo
ManyChat Pro plan. No dev cost for v1 — built in the visual flow editor.
v2 custom backend if we outgrow it
100%
Inside Facebook. Customer never leaves the app until pay link opens in browser.
Native handoff to Page Inbox for humans
The Conversation · Tire+Rim Path

eight beats. one path. the canonical flow.

Every script line follows the 613parts voice rules: lowercase-friendly, short sentences, Canadian English, "we" not "I," concrete details, no marketing jargon. The tire+rim path below is one of two intent flows in v2 — for the part-search variant, jump to "The Other Path · Catalog Search" further down. Beats 5-8 are shared between both paths.

01
Greeting
First impression. We name the desk, set the value prop in one sentence, give three obvious paths.
👋 hey, you're chatting with the 613parts tire desk. free local drop-off in belleville and kingston. most quotes back in under 60 sec. what brings you in today?
[Get a quote] [Just browsing] [Talk to a human]
02
Fitment
Three paths to the same answer. VIN is fastest and gives us bolt pattern + offset automatically via NHTSA vPIC.
sweet. what are you driving? fastest way is your VIN — 17 chars on your dash or door jamb. i can also do year/make/model.
[Type VIN] [Year/Make/Model] [I know my size]
1HGBH41JXMN109186 nice — looks like a 2021 honda civic LX. that right?
[Yes that's me] [Try again]
03
Postal code gate
Hard local-only check. If they're outside the zone, we offer pickup at the closer branch instead of leaving them empty-handed.
awesome. now your postal code so i can confirm free local drop-off. K8N 5H8 ✅ you're in our zone. free drop-off, no minimum. — OR if outside zone — 📍 we only do free drop-off in belleville + kingston right now. but you can pick up at 14 roy blvd belleville (mon-fri 8-5, sat 8-2) or 846 portsmouth ave kingston. want a pickup quote instead?
04
Use case + budget
Two quick taps. Season narrows the tire pool; budget tier filters the rim pool. Together they trim 200+ packages down to 3.
what kind of set are we hunting?
[Winter + rims] [All-season + rims] [Just rims] [Just tires]
ballpark for the full set delivered? no judgment, this just helps me show the right stuff.
[$800-1200] [$1200-1800] [$1800-2500] [$2500+] [Show all]
05
Three packages
Generic template carousel. Best value / popular pick / premium. Each card is a tappable buy. Stock is checked at quote time, not at carousel build.
ok, here are 3 winter sets that fit your civic and ship from our belleville shelf 👇 [carousel: 3 cards — see Sample Packages section below]
06
Pay link
In-Messenger payments are deprecated in Canada. We send a Stripe link. Customer pays in browser, webhook tells the bot the order is paid.
👍 you picked the DAI Mission + X-Ice Snow set — $1,489 all in. here's your secure pay link, opens in your browser ↓ checkout.stripe.com/c/pay/cs_live_613... i'll be here when you're back.
07
Schedule the drop
Stripe webhook flips the bot to confirmation mode. Three nearest available truck days for their postal code, picked from our route schedule.
🎉 paid. order #613-2026-04832. your set ships from belleville. pick a delivery day:
[Wed Apr 30] [Fri May 2] [Mon May 5]
Fri May 2 ✅ locked in for fri may 2. our truck rolls 9-5 — we'll text you a 2-hour window the morning of.
08
Human handoff
Triggered by keyword (human, agent, preet, himmat), question type (TPMS, install, warranty, financing), or 2 failed parses. Routes to Page Inbox where counter staff replies with full conversation context.
can you do the install too? sure — connecting you to himmat or one of the long-tenure counter staff. usually under 5 min during shop hours (mon-fri 8-5, sat 8-2). they'll see this whole convo, no need to repeat anything. — bot pauses, conversation routes to FB Page Inbox —
Sample Packages · 2021 Honda Civic LX · Winter

three cards. three minutes of decision.

The carousel always shows three: best value, popular pick, premium. Driven by DAI rim master joined to live AS400 tire stock at quote time. Tire+rim composites generated nightly for the top 50 packages.

Best value · $1,249
DAI Pilot wheel
+
Bridgestone Blizzak WS90
FITS · 2021 Honda Civic LX · 5×114.3
17" DAI Pilot Gunmetal + Bridgestone Blizzak WS90
17×7" · 45mm offset · 215/50R17
Reliable Japanese-Canadian winter combo. Most-spec'd budget set in Quinte.
  • 4× DAI Pilot Gunmetal Reflex
  • 4× Blizzak WS90 mounted & balanced
  • OE-style lug nuts + valve stems
  • Free local drop-off, no minimum
$1,249
● in stock · belleville
Buy this set
DAI Mission wheel
+
Michelin X-Ice Snow
FITS · 2021 Honda Civic LX · 5×114.3
17" DAI Mission Gloss Black + Michelin X-Ice Snow
17×7.5" · 42mm offset · 215/50R17
Most-ordered for Civics in our area last 90 days. The set we'd put on our own car.
  • 4× DAI Mission Gloss Black
  • 4× Michelin X-Ice Snow mounted & balanced
  • OE-style lug nuts + valve stems
  • Free local drop-off, no minimum
$1,489
● in stock · belleville
Buy this set
Premium · $1,789
DAI Prime wheel
+
Michelin X-Ice Snow
FITS · 2021 Honda Civic LX · 5×114.3
18" DAI Prime Gloss Black + Michelin X-Ice Snow
18×8" · 45mm offset · 225/45R18
Plus-1 size. Sharper steering response, premium look. Ships from Kingston shelf.
  • 4× DAI Prime Gloss Black
  • 4× Michelin X-Ice Snow mounted & balanced
  • OE-style lug nuts + valve stems
  • Free local drop-off · transit from Kingston +1 day
$1,789
● in stock · kingston
Buy this set

RIM IMAGES · DAI WHEELS CANADA · TIRE IMAGES · BRIDGESTONE + MICHELIN MEDIA · FINAL PACKAGES PULLED FROM DAI MASTER × AS400 STOCK

v2 · The Other Path · Catalog Search

parts, not just packages.

The tire+rim package flow is one of two intent paths from the welcome screen. The other is a free-text search across the entire ~5,000 SKU catalog — by name, manufacturer SKU, or symptom. Same fitment confirmation, same fulfillment picker, same Stripe pay link.

A
Search
Free text. Bot accepts plain English ("squeaky brakes"), OE part numbers, vendor SKUs, or aftermarket cross-references. Backend hits the same scoring search the catalog architecture uses (token + brand + cat + name + desc).
sure. what's the part? i can search by name, SKU, or symptom (e.g. "squeaky brakes").
[Browse by category] [Browse by my vehicle]
oil filter for my civic
B
Results carousel
Top 3 in-stock matches as a generic template carousel. Cards show brand, MPN, fitment confirmation, price, branch with stock. Same card UX as packages.
found 3 in stock that fit a civic 1.5L turbo ↓ [carousel: ACDelco PF64 · Fram XG10358 · K&N HP-1010 — see Sample Parts below] the ACDelco one
C
Confirm fitment
Only fires if the customer hasn't shared a vehicle yet, or if the part has multiple compatible variants. Fast skip if vehicle is already known.
that fits 2016-2022 honda civic 1.5L turbo and the CR-V 1.5L. confirm yours?
[Yes, that's me] [Different car] [Tell me my engine]
Yes, that's me
D
Hand off to fulfillment
From here, the part-search path merges back into the shared flow: postal code → fulfillment picker (next section) → pay link → schedule. Same script, same mechanics.
✅ ACDelco PF64 oil filter — $14.99. how do you want it? → flow continues at "Fulfillment picker" (next section)
Sample Parts · 2018 Honda Civic 1.5T

three oil filters. three fulfillment options on each.

EXAMPLE QUERY · OIL FILTER FOR CIVIC
OE-spec · Best value
ACDelco PF64 oil filter
FITS · Civic 1.5T · CR-V 1.5L · Accord 1.5T
ACDelco PF64 · Engine Oil Filter
OE-spec replacement · 18-month warranty
The same filter the dealer uses, half the price. ACDelco Installer Program eligible.
$14.99
● in stock · belleville
Buy this filter
Fram Ultra XG10358 oil filter
FITS · Civic 1.5T · CR-V 1.5L · Accord 1.5T
FRAM Ultra Synthetic XG10358
Up to 25,000-km service interval
Synthetic media. Most-ordered filter in our area for this engine family last 90 days.
$22.49
● in stock · both
Buy this filter
Premium
K&N HP-1010 oil filter
FITS · Civic 1.5T · CR-V 1.5L · Accord 1.5T
K&N Performance Wrench-Off HP-1010
1" hex nut welded on top · racing-grade
For folks who change their own oil and want the welded nut for tool grip. Lifetime warranty.
$28.99
● in stock · kingston
Buy this filter

IMAGES · CARiD CDN · IDENTICAL CARD SCHEMA TO TIRE+RIM PACKAGES · WORKS FOR ANY OF THE ~5,000 CATALOG SKUs

v2 · Fulfillment Matrix

three lanes. one bot.

The fulfillment picker fires after fitment is confirmed and pricing is locked. The bot already knows the customer's postal code and order total — so it shows only the relevant options and pre-applies the fee logic. No surprises at checkout.

Lane 01 · Always available
Pickup at our shop
FREE
Customer drives to either branch. Same-day if it's at that branch, +1 day if we transfer between locations.
14 Roy Blvd · Belleville
846 Portsmouth Ave · Kingston
Mon-Fri 8-5 · Sat 8-2
Lane 02 · In-zone, smaller orders
Local drop-off
$15
Flat rate. Our truck rolls to your driveway on the next available route day. 2-hour window text the morning of.
Belleville · Mon · Wed · Fri
Kingston · Tue · Thu
Sat expedite +$25
Lane 03 · In-zone, $300+ or tire+rim
Free local drop-off
FREE
Auto-applied to any tire+rim package and any cart total over $300. Same truck route as Lane 02.
Tire+rim packages always
Other carts > $300
Threshold tunable
Lane 04 · Future · v3
Out-of-zone courier
PHASE 2
Canpar / Loomis / Day & Ross for customers outside the local zone. Out of scope for v2 — start with pickup as the only out-of-zone option.
Add when v2 stable
Quote-on-checkout
Tier-priced by weight
Bot logic · which lanes to show
Customer in zone (K8N/K8P/K8R/K7K-P + bordering)
Show all 3 active lanes. Lane 03 (free drop) is highlighted as default if cart qualifies. Lane 02 ($15) defaults if cart doesn't qualify. Lane 01 (pickup) always available as the third option.
Customer out of zone
Show only Lane 01 (pickup at Belleville or Kingston). Bot says "we don't deliver to your area yet — the closer branch is X, want to pick up there?" Lane 04 (courier) added in v3.
Pickup-ready notification
When a pickup order is staged at the counter, the bot fires a Messenger message back to the customer: "✅ ready for pickup at belleville. ask for himmat or any of the counter staff." Same flow if branch transfer is needed: bot pings customer when transfer arrives.
Conversation script (universal)
BOT · how do you want it?
QR · [Pickup belleville · free]
QR · [Pickup kingston · free]
QR · [Drop off · $15]
Architecture

five systems, one conversation.

ManyChat handles the dialog. Our Cloudflare Worker is the brains — it decodes VINs, checks postal codes, queries the package list, and mints Stripe links. DAI master and AS400 stock are pulled nightly. Stripe webhooks unlock the delivery scheduler.

SURFACE
FB Messenger
Bot conversation, quick replies, generic templates, persistent menu
PLATFORM
ManyChat Pro
Visual flow builder, NLP keyword matching, Stripe integration native
BACKEND
CF Worker
VIN decode · zone check · package lookup · pay-link mint
DATA · RIMS
DAI Master
Vendor master export → CSV/XML → nightly to R2/S3
DATA · TIRES
AS400 Stock
Live tire inventory per branch · same nightly export pattern as catalog
DATA · FIT
NHTSA vPIC
Free, no key. Returns make/model/trim from VIN. Already wired in catalog.
PAY
Stripe
Hosted checkout link · CAD · webhook back to bot on success
SCHEDULER
Truck Cal
Postal code → next 3 truck days from closer branch
FALLBACK
Page Inbox
Counter staff sees full convo, replies natively when bot escalates

Nightly pipeline

At 2am: pull DAI master from vendor portal export, pull AS400 tire stock as JSON, run package generator. Top 20 vehicles × 3 packages × 2 seasons = ~120 packages cached. Push to ManyChat custom field pkg_lookup_json.

Live request path

User types VIN → ManyChat sends to Worker → Worker calls vPIC → returns vehicle → user confirms → user picks season + budget → Worker reads cached package list → returns 3 cards → ManyChat renders carousel.

Pay → Drop pipeline

User taps Buy → Worker mints Stripe Checkout Session with metadata {ms_user_id, package_sku, postal} → user pays → Stripe webhook → Worker → ManyChat External Trigger fires confirmation flow → delivery picker.

ManyChat Flow Structure

the flows we build, in order.

Eleven named flows in the ManyChat builder. Triggers shown are the events that send a user into each flow. Custom fields prefixed cf_. External Requests prefixed er_ — these hit our Cloudflare Worker.

Flow ID Flow Name Trigger What it does
f_welcome Welcome / Greeting First message, "hi", "hello", emoji, or m.me/613parts ad click Three quick replies. Routes to f_quote, f_browse, or f_human.
f_quote Tire+Rim Quote Intake QR "Tire+rim package" or keyword match (winter set, summer set, snows) Asks fitment path. Routes to f_vin, f_ymm, or f_specs.
f_search Catalog Search · v2 QR "Find a part" or any free text containing brand/SKU/symptom keywords Free-text search across the ~5,000 SKU catalog. Hits er_search with the query and (optionally) cf_vehicle. Returns top 3 in-stock matches. Routes to f_results.
f_results Results Carousel · v2 After f_search returns ≥1 SKU Generic template carousel of 3 SKUs. Each card: image, brand, MPN, fitment, price, branch with stock. Buy tap routes to f_fulfillment.
f_vin VIN Decode QR "Type VIN" or 17-char alphanumeric input Validates 17 chars, hits er_decode_vin, confirms vehicle, sets cf_vehicle.
f_ymm Year/Make/Model QR "Year/Make/Model" Cascading QRs: year → make → model → trim. Each level hits er_ymm_options. Sets cf_vehicle.
f_postal Postal Code Capture · v2 soft gate After cf_vehicle or cf_part_sku set Free text input. Hits er_zone_check. Sets cf_in_zone=true/false. No longer a hard gate — used to filter the fulfillment picker.
f_fulfillment Fulfillment Picker · v2 After cart locked (any flow) Reads cf_in_zone + cf_cart_total + cf_is_tire_package → shows the right lanes. In-zone & (tire pkg OR >$300): Lanes 01+03. In-zone & <$300: Lanes 01+02. Out-of-zone: Lane 01 only.
f_match Use Case + Budget After f_postal success Two QR rounds: season, then budget tier. Sets cf_season, cf_budget. Triggers er_match.
f_carousel 3-Package Carousel er_match returns 3 SKUs Generic template carousel. Each card: image, title, price, [Buy], [More info], [Compare].
f_pay Pay Link QR "Buy" on any carousel card Hits er_mint_stripe with cf_user, cf_package_sku, cf_postal. Returns URL. Sends as message.
f_paid Payment Confirmed External Trigger from Stripe webhook (via Worker) Sends 🎉 + order #. Fires f_schedule.
f_schedule Delivery Scheduler After f_paid · cf_fulfillment=drop_paid OR drop_free Hits er_truck_days with cf_postal. Returns 3 dates. QRs to confirm. Writes to Google Calendar with cf_order_number.
f_pickup_ready Pickup Ready · v2 After f_paid · cf_fulfillment=pickup_belleville OR pickup_kingston · counter staff marks "staged" Bot fires a follow-up message to the customer: "✅ ready for pickup at [branch]. ask for himmat or any of the counter staff. open mon-fri 8-5, sat 8-2." Uses POST_PURCHASE_UPDATE message tag (allowed outside 24h window).
f_human Human Handoff QR "Talk to human", keywords (preet, himmat, install, warranty, TPMS, financing), 2 failed parses Pauses bot for that user. Notifies Page Inbox. Counter staff sees full convo, replies natively.
Custom Fields · v2
cf_vin · cf_vehicle · cf_year · cf_make · cf_model · cf_trim · cf_postal · cf_in_zone · cf_branch_origin · cf_intent (package | part | browse) · cf_search_query · cf_part_sku · cf_part_brand · cf_season · cf_budget_tier · cf_package_sku · cf_cart_total · cf_is_tire_package · cf_fulfillment (pickup_belleville | pickup_kingston | drop_paid | drop_free) · cf_stripe_session · cf_order_number · cf_delivery_date · cf_pickup_ready_at
Click-to-Messenger Ad

the front door is the ad.

Without ads, the bot has no traffic. The Click-to-Messenger ad type opens the conversation directly with our welcome flow pre-loaded. Targeting a 25 km radius around Belleville and Kingston, vehicle owners 25-65, ad budget $20-30/day during tire season (Sept-Nov, then Apr-May).

613
613parts · Sponsored
Belleville · 14 Roy Blvd
Winter's coming. We deliver the whole tire+rim set free in Belleville and Kingston — no minimum. Message us with your car or VIN and we'll quote in under a minute.
winter tires
at your door.
free local drop-off · belleville + kingston · message us for a 60-sec quote
m.me/613parts
Tap Send Message — chat opens instantly
Send Message

Recommended targeting

Geography
25 km radius around Belleville (K8N) + Kingston (K7L). Excludes Toronto, Ottawa, Montreal.
Demographics
Ages 25-65, all genders, vehicle ownership signals.
Interests
Auto repair, winter driving, specific car brands (Honda, Toyota, Ford, GM owners).
Schedule
Heavy in Sept-Nov (winter rush) and Apr-May (summer changeover). Light in Dec-Mar.
Budget
$20-30/day during peak. ~$600-900/mo. Estimate: 80-150 conversations/mo.
Creative rotation
3 variants: pure value (price-led), brand (warranty + drop-off), urgency (snow date alert).
Implementation Handoff

eight setup steps, two weeks to live.

v1 is built end-to-end inside ManyChat with Cloudflare Worker as the API layer. No frontend code on 613parts.ca needed. After live, we tune the carousel, expand the vehicle list, and decide whether to graduate to a custom Messenger Platform integration.

01

Stand up Cloudflare Worker

Repo at github.com/613parts/messenger-bot. Worker has 6 endpoints: /decode-vin, /zone-check, /match-packages, /mint-stripe, /stripe-webhook, /truck-days.

~3 days · backend dev
02

Wire DAI nightly pull

Get a CSV/XML export from DAI vendor portal — confirm format with rep. Cron job at 2am UTC: download → parse → upload to Cloudflare R2 as dai-rims-latest.json.

~1 day · backend
03

Wire AS400 tire stock pull

Same nightly pattern as the existing catalog architecture. Tire-specific query may be a new view. Output: as400-tires-stock-latest.json with per-branch counts.

~1-2 days · IT/AS400
04

Build the catalog generator · v2

Cron at 3am: read DAI rims + AS400 full catalog stock + fitment table. Output two artifacts: packages-latest.json (3 tire+rim packages × top 20 vehicles × 2 seasons) AND catalog-search-latest.json (FlexSearch index of every in-stock SKU joined to fitment data). Search index drives the f_search flow.

~3 days · backend
05

Configure ManyChat

Subscribe to ManyChat Pro ($15/mo). Connect 613parts FB Page. Build the 12 flows from the table above. Wire External Requests to Worker endpoints. Set persistent menu.

~3 days · ops
06

Stripe + delivery scheduler

Stripe account in CAD with 613parts as merchant. Webhook to Worker. Truck day calendar wired to Google Calendar. Postal-code-to-route logic confirmed with dispatch.

~1-2 days · ops + backend
07

Soft launch · top 5 vehicles

Civic, F-150, RAV4, Silverado, CR-V. Winter only. No ads yet — push organically to FB Page audience and email list. Goal: 20 conversations, 5 paid orders to validate flow.

~1 week · marketing
08

Ad launch + scale

Click-to-Messenger ads at $20/day. Expand vehicle list to top 20. Add summer/all-season packages. Daily digest email to Preet showing funnel + revenue + open conversations.

~1 week · marketing
Decisions Needed Before Build

eleven things to lock down.

Each question has a default answer the team will use if no other input. None are blockers — work can start in parallel — but the answers will shape the bot's voice, scope, and unit economics.

01
DAI master file format and access — share a sample (CSV / XML / vendor portal export) and confirm refresh cadence.
DefaultAssume daily CSV export from DAI vendor portal. Adjust pipeline once we see the actual file.
02
AS400 tire stock query mechanism — same nightly export as catalog, or new query needed? Per-branch stock breakdown available?
DefaultUse the existing catalog architecture nightly export. Add tire fields if missing.
03
v2 · Paid-drop fee — confirm $15 flat for in-zone smaller orders? Or scale with order size, distance, weight?
Default$15 flat. Simple to communicate, simple to calculate. Re-tier later if margins are tight on small/long-distance orders.
03b
v2 · Free-drop threshold — $300 cart total? Or higher (less margin pressure) / lower (more conversions)?
Default$300. Tire+rim packages always free regardless. Tunable per season — could lower to $200 in slow months, raise to $400 in peak.
03c
v2 · Catalog search backend — FlexSearch (client-side, free) vs Meilisearch (hosted, ~$10/mo, better relevance) vs Algolia (premium, $50+/mo)?
DefaultFlexSearch for v2 launch — the catalog architecture already uses it. Graduate to Meilisearch if relevance complaints surface.
04
Local zone postal codes — confirm the eight core (K8N/K8P/K8R + K7K/K7L/K7M/K7N/K7P) and add Trenton (K8V), Picton (K0K), Napanee (K7R), Bath (K0H)?
DefaultEight core codes only. Bordering codes default to "pickup at branch."
05
Install options — drop only / drop + come to shop for mount / pre-mounted on rims / mobile install?
DefaultPre-mounted-on-rims for v1. Mount/balance is included in package price. Customer swaps wheels themselves or books a separate install appointment.
06
TPMS sensors — included / paid add-on / "bring your own" / referral to install shop?
DefaultOptional add-on. Bot asks "do you need TPMS?" with quick reply [Yes +$120/set] [No, I'll reuse mine] [What's that?].
07
Old tire disposal — included / $X per tire / customer keeps?
Default$5/tire fee for disposal pickup. Bot offers as add-on at end. Customer can opt out.
08
Truck delivery schedule — Belleville Mon/Wed/Fri + Kingston Tue/Thu? Or different cadence?
DefaultBelleville Mon/Wed/Fri, Kingston Tue/Thu. Out-of-cycle deliveries on Saturdays for $25 expedite fee.
09
Bot handoff destination — FB Page Inbox (counter staff replies natively) / Slack notification / email?
DefaultFB Page Inbox. Mon-Fri 8-5 + Sat 8-2 staff hours, the bot promises ≤5 min response. Outside hours: bot says "back to you tomorrow morning."
10
Bot voice — sample greeting "👋 hey, you're chatting with the 613parts tire desk..." — keep this voice, dial it up/down?
DefaultKeep as drafted. Matches brand voice rules: lowercase-friendly, short sentences, "we" not "I," Canadian English, concrete details.
11
Branch routing logic — always ship from closer branch? Or split shipment if rims are at one branch and tires at another?
DefaultCloser branch first. If rims are at the other branch, package shifts +1 day and the carousel card shows "ships from Kingston" or vice versa.