DISPO: every module a world-class shop site needs, and how close each one is

Every module of the DISPO shop-site system, judged from one visitor: a tourist or local in Bangkok deciding on a phone where to buy, then walking in. What we have, what we lack, and how close each piece is to world class by Shaan's own verdicts. Tap any row for its pages, shots, specs, code and his words.

39modules we have
21missing
3theories
15judged by Shaan
0world class so far
169of Shaan's points open
spec25 of 39
deep dive14 of 39
landed10 of 39
best version0 of 39
variations0 of 39

The five steps every module climbs; each row's five bars show where it is. "Best version" only counts once Shaan calls it world class; "variations" means 10 or more judged presets after that.

What to build next, in order

Ranked by value to a shop: more of the right people walk in, with less fear, at no running cost. Tap one to open it.

  1. M42 · Law, prescription and safety card missing

    Can a tourist buy at all, and how do I get a prescription, are the top two questions. One sourced, dated law file answers them on every site at once and is watched weekly, because the draft Act will change the rules again.

  2. M43 · First visit, step by step missing

    Fear of the unknown stops the walk-in: ID, the consult, the counter, paying, where you may smoke. Five photos and five lines remove it.

  3. M18 · Reviews and trust deepen

    Is this shop licensed, and is a practitioner really there: fears 4 and 9. Print the DTAM sticker colour, expiry and code, and the practitioner's name and licence number. That is the level beyond Shaan asked for: proof, not badges.

  4. M41 · Maps sync missing

    7,297 shops closed in 2025, so 'is it still open?' is a real fear. A weekly sync keeps hours, rating and photos true with no staff time, and feeds trust, visit and the footer.

  5. M46 · My list and counter card missing

    Bridges phone to counter across the language gap: save picks, then show staff one big Thai-English card. Turns browsing into a sale.

  6. M44 · Provenance and lab facts missing

    Fear 11: where is it from? Flower must come from a GACP-certified grower and imports are banned; naming the grower and certificate proves both.

  7. M39 · AI answer kit missing

    Visitors now ask ChatGPT and Gemini 'best weed shop near Nana'. llms.txt, facts.json and FAQ data make AI assistants name the shop correctly.

  8. M47 · Practicalities missing

    Card or cash, the consult fee, which languages, Wi-Fi, ATM nearby: the small doubts that decide between two shops. All from Maps attributes and the profile.

  9. M17 · Branches deepen

    Visit is already good. The level beyond is the last 200 metres: a photo walk from the BTS exit, the door itself, a Grab link and a Thai card for the driver.

  10. M40 · Near-here pages missing

    A few honest pages for the hotels, stations and landmarks around the shop win the 'near me' searches with no ad spend.

  11. M49 · China-ready kit missing

    Chinese visitors are the largest group in Bangkok and Google Maps is blocked for them. Amap links, WeChat and Alipay notes and Chinese copy open that market.

  12. M57 · Self-check missing

    At many sites nobody can look: a weekly self-check (dead links, stale facts, law-file change, licence sticker expiry, speed) keeps them all true with no one watching.

Look and feel

Theme, brand and art; every other module draws from these.

M1
M1Theme
The shop's colours, type (Latin, Thai, Chinese), shape and motion, drawn from its brand.
not judged yet7 open points
M2
M2Brand kit
The logo as clean SVG, its animations, icons and share images.
not judged yet3 open points
M3Assets
The art every page draws from: photo pools, icons, illustrations, 3D, video loops.
"Oh you did the little weird symbol at the back in the bud tender, that is really cool 3D animation" · Shaan, 24 Oct, 23:00
Shaan: good20 open points
M12
M12Page transitions and loader
Page transitions and the first-load moment.
not judged yet

On every page

Gate, header, footer, agent: the frame around every page.

