mainmo
Product requirements

Arti

Artisan Cellars · central ordering & CRM agent
Product
Arti
the central agent
Owner
Danny
mainmo
Status
Draft v0.2
Date
10 Jul 2026
01

What Arti is

Arti is the central function of the business — the aggregator. Enquiries, orders, invoicing, the customer database and outreach all run through one agent, reachable on the channels Artisan already uses. It takes an order from first message to delivery, keeps a living record of every client, and acts on plain-language instructions from the team — from "check if we have this in stock" to "email everyone who's bought this producer before."

This document specifies the build. It respects how Artisan actually operates today — the sales-representative relationships, the cellar's role in confirming stock, and the company's real terms of sale — rather than replacing them.

02

Goals & non-goals

Goals

  • Take orders end to end — enquiry, availability, invoice, payment, fulfilment
  • Respect sales-rep relationships: route attached clients to their rep
  • Build and remember a CRM profile for every client
  • Run segmented outreach across email and WhatsApp, on instruction
  • Answer questions about the client base — high-rollers, quiet accounts, and more

Non-goals (this version)

  • Replacing sales representatives — Arti supports them, never poaches
  • Deciding pricing or discounts — it quotes the list, staff set exceptions
  • Sending marketing without a human yes
  • Full PDPA / security hardening — flagged for production
03

Who Arti works with

Buys

Direct client

Messages Arti with no rep attached — a house account.

Buys

Rep-attached client

Belongs to a sales rep. Arti routes them back to that rep.

Sells

Sales representative

Can forward an enquiry to Arti to handle on their behalf.

Fulfils

Cellar team

Confirms physical stock, then packs and dispatches.

Directs

Operator / staff

Instructs Arti for outreach and reports in plain language.

Is

Arti

The agent that ties all of it together.

04

Enquiry intake & routing

Arti receives enquiries two ways, and the sales-rep relationship decides what happens next.

INTAKE · VIA REP INTAKE · DIRECT Sales rep forwards an enquiry A person messages Arti directly Attached to a rep? YES Directs them to their sales rep NO Arti handles the order attributed to the rep · or as a house account → order lifecycle

A rep can hand an enquiry to Arti and it runs the order on their behalf. A direct message is checked against the CRM: if the person belongs to a rep, Arti points them back to that rep; if not, Arti serves them as a house account.

05

The order lifecycle

CLIENT ARTI CELLAR · GATE ARTI CELLAR DRIVER Enquiry Check stock · confirm order Cellar confirms stock Invoice · payment Pack Deliver First-time client → profile created · Returning client → remembered no invoice until the cellar confirms & the client says yes

Arti checks the catalogue and confirms the order, but the cellar team confirms the physical stock before anything is invoiced — matching Artisan's rule that wines are offered subject to remaining unsold and to written confirmation. Only once stock is confirmed and the client says yes does the invoice + payment go out; the cellar is then instructed to pack and deliver.

Grounded in Artisan's terms of sale: normal orders are invoiced when the wine is available for delivery (pre-release offers, immediately on confirmation); payment is due in full on receipt unless the client holds an approved credit account; wines remain Artisan's property until paid. Arti applies the delivery charge automatically — express same-day S$35, normal S$25, waived above S$280 nett — and offers PayNow, bank transfer, or card.

06

Knowing the client

Every conversation is keyed to the client's channel identifier (WhatsApp number or email). First-timers are asked for their details once; returning clients are remembered.

FieldWhen askedStoredAsked again on return
NameFirst orderYesNo
Billing addressFirst orderYesNo
PhoneFirst order — confirmed from the WhatsApp number; asked on emailYesNo
EmailFirst orderYesNo
Delivery addressEvery orderLast-used cachedYes — offer usual

Two profile attributes are set by staff, not asked: the client's sales-rep attachment (drives routing) and any approved credit account (drives payment terms). Arti builds purchase and relationship history automatically from every order.

07

CRM & outreach

Beyond orders, Arti runs the client relationship. Staff instruct it in plain language and it segments the base, drafts the right message for each segment, and — once approved — sends across email and WhatsApp.

Example instruction. "We just got the new [producer] vintage in — send a personal email to everyone who's bought this producer before, and a normal announcement to the rest." → Arti splits the base into past buyers of that producer (personalised, referencing their history) and everyone else active (generic announcement), drafts both, and queues them for your yes.
CampaignSegmentChannelPersonalised
New arrival — past buyersBought this producer beforeEmail / WhatsAppYes
New arrival — announcementAll other active clientsEmail / WhatsAppNo
Reserve-list alertHolds a reservation for the wineEmail / WhatsAppYes
Win-backNo order in N monthsEmail / WhatsAppYes

