Documentation

Everything you need to install, configure, and run your WirePulse store.

Installation

Get WirePulse running locally in under 5 minutes.

Requirements

  • PHP 8.4+ with common extensions (mbstring, xml, curl, sqlite3/mysql)
  • Composer 2.x
  • Node.js 20+ & npm
  • SQLite (development) or MySQL 8+ (production)
  • Flux UI Pro v2 licensepurchase at fluxui.dev

Quick Start

1 Clone the repository: git clone https://github.com/kwhorne/wirepulse.git
2 Install PHP dependencies: composer install
3 Install Node dependencies: npm install && npm run build
4 Copy environment file: cp .env.example .env and set your Stripe keys, mail driver, and AI provider key.
5 Generate app key and run migrations: php artisan key:generate && php artisan migrate --seed
6 Create your first admin: php artisan wirepulse:create-admin
7 Start the dev server: composer run dev — visit http://localhost:8000

Admin Dashboard

Your command center for managing the store.

Dashboard

Revenue stats, order counts, inventory alerts, and restocking predictions at a glance.

Products

Create, edit, and organize your product catalog. AI-powered descriptions and SEO.

Collections

Hierarchical category system with parent/child relationships. Powers storefront navigation.

Orders

View and manage customer orders — line items, addresses, totals, payment status.

Customers

Customer database with order history, addresses, and group assignments.

Settings

Staff, themes, product types, currencies, payment methods, taxes, shipping, and more.

Image Guidelines

Automatic processing, recommended sizes, and best practices.

Automatic Processing

When you upload product images, WirePulse automatically:

  • Resizes to max 1200×1500px (maintaining aspect ratio)
  • Converts to WebP format (25-35% smaller than JPEG)
  • Compresses at 85% quality (virtually invisible loss)

Upload JPEG, PNG, GIF, or WebP — the system converts everything to WebP automatically.

UsageSizeRatioNotes
Product image1200 × 1500 px4:5Ideal size. Auto-resized if larger.
Minimum upload800 × 1000 px4:5Smaller may look blurry on retina.
Hero banner1920 × 1080 px16:9For Page Builder hero modules.
Collection icon400 × 400 px1:1Square icons for category cards.

Why 4:5? Industry standard used by Shopify, ASOS, and Zalando. Shows more of the product than square, looks premium, and matches Instagram portrait format.

Managing Products

Create, edit, and organize your product catalog with the tabbed editor.

Creating a Product

1 Click "Add Product" on the Products page.
2 Enter a product name and description. Use the AI generator to create a description from keywords.
3 Fill in the initial variant: SKU code, price, and stock quantity.
4 Choose a product type and brand. Assign to collections and tags.
5 Set status to Draft or Published. Save.

Product Editor Tabs

Product Information — Name, description, AI generator, pricing with cost price and DG%, and inventory.

Variants — Add, edit, and remove variants. Each has its own SKU, stock, pricing.

Related Products — Cross-sell ("You might also like") and up-sell ("Upgrade your choice") links.

Shipping & Dimensions — Weight, length, width, height per variant for shipping calculations.

SEO — URL slug, meta title, meta description with AI generation and live Google preview.

Data Quality Score

The header badge shows how complete your product data is across 12 data points. Click to see missing fields.

80%+ Ready 50-79% Needs work <50% Incomplete

Pricing

Each variant has three price fields:

Price — Selling price including VAT. What the customer pays.

Compare-at — Original price. Shows strikethrough and discount badge on storefront.

Cost Price — Your purchase price (ex. VAT). Used for margin calculation. Never shown to customers.

Tip: Use ⌘K to quickly search and jump to another product while editing. Works by name or SKU.

Collections & Categories

Organize products into browsable categories with hierarchical nesting.

Collections appear in storefront navigation and can be nested — e.g., "Electronics > Laptops > Gaming Laptops". Products can belong to multiple collections. Create them at Collections → Create Collection.

Brands

Assign brands to products. Appears as a filter on product listing pages.

Tags

Flexible labels for internal organization. No hierarchy, shown on product pages.

Attributes

Standardized product fields like Material or Weight Class, organized in groups.

Product Types & Attributes