M6
M6Compliance
The 20+ age gate, privacy, legal pages and ad-law copy rules.
"some of them are a bit schloppy though, but it's alright" · Shaan, 24 Oct, 22:05
Shaan: a baseUI 87/100
M7
M7PWA and performance
Feels like an app: install guide, offline page, bottom dock, speed on Thai 4G.
"Oh yeah, the header and bottom bar is much better now" · Shaan, 24 Oct, 23:00
Shaan: good4 open points
M9
M9Header and nav
Logo, page links, open-now pill, language, the one main action, search.
"Oh yeah, the header and bottom bar is much better now" · Shaan, 24 Oct, 23:00
Shaan: goodUI 79/1002 open points
M10
M10Footer
The last word on every page: contact, hours, socials, ask, the brand signing off.
"It's alright, might need some work though" · Shaan, 24 Oct, 22:05
Shaan: a baseUI 69/10019 open points
M11
M11Agent
The budtender: a face, a chat and answers in the visitor's language.
"This is a good base ... I wouldn't call this world class ... it still feels very vibe coded" · Shaan, 24 Oct, 23:40
Shaan: a baseUI 95/10026 open points
M13
M13Announcement/deals ribbon
One line across the top for news: tonight's event, a holiday closing, a new strain.
not judged yetlaw risk
M37
M37404
A lost link still lands somewhere useful.
not judged yet
M52
M52In the shop now / Browsing from home
One switch on Home: browsing from home leads with the menu and the way here; in the shop now leads with your list and today's games. It flips by itself at the door, only if the visitor allows location.
A first-timer at 11pm needs 'open now, how to buy'; a regular at noon needs today's menu.
missingrules: yes

Get found

Before the visit: Google, Maps, AI assistants, other languages.

M5
M5SEO and meta
Titles, descriptions, LocalBusiness and Product data, sitemap.
not judged yet
M39
M39AI answer kit
Makes ChatGPT, Gemini and Perplexity name the shop correctly: llms.txt, a facts.json, FAQ and LocalBusiness data.
Travellers now ask an AI assistant 'best weed shop near Nana' before Google. If the facts are not machine-readable, the assistant guesses or names a rival.
missingrules: yes
M40
M40Near-here pages
Three to five honest pages: 'near Asok BTS', 'near Terminal 21', 'from the Grande Centre Point', each with the real walk.
'Near me' and 'near my hotel' searches decide most first visits; a page per real landmark wins them with no ad spend.
missingrules: yes
M41
M41Maps sync
A scheduled script refreshes rating, review count, hours, photos and attributes from Google Maps and lists what changed for the owner.
7,297 of 18,433 licensed shops closed by the end of 2025 (ANN, 6 Jan 2026): 'is it still open?' is a real fear, and the site and Maps disagreeing loses the visitor. The sync also feeds trust, visit, footer and gallery.
missingrules: yes, within free limits6 open points
M49
M49China-ready kit
Amap and Baidu links with the right coordinates (GCJ-02), WeChat and Alipay notes, Chinese copy, a Xiaohongshu-ready share image.
Chinese visitors are the largest group in Bangkok and Google Maps does not work for them.
missingrules: yes

Is this the place?

The first screen and the proof: legal, real, safe, good.

M14
M14Hero
The first screen: in three seconds, is this the place for me?
"Looking at this first screen, um, that one's alright, buttons are too big, nowhere near world class" · Shaan, 24 Oct, 23:00
Shaan: not world class10 open points
M18
M18Reviews and trust
Proof the shop is legal, real, good and fair.
"some of them are world class, some of them not really, like there's a level beyond this, which goes broader and deeper" · Shaan, 24 Oct, 23:45
Shaan: good
M22
M22About teaser/story
The shop's story in one band on the home page.
not judged yet
M23
M23Gallery/vibe
The shop and its street in pictures.
not judged yet
M29
M29About page
Who runs the shop and why it exists.
"Like the about page is horrid" · Shaan, 24 Oct · earlier version
not judged yetUI 68/1005 open points
M44
M44Provenance and lab facts
For each product: the GACP-certified grower with certificate number and expiry, batch, harvest date, Thai-grown, and a lab result where one exists (voluntary, labelled so).
Where is the flower from, is it imported, is it tested: fear 11 in the tourist scan. Flower must come from a GACP-certified site and imports are banned (Tilleke; Theo-Courant), so a shop that shows its grower proves both.
missingrules: yes

Choose what to buy

What they have, what it does, what it costs.

