TRAVIS INSKEEP

THC of Olympia: Ordering App and Website

Native ordering, loyalty and a live menu for a licensed retailer, and a rebuilt website held in an isolation model strict enough that a mistake cannot reach production.

The app. A React Native and Expo app on Supabase for a working cannabis retailer, running against a point-of-sale feed that refreshes the catalogue every fifteen minutes so what customers browse matches what is actually on the shelf. Category navigation, search, filters, stock indicators and medical labelling sit over curated product photography and brand marks. The most interesting constraint is a platform one: Google Play's cannabis policy does not permit native ordering, so iOS orders natively while Android hands off to the responsive web checkout — one product, two paths, because the rules differ per store. Payment and physical ID verification deliberately stay at the register, where they legally belong. Loyalty links to the POS so points accrue against finalised sales rather than app-side state.

The website. A ground-up replacement for a licensed retailer's production website, developed on a noindexed preview surface with no write path to production. The safety model is the engineering. Production DNS, the store page and the shared backend are protected surfaces, and any operation touching them needs explicit per-action approval rather than standing access. The Content Security Policy is narrow enough to be load-bearing: inline styles prohibited, scripts and fonts same-origin, form-action none, and the single inline script — inert structured data — admitted only by a build-derived SHA-256 hash. A validator recomputes that hash on every build and rejects a stale policy, so the protection cannot quietly rot into a comment while deploys keep succeeding. Analytics is consent-gated and host-pinned, so no request reaches Google before acceptance and neither localhost nor the preview can pollute production data.

Category: web

Tech: Expo / React Native, TypeScript, Supabase (Postgres, Edge Functions, RLS), POS integration, iOS / Android, Cloudflare Pages, JavaScript, Content Security Policy, structured data, preview environments

Role: Designer and developer

Live

The rebuilt THC of Olympia website on desktop and phone, side by side on a dark green ground: the headline "Your Olympia cannabis dispensary since 2011" over a street-map texture, an Open now panel with the week's hours, Shop the menu and Find us buttons, and the start of Today's deals with a tab for each day.