34 configurable attributes across 6 groups. Each type controls which fields appear in the editor.

General

Short description, technical description, features, material, color, warranty

Food & Beverage

Nutrition facts, ingredients, allergens, storage instructions

Textile & Apparel

Care instructions, fabric, size guide, fit, season, gender, 72 care label icons

Electronics

Technical specs, power supply, connectivity, battery life, certification

Furniture & Home

Assembly required, max load, room type, style

Sports & Outdoor

Activity type, weather rating, skill level, capacity

Tip: When you change a product's type in the sidebar, the Attributes tab updates automatically. Manage types at Settings → Product Types.

Orders

Lifecycle from checkout to fulfillment.

Pending

Checking out

Processing

Payment confirmed

Completed

Shipped/fulfilled

Stock is deducted when payment is confirmed, not when the order is created — abandoned checkouts don't lock inventory. Each order has a unique reference code (e.g., WP-A3K9M2X1). Click any order to see line items, addresses, payment info, and tax breakdown.

Draft Orders

Create orders manually for phone orders, B2B quotes, or custom requests.

Creating a Draft Order

1 Go to Sales → Draft Orders → "Create Order".
2 Search and select a customer.
3 Add products by name/SKU. Add custom line items for non-product charges.
4 Set shipping cost and internal notes.
5 "Save & Send Invoice" emails a Stripe payment link, or "Mark as Paid" for bank/cash payments.

Tip: Draft orders are essential for B2B and phone sales. Payment links expire after 7 days. Use custom line items for consulting fees, installation, or negotiated pricing.

Discounts & Promotions

Coupon codes with usage limits, date ranges, and priority rules.

1 Go to Discounts → "New Discount".
2 Choose type: Percentage (e.g., 20% off) or Fixed (e.g., kr 100 off).
3 Set a coupon code for checkout entry.
4 Configure max uses, start date, and end date.

Tip: For storefront sale displays, use the compare-at price on individual products instead of creating a discount code — it's more visible to browsing customers.

Dynamic Discount Rules

Automatic discounts that apply without coupon codes when conditions are met.

Percentage Off

E.g., 10% off orders over 1000 kr.

Fixed Amount Off

E.g., 100 kr off orders over 500 kr.

Free Shipping

E.g., free shipping on orders over 499 kr.

Multiple rules can stack — e.g., "10% off over 500 kr" and "Free shipping over 499 kr" both trigger on the same order. Configure at Settings → Discount Rules with optional date ranges and priority ordering.

Gift Cards

Digital gift cards with balance tracking, split payment at checkout, and transaction ledger.

How It Works

Issue: Marketing → Gift Cards → enter value & optional expiry → unique XXXX-XXXX-XXXX code generated.

Redeem: At checkout, customer enters the code. Full coverage = instant payment. Partial coverage = remaining charged via Stripe.

Refund: If Stripe session expires after applying a gift card, the balance is automatically refunded.

Active
Used
Expired
Disabled

Tip: Issue gift cards as refunds instead of cash — money stays in your ecosystem and drives repeat purchases. Set 12-month expiry.

Multi-Warehouse / Locations

Multiple inventory locations with per-variant per-location stock tracking.

Warehouse

Main storage. Products shipped to customers.

Store

Physical retail. Ship-from-store or BOPIS.

3PL

Third-party logistics partner.

Stock is tracked per variant per location. The storefront shows the aggregate total. Configure at Settings → Locations. When an order is paid, stock is allocated from available locations — split across multiple fulfillments if needed.

Fulfillment

Split fulfillment from multiple locations with ship/deliver tracking.

Pending
Packed
Shipped
Delivered

On Order Details, create fulfillments manually or let the system auto-allocate. Ship with optional tracking number/URL. Mark as delivered when the customer receives the package. Uses fulfillment.created and fulfillment.shipped webhook events.

Returns (RMA)

Customer self-service returns with 30-day window, admin workflow, and automatic gift card refunds.

Customer Flow

Customer opens a completed order in their portal → clicks "Request Return" → selects items, quantities, and reason → submits. Tracks status at /app/returns.

Admin Flow