M15
M15Shop by moment and aroma
Pick by moment and aroma (daytime, evening, anytime; citrus, earthy, sweet). No effect words.
"shot by effects is nice but we can't have the same SVGs there" · Shaan, 24 Oct
Shaan: a base4 open points
M16
M16Products teaser
A taste of the menu on the home page.
"Menu, yeah, mildly better The shell is good, I wouldn't say like What anywhere near best in the world Low key, our originals might have even been better" · Shaan, 24 Oct, 23:00
Shaan: a baselaw risk7 open points
M25
M25Menu/shop page
The full menu: filter, search, sort, ask.
"Menu, yeah, mildly better The shell is good, I wouldn't say like What anywhere near best in the world Low key, our originals might have even been better" · Shaan, 24 Oct, 23:00
Shaan: a baseUI 85/100law risk
M26
M26Product page
One product: what it is, what it does, ask about it, find it in store.
not judged yet
M27
M27Strain library and strain pages
Every strain explained, shared across all shops.
not judged yet
M35
M35Deals page
Deals, where the law allows them.
not judged yetlaw risk
M45
M45Fair price and your money
Shows a price range per gram for the area and today's price in the visitor's currency.
Tourists fear being overcharged; a shop that shows the going rate and the conversion earns the walk-in.
missingrules: partlylaw risk
M46
M46My list and counter card
Save picks on the phone, then show staff one big Thai and English card: names, grams, questions.
Bridges browsing and buying across the language gap; the visitor walks in knowing what to ask for. The composer already has a 'pick' page.
missingrules: yes

Ask and learn

Every question answered before they walk in.

M20
M20FAQ
The questions every visitor asks, answered in the budtender's voice.
"also the frequently asked questions I was thinking like this is cool but like how would we make this globally world's best" · Shaan, 24 Oct
Shaan: a base3 open points
M21
M21Blog teaser
The newest guides and posts on the home page.
not judged yet
M24
M24LINE add-friend / newsletter
Add the shop on LINE or follow it, the channel Bangkok shops actually answer.
not judged yetlaw risk
M30
M30Contact page
Every way to reach the shop, with quick answers first.
"the contacts cool but it would be nice if we actually had like a bit more visual stuff" · Shaan, 24 Oct
Shaan: a base4 open points
M31
M31Blog
Guides and posts that bring search visitors and answer real questions.
"the blog components that we made it's all right it's good because it's distilled from our other stuff" · Shaan, 24 Oct · earlier version
not judged yet9 open points
M32
M32Learn/guides
Plain guides: first time, dosing, strains, Thai rules.
"the learn, learn's alright, but I feel like if we had more images, it'd be way cooler" · Shaan, 24 Oct
Shaan: a base3 open points
M33
M33Visitors/tourists page
Everything a tourist needs: rules, prescription, passport, where you may smoke.
not judged yetlaw risk4 open points
M36
M36Legal/privacy/credits
Privacy, terms and credits for every photo and font.
not judged yet
M42
M42Law, prescription and safety card
One dated, sourced card: tourists need a Thai prescription (PT33) for flower, foreign ones are not recognised, 30-day supply, passport, no smoking in the shop or in public, never take it home or on a flight, dose and aftercare.
Can a tourist buy at all, and how do I get a PT33, are the top two questions in about 20 sources read (TAT 26 Jun 2025; Tilleke 3 Sep 2025). A wrong answer is the biggest risk to the visitor and to the shop's licence, and the draft Cannabis Control Act (cabinet, 22 Sep 2026) will change it again.
missingrules: yes
M43
M43First visit, step by step
Five photos and five lines: passport at the door, the consult with the on-site practitioner (PT33), choosing up to a 30-day supply at the counter, paying, and where you may and may not smoke after.
Is a doctor really on site, what does the consult cost, will I be turned away: fears 2, 9 and 14 of 15 in the tourist scan. No Bangkok shop shows the steps; Boerejongens publishes house rules.
missingrules: yes

Get there

Open now, how far, which door.

