Awesome-omni-skill tailwind-ecommerce

Use when building ecommerce interfaces, product pages, shopping carts, checkout flows, order management, or store navigation with Tailwind CSS. Covers product cards, product lists, product detail pages, category filters, shopping cart, checkout forms, order summaries, order history, pricing displays, promo sections, reviews, ratings, store navigation, category previews, inventory badges, wishlist buttons, compare features.

install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/tailwind-ecommerce-codestorm-hub" ~/.claude/skills/diegosouzapw-awesome-omni-skill-tailwind-ecommerce && rm -rf "$T"
manifest: skills/development/tailwind-ecommerce-codestorm-hub/SKILL.md
source content

Ecommerce UI with Tailwind CSS

Patterns for product display, cart, checkout, orders, and store navigation.


1. Product Display Patterns

Card Variants

VariantKey ClassesUse Case
Simple grid card
aspect-[3/4] w-full object-cover
+ text below image
Category pages, minimal listings
Card with details
rounded-lg border bg-white shadow-sm
+ price, rating, badge
Product listings, search results
Horizontal card
flex flex-row gap-4
+ image left, details right
Cart items, wishlists, comparisons
Quick view overlay
group relative
+
opacity-0 group-hover:opacity-100
overlay CTA
Browse-and-add flows
Featured card
col-span-2 row-span-2
+ larger image
Homepage hero products

Image Handling

ConcernPatternClasses
Aspect ratioFixed ratio container
aspect-square
,
aspect-[3/4]
,
aspect-[4/3]
Fill behaviorCover without distortion
object-cover w-full h-full
Responsive sizingFluid width, fixed aspect
w-full
on container, aspect ratio on
<img>
PlaceholderBackground color fallback
bg-gray-100
on container
Hover zoomScale on group hover
transition-transform duration-300 group-hover:scale-105
Lazy loadingNative attribute
loading="lazy"
on
<img>

Price Display

ScenarioPattern
Regular price
<span class="text-lg font-semibold text-gray-900">$49.99</span>
Sale priceOriginal:
line-through text-gray-500 text-sm
/ Sale:
text-lg font-semibold text-red-600
Price range
From $29.99
with
text-sm text-gray-500
prefix
Currency symbolKeep symbol adjacent, no wrapping:
whitespace-nowrap

Rating Display

ElementClasses
Star icon (filled)
size-4 text-yellow-400 fill-current
Star icon (empty)
size-4 text-gray-300 fill-current
Half starClip filled star at 50% with
overflow-hidden w-2
wrapper
Review count
text-sm text-gray-500 ml-1
next to stars
Container
flex items-center gap-0.5

2. Product List Layouts

Responsive Grid

<div class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4">
  <!-- Product cards -->
</div>

Layout Patterns

LayoutClassesWhen to Use
Grid (default)
grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6
Category pages, search results
Two-column wide
grid grid-cols-1 md:grid-cols-2 gap-8
Featured products, comparisons
List view
flex flex-col divide-y
with horizontal cards
Detail-heavy browsing
Masonry-style
columns-2 lg:columns-3 gap-4
Visual-heavy catalogs

Loading and Pagination

PatternImplementation
Skeleton card
animate-pulse
with
bg-gray-200 rounded
blocks matching card layout
Skeleton image
aspect-[3/4] bg-gray-200 rounded-lg animate-pulse
Skeleton text
h-4 bg-gray-200 rounded w-3/4 animate-pulse
Load more button
w-full py-3 border rounded-lg text-center
below grid
Pagination
flex items-center gap-2
with numbered buttons, active:
bg-indigo-600 text-white
Infinite scrollIntersection observer on sentinel div at grid end
Empty state
text-center py-16
with icon, heading, and CTA

3. Category and Filtering

Sidebar Filter Panel (Desktop)

ElementClasses
Panel container
w-64 shrink-0 hidden lg:block
Filter group
border-b py-4
with heading + options
Group heading
font-medium text-sm text-gray-900 mb-3
Checkbox + label
flex items-center gap-2 text-sm text-gray-600
Color swatch
size-6 rounded-full border-2
+
ring-2 ring-offset-2 ring-indigo-500
when active
Price rangeTwo
input[type=number]
with
w-20
in a
flex gap-2 items-center
row
Apply button
w-full mt-3 py-2 bg-indigo-600 text-white rounded-lg text-sm

