What your buyers see

In this chapter16 articles

Every page in this chapter is one your customers land on. You don't build them — they're generated from what you set up elsewhere. This chapter is about knowing what your buyer actually experiences, and which console setting drives which part of it.

All of them wear your brand, not ours. Your accent colour, logo and fonts carry across the storefront, cart, checkout, pay links, order pages and booking pages. Selza's gold appears on Selza's own marketing site and nowhere in your customer's journey.

Two things are worth knowing before you read on. Nothing here needs your buyer to make an account — every private page is reached by a long random link that is itself the proof of access. And only one thing on any of these pages is gated by your plan: the custom domain. Everything else looks the same on Free as on Pro.


Your storefront

The problem — Your buyer needs somewhere real to land. Not a DM thread, not a link tree — a page that shows what you sell, takes the money, and looks like you. One link you can print, paste in a bio, or say out loud.

Whereselza.app/s/<your-shop>, or your own domain on Pro. Built at Products → Storefront.

What your buyer sees

A sticky header carrying your logo (or a letter monogram on your accent colour), a light/dark toggle, a save this shop heart, and a cart icon that stays greyed out and unclickable until there's something in it. Below that, a search box once your catalog is big enough, then a dashed strip of any automatic offers you're running.

Then your template's own body: announcement bar, hero, your products, About / Meet the maker, testimonials, FAQ, contact — then "Other ways to order" and your Visit-us block. The footer signs off with "Thanks for shopping small." A chat orb floats bottom-right, with a handset beside it if voice is on.

What drives it

Part of the pageSet in
Name, link, QRProducts → Storefront → Shop name & link
LayoutProducts → Storefront → Storefront template
Logo, colour, tagline, AboutProducts → Storefront → Brand
Announcement bar, testimonialsProducts → Storefront → Brand
Which sections appear at allProducts → Storefront → Brand
Address, hours, mapProducts → Storefront → Visit us
What's for saleProducts → Products
Google headlineProducts → SEO
Open or closedSettings → General → Shop status

Details worth knowing

  • Search appears once you pass 12 products — or immediately, if someone arrives with a search already in the link. Below that a search box is furniture: the whole catalog is already on screen.
  • It's a real AI search, reading your names and descriptions rather than matching keywords. If it fails, hits its cap, or matches nothing, it shows the whole catalog with a line saying so — "Search is unavailable right now — showing everything." Never an error, never an empty page.
  • Three templates hide the header — Link list, Sidebar and Bento. On those there's no theme toggle and no save-shop heart, because there's no header to put them in.
  • "Other ways to order" lists your reusable pay links (up to 8) and published order forms (up to 6). One-off links made for a single DM never appear — they're not meant to be public.
  • Renaming your shop doesn't break old links. The old address redirects to the new one, so printed QR codes keep working. The retired /b/<shop> link-in-bio address redirects here too.
  • Your catalog shows up to 200 products, in the order you set on the Products page.
  • The "save this shop" heart asks anonymous visitors to sign in rather than silently doing nothing. It's the only place on your storefront that mentions an account.

Works withStorefront template, Brand, Shop status


Product page

The problem — The catalog card sells the glance. This is where your buyer decides.

Whereselza.app/s/<your-shop>/p/<product>. Every product gets one automatically.

What your buyer sees

A breadcrumb back to your shop, then the gallery — tap to zoom into a full-screen lightbox, arrow keys to move, Esc to leave. A thumbnail strip and a counter appear only when there's more than one photo; with none, a plain placeholder rather than a broken frame.

Then the price, a stock badge, options, a quantity stepper, and the button. On a phone, once the cart is empty, a sticky bar pins the price and Add to cart to the bottom of the screen so it's never scrolled away. Below: your rich description, a video if you added one, per-type details, up to four more items from your shop, and your shop's reviews.

What drives it

Part of the pageSet in
Photos, gallery orderProducts → (product) → Photos
VideoProducts → (product) → Product video
Size / colour choicesProducts → (product) → Options & variants
"Only 3 left"Products → (product) → Stock
Min / max per orderProducts → (product) → Order limits
"Buy more, save more"Products → (product) → Bulk discounts
Add to cart vs BookProducts → (product) → How do customers get this?