M17
M17Branches
Where it is, open now, how to get there, which door.
"Visit page is better Wow, these, I tell you what, yeah, these API agents are really good at UI" · Shaan, 24 Oct, 21:50
Shaan: goodUI 86/1009 open points
M28
M28Branch pages
One page per branch with its own map, hours and door.
not judged yet
M47
M47Practicalities
One strip of small facts: card or cash, the consult fee and how long it takes, languages spoken, Wi-Fi, ATM and 7-Eleven nearby.
These small doubts decide between two shops on the same street.
missingrules: yes
M48
M48Around us
A small map of what is near: food, coffee, the night market, the hotel strip.
Visitors plan an evening, not a purchase; a shop that helps plan it gets chosen and remembered.
missingrules: yes
M50
M50Save-it kit
Save the shop for later: contact card, calendar entry, offline trip card, Wallet pass.
Most visitors find the shop hours before they go; what they save, they visit.
missingrules: partly
M51
M51Calendar and special hours
Thai holidays, special hours, events and closures, as a page, as structured data and as .ics.
Turning up to a closed shutter on a Buddhist holiday loses the visitor for good.
missingrules: yes

In the shop and after

The counter, the visit, coming back, telling friends.

M19Visit flow and games
Small games that bring people in and back: wheel, jar, crank, stamps.
"the spin the wheel's alright, but some of the other ones are slop though" · Shaan, 24 Oct · earlier version
not judged yetlaw risk11 open points
M34
M34Recognition
Recognition only: the passport stamps and a welcome back. No rewards, prizes or perks.
not judged yet
M53
M53In-store screen
A /screen page for the TV behind the counter: today's menu, strain cards, the QR to the site.
Turns the site into the shop's menu board with no extra hardware cost; the composer already lists a 'screen' page.
missingrules: yes
M54
M54Print kit
Files to print: QR posters, counter stand, stickers, the menu PDF, the taxi card.
Bridges the street and the site; the window QR is how a walker-by becomes a visitor.
missingrules: yes
M55
M55Share card
A good-looking card per page and a share button, so a friend can send the shop in one tap.
Travellers decide in groups; the shop gets chosen in the group chat.
missingrules: yes
M59
M59Social wall
The shop's latest Instagram or TikTok posts on the site.
Shows the shop is alive this week.
missingrules: partlylaw risk

Owner and upkeep

Keeps every site true with no staff time.

M4Content and data
The shop profile and industry packet every site is composed from; translations and copy banks.
not judged yet5 open points
M8
M8Analytics
Cookie-free visit counts and a monthly note to the owner.
not judged yet
M38
M38Export to the client's GitHub + Cloudflare
Ships the site to the shop's own GitHub and Cloudflare account.
not judged yet8 open points
M56
M56Owner studio
The owner claims the site and edits facts, photos and menu through a simple form that commits to their own repo.
The owner knows the truth (lab results, events, prices); a git-based editor lets them fix it without us.
missingrules: only via git
M57
M57Self-check
A weekly script per site: dead links, stale facts, law-file change, speed budget, licence expiry date.
At hundreds of sites nobody can look; the site must tell us when it is wrong.
missingrules: yes
M58
M58Before and after pitch
Shows the owner their current site beside ours, with the numbers that differ.
The fastest sale is the shop seeing itself better (IDEAS-OPUS idea 1).
missingrules: yes

Theories

From map/THEORIES.md: Shaan's or anyone's.

T1
T1Tonight's pick
One strain the shop recommends tonight, picked by a daily script from what is in stock, shown on the first screen and in the footer.
Gives a first-timer one easy answer and gives regulars a reason to look again.
theory
T2
T2Costly-signal proof
Shows what a fly-by-night shop could not fake: years at the address, licence history, the same staff in photos across years.
Visitors trust what is expensive to fake more than any badge.
theory
T3
T3LINE sticker set
A free sticker set of the shop's budtender face, offered when someone adds the shop on LINE.
Puts the shop's face in Thai group chats every day.
theory

Other

M60
M60App tour
a how-to-use video per shop, phone 1080x1920 and wide 1920x1080, filmed from the composed site and cut in the shop's logo, colours and type; 1 recorder; 2 determinism; 3 template; 4 renderer; 5 one command. Spec `modules/M60-app-tour.md`, code `app-tour/`
not judged yet

The missing modules (21)

Reasoned from the visitor's whole trip (find, trust, choose, ask, get there, walk in, come back) and from four scans: 15 shop sites (64 rows), Bangkok tourist questions and the 2025-2026 law (34 rows), static-site techniques (36 rows) and the trust teardown, plus Shaan's 257 points. Each fits the rules (static, built by script, no running cost) unless its Rules line says otherwise.

M42Law, prescription and safety card · next #1

