
Trinity Naturals is a women, LGBTQ+, and minority-owned adult-use cannabis dispensary in Chelsea, Massachusetts. Cannabis businesses cannot run ads on most major platforms, so every customer channel Trinity owns matters more. We built them a home-screen app with push notifications, connected their AI phone and chat assistants to the live store menu, and set up a product blog that stays inside cannabis marketing rules. The biggest lesson: in a restricted industry, the rules have to be built into the system, not left to whoever posts that day.
Key takeaways
- Trinity's customers can install a Trinity app on their phone home screen and opt into push notifications, with no app store involved.
- The AI phone and chat assistants answer from the dispensary's live, hourly-synced menu: 1,437 in-stock products across 202 brands on September 10, 2026.
- A real customer question exposed a gap: brand-owner names that do not appear in the menu. We added brand-family mapping, and seven of seven live test searches came back correct in 0.8 to 1.6 seconds.
- Product blog posts publish to the website and the member community only, never to Facebook, Instagram, or Google, because those platforms suspend cannabis accounts for product promotion.
- Every public image and caption is checked against the platforms' restricted word lists before it goes out.
What did Trinity Naturals need?
Trinity is locally owned and competes with larger dispensaries that have bigger budgets. Paid social and search ads are mostly off the table for cannabis. That leaves owned channels: the website, a way to reach loyal customers directly, and staff who can answer "do you have this?" quickly.
The staff were also answering the same product questions by phone and chat all day, and customers wanted to know what was in stock before they drove over.
What did we build?
- A home-screen app (August 27, 2026). A progressive web app, meaning a website that installs to the phone home screen like an app. It has an age gate, install instructions for iPhone and Android, push notifications, a chat page with Trinity's assistant, and a blog reader. It runs on Cloudflare Workers because the website builder cannot run the background code push notifications need.
- A staff broadcast page. Staff can send a push notification from a two-step page with a live preview, a typed confirmation, and delivery counts, so nobody sends one by accident.
- A live menu sync (September 4, 2026). An n8n workflow pulls in-stock products, brands, categories, and descriptions from the dispensary's point-of-sale menu every hour into a searchable catalog. Customer and loyalty records are deliberately kept out of it.
- AI product search for voice and chat. The phone assistant searches that catalog. The chat assistant gets an hourly-refreshed list of in-stock brands.
- A product blog (September 8, 2026). Tuesday and Friday articles with images, structured data, and an FAQ, published to the blog and the member community only.
- A short link and QR code. trinitynat.com/app opens the app, and a QR code in the store points to the same place with tracking so Trinity can see which one customers use.
- App knowledge in the assistants (September 12, 2026). The voice and chat assistants now explain what the app is and how to install it.
What worked?
Owning the channel. A push notification reaches a customer's lock screen without an ad platform in between, and without the risk of a suspended social account.
Grounding the AI in the real menu. Because product search reads the live catalog, the assistant can say what is actually in stock instead of guessing.
Compliance by structure, not by memory. The product blog workflow does not contain a Facebook, Instagram, or Google posting step at all. It is not a setting someone can flip by mistake; the step simply is not there.
A guarded broadcast. The typed confirmation on the push page means an unfinished message cannot reach every installed customer with one misclick.
What did not work, and what did we change?
1. A real customer question the AI could not answer (September 10, 2026). A customer asked in chat whether Trinity carries products from a well-known cannabis company. Trinity does, but under four brand names that never mention the parent company. The chat assistant was only allowed to deflect product questions, and voice search matched the name to an unrelated product and presented it as "the closest thing we carry." We added a brand-family map so a company name finds all of its brands, gave the chat assistant a live in-stock brand list that refreshes every hour, and set a rule that a brand missing from the list is never described as not carried. Seven of seven live test searches then returned the right answer.
2. The QR code pointed to an address that did not exist. An early QR code encoded a subdomain that was never set up. We regenerated it to point at the live app with scan tracking, and confirmed it decodes correctly before and after adding the logo.
3. A promo image nearly broke platform rules. The phone screenshot in a social graphic showed a menu tile containing a word the social platforms restrict for cannabis. We cropped that version of the image before it was used.