Review at Sales → Returns → Approve/Reject → Mark as Received → Process Refund (gift card automatic or original method manual). Inventory is restocked on refund.

Requested Approved Rejected Received Refunded

Webhook Events

return.requested return.approved return.refunded

Back-in-Stock Alerts

Automatic email notifications when out-of-stock products are restocked.

1 Customer visits an out-of-stock product → "Notify Me When Available" form appears.
2 Customer enters email → notification record created.
3 When stock goes from 0 to >0 (any location), InventoryLevelObserver triggers a queued job.
4 Back-in-stock email sent to all waiting customers. Duplicates prevented.

Stock Forecasting

Predictive restocking alerts based on 30-day sales velocity.

The dashboard analyzes sales over the past 30 days and predicts when each variant will run out. Alerts appear in the amber panel if less than 30 days of stock remain.

~3 days — Order immediately ~12 days — Plan reorder ~25 days — On radar

Customer Segments

Dynamic segments that auto-recalculate hourly based on purchase behavior.

VIP

Spent > 5,000 NOK total. Your most valuable customers.

First-Time Buyers

Exactly 1 order. Target with welcome offers.

At Risk

Last order > 90 days ago. Re-engagement candidates.

Big Spenders

AOV > 1,000 NOK. Target with premium products.

Custom Segments

Build conditions with: Total Spent, Order Count, Last Order Days Ago, Avg Order Total, Registered Days Ago, Customer Group. Use Match ALL or Match ANY logic. Preview matches before saving.

Abandoned Cart Recovery

Automatic email recovery for carts abandoned 1+ hours, with up to 3 reminders.

How It Works

1 Customer adds items to cart — cart is persisted to the database.
2 Customer enters email at checkout step 1.
3 Customer leaves without completing payment.
4 After 1 hour → flagged as "abandoned" → recovery email sent automatically.
5 Up to 3 reminders, spaced 24 hours apart.
6 Customer clicks recovery link → cart restored → redirected to cart page.
Active
Abandoned
Recovered
Converted

Tip: Recovery runs automatically every 15 minutes — no setup needed beyond a mail driver. Industry average recovery rate is 5-10%. Monitor at Marketing → Abandoned Carts.

Product Feeds

Auto-generated feeds for Google Shopping, Meta, TikTok, and Pinterest. Regenerated every 4 hours.

Google Shopping

XML feed for Google Merchant Center. Includes all required g: fields.

Meta Commerce

JSON catalog for Facebook Shop and Instagram Shopping.

TikTok

JSON catalog for TikTok Ads Manager product catalog.

Pinterest

XML feed for Pinterest Business catalog ingestion.

Create at Marketing → Product Feeds. Each feed gets a public URL at /feeds/{slug}.xml or .json. Submit the URL to the ad platform. Feeds regenerate automatically every 4 hours.

Smart Recommendations

"Customers who bought this also bought…" based on co-purchase analysis.

A nightly command (recommendations:generate) analyzes 90 days of orders. Products frequently bought together get a co-purchase score. On product pages, recommendations are shown in priority order:

1. Manual cross-sell — always wins if set.

2. Co-purchase data — sorted by score.

3. Same brand/type fallback — for new products with no orders.

Tip: Manually set cross-sell on your top 20 bestsellers to bootstrap recommendations. After 50+ orders, the system handles it automatically.

Subscriptions

Recurring orders with 5 frequency options and customer self-service.

Customers subscribe from a completed order → choose frequency → system auto-generates orders on schedule. B2B customers get instant processing with invoices. B2C customers receive a Stripe payment link.

Weekly

7d

Bi-weekly

14d

Monthly

30d

Bi-monthly

60d

Quarterly

90d

Customer Self-Service

At /app/subscriptions: change frequency, update quantities, pause, resume, or cancel. Admins manage all subscriptions at Sales → Subscriptions.

Webhook Events

subscription.created subscription.order_generated subscription.cancelled

Company Accounts

B2B wholesale with registration, payment terms, credit limits, and approval workflow.

Name & Registration — Organization number and VAT number for invoicing.

Payment Terms — Net 0, 15, 30, or 60 days.

Credit Limit — Maximum outstanding invoice balance. Orders exceeding the limit are blocked.