Mobile Filter (Slide-out Dialog)

ElementClasses
Trigger button
lg:hidden flex items-center gap-2 border rounded-lg px-4 py-2
Backdrop
fixed inset-0 bg-black/25 z-40
Panel
fixed inset-y-0 right-0 w-full max-w-sm bg-white z-50 overflow-y-auto
Header
flex items-center justify-between px-4 py-3 border-b
Footer
sticky bottom-0 bg-white border-t px-4 py-3
with Apply/Clear buttons

Active Filters and Sorting

ElementClasses
Filter chip
inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm
Remove button
size-4 text-gray-400 hover:text-gray-600
(X icon inside chip)
Clear all link
text-sm text-indigo-600 hover:text-indigo-800
Sort dropdown
select
or custom dropdown,
text-sm border rounded-lg px-3 py-2
Result count
text-sm text-gray-500
(e.g., "128 products")
Filter count badge
size-5 rounded-full bg-indigo-600 text-white text-xs flex items-center justify-center

4. Shopping Cart

Cart Item Row

<div class="flex gap-4 py-4 border-b">
  <img class="size-20 rounded-lg object-cover shrink-0" src="..." alt="..." />
  <div class="flex flex-1 flex-col justify-between">
    <div class="flex justify-between">
      <div>
        <h3 class="text-sm font-medium text-gray-900">Product Name</h3>
        <p class="mt-1 text-sm text-gray-500">Color / Size</p>
      </div>
      <p class="text-sm font-medium text-gray-900">$49.99</p>
    </div>
    <div class="flex items-center justify-between">
      <!-- Quantity selector -->
      <div class="flex items-center rounded-lg border">
        <button class="px-3 py-1 text-gray-600">-</button>
        <span class="px-3 py-1 border-x text-sm">1</span>
        <button class="px-3 py-1 text-gray-600">+</button>
      </div>
      <button class="text-sm text-red-600 hover:text-red-800">Remove</button>
    </div>
  </div>
</div>

Cart Sections

SectionClassesContent
Cart list
divide-y
Cart item rows
Summary panel
rounded-lg bg-gray-50 p-6 lg:w-80 lg:shrink-0
Subtotal, shipping, tax, total
Summary row
flex justify-between text-sm text-gray-600 py-2
Label + amount
Total row
flex justify-between text-base font-semibold text-gray-900 border-t pt-4 mt-4
Total label + amount
Checkout CTA
w-full mt-6 py-3 bg-indigo-600 text-white rounded-lg font-medium
"Proceed to Checkout"
Continue shopping
text-sm text-indigo-600 hover:text-indigo-800 mt-4 text-center block
Link back

Cart States

StatePattern
Empty cart
text-center py-16
with cart icon, "Your cart is empty" heading, shop CTA
Mini cart / drawer
fixed inset-y-0 right-0 w-full max-w-md bg-white shadow-xl z-50
Cart badge
absolute -top-2 -right-2 size-5 rounded-full bg-indigo-600 text-white text-xs flex items-center justify-center
Updating state
opacity-50 pointer-events-none
on item row during async update

5. Checkout Flow

Progress Indicator

Step StateClasses
Completed
size-8 rounded-full bg-indigo-600 text-white
with check icon
Current
size-8 rounded-full border-2 border-indigo-600 text-indigo-600
Upcoming
size-8 rounded-full border-2 border-gray-300 text-gray-400
Connector (done)
h-0.5 w-full bg-indigo-600
between circles
Connector (pending)
h-0.5 w-full bg-gray-300
between circles
Container
flex items-center justify-between max-w-lg mx-auto mb-8

Form Layout

SectionStructure
Two-column layout
grid grid-cols-1 lg:grid-cols-5 gap-8
(3 cols form + 2 cols summary)
Field group
space-y-4
container
Two-field row
grid grid-cols-2 gap-4
(first/last name, city/zip)
Full-width field
col-span-2
or standalone
Label
block text-sm font-medium text-gray-700 mb-1
Input
w-full rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500
Error input
border-red-500 focus:border-red-500 focus:ring-red-500
Error message
text-sm text-red-600 mt-1

Payment Fields

