Skip to content
Back

Express — a one-page theme born at a hackathon

How a 48-hour hackathon project became a flagship Shopify theme used by 65,000+ food and beverage merchants during the 2020 pandemic.

Feb 2026 · 3 min read · changelog.shopify.com

Express started as a hackathon submission. We built a single-page Shopify theme — entire storefront on one scroll, no second clicks — over a long weekend in early 2020. Two weeks later the world locked down, every restaurant on earth needed to take orders online, and the project we'd thought of as "a fun demo" turned into a flagship theme launched in May 2020.

By the end of that year, 65,000+ food and beverage merchants worldwide were using Express to take orders.

Why one page

The core insight was that food and beverage commerce is menu-shaped, not catalog-shaped. A pizza place doesn't need product pages, related products, customer reviews, or a wishlist. They need: photo of the dish, name, price, "add to cart." Done.

Removing every page transition turned out to be a measurable win:

The constraint forced clarity. We didn't have a homepage to design — only a menu to fit on a phone screen.

What shipped

The bones, for the technically curious:

What I'd do differently

Reading Dave's post-mortem two years later, his observations match my own: the theme outgrew its original "one-page only" thesis as merchants started selling non-food categories on it. The single-page constraint that made it sing for restaurants started feeling forced when a merchant had thirty product variants across seven categories.

If I were rebuilding it today:

  1. Make the single-page nature optional. A "expand to per-product page" toggle per section group, opt-in for merchants whose catalog grew.
  2. Adopt JSON templates from Dawn. Express predates Online Store 2.0 — the same architectural shift would have made section management dramatically more flexible.
  3. Lean harder on the cart drawer. It was the secret of Express's conversion lift; it should have been a first-class theme primitive, not a per-template implementation.

Hackathon code is allowed to age. The interesting question is always where it ages, not whether.