Approval — Only approved companies can use "Pay on Account".

Users — Multiple employees linked with roles: Admin, Buyer, or Viewer.

Price Lists

Customer-group-based price overrides with priority, date ranges, and quantity breaks.

Pricing Resolution Order

1. Active price lists for the user's customer group (highest priority first)

2. Price list entries matching variant, currency, and minimum quantity

3. Customer group price in the prices table

4. Base price (no customer group)

Supports quantity breaks — e.g., kr 80 when buying 10+, kr 60 when buying 50+.

Pay on Account

Approved B2B customers checkout on credit with automatic invoicing.

Approved companies with payment terms and sufficient credit see "Pay on Account" at checkout. Order is placed immediately, invoice generated with due date. Stock decremented and fulfillments created. Overdue invoices flagged daily.

Pending Paid Overdue Void

AI Shopping Assistant

Storefront chatbot with product search, order tracking, and bilingual support (EN/NO).

Enable in 4 Steps

1 Configure AI provider API key in .env (ANTHROPIC_API_KEY or OPENAI_API_KEY).
2 Go to Settings → AI Settings.
3 Toggle "AI Shopping Assistant" to ON.
4 Chat bubble appears instantly on all storefront pages.

Search Products

Natural language search: "winter jackets under 2000 kr", "Nike shoes on sale"

Product Details

"Tell me about the Deluxe Widget", "Is this in stock?", "What sizes?"

Track Orders

"Where is WP-ABCD1234?" — returns status, total, and tracking info.

Architecture

Powered by Laravel AI SDK with tool-calling. Three tools: SearchProducts, GetProductDetails, TrackOrder. Uses the cheapest model for cost efficiency. Conversation stored in session (up to 20 messages).

AI Descriptions & SEO

Generate product descriptions and SEO metadata with one click.

AI Description Generator

On the product editor, enter keywords (e.g., "waterproof, lightweight, hiking, breathable") and click Generate. The AI creates a professional description with paragraphs and feature bullet points. Always review before publishing.

AI SEO Generator

On the SEO tab, click "Generate with AI" to auto-create optimized URL slug, meta title, and meta description. Review the live Google search preview before saving.

Tip: The more specific your keywords, the better the result. The AI writes in the same language as your input — write in Norwegian for Norwegian descriptions.

Themes

8 built-in color themes with light/dark mode support.

Ocean

Professional blue

Forest

Natural green

Sunset

Warm orange

Berry

Creative purple

Rose

Soft pink

Midnight

Deep indigo

Ember

Bold red

Mint

Fresh emerald

Page Builder

Visual drag-and-drop editor with 55+ modules including 9 e-commerce modules.

Editor Layout

Left panel — Module library. Drag modules into your page.

Center canvas — Your layout with 1-4 column rows.

Right panel — Settings for the selected module.

E-Commerce Modules

Product Grid
Product Carousel
Featured Product
Collection Grid
Product Search
Store Banner
Store Info
Newsletter Signup
Brand Bar

E-commerce modules pull live data from your catalog. Data is cached for 5 minutes.

Customer Portal

Self-service account at /app with B2B-adaptive features.

My Account

/app

Dashboard with greeting, order count, total spent, and recent orders.

My Orders

/app/orders

Full order history with details, totals, and fulfillment tracking.

My Addresses

/app/addresses

Manage shipping/billing addresses. Set defaults for faster checkout.

Subscriptions

/app/subscriptions

Change frequency, update quantities, pause, resume, or cancel.

Company (B2B)

/app/company

Org number, VAT, payment terms, credit limit, outstanding balance.

Invoices (B2B)

/app/invoices

Invoice list with status, due date, and amount tracking.

Tip: The portal adapts automatically — when you link a user to a company, the B2B features (Company, Invoices) appear instantly.

Analytics

Visual analytics with charts, KPIs, and period-over-period comparison.

7 days
30 days
90 days
12 months

Revenue

Total revenue from completed/processing orders.

Orders

Order volume with trend indicator.

New Customers

Customer acquisition over period.

Avg Order Value

AOV with period-over-period change.

Recovery Rate

Abandoned cart recovery percentage.