Details worth knowing

  • The button changes with the product type. A service with bookable times sends your buyer to your booking page instead of the cart — they never add a haircut to a basket.
  • Stock badges have a floor of 5. Above that, nothing shows: a "37 left" badge signals abundance, not urgency. At 5 or below it reads "Only 3 left"; at zero, "Sold out".
  • Only physical things get a quantity stepper. A service or a download is one-per-line — a stepper there would imply something you can't sell.
  • "More from this shop" is just your other products, up to four, in your own order. It isn't a recommendation engine and doesn't pretend to be.
  • Your rich description renders as formatted text, with any raw HTML and images stripped. A pasted block from another site can't break your page's layout or smuggle in a tracker.
  • Reviews on a product page are your SHOP's reviews, not that product's. Six at most.
  • "Ask about this product" appears when your assistant is on, and opens the chat with the question already half-written: "Hi! I have a question about {product}."

Works withPhotos, Options & variants, Stock, lead time & order limits


Your menu

The problem — Some buyers don't want to browse. They want the list, and they want to send it to the group chat before deciding.

Whereselza.app/s/<your-shop>/menu. Linked from the "View the full menu" card on your storefront; appears on its own once you have products.

What your buyer sees — A plain, dense list: every product name (linked to its page) and price, with the description underneath. Your tagline sits under the "Menu" heading. It's built to be read top to bottom, not browsed — no cards, no grid. A footer counts the items and says "always up to date". There's a Download as PDF link beside it.

What drives it

Part of the pageSet in
Everything on the listProducts → Products
The tagline above itProducts → Storefront → Brand

Details worth knowing

  • It's generated live, every time. There is no menu to upload and no menu to forget to update — a price edit shows here within minutes, and the PDF is rebuilt from the same list.
  • The PDF downloads as a file named after your shop, which is what makes it shareable into a WhatsApp group. That's the whole point of it existing next to a perfectly good web page.
  • A paused shop still has a menu. You've stopped taking orders, not stopped existing.
  • An empty catalog says so"Nothing on the menu just yet — check back soon."

Works withAdd a product


Cart

The problem — Someone wants a birthday cake and two workshop tickets. Every cart in the world would have made them pick one.

Whereselza.app/s/<your-shop>/cart. Nothing to set up.

What your buyer sees — Their items, grouped into bags: Order · Bookings · Tickets · Downloads, in that order, each with its own icon, its own subtotal, and its own Check out button. A line at the top explains why: "These are paid separately — each in its own quick checkout. Pay them in any order; the rest wait here."

What drives it

Part of the pageSet in
Which bag an item lands inProducts → (product) → How do customers get this?
Whether checkout is possibleSettings → Payments
"Closed" instead of "Check out"Settings → General → Shop status

Details worth knowing

  • A cross-mode add is never refused. There is no "finish your cart first" message any more, because there is no rule left to break — the item simply joins its own bag.
  • A single-bag cart skips this page entirely. The cart bar sends it straight to checkout. Most buyers never see this screen, and that's the design: it only exists to resolve an ambiguity.
  • Paying one bag clears only that bag. The buyer lands back here with the rest waiting, and the order page they arrive at nudges them about it — once per visit, never twice.
  • The cart survives a refresh, a closed tab, and a return visit — it lives in their browser, per shop. Your buyer's cake is still there tomorrow.
  • Quantities are capped at 99 per line, under your own per-product limit if you set a lower one.

Works withHow do customers get this?


Checkout

The problem — Every field here is a leak you'd otherwise chase down by DM. A wrong phone number is a failed delivery; a wrong email is a receipt that vanishes and a customer who thinks you ignored them.

Whereselza.app/s/<your-shop>/checkout. Reached from the cart bar or a bag's Check out button.

The three steps of your checkout, and what guards each one

