1 GitHub star = 1 new component.

Star the repo
Full templates

E-commerce Store

A complete, accessible online store: home, catalogue, product page, cart and checkout.

Nova Store is a production-ready e-commerce template for Astro. Five pages share one cart that persists in the browser, the catalogue filters instantly without a backend, and the checkout validates, totals shipping, tax and promo codes and confirms the order. Every block is a library component, so you can use the whole store or just the pieces you need.

4 pages 32 components 0 deps

Live preview

Pages

Every page is a real, interactive preview — the cart is shared between them.

Store home

Hero with featured product, guarantees, categories, best sellers, editorial banner, new arrivals and newsletter.

src/pages/index.astro

Category page

Catalogue with breadcrumb, category chips, sticky filters, live result count and sorting.

src/pages/shop.astro

Product page

Gallery, buy box with colour/size pickers and quantity, reviews summary and related products.

src/pages/product/[slug].astro

Checkout

Focus-mode checkout with steps, contact, delivery, shipping, payment and live order summary.

src/pages/checkout.astro

What is included

  • Persistent cart with drawer and live badge
  • Instant filters: category, price, colour, rating, stock
  • Checkout with shipping, tax and promo codes
  • Zero runtime dependencies, WCAG AA, mobile-first
  • Product illustrations included — no images needed
  • Light and dark mode with a toggle
  • Live notices: cart toasts, sale countdown, low stock and recent purchases

Install & use

  1. Install the package

    bash
    npm install astro-component-kit
    npm install astro-component-kit
  2. Create one Astro page per template page

    src/pages/index.astro

    astro
    ---
    import { StoreHomePage } from 'astro-component-kit/templates/ecommerce';
    ---
    
    <StoreHomePage />
    --- import { StoreHomePage } from 'astro-component-kit/templates/ecommerce'; --- <StoreHomePage />

    src/pages/shop.astro

    astro
    ---
    import { StoreCategoryPage } from 'astro-component-kit/templates/ecommerce';
    ---
    
    <!-- Category links use /shop/?category=audio -->
    <StoreCategoryPage />
    --- import { StoreCategoryPage } from 'astro-component-kit/templates/ecommerce'; --- <!-- Category links use /shop/?category=audio --> <StoreCategoryPage />

    src/pages/product/[slug].astro

    astro
    ---
    import { StoreProductPage, demoStore } from 'astro-component-kit/templates/ecommerce';
    
    export function getStaticPaths() {
      return demoStore.products.map((p) => ({ params: { slug: p.slug } }));
    }
    ---
    
    <StoreProductPage slug={Astro.params.slug} />
    --- import { StoreProductPage, demoStore } from 'astro-component-kit/templates/ecommerce'; export function getStaticPaths() { return demoStore.products.map((p) => ({ params: { slug: p.slug } })); } --- <StoreProductPage slug={Astro.params.slug} />

    src/pages/checkout.astro

    astro
    ---
    import { StoreCheckoutPage } from 'astro-component-kit/templates/ecommerce';
    ---
    
    <StoreCheckoutPage />
    --- import { StoreCheckoutPage } from 'astro-component-kit/templates/ecommerce'; --- <StoreCheckoutPage />
  3. Use your own catalogue, currency and routes

    Spread the demo store and replace what you need. Products accept a real image or one of 16 built-in illustrations.

    astro
    ---
    // src/pages/index.astro — same store + routes on every page
    import { StoreHomePage, demoStore, type StoreConfig } from 'astro-component-kit/templates/ecommerce';
    
    const store: StoreConfig = {
      ...demoStore,
      name: 'My Shop',
      currency: 'EUR',
      locale: 'es-ES',
      cartKey: 'my-shop-cart',
      products: [
        {
          slug: 'linen-shirt',
          name: 'Linen Shirt',
          price: 59,
          category: 'apparel',
          image: '/products/linen-shirt.webp', // or icon: 'shirt'
          sizes: ['S', 'M', 'L'],
          rating: 4.7,
          reviews: 40,
        },
      ],
    };
    ---
    
    <StoreHomePage store={store} routes={{ home: '/', shop: '/shop/', product: '/product/', checkout: '/checkout/' }} />
    --- // src/pages/index.astro — same store + routes on every page import { StoreHomePage, demoStore, type StoreConfig } from 'astro-component-kit/templates/ecommerce'; const store: StoreConfig = { ...demoStore, name: 'My Shop', currency: 'EUR', locale: 'es-ES', cartKey: 'my-shop-cart', products: [ { slug: 'linen-shirt', name: 'Linen Shirt', price: 59, category: 'apparel', image: '/products/linen-shirt.webp', // or icon: 'shirt' sizes: ['S', 'M', 'L'], rating: 4.7, reviews: 40, }, ], }; --- <StoreHomePage store={store} routes={{ home: '/', shop: '/shop/', product: '/product/', checkout: '/checkout/' }} />

New e-commerce components 22

Built for this template and available on their own in the library.

Component

Promo Bar

Slim announcement bar with rotating messages, pause on hover and a dismiss button remembered per session.

Component

Cart Drawer

Slide-in cart with quantity steppers, remove, free-shipping progress and subtotal. Accessible modal with focus trap.

Component

Trust Badges

Row of store guarantees — shipping, returns, secure payment and support — in card, inline or divided style.

Component

Store Product Card

Shop product tile with illustration or photo, badge, star rating, colour swatches, compare-at price, wishlist toggle and add-to-cart.

Component

Product Grid

Responsive grid of product cards with an empty state — the target of FilterSidebar and ProductToolbar.

Component

Filter Sidebar

Category, price, colour, rating and stock filters that filter and sort a ProductGrid instantly, synced with the URL.

Component

Product Toolbar

Catalogue heading with a live result count and a ModernSelect sort control wired to FilterSidebar.

Component

Product Gallery

Product image viewer with large stage and keyboard-navigable thumbnails; generates illustrated angles when there are no photos.

Component

Variant Picker

Colour swatches or size pills as a native radio group that keeps an add-to-cart button in sync.

Component

Product Buy Box

Product detail purchase panel: price, savings, colour/size pickers, quantity stepper, add to cart, buy now and expandable details.

Component

Order Summary

Checkout sidebar with cart lines, promo codes, shipping, tax and a live total that follows the chosen shipping method.

Component

Checkout Form

One-page checkout — contact, delivery, shipping and payment — with autocomplete hints, validation and an animated confirmation.

Component

Product Media

Product visual: a real photo, or a hue-tinted backdrop with one of 16 line-art product illustrations.

Component

Product Rating

Read-only star rating with fractional fill, value and review count, exposed as a single accessible label.

Component

Cart Toast

Live stacked notifications: "Added to cart" with a View cart action, plus any custom notice sent through the ack:notify event.

Component

Countdown Banner

Live sale countdown with days, hours, minutes and seconds, a CTA and an ended state; fixed date or rolling per-visitor deadline.

Component

Stock Indicator

Low-stock urgency notice with a level bar and a live "people viewing" counter for product pages.

Component

Cart Store

Framework-free cart state shared by every shop component: localStorage persistence, cross-tab sync, add-to-cart binding and money formatting.

Reused library components

Existing components the template is assembled from.