Munchies (Tinloof) Medusa Starter Audit

Repo: https://github.com/tinloof/munchies

Codebase Stats

MetricValue
FrameworkAstro 5.16 (SSR on Cloudflare Workers) with React 19 islands
React version19.2.3
StylingTailwind CSS v4, CSS custom properties, class-variance-authority
Source directoryapps/web/src/
TS/TSX/JS/JSX files (web)158 files, ~10,068 lines
Astro files (web)51 files, ~2,259 lines
Total across monorepo~12,985 lines
Medusa SDK@medusajs/js-sdk v2.13.0
Package managerpnpm 9 + Turborepo
Deployment targetCloudflare Workers/Pages

Key dependencies: Embla Carousel, Radix UI, nanostores, nuqs, Sanity, Stripe, Orama search, satori/resvg for OG images.

Project Structure

Monorepo with three apps:

AppPathPurpose
@apps/webapps/web/Astro SSR storefront
@apps/medusa-backendapps/medusa-backend/Medusa v2 backend with custom API routes, email templates, Sanity sync
@apps/searchapps/search/Cloudflare Worker running Orama full-text search

Page Routes

RouteDescription
/Homepage — CMS-driven sections (hero, marquee, etc.) via Sanity
/:countryCode/Localized homepage (16 countries)
/productsProduct listing with faceted filtering
/products/:handlePDP with image carousel, variant picker, add-to-cart
/checkoutMulti-step checkout
/order/confirmed/:idOrder confirmation
/faqsFAQ page with search and category filtering
/:path (catch-all)CMS-driven modular/text pages
/cmsEmbedded Sanity Studio
/api/draft-mode/enableSanity visual editing draft mode
/api/og/:infoDynamic OG image generation
/api/revalidateCache tag-based revalidation

Commerce Components

Product

ComponentPathLines
ProductCardsrc/components/shared/product-card.tsx73
ProductsGridsrc/components/plp/products-grid.astro83
ProductInformationsrc/components/pdp/product-information.tsx69
ProductImagesCarouselsrc/components/pdp/image-carousel.tsx122
OptionsSelectsrc/components/pdp/options-select.tsx39
Specs (accordion)src/components/pdp/specs.tsx28
Addons (cross-sell)src/components/pdp/addons.tsx27
StickyAtc (mobile)src/components/pdp/sticky-atc.tsx59

Cart

ComponentPathLines
CartUI (slide-out drawer)src/components/cart/cart-ui.tsx66
LineItemsrc/components/cart/line-item.tsx90
CartFootersrc/components/cart/cart-footer.tsx58
AddToCartsrc/components/cart/add-to-cart.tsx75
CartAddonsCarouselsrc/components/cart/cart-addons-carousel.tsx37

Checkout

ComponentPathLines
CheckoutFormsrc/components/checkout/checkout-form/index.tsx62
AddressFormsrc/components/checkout/checkout-form/address-form.tsx231
Deliverysrc/components/checkout/checkout-form/delivery.tsx130
Paymentsrc/components/checkout/checkout-form/payment/index.tsx184
Reviewsrc/components/checkout/checkout-form/review.tsx26

Filtering

ComponentPathLines
FilterSelectsrc/components/plp/filter-select.tsx163
MobileFilterDropdownsrc/components/plp/mobile-filter-dropdown.tsx140
Dropdownsrc/components/plp/dropdown.tsx96
Accordionsrc/components/plp/accordion.tsx89

CMS Sections

Hero, Marquee, CenteredText, MediaText, Testimonials, CollectionList, FeaturedProducts, ShopTheLook (interactive hotspots), Assurance.

Feature Inventory

Faceted Filtering

Two filter types via Orama search worker:

  • Collections — multi-select checkbox dropdown
  • Categories — multi-select checkbox dropdown

Proper OR-within / AND-between faceted logic. Mobile slide-out filter panel. “Clear all” button. URL-param based.

No price range, material, or attribute filters.

Backend exists, no UI. The Orama search worker supports a q query parameter, but the storefront never passes one. No search bar, autocomplete, or search results page for products. FAQ page has its own client-side substring search.

Checkout

Multi-step (4 steps):

  1. Addresses — shipping + optional separate billing
  2. Delivery — shipping method radio group
  3. Payment — Stripe card element
  4. Review — terms + complete order

No express checkout.

Embla Carousel: horizontal swipe on mobile, thumbnail strip on desktop. No lightbox, no zoom.

Customer Accounts

None. No login, register, account pages, order history, or saved addresses. Guest checkout only.

SEO

  • OG tags via astro-seo
  • Dynamic OG images (satori)
  • No JSON-LD
  • No sitemap

Theming

CSS custom properties in global.css (5 brand colors, 3 font families, full type scale). Moderately easy to reskin.

Assessment for Dungeon Books

Not recommended as primary starter. Despite the beautiful design and strong Sanity CMS integration:

  • No customer accounts — would need to build from scratch
  • No product search UI — backend supports it but no frontend
  • Astro, not Next.js — different framework than what’s expected
  • Cloudflare Workers deployment — different infra model than Railway
  • Sanity, not Payload — different CMS

The ShopTheLook hotspot component pattern could inspire a “Staff Picks” interactive feature, and the Orama search worker architecture is interesting, but Solace is the better Medusa starter for this project.