Fulfilment is asked FIRST, because it decides whether the phone and address are even required — and what the total is.

  1. They arrive with one bag

    A cart holding one kind of thing comes straight here — the cart page is skipped. A cart with a cake AND a workshop ticket stops at the cart page first, so they choose which one to pay for now. Neither is ever refused.

  2. Step 1 · How you'll get it

    Self-pickup or delivery, as two tappable cards. Skipped entirely for a pickup-only shop with nothing to schedule — and then the steps renumber, so your buyer never sees a gap.

    • You run pre-order slots

      They pick from your slots — filtered to the ones that match pickup-vs-delivery, that sell everything in the basket, and that have room for the whole quantity. Held for 30 minutes once checkout starts.

    • Slots are on but you made none

      An amber "No slots available right now — please check back later." There is genuinely nothing to pick, and saying so beats an empty dropdown.

    • They chose delivery

      Address autocomplete scoped to your delivery country, unit/floor notes, and a live quote. Until the quote lands, the Pay button reads "Enter delivery address to see total".

  3. Step 2 · Your details

    Email leads, because it's the order's identity and where the receipt goes. Then name, then phone. A returning buyer sees "Welcome back — saved details filled in".

    • gmail.con

      Passes the browser's own email check, then bounces silently forever. Checkout offers a one-tap "Did you mean gmail.com?" — and only ever suggests. They stay free to keep what they typed.

    • A bare 92328372

      Useless to a courier, unreachable on WhatsApp. The country picker makes the code explicit, so what reaches you is +6592328372.

  4. Step 3 · Payment

    Only what you actually have live. One method shows as a sentence, not a choice. None at all says so plainly — and there is no way through.

    • Courier + a fee-free method

      The fee-free tiles grey out and checkout quietly moves them to card. If card is the one thing you DON'T take, they're told to choose self-pickup — a dead end explained, not hidden.

    • PayNow or bank transfer

      A one-time "I'm not a robot" check, where that gate is switched on. A browser that has cleared it never sees it again.

  5. Pay

    The button carries the real number — "Pay $42.00" — and the line under it says exactly what happens next: a QR to scan, your bank details, or a hop to Stripe.

    • The basket moved after the quote

      A quote fetched against a different subtotal is treated as NO quote — never a stale fee. Submit waits for the fresh one.

What your buyer sees — Their items with live quantity steppers, a coupon field, the totals, then three numbered steps: how they'll get it, their details, and payment. A "Add a note, gift, or tip" drawer sits between steps 2 and 3, folded shut. On a phone the Pay button is pinned to the bottom of the screen, showing the real number.

What drives it

Part of the pageSet in
Which payment tiles appearSettings → Payments
Pickup vs deliverySettings → Delivery
Which times can be pickedSettings → Availability
"Add $12 more to unlock free delivery"Settings → Delivery
The tip selectorSettings → General → Let customers add a tip
Coupon codesMarketing → Offers
The accent on every buttonProducts → Storefront → Brand

Details worth knowing

  • Fulfilment is asked first, on purpose. It decides whether phone and address are required and what the total is — asking it last would mean re-validating everything above it.
  • Phone numbers that actually work. A proper country picker with the six SEA markets pinned to the top under "Your region", pre-selected from your visitor's own location and falling back to your shop's market. A bare 92328372 is useless to a courier and unreachable on WhatsApp; what you get instead is +6592328372.
  • Email typos caught, never blocked. gmail.con passes every standard email check and then bounces silently forever. Checkout compares the domain against the ~22 addresses SEA buyers actually use and offers a one-tap "Did you mean gmail.com?". It only ever suggests.
  • Address autocomplete is scoped to your own delivery country — couriers don't cross borders, so offering a Malaysian address to a Singapore shop's buyer is offering a dead end.
  • A quote whose basket no longer matches is treated as NO quote. Not a stale fee, not an estimate. The Pay button holds until the fresh one lands, because a free-delivery promise that quietly stops being true is worse than a moment's wait.
  • Returning buyers get their details pre-filled, with a small "✓ Welcome back". Anything typed this session survives a refresh or a back-tap; it's cleared the moment the order completes.
  • Their last payment choice is remembered — but only adopted if you actually offer it.

Works withPayments, Delivery, Tips, Discount codes


The problem — Someone asks "how much for the 8-inch?" in a DM. You answer, they say yes, and now you need money without sending them on a tour of your storefront.

Where

selza.app/p/<code>, built at SalesOrder linksNew link.

What your buyer sees — Your shop's branded header, then a tinted card with the eyebrow "You're paying for" and the item, description and price. If it's a multi-item link they get an itemised list and a total. Under it, a quiet trust row — "★ 4.8 (23 reviews)" and "41 orders fulfilled" — which appears only once you have something real to put in it. Then a discount field, their details, payment tiles, and Pay $48.00.