ElementPattern
Card numberFull-width input with card icon right-aligned
Expiry + CVC
grid grid-cols-2 gap-4
side by side
Card group
rounded-lg border divide-y
wrapping all card fields as one visual unit
Saved cardsRadio group:
flex items-center gap-3 p-4 border rounded-lg
per card
Security note
flex items-center gap-2 text-sm text-gray-500
with lock icon

Checkout Patterns

PatternImplementation
Guest vs accountToggle or tabs at top:
flex rounded-lg border
with two options
Order reviewSummary card: item thumbnails, quantities, line totals in
bg-gray-50 rounded-lg p-6
Place order CTA
w-full py-3 bg-indigo-600 text-white rounded-lg font-medium text-lg
Terms checkbox
flex items-start gap-2
with checkbox and label text
Loading on submitButton with
opacity-75 cursor-not-allowed
+ spinner icon

6. Order Management

Order History Table

ViewportPattern
DesktopStandard
<table>
with columns: Order #, Date, Status, Total, Actions
MobileStacked cards:
divide-y
with each order as a
flex flex-col gap-2 py-4
block
Table header
text-left text-sm font-medium text-gray-500 pb-3 border-b
Table cell
py-4 text-sm text-gray-900

Order Status Badges

StatusClasses
Pending
bg-yellow-100 text-yellow-800 rounded-full px-2.5 py-0.5 text-xs font-medium
Processing
bg-blue-100 text-blue-800 rounded-full px-2.5 py-0.5 text-xs font-medium
Shipped
bg-indigo-100 text-indigo-800 rounded-full px-2.5 py-0.5 text-xs font-medium
Delivered
bg-green-100 text-green-800 rounded-full px-2.5 py-0.5 text-xs font-medium
Cancelled
bg-red-100 text-red-800 rounded-full px-2.5 py-0.5 text-xs font-medium
Refunded
bg-gray-100 text-gray-800 rounded-full px-2.5 py-0.5 text-xs font-medium

Order Detail Page

SectionPattern
Status timelineVertical:
relative pl-8 space-y-6
with
absolute left-0
circles and connecting line
Timeline dot (done)
size-4 rounded-full bg-indigo-600
Timeline dot (current)
size-4 rounded-full border-2 border-indigo-600 bg-white
Timeline line
absolute left-2 top-4 bottom-0 w-0.5 bg-gray-200
Items listHorizontal cards with image, name, qty, price
Totals sectionSame pattern as cart summary
Shipping address
bg-gray-50 rounded-lg p-4
card
Invoice layout
max-w-2xl mx-auto
with logo header, address block, items table, totals

7. Pricing and Promotions

Price Patterns

PatternImplementation
Original + sale
<span class="line-through text-gray-500 text-sm">$99.99</span> <span class="text-lg font-semibold text-red-600">$49.99</span>
Save amount
<span class="text-sm text-green-600 font-medium">Save $50.00 (50%)</span>
Per-unit price
<span class="text-xs text-gray-500">$2.50/oz</span>
below main price

Discount Badge (on Product Image)

<div class="relative">
  <img class="aspect-[3/4] w-full rounded-lg object-cover" src="..." alt="..." />
  <span class="absolute top-2 left-2 rounded-full bg-red-600 px-2.5 py-0.5 text-xs font-semibold text-white">
    -50%
  </span>
</div>

Pricing Tier Cards

ElementClasses
Card container
rounded-xl border p-6 text-center
Featured card
border-indigo-600 ring-2 ring-indigo-600 relative
with "Popular" badge
Price
text-4xl font-bold text-gray-900
Period
text-sm text-gray-500
(e.g., "/month")
Feature list
space-y-3 text-sm text-gray-600
with check icons
CTA button
w-full mt-6 py-2.5 rounded-lg font-medium

Promo and Incentive Sections

PatternClasses
Full-width banner
bg-indigo-600 text-white py-3 text-center text-sm font-medium
Dismissable bannerAdd
flex items-center justify-between px-4
with close button
Trust icons row
grid grid-cols-2 md:grid-cols-4 gap-6 py-8 text-center
Trust icon item
flex flex-col items-center gap-2 text-sm text-gray-600
with icon above
Coupon input
flex
with
flex-1 rounded-l-lg border px-3 py-2
input +
rounded-r-lg bg-gray-900 text-white px-4 py-2
button

8. Store Navigation

