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.
Where — selza.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 page | Set in |
|---|---|
| Name, link, QR | Products → Storefront → Shop name & link |
| Layout | Products → Storefront → Storefront template |
| Logo, colour, tagline, About | Products → Storefront → Brand |
| Announcement bar, testimonials | Products → Storefront → Brand |
| Which sections appear at all | Products → Storefront → Brand |
| Address, hours, map | Products → Storefront → Visit us |
| What's for sale | Products → Products |
| Google headline | Products → SEO |
| Open or closed | Settings → 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 with — Storefront template, Brand, Shop status
Product page
The problem — The catalog card sells the glance. This is where your buyer decides.
Where — selza.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 page | Set in |
|---|---|
| Photos, gallery order | Products → (product) → Photos |
| Video | Products → (product) → Product video |
| Size / colour choices | Products → (product) → Options & variants |
| "Only 3 left" | Products → (product) → Stock |
| Min / max per order | Products → (product) → Order limits |
| "Buy more, save more" | Products → (product) → Bulk discounts |
| Add to cart vs Book | Products → (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 with — Photos, 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.
Where — selza.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 page | Set in |
|---|---|
| Everything on the list | Products → Products |
| The tagline above it | Products → 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 with — Add 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.
Where — selza.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 page | Set in |
|---|---|
| Which bag an item lands in | Products → (product) → How do customers get this? |
| Whether checkout is possible | Settings → 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 with — How 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.
Where — selza.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.
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.
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".
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.
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.
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 page | Set in |
|---|---|
| Which payment tiles appear | Settings → Payments |
| Pickup vs delivery | Settings → Delivery |
| Which times can be picked | Settings → Availability |
| "Add $12 more to unlock free delivery" | Settings → Delivery |
| The tip selector | Settings → General → Let customers add a tip |
| Coupon codes | Marketing → Offers |
| The accent on every button | Products → 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
92328372is useless to a courier and unreachable on WhatsApp; what you get instead is+6592328372. - Email typos caught, never blocked.
gmail.conpasses 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 with — Payments, Delivery, Tips, Discount codes
Pay link
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
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 page | Set in |
|---|---|
| Item, price, quantity rules | Sales → Order links → (link) |
| Whether pickup / delivery is offered | Settings → Delivery |
| Which payment tiles appear | Settings → Payments |
| The rating and order count | Earned — 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 with — Take 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.
Where — selza.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 page | Set in |
|---|---|
| The timeline's shape | Products → (product) → How do customers get this? |
| Whether the chat card exists | Assistant → Turn the assistant on |
| Notes and photos in Updates | Sales → Orders → (order) |
| Free-cancellation window | Settings → Availability → Cancellation policy |
| The referral card | Marketing → 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 with — Web 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.
Where — selza.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.
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.
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.
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.
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.
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.
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 page | Set in |
|---|---|
| Whether the page exists at all | Assistant → Turn the assistant on |
| Bot name, first hello, tone | Assistant → Persona |
| The starting chips | Derived from what you actually sell |
| "Track my order" chip | Assistant → Let customers check an order |
| WhatsApp button | Inbox → 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 with — Your 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.
Where — selza.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 page | Set in |
|---|---|
| Which services are listed | Products → (product) → How do customers get this? |
| The times offered | Settings → Availability |
| Days off / blackouts | Settings → Availability → Days off |
| Deposit vs pay in full | Products → (product) |
| Online / in person / at their place | Products → (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 with — Availability, 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
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 page | Set in |
|---|---|
| The questions | Sales → Order links → (form) |
| "Lead time: 7 days" | Sales → Order links → (form) |
| Quote-first or priced | Sales → Order links → (form) |
| "30% deposit upfront" | Sales → Order links → (form) |
| Which payment tiles appear | Settings → 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 with — Quote 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.
Where — selza.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 page | Set in |
|---|---|
| Courier or self-delivery timeline | Settings → Delivery |
| Whether the page exists at all | The order actually having a delivery |
| Driver name and plate | The 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 with — Delivery, Order page
Custom domain
The problem — selza.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 page | Set in |
|---|---|
| The domain itself | Products → Storefront → Custom domain |
| Everything on the page | Exactly 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 with — Custom domain setup, Is Google actually finding me?
The public shop directory
The problem — Nobody can search for a shop they've never heard of.
Where — selza.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 page | Set in |
|---|---|
| Whether you're listed | Settings → General → Let AI assistants list my shop |
| Your category label | Settings → General |
| Your star rating | Earned — 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 with — Let 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 page | Set in |
|---|---|
| The master switch | Settings → General → Let AI assistants list my shop |
| Your name, tagline, About | Products → Storefront → Brand |
| Prices and stock in the feed | Products → Products |
| Your Google headline | Products → 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 with — Search 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.
Where — selza.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 with — Order 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
/discoverunless you opted in. - It's SG and F&B only by design.
/shopshas neither limit.
Works with — The public shop directory, which is live