What drives it

Part of the pageSet in
Item, price, quantity rulesSales → Order links → (link)
Whether pickup / delivery is offeredSettings → Delivery
Which payment tiles appearSettings → Payments
The rating and order countEarned — nothing to set

Details worth knowing

  • Product-based links re-price live from your catalog. Change the price, and the link follows — every copy of it, everywhere you've pasted it. A fixed-amount link never changes.
  • Fulfilment needs three things to be true: physical goods, priced in SGD, and delivery configured. Miss any one and the link is pay-only. A courier can't ship a download.
  • Codes are 8 characters and skip 0/O and 1/I/L — they get read aloud and printed on flyers, so the glyphs people confuse are simply not in the alphabet.
  • A used single-use link says "Already paid", not 404 — "If you think that's a mistake, contact the seller." An expired one says so and tells them to ask you for a fresh one. Sold out and unavailable each get their own screen. Your buyer is never left guessing which it was.
  • A started-but-unpaid single-use link holds for 31 minutes, then reopens. An abandoned checkout doesn't burn your link.
  • Buyers see an automatic promotion before paying"Weekend treat applied automatically — you save $4.00." It's suppressed when the buyer can change the quantity, because the figure would go stale as they tap.
  • A discount code baked into the link that has since ended quietly drops, and the buyer reads "That offer has ended — your order is at the regular price." — rather than hitting a hard error over a code they never typed.
  • Pay links are noindex. Private URLs stay out of search.

Works withTake a payment for a known price, Automatic offers


Order page

The problem — "Where's my order?" is the most expensive message you get, because it arrives at 9pm and it arrives five times.

Whereselza.app/o/<token>. Sent automatically by email or message when the order lands. You can copy it from the order in your console.

What your buyer sees — A status card with their order number, what it's for, and a timeline of where it's up to. Then, as they apply: a delivery card with a Track link, a receipt link, a balance to pay, PayNow or bank details, a cancel option, an Updates feed of your own notes and photos ("most recent at the bottom"), a chat card, and a referral link.

What drives it

Part of the pageSet in
The timeline's shapeProducts → (product) → How do customers get this?
Whether the chat card existsAssistant → Turn the assistant on
Notes and photos in UpdatesSales → Orders → (order)
Free-cancellation windowSettings → Availability → Cancellation policy
The referral cardMarketing → Reward programs

Details worth knowing

  • The timeline is not one fixed list. A storefront order drops Quote sent (it was priced up front). A download or a ticket drops In production and Ready — stages that would never happen. A booking keeps six but renames them Being arranged and Confirmed. A cancelled or refunded order shows no timeline at all, just the plain fact and what happens next.
  • One chat button: "Chat about this order." It opens your assistant already knowing which order they mean, with an opening line that fits the status — a cancelled order never offers "when will it be ready?". Under it, if you're connected, small WhatsApp and Telegram buttons under the heading "or get updates pushed to". Those aren't a second router; they do the one thing a browser tab genuinely can't, which is buzz in their pocket later.
  • Cancel only appears on a paid, slot-booked order inside your cancellation window. Card orders refund automatically and say so; PayNow orders warn the buyer that you'll refund by hand. Outside those conditions there's no button — and if they try from a stale tab, they're told to message you rather than fobbed off.
  • Sub-pages: Pay (PayNow QR or bank details, with proof upload) and Receipt (printable, with a PDF once paid). The receipt is a proper Tax Invoice with GST broken out only if you're GST-registered; otherwise it just says "Receipt".
  • The delivery card refreshes itself every 20 seconds while a delivery is live — and stops the moment the tab is backgrounded or the delivery lands. Nothing else on the page polls.
  • The link is the proof of access. No account, no sign-in. It's a 32-character random token, which is why it can be that simple.

Works withWeb AI chat, The order lifecycle, Deposit then balance


Web AI chat

The problem — Your buyer has a question at 2am. You're asleep, and they're not going to email.

Whereselza.app/c/<your-shop> — your shop handle works, and so does the code. Get it from Inbox → Channels, or Home.

Where your chat link actually sends someone