Personalisation draws on purchase and relationship history. Every blast is drafted, shown for review, and sent only on approval. Clients attached to a rep can be flagged so their rep is looped in rather than contacted around.

08

Reports & data sheets

Arti is also the place to ask about the business. Staff request a view in plain language and Arti returns a data sheet or a summary, exportable to a spreadsheet.

High-rollers

Top clients by spend, frequency, and recency — "who are our high-roller clients?"

Producer affinity

Who buys which producers — the seed list for any new-arrival campaign.

Quiet accounts

Clients who've gone silent — the win-back list.

Reserve-list holders

Who is holding what, and what's owed against it.

09

Data model

Customer
ididentifier phone|email · keynamebilling / deliveryphone · emailsales_rep_id nullablecredit_account booltags high-roller…orders history
SalesRep  ·  InventoryItem
rep: id · name · contactinv: sku · producer · name · vintage · sizeprice_sgd · gstqty_available Cin7
Order  ·  Campaign
order: customer · rep_id · lines · invoice_nopayment_statusdelivery_type · chargecampaign: prompt · segment · channel · personalised · status
10

Functional requirements

Intake & routing
FR-1.1
Accept enquiries forwarded by a sales rep and sent directly by a person.
FR-1.2
On a direct enquiry, look up the identifier. If the client is attached to a rep, direct them to that rep and do not take the order.
FR-1.3
On a forwarded enquiry, handle the order and attribute it to the forwarding rep.
FR-1.4
Unattached clients are served directly as house accounts.
Order lifecycle
FR-2.1
Check availability from inventory; disambiguate vintage; confirm items & quantities with the client.
FR-2.2
Route the order to the cellar team for physical stock confirmation before invoicing. No invoice is raised until the cellar confirms and the client says yes.
FR-2.3
Generate the invoice (SGD, 9% GST, delivery charge applied) and initiate payment — PayNow, bank transfer, or card. Send in chat and by email.
FR-2.4
Apply payment timing per terms: on receipt for normal orders, immediately for pre-release; credit-account clients per their terms.
FR-2.5
On payment, instruct the cellar to pack and dispatch; track through to delivery.
CRM, outreach & reports
FR-3.1
Create a profile for a first-time client; remember and reuse a returning client's details.
FR-3.2
On a plain-language instruction, segment the client base (e.g. past buyers of a producer vs everyone else) and draft the right message per segment.
FR-3.3
Personalise from purchase & relationship history; send across email and WhatsApp after approval.
FR-3.4
Answer questions about the base and return a data sheet — high-rollers, producer affinity, quiet accounts, reserve holders — exportable to a spreadsheet.
11

Guardrails & approvals

Nothing consequential happens without the right yes

The cellar gates stock. Arti never promises or invoices a bottle the cellar hasn't confirmed is physically there.

Payment before release. Wine is packed and dispatched only once paid, unless the client holds an approved credit account.

Outreach waits for approval. Every blast is drafted and shown; it sends only when a person approves it.

Reps aren't bypassed. Attached clients are routed to their rep, never quietly served around them.

12

Edge cases

Stock differs from the system

Cellar count wins. If short, Arti offers the available quantity or a waitlist.

Vintage collision

Same cuvée, two vintages → present both with price, ask which.

Attached client insists

Stay polite but firm — route to the rep; offer to pass a message.

Payment not received

Hold the order; the wine stays Artisan's until paid in full.

Segment overlap

A client who fits two campaigns gets the personalised one, not both.

Unknown wine

Not in the catalogue → say so, don't guess a price; offer the closest match.

13

Success criteria & production notes

Working when: a direct client with no rep can order end to end — enquiry, cellar confirmation, invoice + payment, dispatch — and leave a profile behind; an attached client is routed to their rep; a rep can forward an enquiry and Arti runs it; and staff can say "email past buyers of this producer" or "give me our high-rollers" and get the right result.

For production: live inventory + quantities from Cin7 Core (DEAR); the real WhatsApp Business API for two-way messaging and blasts; a payment provider for PayNow / card; and PDPA consent + secure storage, since Arti holds clients' names, numbers, emails, addresses and full purchase history.