CoreLukeCoreLuke · Bootstrap 5.3 · Inter · Phosphor · light & dark
Template · Web 02New · 14 workspaces

One kit.
Every operation.

The Shopeers B2B eCommerce kit, now with 14 workspaces — logistics, F&B, finance, CMMS, enterprise ops, glasshouse wedding venue, marketing, AutoCount-style accounting, CRM, healthcare, education, property and travel. Over 150 pages, one design system, one module engine and page-to-page transitions that feel like a single app.

Open dashboard Browse pages
150+Pages
70+Components
14Workspaces
2Themes
15Libraries

Dashboard & pages

Pages for the selected workspace. Each opens in the app shell from assets/js/app.js.

Colour & theme tokens

Live values from assets/css/shopeers.css — toggle dark mode to compare. Click a swatch to copy its variable.

Brand

Surfaces & borders

Text

Semantic

Gradients

--sp-primary-grad Export button
--sp-bar-grad Active day bar
--sp-premium-grad Upgrade card

Sampled from the Dribbble reference

ElementPixelToken
Export button (top → bottom)#2862FF → #3A76FE--sp-primary-grad
Active nav background / text#ECF3FE / #1659DD--sp-primary-soft / --sp-primary-text
Page background#F5F7F9--sp-bg
Card border#E8EAEC--sp-border
Delta up (bg / ink)#E7F6EF / #21B35F--sp-success-soft / --sp-success
Delta down (bg / ink)#FCE7EC / #C5345E--sp-danger-soft / --sp-danger-text
Wholesalers bar · rating star · gauge#F78429 #E7B832 #31C281--sp-warning --sp-amber --sp-gauge
Premium card#2962EA → #273F89 → #151928--sp-premium-grad

Typography

Inter 400–800 (Google Fonts) with cv11 ss01 ss03 features, tight tracking on numbers.

Hero number$446.7K2.35rem / 700 / -.04em
Page titleDashboard1.45rem / 600
Stat value16,4311.85rem / 700
Card titleBest Selling Products.95rem / 600
BodyTrack how customers access your store across mobile, desktop, and tablet..875rem / 400
Nav / buttonAdd widget.835rem / 500
Captionvs. 14,653 last period.72rem / muted
Table headerRevenue.66rem / 500 / UPPER
InlineLink here · mark · code · Ctrl K—

Motion & transitions

Every page change is animated by assets/js/app.js + section 15 of shopeers.css. Nothing to wire up per page — add data-no-transition to a link or data-no-motion to <body> to opt out.

Cross-page View Transitions

@view-transition { navigation: auto }. Sidebar and topbar have their own view-transition-name so they stay still; the active nav pill slides to the new item; content cross-fades. Chrome / Edge 126+.

Staggered entrance

On load, cards, rows and the page header get .sp-enter with --i → they rise in 45 ms apart. Only blocks above the fold are delayed, so long pages never feel slow.

Navigation progress bar

Starts on click, survives the page load (sessionStorage) and completes on the next page — like a single-page app.

Fallback leave

Browsers without View Transitions get html.sp-leaving: the content fades and drops 6 px for 170 ms before navigating. Back/forward cache is handled.

Micro-interactions

Dropdowns scale in, modals rise, drawers ease, tab panes slide, tables cross-fade on filter (.sp-swap), routes draw and vehicles travel.

Reduced motion

prefers-reduced-motion: reduce turns off view transitions, staggers, floats and route animations; everything renders in its final state.

Try it

Navigate to Fleet
<a href="fleet.html">Fleet</a> <!-- animated automatically --> <a href="report.pdf" data-no-transition>PDF</a> <!-- opt out per link --> <section data-enter>…</section> <!-- force a custom block into the stagger --> el.classList.add('sp-swap') // cross-fade re-rendered content

Buttons

Bootstrap .btn re-skinned. Primary uses the gradient + inner highlight from the Export button.

Variants

Outline

Sizes, shapes & states

Groups

<button class="btn btn-primary"><iconify-icon icon="ph:download-simple-bold"></iconify-icon>Export</button> <div class="sp-segmented"><button class="active">Day</button><button>Week</button></div>

Badges & status