One link, three destinations. Which one a buyer gets is decided by their device and what they chose last time — never by you picking a channel for them.

  1. They open your chat link

    selza.app/c/<your-shop>. The shop handle and the code both work, so you can share whichever you can remember.

  2. Is a WhatsApp number available?

    Your own connected number is used first. If you haven't connected one, Selza's shared number stands in — so this step usually passes even for a brand-new shop.

    • No number at all

      Everyone chats on the page. Nothing is lost — browser chat works on its own.

  3. Have they already chosen?

    The choice is remembered per shop, in their browser. Someone who came back to the page once is never bounced to WhatsApp again.

  4. Phone or computer?

    A computer never gets bounced — a wa.me link on a desktop is a QR-code detour. Phones go on.

    • Computer

      Browser chat, every time.

  5. Phone → WhatsApp opens

    With the message pre-typed, carrying a reference so the reply lands on the right shop — and on the right ORDER when they came from an order page.

    • They don't have WhatsApp installed

      They land back on the browser chat instead of a dead app-store page — and their order context survives the bounce.

  6. Either way, it's your Inbox

    Browser chats arrive as a Website conversation. You aren't running two systems — the channel is just where the buyer happened to be.

What your buyer sees — A full-screen chat with your logo, your shop name, and a presence line that tells the truth: "{your bot} · AI assistant" normally, "A teammate is replying" when you've taken over, "Connecting you to the team…" when it's escalating. Four starting chips, a Shop button back to your storefront, and a composer with a microphone. Your assistant's replies can carry tappable product cards that add straight to the cart.

What drives it

Part of the pageSet in
Whether the page exists at allAssistant → Turn the assistant on
Bot name, first hello, toneAssistant → Persona
The starting chipsDerived from what you actually sell
"Track my order" chipAssistant → Let customers check an order
WhatsApp buttonInbox → Channels

Details worth knowing

  • The handle and the code are interchangeable. Share whichever you can remember; a renamed shop's old handle redirects here too, carrying the order reference with it.
  • WhatsApp-first on phones. A mobile visitor is sent straight to WhatsApp with the message pre-typed. Computers are never bounced — a wa.me link on a laptop is a QR-code detour.
  • Your own number is preferred over the shared one, so buyers don't land in an unbranded thread.
  • They're only ever bounced once. The choice is remembered per shop in their browser, so someone who came back to the page stays on the page.
  • No WhatsApp installed? They land back on the chat, not a dead app-store page — and the order they came in about survives the round trip.
  • The chips fit what you do — "Book a time" only if you sell a service, "Track my order" only if you let customers look orders up. Coming from an order page, they're that order's questions.
  • The mic is voice-to-text, not a photo upload. Up to 30 seconds. Buyers can't send pictures here — that's a WhatsApp thing.
  • Everything lands in your Inbox as a Website conversation, and the assistant is un-metered on every plan. A customer conversation must never dead-end on an exhausted allowance.

Works withYour 24/7 AI assistant link, Persona


Booking page

The problem — Agreeing a time takes six messages, and you're still the one holding the calendar in your head.

Whereselza.app/book/<your-shop>, or a direct link straight to one service. Driven by Settings → Availability.

What your buyer sees — First a list: "Book an appointment", then each service with its duration, location and price, and a Book →. Then the service's own page — a summary card with the price, duration, capacity and location, a scrollable rail of day chips, and time chips for the day they picked. Under it, their details and, when you take more than one, payment tiles.

What drives it

Part of the pageSet in
Which services are listedProducts → (product) → How do customers get this?
The times offeredSettings → Availability
Days off / blackoutsSettings → Availability → Days off
Deposit vs pay in fullProducts → (product)
Online / in person / at their placeProducts → (product)

Details worth knowing

  • Times show in YOUR shop's timezone, labelled as such — not the buyer's. A booking is a promise about your clock, so that's the clock it's quoted on.
  • Picking a day clears the time, on purpose: a time carried across days is how people book Tuesday meaning Wednesday.
  • A service at the buyer's place asks where"Where should we come?" with a unit-and-floor field, because "Blk 123" and "#12-34" are different problems and one field gets one of them wrong.
  • Double-booking is genuinely impossible, not merely unlikely. The database itself refuses two claims on the same seat and time; if two people tap the same slot in the same second, one gets "Sorry, that time was just booked. Please pick another."
  • The hold depends on how they're paying — card 30 minutes, HitPay an hour, PayNow and bank transfer a full 24 hours. The fee-free rails need longer because a human has to look at a screenshot.
  • PayNow comes first, never card. A bank-transfer-only shop's booking has to be payable.