JobOne dated, sourced card: tourists need a Thai prescription (PT33) for flower, foreign ones are not recognised, 30-day supply, passport, no smoking in the shop or in public, never take it home or on a flight, dose and aftercare.

WhyCan a tourist buy at all, and how do I get a PT33, are the top two questions in about 20 sources read (TAT 26 Jun 2025; Tilleke 3 Sep 2025). A wrong answer is the biggest risk to the visitor and to the shop's licence, and the draft Cannabis Control Act (cabinet, 22 Sep 2026) will change it again.

DataOne shared law file for all shops: each rule with its official source, the date checked and a hash; a weekly script watches TAT, the Royal Gazette and the draft Act and flags any change. Conflicting sources are shown as conflicts, never guessed.

Rulesyes. One file serves every site; the composer already reserves learn.law. Wording checked by Thai counsel before it ships

M43First visit, step by step · next #2

JobFive photos and five lines: passport at the door, the consult with the on-site practitioner (PT33), choosing up to a 30-day supply at the counter, paying, and where you may and may not smoke after.

WhyIs a doctor really on site, what does the consult cost, will I be turned away: fears 2, 9 and 14 of 15 in the tourist scan. No Bangkok shop shows the steps; Boerejongens publishes house rules.

DataThe shop's own photos (or Maps photos), the law file for the consult step, the profile for payment and lounge.

Rulesyes. The composer already reserves learn.steps

M41Maps sync · next #4

JobA scheduled script refreshes rating, review count, hours, photos and attributes from Google Maps and lists what changed for the owner.

Why7,297 of 18,433 licensed shops closed by the end of 2025 (ANN, 6 Jan 2026): 'is it still open?' is a real fear, and the site and Maps disagreeing loses the visitor. The sync also feeds trust, visit, footer and gallery.

DataGoogle Places API (1,000 calls a month free, then $25 per 1,000), run weekly per shop; numbers stay private, out of git.

Rulesyes, within free limits. One weekly call per shop stays inside the free tier for hundreds of shops

M46My list and counter card · next #5

JobSave picks on the phone, then show staff one big Thai and English card: names, grams, questions.

WhyBridges browsing and buying across the language gap; the visitor walks in knowing what to ask for. The composer already has a 'pick' page.

DataThe menu and strain library; the list lives in the phone's local storage, never on a server.

Rulesyes. Client-side only

M44Provenance and lab facts · next #6

JobFor each product: the GACP-certified grower with certificate number and expiry, batch, harvest date, Thai-grown, and a lab result where one exists (voluntary, labelled so).

WhyWhere is the flower from, is it imported, is it tested: fear 11 in the tourist scan. Flower must come from a GACP-certified site and imports are banned (Tilleke; Theo-Courant), so a shop that shows its grower proves both.

DataOwner fills at claim (M56) or in the menu export; lab PDFs linked, not hosted.

Rulesyes. Hidden per field when empty; no claims without a document

M39AI answer kit · next #7

JobMakes ChatGPT, Gemini and Perplexity name the shop correctly: llms.txt, a facts.json, FAQ and LocalBusiness data.

WhyTravellers now ask an AI assistant 'best weed shop near Nana' before Google. If the facts are not machine-readable, the assistant guesses or names a rival.

DataShop profile, branch hours, the shared law file, the FAQ; all already in the composer.

Rulesyes. Static files written at build

M47Practicalities · next #8

JobOne strip of small facts: card or cash, the consult fee and how long it takes, languages spoken, Wi-Fi, ATM and 7-Eleven nearby.

WhyThese small doubts decide between two shops on the same street.

DataGoogle Maps attributes (via M41), the shop profile, OpenStreetMap for ATMs.

Rulesyes

M40Near-here pages · next #10

JobThree to five honest pages: 'near Asok BTS', 'near Terminal 21', 'from the Grande Centre Point', each with the real walk.

Why'Near me' and 'near my hotel' searches decide most first visits; a page per real landmark wins them with no ad spend.

DataThe Bangkok city pack (landmarks, stations, hotels) and a walking graph from OpenStreetMap; walk times by script.

Rulesyes. Generated per shop at build; only true landmarks within walking distance

M49China-ready kit · next #11

JobAmap and Baidu links with the right coordinates (GCJ-02), WeChat and Alipay notes, Chinese copy, a Xiaohongshu-ready share image.

