Delivery startup

Toke

Toke (first called TokeRunner) was an on-demand delivery marketplace for licensed cannabis dispensaries in Orange County. I co-founded it with Teddy Horvath starting in 2023 and built its landing pages and customer ordering app.

Toke customer web app home page with search, address bar, category filters and a row of sample products
24page components in the ordering app
196of the app's 276 commits were mine
3ID checks per order in the spec

The challenge

Legal cannabis delivery is heavily regulated: customers must be 21, every order is tied to a licensed dispensary, and our own design checked the customer's ID three times, at sign-up, at the store and at the door.

TokeRunner's idea was a marketplace where independent drivers pick up sealed orders from local dispensaries and deliver them in 15 to 30 minutes. Before any of that could work, we needed a page that collected a waitlist and an app that people could actually order from.

The approach

I started with a technical spec: the order lifecycle from ID check to doorstep, the payment and verification vendors, and the driver flow. One rule stands out. The driver's pickup button stays hidden until their location and time match the dispensary, so an order can only be released inside the store.

The ordering app is a React single-page app on a small Express and MongoDB API. Firebase handles sign-up, Google sign-in and password resets, Stripe takes payment, and a finalized order sends a Twilio text to the team with the items and delivery address. The cart only accepts items from one dispensary at a time, because each order has to be filled by a single licensed shop.

  • Age gate firstA 21+ check opens before anything else and is remembered on the device.
  • Shops and productsBrowse dispensaries or every product, filter by Flower, Vaporizers, Concentrates and Edibles, and search both.
  • One-shop cartAdding an item from a second dispensary is blocked, so every order maps to one licensed retailer.
  • Checkout to text alertStripe payment, saved address and phone, then an SMS order summary to the team.

How an order was designed to move

  1. 01Verify21+ gate, account, delivery address
  2. 02OrderOne dispensary's menu, Stripe checkout
  3. 03Pick upRunner's button unlocks only in the store
  4. 04DeliverID checked again at the door

Every shop gets a menu.

A dispensary page loads that shop's menu from the API, grouped into categories with THC percentage and price on every card.

Toke dispensary page for Sample Shop A with category buttons and a grid of sample products

One shop per order.

The cart shows which dispensary the order is from and refuses items from a second one, since a single licensed retailer has to fill it.

Toke cart listing three sample items from Sample Shop A with quantity steppers and remove buttons

From waitlist to storefront.

The front door changed a lot in 2023: a TokeRunner waitlist in May, the rename to Toke in October, then the ordering app itself.

Three Toke pages side by side: the May 2023 TokeRunner waitlist, the October 2023 Toke landing page and the ordering app

Tools

  • React
  • React Router
  • Firebase Auth
  • Node.js
  • Express
  • MongoDB
  • Stripe
  • Twilio

App screenshots captured from a local build of the 2024 customer web app with the retired API replaced by sample shops and products; landing pages captured from local copies of the 2023 repos, with images that were hosted on imgbb (no longer reachable) left out. The landing pages were built on saved Webflow exports of other startups' sites (Ten Percent, Depict, Airwork and others) rewritten with Toke copy and branding, and early prototypes started from open-source food-delivery templates (Red Onion, Chicken City, Swiggy clone). The ordering app and its API were built with Teddy Horvath.

Next projectChef'itChef'it search results: two kitchen listings beside a Mapbox map of Riverside and Moreno Valley