Store Header

ElementClasses
Header bar
sticky top-0 z-30 bg-white border-b
Inner layout
flex items-center justify-between h-16 px-4 max-w-7xl mx-auto
Logo
shrink-0
Search bar
flex-1 max-w-lg mx-8 hidden md:block
with
rounded-full bg-gray-100 px-4 py-2
Icon group
flex items-center gap-4
for account, wishlist, cart icons
Cart icon + badge
relative
button with
absolute -top-1.5 -right-1.5
badge

Mega Menu

ElementClasses
Trigger
group
on nav item
Dropdown
invisible group-hover:visible opacity-0 group-hover:opacity-100 transition-all absolute left-0 w-full bg-white shadow-lg border-t
Inner grid
grid grid-cols-4 gap-8 max-w-7xl mx-auto p-8
Column heading
font-medium text-sm text-gray-900 mb-3
Column links
space-y-2 text-sm text-gray-600
Featured image
rounded-lg overflow-hidden
in last column

Category Previews and Breadcrumbs

ElementClasses
Category card
group relative rounded-xl overflow-hidden
Category image
aspect-[4/3] w-full object-cover transition-transform group-hover:scale-105
Category overlay
absolute inset-0 bg-gradient-to-t from-black/60 to-transparent
Category label
absolute bottom-4 left-4 text-lg font-semibold text-white
Breadcrumb nav
flex items-center gap-2 text-sm text-gray-500
Breadcrumb separator
size-4 text-gray-400
(chevron icon)
Breadcrumb current
text-gray-900 font-medium
(last item, no link)

9. Accessibility for Ecommerce

ElementRequirementImplementation
Product imageDescriptive alt text
alt="Red leather crossbody bag"
not
alt="product"
Decorative imageSkip for screen readers
alt=""
and
aria-hidden="true"
Sale priceAnnounce was/now
aria-label="Sale price $49.99, originally $99.99"
on container
Cart updateAnnounce change
aria-live="polite"
region for "Item added" / "Cart updated" messages
Cart count badgeAnnounce count
aria-label="Cart, 3 items"
on cart button
Quantity selectorLabel buttons
aria-label="Decrease quantity"
/
aria-label="Increase quantity"
Star ratingText alternative
aria-label="4 out of 5 stars"
on rating container
Filter changeAnnounce results
aria-live="polite"
on product count ("128 results")
Form errorsLink to field
aria-describedby="email-error"
on input, matching
id
on error text
Checkout stepsCurrent step
aria-current="step"
on active step indicator
Remove from cartConfirm actionIdentify item in label:
aria-label="Remove Red Bag from cart"
Sort dropdownLabel purpose
aria-label="Sort products by"
on select element
Color swatchName the color
aria-label="Color: Navy Blue"
on swatch button
Dialog filtersTrap focus
role="dialog"
+
aria-modal="true"
+ focus trap on mobile filter panel

Common Mistakes

MistakeFix
Fixed pixel image heightsUse
aspect-*
utilities with
object-cover
for responsive images
Cart with no empty stateAlways handle zero items with illustration and CTA
Price without
whitespace-nowrap
Currency and amount should not wrap to separate lines
Filter panel always visible on mobileHide with
hidden lg:block
, use dialog for mobile
No loading state during cart updatesShow
opacity-50 pointer-events-none
or skeleton on async actions
Checkout form in single columnUse
grid grid-cols-2 gap-4
for name, city/zip, expiry/CVC pairs
Status badges with only colorAdd text labels; color alone fails WCAG
Missing
aria-live
on cart
Cart count and summary changes must announce to screen readers
Mega menu not keyboard-navigableEnsure focus management and Escape key closes the menu
Discount badge over product textPosition badge on image (
absolute top-2 left-2
), not over card text

MCP Component Library

The

frontend-components
MCP server provides ecommerce-related components:

  • HyperUI (
    hyperui
    ): Product cards, product collections, pricing tables, forms, badges, stats
  • DaisyUI (
    daisyui
    ): Card, badge, stat, table, modal, rating, countdown class references
  • FlyonUI (
    flyonui
    ): Card, badge, stat, table CSS components + datatable JS plugin

Ecommerce search:

search_components(query: "product", framework: "hyperui")
or
search_components(query: "pricing")
for pricing components across all libraries.