WhyChinese visitors are the largest group in Bangkok and Google Maps does not work for them.

DataBranch coordinates converted at build, translations, payment flags from the profile.

Rulesyes

M57Self-check · next #12

JobA weekly script per site: dead links, stale facts, law-file change, speed budget, licence expiry date.

WhyAt hundreds of sites nobody can look; the site must tell us when it is wrong.

DataThe built site, the law file hashes, the profile dates.

Rulesyes. Runs on the free scheduled build

M45Fair price and your money

JobShows a price range per gram for the area and today's price in the visitor's currency.

WhyTourists fear being overcharged; a shop that shows the going rate and the conversion earns the walk-in.

DataTHB rates daily from an open exchange API (CC0), the shop's menu prices, an area range from the city pack.

Rulespartly. Static and free, but price display must pass the ad-law list first

M48Around us

JobA small map of what is near: food, coffee, the night market, the hotel strip.

WhyVisitors plan an evening, not a purchase; a shop that helps plan it gets chosen and remembered.

DataOpenStreetMap points of interest, refreshed monthly by script.

Rulesyes

M50Save-it kit

JobSave the shop for later: contact card, calendar entry, offline trip card, Wallet pass.

WhyMost visitors find the shop hours before they go; what they save, they visit.

DataProfile and hours; vCard and .ics are files at build.

Rulespartly. vCard, .ics and the offline card are static; a Wallet pass needs one shared signing certificate

M51Calendar and special hours

JobThai holidays, special hours, events and closures, as a page, as structured data and as .ics.

WhyTurning up to a closed shutter on a Buddhist holiday loses the visitor for good.

DataA shared Thai holiday file plus the owner's events; Event and specialOpeningHours data at build.

Rulesyes

M52In the shop now / Browsing from home

JobOne switch on Home: browsing from home leads with the menu and the way here; in the shop now leads with your list and today's games. It flips by itself at the door, only if the visitor allows location.

WhyA first-timer at 11pm needs 'open now, how to buy'; a regular at noon needs today's menu.

DataBrowser only: time and local storage; location only after a tap (a 120 m geofence round the door), never stored or sent.

Rulesyes. Client-side, no tracking; language comes only from the switch or ?lang=

M53In-store screen

JobA /screen page for the TV behind the counter: today's menu, strain cards, the QR to the site.

WhyTurns the site into the shop's menu board with no extra hardware cost; the composer already lists a 'screen' page.

DataThe menu sync and the strain library.

Rulesyes

M54Print kit

JobFiles to print: QR posters, counter stand, stickers, the menu PDF, the taxi card.

WhyBridges the street and the site; the window QR is how a walker-by becomes a visitor.

DataBrand kit and menu; PDFs generated at build.

Rulesyes

M55Share card

JobA good-looking card per page and a share button, so a friend can send the shop in one tap.

WhyTravellers decide in groups; the shop gets chosen in the group chat.

DataBrand kit, rating and hours; images generated at build.

Rulesyes

M56Owner studio

JobThe owner claims the site and edits facts, photos and menu through a simple form that commits to their own repo.

WhyThe owner knows the truth (lab results, events, prices); a git-based editor lets them fix it without us.

DataThe owner's GitHub repo (M38) and a git-based CMS.

Rulesonly via git. No server of ours; edits are commits on the owner's repo

M58Before and after pitch

JobShows the owner their current site beside ours, with the numbers that differ.

WhyThe fastest sale is the shop seeing itself better (IDEAS-OPUS idea 1).

DataThe import of their current site and a built preview.

Rulesyes

M59Social wall

JobThe shop's latest Instagram or TikTok posts on the site.

WhyShows the shop is alive this week.

DataOfficial embeds refreshed by schedule.

Rulespartly. Embeds load third-party scripts and Instagram needs an app token; prefer the photos from M41

The level beyond, for the modules we have (34)