Top Sellers

Top 10 bestselling products by units sold.

Charts

Revenue Over Time (line), Orders Over Time (bar), AOV (line), Customer Acquisition (dual-line with B2B highlight), Cart Recovery (stacked bar). All interactive with hover tooltips.

REST API

Token-based API (Laravel Sanctum) with 12 resource endpoints, filtering, includes, and cursor pagination.

Authentication

Create tokens at Settings → API Tokens. Include header: Authorization: Bearer YOUR_TOKEN. Rate limit: 60 req/min.

Endpoints

GET/POST   /api/v1/products       GET/POST  /api/v1/orders
GET/POST   /api/v1/customers      GET/POST  /api/v1/collections
GET/POST   /api/v1/brands         GET/POST  /api/v1/tags
GET/POST   /api/v1/discounts      GET       /api/v1/currencies
GET        /api/v1/channels       GET       /api/v1/dashboard/stats
GET        /api/v1/inventory

Filtering & Includes

GET /api/v1/products?filter[status]=published
GET /api/v1/products?include=variants,brand,media
GET /api/v1/orders?filter[status]=processing

Token Abilities (Scopes)

products:read products:write orders:read orders:write customers:read customers:write collections:read collections:write dashboard:read inventory:read

Webhooks

21 events with HMAC-SHA256 signing, automatic retries, and delivery log.

Setup

Settings → Webhooks → "Add Webhook" → enter endpoint URL → select events → Test → Save. Retries: 3 attempts with backoff (10s, 1m, 5m).

Available Events (21)

order.created order.updated order.status_changed product.created product.updated product.deleted customer.created customer.updated inventory.changed cart.abandoned fulfillment.created fulfillment.shipped invoice.created invoice.paid subscription.created subscription.order_generated subscription.cancelled return.requested return.approved return.refunded stock.back_in_stock

Signature Verification

Each payload is signed with HMAC-SHA256. Verify the X-WirePulse-Signature header against your webhook secret.

$payload = file_get_contents('php://input');
$expected = hash_hmac('sha256', $payload, $secret);
if (hash_equals($expected, $signature)) {
    // Webhook is authentic
}

Plugin System

Hook-based architecture with 4 extension points.

Plugin Structure

plugins/my-plugin/
├── manifest.json                    # Plugin metadata
└── src/
    └── MyPluginServiceProvider.php  # Registration logic

Extension Points (Hooks)

admin.sidebar.items — Add custom menu items to the admin sidebar

product.editor.tabs — Add custom tabs to the product editor

checkout.after_payment — Run logic after payment confirmation

api.routes — Register additional API endpoints

Example Registration

$manager = app(PluginManager::class);
$manager->registerHook('admin.sidebar.items', fn () => [
    'label' => 'My Feature',
    'icon'  => 'star',
    'route' => '/wirepulse/my-feature',
]);

Store Settings

Complete configuration reference.

Staff

Admin access management. Toggle admin privileges per user.

Product Types

Define types and configure which attributes appear for each.

Currencies

Exchange rates, decimal places, symbols. Mark one as default.

Channels

Sales channel configuration for multi-platform selling.

Languages

URL slugs and multilingual support. Default language setting.

Taxes

Tax classes, zones, and rates. Configurable VAT/GST per region.

Shipping

6 providers: Flat Rate, Free Shipping, Weight-Based, Bring, Postnord, Local Pickup.

Locations

Warehouses, stores, 3PL. Per-location inventory tracking.

API Tokens

Sanctum tokens with scoped abilities. Rate limited 60/min.

Webhooks

21 events, HMAC-SHA256 signed. Retry with backoff.

Plugins

Enable/disable installed plugins from the plugins/ directory.

Discount Rules

Automatic discounts without coupon codes.

AI Settings

Toggle AI Shopping Assistant. Requires AI provider API key.

Pages

CMS pages with visual Page Builder. Draft/publish workflow.

Themes

8 color themes with instant storefront switching.

Plans & Pricing

WirePulse is open source and free to use. Pro and Enterprise tiers unlock advanced features.

Community

Free

Products, variants, collections, cart, Stripe checkout, single warehouse, discount codes, Page Builder, themes, REST API, webhooks, and plugin system.