Delta pills from the KPI cards, status dots, hashtag chips, counters.

Delta

15,5%8,4%10,5%0,0%

Status

PaidPendingOverdueShippedBetaDraftOnline

Tags, counts & Bootstrap badges

#Audience Insights#PerformanceB2B 46123New248 newPrimarySuccessDangerWarningSecondary

Cards & stats

.sp-card, KPI .sp-stat, Customers .sp-segbox, mini stats with sparklines, icon tiles, premium & banner cards.

Customers

Avg. order value
$364.80

Icon tiles

Upgrade card (sidebar)

Upgrade to Premium!

Upgrade your account and unlock all of the benefits.

Card with footer

Low stock

3 products below reorder point

SAMSUNG Galaxy S25 Ultra38 left
Canon EOS R50 Kit22 left
AI insight · Tuesday traffic is 42% above average

.sp-banner — premium gradient strip for announcements.

Forms & inputs

Native inputs plus Select2, DateRangePicker, Inputmask, noUiSlider — all themed in assets/css/plugins.css.

$USD
Order number must have 5 digits.
$200 – 800

Tables

.sp-table (Best Selling Products), the boxed variant, and DataTables themed to match.

Best Selling Products

IDNameSoldRevenueRating

.sp-table.is-boxed + bulk selection

0 selected
CustomerTypeSpentStatus

DataTables

OrderCustomerChannelItemsTotal

Alerts, toast & popup

SP.toast() and SP.confirm() from assets/js/app.js, SweetAlert2 themed, tooltips, progress.

Alerts

New AI insight
Your repeat customer rate is 12 points under target.
Payout sent
$24,310.00 is on its way to •••• 4021.
Low stock
SAMSUNG Galaxy S25 Ultra has 38 units left.

Toast · SP.toast(message, type, options)

SP.toast('Widget removed', 'info', { title: 'Done', duration: 4000, action: 'Undo', onAction: restore });

Confirm · SP.confirm({...}) → Promise<boolean> & SweetAlert2

Progress & spinners

AI queries74%
Storage38%
Seats4 / 10
Loading
Loading
Spinners & thinking orb

Quick Action (Ctrl K)

Command palette: pages, actions, products, customers and orders, scope chips, recent items, “Ask AI”. Files: components/quick-action.js + .css, items in data/quick-action-data.js, wired in assets/js/app.js.

Trigger

Style · app pages open Spotlight, centered. These cards preview the other layouts here.

Keyboard

Ctrl K open ↑ ↓ move ↵ open item Tab next scope Esc close → otherwise collapses the sidebar G D go to dashboard (also G O / G P / G C / G S, T = theme)

Items

GroupLabelTargetIconShortcut

Use in a page