Broader (more of the visitor's job) and deeper (real data and proof behind every claim), not prettier.

M18Reviews and trust

Broader: answer every fear with proof, not badges. Licensed: the DTAM sticker colour, expiry and 8-digit code printed so the buyer can match it at the door (Thairath, 27 May 2026). A named practitioner on site with their licence number. Thai-grown from a named GACP grower (M44). Restraint shown: no ads, no online orders, no smoking on site. Alive now: open and licensed until 2027, photos and reviews this month (7,297 shops closed in 2025). Deeper: ratings from Google plus other platforms, review themes counted by script, and the official reporting route shown.

M17Branches

The last 200 metres: a photo walk from the BTS or MRT exit (Mapillary, CC BY-SA), the real door, a Grab deep link, and a Thai card to show the driver.

M1Theme

Theme from the shop's real photos and sign, not only its logo; four families (clean, street, night, luxe) already pick comps per family.

M3Assets

Real photos of the shop's own door, counter and street, refreshed from Maps; licensed pools only as a fallback.

M4Content and data

The profile refreshes itself (Maps sync M41) and the owner corrects it in their own repo (M56); data switches comps, not hand-written rules.

M5SEO and meta

Structured data per branch with opening hours and special hours, hreflang across five languages, and the AI answer kit (M39).

M6Compliance

The gate is also the branch picker (Sweet Flower) and carries one dated law line from M42, watched weekly.

M7PWA and performance

Offline trip card (address, map, phrases) that works in a dead zone, and the in-store screen (M53).

M8Analytics

The monthly note says what changed in the shop's search and Maps numbers, written by script.

M9Header and nav

Search over menu, guides and answers built at deploy (Pagefind), and the language picked from the browser.

M10Footer

Live facts in the footer (open now, closes in, last menu update, this week's rating) from the scheduled syncs, not static text.

M11Agent

Answers grounded only in the shop's own facts and the shared law file, with the source shown; hands off to LINE or WhatsApp with the question prefilled. Owned by BUDTENDER.

M12Page transitions and loader

View transitions between pages with the shop's logo as the thread; nothing that slows the first paint.

M13Announcement/deals ribbon

Fed only by the calendar (M51) and the menu sync, so it is never stale and needs no one to post.

M14Hero

A decision screen, not a poster: open now and closes at, minutes from here, legal for you (one line from M42), what's good today, the real door. It changes with time of day and first visit (M52).

M15Shop by moment and aroma

A three-tap finder (feeling, strength, form) that ends at the counter card (M46) with real menu items, not a category page.

M16Products teaser

Today's real menu from a scheduled sync, with the date it was last updated (the Allbud stale badge) and prices in the visitor's currency where the law allows.

M19Visit flow and games

Woven into the visit, within ad law: scan the counter QR to check in, a stamp per visit, Tonight's pick. The reward is the moment, never a discount advert.

M20FAQ

Questions ranked by what visitors actually ask (Maps Q&A, reviews, chat logs counted by script), each answer dated and sourced, published as FAQ data for Google and AI assistants.

M23Gallery/vibe

Photos refreshed from Maps and the owner's uploads by the sync, dated, so the gallery shows the shop as it is this month.

M24LINE add-friend / newsletter

One tap opens LINE or WhatsApp with the question already written in the visitor's language (LINE oaMessage links); LINE is on 65 of 118 Bangkok shops.

M25Menu/shop page

The menu as the shop's truth: synced on a schedule, last-updated date shown, batch facts (M44), add to my list (M46), terpene and effect filters.

M26Product page

Lab and batch facts, smell, taste and effect words (Dampkring), and 'show this at the counter'.

M27Strain library and strain pages

One shared strain library for every shop, filtered by terpene, effect and grower (MedMen Thailand), linked to who has it in stock today.

M28Branch pages

Each branch page is a near-here page (M40) in itself: its station, its landmarks, its own photos and rating.

M29About page

Real faces, a dated timeline (opened, licence, awards) and the owner's own letter; every line a fact the owner confirmed.

M30Contact page

Prefilled chat in the visitor's language, save the contact (vCard), and the reply time the shop really keeps.

M31Blog

Posts written by script from data that changes (law updates from M42, new strains, area guides from M40), shared across shops so one update reaches all.

M32Learn/guides

The learn page carries the law card (M42) and the first-visit steps (M43); the composer already reserves those two slots.

M33Visitors/tourists page

The prescription guide done right (Siam Green: in-shop practitioner, the form, 30-day supply, foreign prescriptions refused), in the visitor's language, dated.

M35Deals page

Only what the lawyer's list allows; fed by the calendar, gone when it ends.

M36Legal/privacy/credits

Generated from the shared law file and the asset credits at build, so it is never out of date.

M37404

The 404 offers the nearest real page, directions and the budtender, not a dead end.

M38Export to the client's GitHub + Cloudflare

The shop owns the repo; scheduled rebuilds run on their free Cloudflare account through a deploy hook, so we hold no running cost.

Pages, slots and comps

Straight from composer/packet.json: every page the composer builds, its slots in order, the comps that can fill each one (dashed: planned, not built), each family's default pick and the data the slot needs. Core pages are on every site; the shop's own data switches the rest on. Tap a comp to open its module.

Home core

index.html
gateoverlay shell
Family picks · clean: gate.door, street: gate.ticket, night: gate.sign, luxe: gate.chat
Needs · mark, open, area/walk, languages
firstfull shell
hero.neonhero.characterhero.bigtypehero.3dsign
Needs · mark, name+aka, open, walk line, branch count, stage image (proof or backdrop), face
trust_peeksplit shell
Family picks · clean: trust.receipt, street: trust.passport, night: trust.board, luxe: trust.plaque
menu_peekrail shell
menu tier is menu or boards
Needs · items with images, no prices, tier
ask_peeksplit shell
Needs · face, 3 questions picked from the 101-question packet by shop facts
visit_peekcard shell
Needs · branches, walk steps, route map, hotels, Thai address, door photo
story_peekband shell
story or lounge exists
Needs · sourced story beats, lounge flag, street picks
blog_peekband shell
posts >= 1
blog.peek
Family picks · clean: guide, street: zine, night: line, luxe: guide

Menu core

menu.html
menuapp shell
Needs · items, categories, feel words, strain type

Visit core

visit.html
visitapp shell
Needs · all of visit_peek, exits, lines, landmarks, QR

About core

about.html
about_introapp shell
storylist shell
story beats >= 2
loungeband shell
lounge
visit_peekcard shell
Needs · branches, walk steps, route map, hotels, Thai address, door photo
ask_peeksplit shell
Needs · face, 3 questions picked from the 101-question packet by shop facts

Ask core

ask.html
agentapp shell
Family picks · clean: agent.budtender, street: agent.budtender, night: agent.budtender, luxe: agent.budtender
Needs · every shop fact, packet intents EN/TH/ZH

First visit core

learn.html
law slot not defined yet
steps slot not defined yet
ask_peeksplit shell
Needs · face, 3 questions picked from the 101-question packet by shop facts

Privacy and credits core

legal.html
legal slot not defined yet

branch when the data has it

visit/<slug>.html · branches >= 2
visit_one slot not defined yet
ask_peeksplit shell
Needs · face, 3 questions picked from the 101-question packet by shop facts

lounge when the data has it

· lounge
no slots yet

Guides when the data has it

blog.html · posts >= 1
post_indexapp shell
blog.index.guideblog.index.lineblog.index.zineblog.index.passport

post when the data has it

blog-<slug>.html · posts >= 1
postapp shell
blog.post.guideblog.post.lineblog.post.zineblog.post.passport

pick when the data has it

· owner opts in and the lawyer clears it
no slots yet

screen when the data has it

screen.html · claimed
no slots yet

Theories (3)

Tonight's pick · IDEAS-OPUS (Opus), idea 4

One strain the shop recommends tonight, picked by a daily script from what is in stock, shown on the first screen and in the footer. Gives a first-timer one easy answer and gives regulars a reason to look again.

Costly-signal proof · IDEAS-OPUS (Opus), idea 2

Shows what a fly-by-night shop could not fake: years at the address, licence history, the same staff in photos across years. Visitors trust what is expensive to fake more than any badge.

LINE sticker set · IDEAS-OPUS (Opus), idea 7

A free sticker set of the shop's budtender face, offered when someone adds the shop on LINE. Puts the shop's face in Thai group chats every day.

Add one: a block in map/THEORIES.md ("## Name", then "- job:", "- why:", "- data:", "- by:"), or say it to the MODULE-MAP seat. The page rebuilds itself after each landing.

The atomic rules every module must keep

How this page is made

Built 25 Oct 2026, 04:30 from sisodias/siso 6bdb32fd90 by map/build.py.