Works withAvailability, Schedule, Cancellation policy


Order form

The problem — Custom work you can't price until you know what they want. "Send me the details" gets you three of the eight things you need.

Where

selza.app/f/<slug>, built at SalesOrder links.

What your buyer sees — Your questions, in your order, above the three fields always collected: email and name (both required) and phone (optional). The header carries your lead time and, on a quote-first form, the deposit line. At the bottom either Submit order or Pay $120.00.

What drives it

Part of the pageSet in
The questionsSales → Order links → (form)
"Lead time: 7 days"Sales → Order links → (form)
Quote-first or pricedSales → Order links → (form)
"30% deposit upfront"Sales → Order links → (form)
Which payment tiles appearSettings → Payments

Details worth knowing

  • Seven kinds of question: short text, long text, single choice, multiple choice, date, number, and photo upload. Up to 40 per form. Questions are optional unless you say otherwise.
  • Quote-first vs priced changes one thing for the buyer: whether there's a payment section. On quote-first they submit and you price it; on priced they pay on the way in, and a deposit form shows Deposit today / Balance later / Total rather than one number.
  • Photos are capped at 5 MB by default and are images only. They upload as they're picked, with a thumbnail and a Remove, so nobody submits and then discovers the file was too big.
  • Their answers autosave in their browser for 30 days. A half-finished quote request survives a closed tab — and a server error never loses what they typed.
  • On submit they land on their order page, not a thank-you screen. There's nothing more to say that the order page doesn't say better.
  • Order forms are blocked from search engines.

Works withQuote it first, Order links


Delivery tracking

The problem — The order's out with a driver and your buyer is refreshing your DMs instead of watching the thing that actually knows.

Whereselza.app/track/<token>. Sent automatically; you can copy it from the order's Delivery panel.

What your buyer sees — A headline that says the real state — "Finding a driver", "Driver is heading to the shop", "On the way to you" — then a timeline, the driver's name, plate and a tappable phone number once there is one, a link out to the courier's own live map, and an All updates feed underneath.

What drives it

Part of the pageSet in
Courier or self-delivery timelineSettings → Delivery
Whether the page exists at allThe order actually having a delivery
Driver name and plateThe courier — nothing to set

Details worth knowing

  • Courier deliveries get four steps: Finding driver → Driver heading to pickup → On the way → Delivered. Self-delivery gets three: Order confirmed → On the way → Delivered. The two driver-hunting stages are dropped because they are never going to happen, and a permanently grey step reads as broken.
  • The ETA is a padded range, and says it's an estimate"Roughly about 15–25 min drive away" — shown only once a driver is actually moving. Couriers don't give a real number, so inventing a precise one would be a lie with a decimal point.
  • It refreshes every 20 seconds by itself, and stops the moment the tab is backgrounded or the delivery lands.
  • Buyer wording differs from yours. They see "Picked up — heading your way" where you see "Picked up from you"; a rejected booking reads "Finding another driver", not a failure.
  • Before dispatch it explains the wait"{your shop} is preparing your order. We'll send a courier as soon as it's ready."
  • A pickup order has no tracking link at all, and the page 404s. There's nothing to track.

Works withDelivery, Order page


Custom domain

The problemselza.app/s/your-shop tells everyone whose shop it really is. shop.yourbrand.com doesn't.

Where — Products → Storefront → Custom domain. Point a CNAME at us and we handle the certificate.

Pro onlyThis is the one plan gate on any buyer surface.

What your buyer sees — Your storefront and product pages at your address, with no selza.app anywhere in the bar. Same templates, same brand, same checkout.

What drives it

Part of the pageSet in
The domain itselfProducts → Storefront → Custom domain
Everything on the pageExactly as it is on /s/<your-shop>

Details worth knowing

  • Your storefront, product pages, catalog feed, sitemap and robots file all serve from your domain, and it becomes the address search engines are told to index.
  • A domain can only belong to one shop — a taken one is refused with a plain message rather than half-working.
  • The status check is real. It calls your domain and asks it which shop it thinks it is, then tells you "Your domain is serving the shop" or exactly which part of DNS or HTTPS isn't ready.
  • Dropping to Free doesn't take your domain down. It keeps serving; you just can't point it somewhere new. Clearing it is always allowed.