<link rel="stylesheet" href="components/quick-action.css?v=20261012i"> <script src="components/quick-action.js?v=20261012"></script> <script> const qa = SpQuickAction.init({ style: 'spotlight', // default | spotlight | sidebar | compact items: [{ group: 'Pages', label: 'Orders', icon: 'ph:tray', href: 'orders.html', keywords: 'sales', shortcut: 'G O' }], onSelect: item => { if (item.action) { run(item); return false; } }, onAsk: q => askAssistant(q) // shows the “Ask AI” row }); </script> <!-- any [data-quick-action] element opens it; Ctrl/⌘ K anywhere -->

Modal & drawers

Bootstrap modal/offcanvas re-skinned; .sp-drawer is the floating Add Widget panel.

← notifications dropdown (same as the topbar)

Avatars & people

Sizes, presence, initials, groups and the person row used in tables.

LHMT +4
Bluepeak Electronics
Daniel Ong · Distributor

Skeleton & empty states

.sp-skel shimmer and .sp-empty.

No orders yet

When customers place orders they’ll show up here.

Logistics components

Renderers in assets/js/sp-logistics.js (SPL.*), styles in section 16 of shopeers.css, sample data in data/logistics-data.js. Used by Warehouse, Fleet, Air Freight, Sea Freight and Customs.

SPL.route · air

SPL.route · sea + port calls

SPL.route · road

SPL.journey(steps, current)

Status pipeline (.sp-pipe)

Vertical journey

SPL.fleetMap — click a vehicle

Containers (.sp-container)

40HC · FCLSLXU 4820193
20GP · FCLOCNU 2209411
40RF · REEFERTRDU 7781024
LCLCFS-0918

Rings, meters & heat cells

Customs lanes

GreenYellowRedNot assigned

Document checklist (.sp-docs)

Commercial invoicePDF
Packing listPDF
Certificate of origin

Vehicle list item & quote option

Workspaces & module engine

14 workspaces in SP_MENU.suites (data/app-data.js). The sidebar switcher shows the workspace that owns the current page. Every module page is rendered by assets/js/sp-module.js from a definition in data/modules/<workspace>.js: stats, clickable workflow strip, table / board / cards views, drag-and-drop between stages, a drawer with journey, approval chain, notes and activity log, plus a "New" form.

All modules

A module definition (data/modules/fnb.js)

SPM_DEFS.push({
  id: 'kds', entity: 'Ticket', ref: 'KT-', view: 'board',
  stages: ['New', 'Cooking', 'Ready', 'Served'], terminal: ['Recalled'],
  verbs: { Ready: 'Bump to pass' },
  cols: [['ref', 'Ticket', 'ref'],
         ['items', 'Items', ['Nasi Lemak Ayam ×2', 'Roti Canai ×3']],
         ['station', 'Station', ['Wok', 'Grill', 'Drinks']],
         ['age', 'Waiting', 'ago:1,24'], ['stage', 'Status', 'stage']],
  kpis: [['Open tickets', 'open', 'ph:receipt'], ['Ready', 'stage:Ready', 'ph:bell']],
  side: [{ type: 'alerts', items: [...] }, { type: 'breakdown', by: 'station' }]
});

Side panels (side: [{ type }])

flowworkflow stepsbreakdownlive donutbars / hbars / trendchartsalertsresolve list sensorslive thresholds → alert → action logreconexpected vs counted, denominationsqrscan → open recordcalendaravailability, holds, no double bookingquotepackage + add-ons → quotationposregister + ingredient deduction apiintegration syncstatementP&L / trial balancebudgetbudget vs actualutm · ab · seomarketing tools

Column generators

ref person company branch money:min,max num:min,max,unit dec:… pct:… date:-30,0 due:0,30 ago:min,max time:8,20 or an array to pick from. Seeded, so every visit shows the same data.

Try the flagship flows

Charts

assets/js/sp-charts.js — ApexCharts + hand-made SVG/HTML. Colours come from tokens and re-theme on sp:theme.

Total Profit · SPCharts.profit()

$446.7K
24,4%vs. last period

Most Day Active · dayBars()

Repeat Customer Rate · gauge()

donut()

radial()

bars() · stacked

line() · area

SPCharts.profit('#el', { thisMonth: [...], lastMonth: [...] }); SPCharts.gauge('#el', 68, { sub: 'On track for 80% target', action: 'Show details' }); SPCharts.dayBars('#el', [{ d: 'Tue', v: 8162 }, …], { active: 2, onSelect: (d) => … });

AI Assistant

Orb, dotted halo, suggestion chips, chat bubbles and the pill input. Full page opens the same assistant across the app shell.

Full page

AI Assistant

Pieces

Which day is busiest?
Tuesday — 8,162 active visitors, 42% above your weekly average.
<div class="sp-ai-stage"><div class="sp-ai-halo"></div><div class="sp-ai-orb"></div></div> <!-- add .is-thinking to the orb while waiting for a reply -->

Authenticator (TOTP)

Settings → Security. A 6-digit code, HMAC-SHA1, 30 seconds. This preview uses a fixed demo secret and does not change the one saved in your browser.

Open in Settings

Set up authenticator

Scan the QR with Google Authenticator, 1Password, or any TOTP app.

Authenticator code

Enter the 6-digit code from your app. It refreshes every 30 seconds.

SPTotp.mount({ status: 'stTotpStatus', setup: 'stTotpSetup', live: 'stTotpLive', code: 'stTotpCode', … }); /* RFC 6238 · HMAC-SHA1 · 6 digits · 30s · secret in localStorage key sp-totp-secret */

Calendar

FullCalendar 6 (assets/libs/fullcalendar) with token-based theme and soft event colours.

Editor & upload

Quill rich text and Dropzone (demo — nothing is uploaded).

Quill

Write a product description for your B2B buyers…

Dropzone

Drop files here or browse
PNG, JPG, CSV up to 5 MB

Icons

Phosphor via iconify-icon — regular for idle, -fill for active/emphasis, -duotone for illustrations. Click to copy.

<iconify-icon icon="ph:tray"></iconify-icon> <iconify-icon icon="ph:tray-fill"></iconify-icon>

Logo & images

Inline SVG logo (SP.logo), assets/img/favicon.svg, avatars in assets/img/avatars. Brand name is set once in data/app-data.js → SP_CONFIG.brand.

Faviconfavicon.svg

Avatars

Library inventory

Copied from 01/assets/libs into 02/assets/libs (only the dist files) so 02 is self-contained.

LibraryUsed forEntry file

Folder structure

How to reuse this template in a new project.

Template/web/02/
├── index.html                  ← this component library
├── pages/
│   ├── dashboard.html/.js/.css ← Shopeers dashboard (KPIs, profit, segments, day bars, gauge, AI, Add Widget)
│   ├── orders.html             ← tabs, filters, bulk actions, order drawer, create-order modal
│   ├── products.html           ← grid / list, categories, add-product drawer + Dropzone
│   ├── customers.html          ← segments, gauge, sortable table, profile drawer, invite modal
│   ├── invoices.html           ← summary sparklines, status filter, printable invoice preview
│   ├── analytics.html          ← KPIs, traffic, channel donut, funnel, category bars, heatmap
│   ├── settings.html           ← profile / store / team / billing / notifications / security + save bar
│   ├── sidebar.html            ← shell variants (expanded · mini · mobile)
│   ├── blank.html              ← starter page (?page=content|online-store|transactions|reports|discounts|help)
│   ├── error.html              ← 404 / 403 / 500 / 503 (?code=404)
│   ├── modules.html            ← hub: every workspace and module, searchable
│   ├── warehouse · fleet · air-freight · sea-freight · customs (+ submenu pages) ← logistics
│   ├── logistics/ fnb/ finance/ facilities/ ops/ venue/ marketing/ accounting/
│   │   crm/ health/ edu/ property/ travel/ commerce/
│   │                           ← one folder per workspace: index.html (overview) + module pages
│   ├── marketing/landing.html  ← standalone landing page (+ thank-you.html, landing.css)
│   ├── marketing/cta.html      ← CTA module: SaaS, Minimal, Agency (open full screen in a new tab)
│   └── pages.css               ← page-level pieces
├── assets/
│   ├── css/shopeers.css        ← tokens (light + dark) + every sp-* component
│   ├── css/plugins.css         ← Select2, DateRangePicker, noUiSlider, FullCalendar, DataTables, Quill, Dropzone, SweetAlert2
│   ├── js/app.js               ← shell (sidebar, topbar, theme, Esc), SP.toast, SP.confirm, Quick Action wiring, shortcuts
│   ├── js/sp-charts.js         ← profit, gauge, dayBars, donut, bars, line, spark, radial
│   ├── js/sp-logistics.js      ← SPL.route, journey, fleetMap, rings, meters
│   ├── js/sp-module.js         ← module engine (SPM): KPIs, workflow, table/board/cards, drawer, side panels
│   ├── img/                    ← favicon.svg, avatars/
│   └── libs/                   ← bootstrap 5.3, apexcharts, fullcalendar, select2, … (dist only)
├── components/quick-action.*   ← Ctrl K palette (4 styles)
├── data/app-data.js            ← SP_CONFIG (brand/user), SP_MENU, SP_DATA (products, customers, orders, invoices…)
├── data/quick-action-data.js   ← palette items
├── data/logistics-data.js      ← warehouses, vehicles, AWBs, containers, customs
├── data/modules/*.js           ← module definitions per workspace (SPM_DEFS)
└── preview/                    ← library page chrome (preview.css, preview.js)
Add Widget
Orders Performance

Monitor order volume, fulfillment status, and sales activity in real time.

#Operations
Trend Analysis

Group customers by behavior and demographics for targeted marketing.

#Strategy
Filters