Pro

$99/month

Everything in Community, plus: multi-warehouse, abandoned cart recovery, gift cards, product feeds, AI Shopping Assistant, AI descriptions & SEO, returns/RMA, discount rules, recommendations, analytics, draft orders, back-in-stock alerts.

Enterprise

$299/month

Everything in Pro, plus: B2B company accounts with payment terms, price lists with volume pricing, pay on account (invoicing), recurring subscriptions, stock forecasting, dynamic customer segments.

Purchase your license at wirepulse.org/pricing. After checkout, your license key appears on your dashboard.

Activating Your License

Get up and running with your Pro or Enterprise license in minutes.

1 Create an account and purchase a Pro or Enterprise license at wirepulse.org/pricing.
2 After checkout, your unique license key (UUID) appears on your dashboard.
3 Copy the key and add it to your WirePulse installation's .env file:
WIREPULSE_LICENSE_KEY=your-uuid-license-key-here
4 WirePulse verifies the license daily against the license server and caches the result for 24 hours.
5 Pro/Enterprise features become available immediately after the first successful verification.
6 Run php artisan license:verify to verify manually at any time.

Configuration

License settings in config/license.php.

Environment Variables

# Your license key from wirepulse.org
WIREPULSE_LICENSE_KEY=

# License server URL (default: https://wirepulse.org)
WIREPULSE_LICENSE_SERVER=https://wirepulse.org

# Cache TTL in hours (default: 24)
WIREPULSE_LICENSE_CACHE_TTL=24
WIREPULSE_LICENSE_KEY

Your UUID license key. Leave empty for Community (free) mode.

WIREPULSE_LICENSE_SERVER

The license server URL. Only change this for self-hosted license servers.

WIREPULSE_LICENSE_CACHE_TTL

Hours to cache the verification result. Default 24. Lower values mean more frequent checks.

Verification & Feature Gating

How WirePulse verifies your license and enables features.

Daily Verification

A scheduled command (license:verify) runs daily and contacts the license server at POST /api/v1/verify. The server validates the key and returns the tier (free/pro/enterprise) and expiry date. Results are cached locally.

Manual Verification

php artisan license:verify

# Output (valid):
# License valid — Tier: pro, Expires: 2027-03-30

# Output (no key):
# License invalid or not configured — running in free/community mode.

Graceful Degradation

License verification never blocks your store. If the license server is temporarily unreachable:

1. WirePulse uses the last known valid result from cache.

2. If no cache exists, the store runs in Community (free) mode.

3. When the server is reachable again, the next verification updates the cache automatically.

Admin Banner

A small banner at the top of the admin panel indicates your license status:

Blue No license key — Community mode. "Upgrade to Pro" link.
Red Key set but expired/invalid. "Renew your license" link.
None Valid Pro/Enterprise — no banner shown.

Managing Your Subscription

Log in at wirepulse.org/app to view your license key, manage your subscription via Stripe (upgrade, downgrade, cancel), and download invoices. Tier changes take effect on the next license verification.

Tip: If you downgrade from Enterprise to Pro, Enterprise-only features (B2B, subscriptions, segments) are disabled but your data is preserved — upgrade again and everything is restored.

Quick Reference

Scheduled Commands

segments:recalculate Hourly
carts:process-abandoned Every 15 min
feeds:generate Every 4 hours
invoices:check-overdue Daily
subscriptions:generate-orders Daily
recommendations:generate Daily 03:00
license:verify Daily

Database Schema (60+ tables)

Catalog: products, variants, types, brands, attributes, collections, tags, prices, media, urls
Sales: orders, order_lines, addresses, customers, groups, discounts, discount_rules
B2B: companies, company_user, price_lists, price_list_entries, invoices
Inventory: locations, inventory_levels, fulfillments, fulfillment_lines
Payments: payment_settings, gift_cards, gift_card_transactions
Marketing: segments, carts, feeds, stock_notifications, recommendations
Subscriptions: subscriptions_wp, subscription_wp_items
Returns: return_requests, return_lines

Ready to get started?

WirePulse is open source and free to use. Clone, install, and start selling.