Works withCustom domain setup, Is Google actually finding me?


The public shop directory

The problem — Nobody can search for a shop they've never heard of.

Whereselza.app/shops. Nothing to set up.

What your buyer sees — A page headed "Live shops on Selza." — a handful of curated shops at the top, honestly labelled Live shop or Demo shop, then the directory itself: one card per shop with its name, a category label, and a star rating if it has one.

What drives it

Part of the pageSet in
Whether you're listedSettings → General → Let AI assistants list my shop
Your category labelSettings → General
Your star ratingEarned — nothing to set

Details worth knowing

  • Three things get you listed: at least one published, un-archived product; not a demo shop; and the AI-discovery switch left on. There's nothing to apply for.
  • It's alphabetical. No ranking, no promotion, no pay-to-rise. Sorting by name is what makes paging through it stable.
  • A paused shop still lists. Closed today isn't gone.
  • Category pages exist — home bakeries, cafés, desserts and so on — and are kept out of Google until they have at least three shops. A one-shop category page is a thin page, and thin pages drag down everything around them. They still work if you link to one.

Works withLet AI assistants list my shop


Being found by AI assistants

The problem — People ask ChatGPT for a recommendation now, and you'd like to be one.

Where — Automatic. Governed by Settings → General → Let AI assistants list my shop, which is on by default.

What your buyer sees — Nothing, directly. This is what the machines see: a plain-text summary of your shop with up to 50 products, a live JSON catalog with current prices and stock, and structured data on every page describing your shop, your products, your reviews and your prices.

What drives it

Part of the pageSet in
The master switchSettings → General → Let AI assistants list my shop
Your name, tagline, AboutProducts → Storefront → Brand
Prices and stock in the feedProducts → Products
Your Google headlineProducts → SEO

Details worth knowing

  • Stock is published as "in stock" or "out of stock", never a number. Nobody outside your console learns you have four left.
  • AI crawlers are explicitly invited — OpenAI's, Anthropic's, Perplexity's, Google's and Bing's, each named, each given exactly the same access as everyone else and no more. Your buyers' order pages stay blocked from all of them.
  • Turning the switch off does four things: your storefront goes noindex, you drop out of /shops, your plain-text shop summary 404s, and on a custom domain your whole site tells crawlers to go away. Your shop link keeps working either way — this is about being found, not being open.

Works withSearch title & description, Rich results & AI answers


Customer accounts

The problem — A repeat buyer shouldn't retype their address every time, and should be able to find last month's order without digging through email.

Whereselza.app/account. Entirely optional for your buyers.

What your buyer sees — Four sections: Overview, Orders (every order they've placed across every Selza shop, with tracking, receipts, and an Order-again link), Favourites (the shops they hearted), and Delivery address — one saved address, pre-filled at your checkout.

What drives it — Nothing. There's no setting; it's a convenience layer your buyers can use or ignore.

Details worth knowing

  • An account is never required to buy. Nothing in your storefront, cart or checkout asks for one.
  • A buyer account is not a merchant account. Different thing, different door.
  • Orders are matched by verified email — the address on their sign-in, never one they typed at checkout. That's the point: otherwise anyone could claim a stranger's order history by adding their email.
  • So a buyer who checks out with a different email won't see that order in their account — but their order link still works perfectly. The link never needed the account.
  • It spans shops, not just yours. Their Orders list is every Selza shop they've bought from.

Works withOrder page, Customers


The /discover marketplace

The problem — Being found by someone who wasn't looking for you specifically.

When it is: buyers browse Singapore home-based F&B shops by category and distance. You'd opt in from your console and you'd need a pickup address, since it sorts by how close you are. Orders it sends you are the only ones Selza charges a fee on — a flat fee by order size rather than a percentage, because a percentage is punitive on a big order and doesn't cover costs on a small one. Your own links stay free, forever, including every repeat order from a customer it introduced.

Details worth knowing

  • It's a different switch from AI discovery, and they default opposite ways. You're already in the public directory unless you opted out; you'd be out of /discover unless you opted in.
  • It's SG and F&B only by design. /shops has neither limit.

Works withThe public shop directory, which is live