Medusa v2 Official Starter Storefront Audit

Codebase Stats

MetricValue
Total files in src/203
Lines of code (TS/TSX/JS/JSX)~13,400
Source locationsrc/ (Next.js App Router)
FrameworkNext.js 15.3.9, React 19
Package managerYarn 4.12.0
UI foundation@medusajs/ui + @headlessui/react + Radix accordion
StylingTailwind CSS 3 + @medusajs/ui-preset

Page Routes

RouteDescription
/Homepage — hero banner + featured products
/storeAll products listing with sort and pagination
/products/[handle]Product detail page with images, variant picker, tabs, related products
/categories/[...category]Category page with sort/pagination
/collections/[handle]Collection page with sort/pagination
/cartFull cart page
/checkoutCheckout page (separate layout)
/accountAccount hub — parallel routes (@login / @dashboard)
/account/profileEdit name, email, password, phone, billing address
/account/addressesManage saved shipping addresses
/account/ordersOrder history list
/account/orders/details/[id]Single order detail view
/order/[id]/confirmedOrder confirmation page
/order/[id]/transfer/[token]Order transfer request
/order/[id]/transfer/[token]/acceptAccept order transfer
/order/[id]/transfer/[token]/declineDecline order transfer

Commerce Components

Product

ComponentPathLines
ImageGallerysrc/modules/products/components/image-gallery/index.tsx42
ProductActionssrc/modules/products/components/product-actions/index.tsx199
MobileActionssrc/modules/products/components/product-actions/mobile-actions.tsx203
OptionSelectsrc/modules/products/components/product-actions/option-select.tsx57
ProductPreviewsrc/modules/products/components/product-preview/index.tsx52
ProductTabssrc/modules/products/components/product-tabs/index.tsx121
RelatedProductssrc/modules/products/components/related-products/index.tsx~60
Thumbnailsrc/modules/products/components/thumbnail/index.tsx~60

Cart

ComponentPathLines
CartItemsrc/modules/cart/components/item/index.tsx144
CartItemSelectsrc/modules/cart/components/cart-item-select/index.tsx~60
CartDropdownsrc/modules/layout/components/cart-dropdown/index.tsx230
EmptyCartMessagesrc/modules/cart/components/empty-cart-message/index.tsx~30

Checkout

ComponentPathLines
CheckoutFormsrc/modules/checkout/templates/checkout-form/index.tsx39
Addressessrc/modules/checkout/components/addresses/index.tsx184
ShippingAddresssrc/modules/checkout/components/shipping-address/index.tsx219
BillingAddresssrc/modules/checkout/components/billing_address/index.tsx114
Shippingsrc/modules/checkout/components/shipping/index.tsx408
Paymentsrc/modules/checkout/components/payment/index.tsx259
PaymentButtonsrc/modules/checkout/components/payment-button/index.tsx193
DiscountCodesrc/modules/checkout/components/discount-code/index.tsx179
Reviewsrc/modules/checkout/components/review/index.tsx56

Account

ComponentPathLines
Loginsrc/modules/account/components/login/index.tsx65
Registersrc/modules/account/components/register/index.tsx106
AccountNavsrc/modules/account/components/account-nav/index.tsx199
Overviewsrc/modules/account/components/overview/index.tsx168
ProfileBillingAddresssrc/modules/account/components/profile-billing-address/index.tsx191
EditAddressModalsrc/modules/account/components/address-card/edit-address-modal.tsx239
OrderCardsrc/modules/account/components/order-card/index.tsx87

Store / Filtering

ComponentPathLines
RefinementListsrc/modules/store/components/refinement-list/index.tsx42
SortProductssrc/modules/store/components/refinement-list/sort-products/index.tsx49
Paginationsrc/modules/store/components/pagination/index.tsx114

Feature Inventory

Faceted Filtering

Does not exist. Only sorting available:

  • Latest Arrivals, Price Low-to-High, Price High-to-Low

No faceted filters for price range, attributes, color, size, brand, or any product property. The RefinementList component only contains sorting.

No search functionality. No search bar, no search page, no search API integration. @types/react-instantsearch-dom in devDependencies is a dead remnant.

Checkout

Multi-step checkout via ?step= URL parameter:

  1. Addresses — shipping + billing (same-as-shipping toggle)
  2. Delivery — shipping method or in-store pickup
  3. Payment — Stripe (card, iDeal, Bancontact), PayPal, Manual
  4. Review — terms + place order

Real Stripe integration with confirmCardPayment.

Express Checkout

None. No Apple Pay, Google Pay, or Payment Request Button.

Vertical stack only. All images stacked with gap-y-4. No carousel, lightbox, zoom, or thumbnail navigation. 42 lines.

Customer Accounts

FeatureStatus
LoginYes
RegisterYes
Order historyYes
Saved addressesYes (add/edit/delete)
Profile editingYes
Password resetNo
Order transferYes

SEO

FeatureStatus
Page-level title/descriptionYes
Open Graph tagsPartial (PDP only)
JSON-LD structured dataNo
SitemapPartial (next-sitemap config exists)
Canonical URLsCategory pages only
generateStaticParamsYes

Theming / Branding

  • Tailwind CSS 3 + @medusajs/ui-preset
  • @medusajs/ui component library
  • Custom grey scale and typography in globals.css
  • Reskin difficulty: Moderate. Need to understand and override @medusajs/ui-preset tokens. Internal @medusajs/ui component styles are harder to customize.

API Integration

  • SDK: @medusajs/js-sdk connecting to backend at MEDUSA_BACKEND_URL
  • API calls: Server Actions in src/lib/data/ (cart.ts, customer.ts, products.ts, etc.)
  • Auth: JWT in httpOnly cookie (_medusa_jwt), 7-day expiry
  • Caching: force-cache with tag-based revalidation, per-user cache scoping

Backend Extensibility (Medusa v2)

All custom logic runs in-process with the Medusa server:

MechanismPurposeLocation
ModulesNew domains/data models/servicessrc/modules/
WorkflowsComplex multi-step business logicsrc/workflows/
SubscribersReact to events (side effects)src/subscribers/
API RoutesCustom REST endpointssrc/api/
Workflow HooksHook into existing workflowssrc/workflows/hooks/
LoadersRun logic on startupsrc/loaders/
LinksRelationships between modulessrc/links/

No separate services required for custom integrations.