Saved.

Vendor Dashboard

Welcome back, Karibu Craft Co. — here's your store at a glance.

$3,841Revenue (30d)
↑ 18% vs last month
47Units Sold
↑ 12 this month
4.9Rating
★★★★★ (70 reviews)
6Active Items
2 pending review
2Open Orders
Fulfillment due
Revenue (Last 8 Weeks)
Recent Orders
OrderItemTotalStatus
NUN-847291Maasai Choker$55Fulfilling
NUN-831044Coral Collar$85Shipped
NUN-819200Maasai Choker$55Delivered
Store Notifications
New order received — Maasai Beaded Choker
2 hours ago
Product approved — Coral & Turquoise Collar is now live
Yesterday
Payout of $1,122 sent to your account
3 days ago
New 5-star review on Maasai Beaded Choker
5 days ago
Your Revenue Split
72%
Yours
28%
Nunua
No listing fees or monthly subscriptions. Payouts sent bi-weekly directly to your account.

Store Metrics

Track your performance across Nunua.

$12,440Total Revenue
↑ All time
138Total Orders
↑ 47 this month
$90.10Avg. Order Value
↑ $6 vs last month
2,841Profile Views
↑ 320 this month
Monthly Revenue
Top Products by Revenue
Product Performance
ProductUnits SoldRevenueRatingViewsStatus
Maasai Beaded Choker47$2,585★★★★★ (47)812Active
Coral & Turquoise Collar23$1,955★★★★★ (23)634Active
Ocean Pearl Cuff14$980★★★★☆ (14)410Under Review

Order History

All orders routed to your studio through Nunua — real-time from the Nunua API.

Order #CustomerItemQtyTotalDateStatusAction
NUN-847291A. OseiMaasai Beaded Choker1$55Feb 18Fulfilling
NUN-831044K. MensahCoral & Turquoise Collar1$85Feb 05Shipped
NUN-819200J. WilliamsMaasai Beaded Choker2$110Jan 22Delivered
NUN-804772M. SaidCoral & Turquoise Collar1$85Jan 10Delivered
NUN-791048A. HassanMaasai Beaded Choker3$165Dec 28Delivered

My Inventory

Manage your Nunua product listings.

Click any stock number to edit inline
Product ↕ SKU Price ↕ Stock ↕ Status Actions
Maasai Beaded Choker
Traditional glass beads · Hand-strung · $55 · Stock: 12
Active
Coral & Turquoise Collar
Ocean trade beads · Leather-backed · $85 · Stock: 5
Active
Ocean Pearl Cuff
Freshwater pearls · Brass backing · $120 · Stock: 3
Under Review

Vendor Profile

Your public-facing studio page on Nunua and the Vendor Directory.

Studio Information
Craft Specialties
Your Artisan Story
Fulfillment Settings

Studio Avatar

Your studio's visual identity on Nunua and the Vendor Directory.

KC
Studio avatar preview
Display Text (2 chars)
Shape
Rounded
Circle
Square
Color Palette
Or choose an emoji
Upload Studio Logo
🏷️ Click to upload logo (JPG/PNG, max 5MB)

Change Password

Keep your vendor account secure.

Enter a new password

Payout Center

Your 72% revenue split — paid bi-weekly, directly to your account.

$1,122Pending Payout
Due Mar 15, 2026
$8,956Total Paid Out
↑ All time
$3,484This Year
↑ 2026 to date
Payout Method
ℹ Payout processing takes 2–5 business days. Payouts are sent bi-weekly. Minimum payout threshold: $50. Contact support for mobile money options (M-Pesa, Airtel Money).
Payout History
DateAmountOrders IncludedMethodStatus
Feb 15, 2026$1,122.4014 ordersBank TransferPaid
Feb 1, 2026$879.2011 ordersBank TransferPaid
Jan 15, 2026$1,044.0013 ordersBank TransferPaid

Vendor Support

Direct line to the Nunua vendor team. We respond within 1 business day.

Submit a Support Ticket
📎 Attach files (screenshots, documents)
Open Tickets
#VTK-0018
Payout for January not received
Opened Feb 1, 2026 · Payment / Payout
Open
#VTK-0014
Product photo guidelines clarification
Opened Jan 20, 2026 · Policy Question
Resolved

API & Webhooks

Connect your Nunua vendor account to the Bleu Allusion Shopify store. Generate your API key and configure webhook endpoints below.

API Keys

Your API key authenticates sync requests between the Shopify store and this marketplace. Paste this value into Shopify → Online Store → Themes → Customize → Theme Settings → Nunua Marketplace Sync → Nunua API Key.

Active Key Live
nva_••••••••••••••••••••••••••••••••
Created Mar 1, 2026 · Last used Mar 8, 2026
⚠ Rotating your key immediately invalidates the previous key. Update the Shopify Theme Settings value before rotating.
Webhook Signing Secret

This secret is used to sign all webhook payloads sent from Nunua to your Shopify store. Paste this value into Shopify → Theme Settings → Nunua Marketplace Sync → Webhook Secret. The Shopify webhook handler uses it to verify that payloads are genuinely from Nunua.

Signing Secret
whsec_••••••••••••••••••••••••••••••••
Webhook Endpoints

Nunua sends signed POST requests to these endpoints when inventory, orders, or prices change. The Shopify endpoint receives inbound sync events from this marketplace.

Shopify Sync Endpoint Active
https://shop.bleuallusion.com/apps/proxy/nunua/webhook
Topics: inventory.updated · order.placed · price.changed · product.synced
Last delivery: Mar 8, 2026 · 14:22 UTC · 200 OK · 84ms
Shopify Sync Status

Live connection status between this Nunua vendor account and the Bleu Allusion Shopify store.

Shopify Store Connectedshop.bleuallusion.com
Store Handleshop-bleuallusion
API Key Activenva_••••••••3f8a
Webhook Secret Setwhsec_••••••••9c2d
Sync DirectionBidirectional
Last PingChecking…
Recent Webhook Deliveries
Time Topic Status Latency
Mar 8 · 14:22 inventory.updated 200 OK 84ms
Mar 8 · 11:05 order.placed 200 OK 112ms
Mar 7 · 19:48 price.changed timeout 30s+
Mar 7 · 09:14 inventory.updated 200 OK 67ms

Are you sure?

Webhook Delivery
Request Payload

    
Response Body

  

Payout Statements

Monthly earnings breakdown, commission deductions, and net payout history.

This Month Gross
$2,840
Platform Commission
-$284
10%
Net Payout
$2,556
Next Payout Date
Mar 15
Bank transfer
Payout History
Period Gross Sales Commission Net Payout Status Statement

Restock Requests

Let the marketplace know when you're restocking. We'll surface "Back Soon" tags on your listings.

New Restock Request
Active Restock Alerts

Revenue Analytics

Visual revenue and traffic trends. Toggle between weekly and monthly views.

Revenue Trend Monthly View
Store Traffic (Page Views) vs prior period: +14%
`); win.document.close(); showToast('✓ Payout statement opened — use Print to save as PDF.'); } /* ═══════════════════════════════════════════════════════ RESTOCK REQUEST FORM ═══════════════════════════════════════════════════════ */ const RESTOCK_SEED = [ { id:'rs1', product:'Kente Cloth Wrap', date:'2026-03-25', qty:30, status:'live', notes:'New batch from weaver co-op' }, { id:'rs2', product:'Maasai Beaded Choker (2XL, 3XL)', date:'2026-04-05', qty:15, status:'pending', notes:'Awaiting Maasai supplier' }, ]; function loadRestockRequests() { try { return JSON.parse(localStorage.getItem('ba_vendor_restock') || 'null') || RESTOCK_SEED; } catch(e) { return RESTOCK_SEED; } } function saveRestockRequests(list) { try { localStorage.setItem('ba_vendor_restock', JSON.stringify(list)); } catch(e) {} } function renderRestockList() { const el = document.getElementById('restockList'); if (!el) return; const list = loadRestockRequests(); const statusColor = { live:'var(--sage)', pending:'#D4850A', fulfilled:'var(--text3)' }; el.innerHTML = list.length ? list.map(r => `
${r.product}
ETA: ${r.date} · Qty: ${r.qty} · ${r.status}
${r.notes ? '
'+r.notes+'
' : ''}
`).join('') : '
No active restock requests.
'; } function submitRestockRequest() { const product = document.getElementById('restockProduct')?.value; const date = document.getElementById('restockDate')?.value; const qty = parseInt(document.getElementById('restockQty')?.value || '0'); const notes = document.getElementById('restockNotes')?.value.trim(); const res = document.getElementById('restockResult'); if (!product) { if(res) res.textContent = 'Please select a product.'; return; } if (!date) { if(res) res.textContent = 'Please set a restock date.'; return; } if (!qty) { if(res) res.textContent = 'Please enter an expected quantity.'; return; } const productNames = { 'maasai-choker':'Maasai Beaded Choker (2XL, 3XL)', 'kente-wrap':'Kente Cloth Wrap', 'brass-earrings':'Brass Filigree Earrings (M)', 'bead-bracelet':'Beaded Cuff Bracelet (all sizes)' }; const list = loadRestockRequests(); list.unshift({ id:'rs'+Date.now(), product: productNames[product]||product, date, qty, status:'pending', notes }); saveRestockRequests(list); renderRestockList(); if (res) res.textContent = '✓ Restock request submitted! Marketplace team notified. "Back Soon" tag will appear on your listing.'; ['restockDate','restockQty','restockNotes'].forEach(id => { const el = document.getElementById(id); if(el) el.value=''; }); document.getElementById('restockProduct').value = ''; showToast('✓ Restock request submitted.'); } /* ═══════════════════════════════════════════════════════ ADVANCED ANALYTICS CHART ═══════════════════════════════════════════════════════ */ const ANALYTICS_DATA = { week: { labels: ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'], revenue:[280,420,315,590,445,780,620], traffic:[42,68,55,88,71,130,95], kpis:{ gross:'$3,450', orders:47, aov:'$73', views:549 } }, month: { labels: ['Oct','Nov','Dec','Jan','Feb','Mar'], revenue:[2340,2980,4210,2675,3120,2840], traffic:[890,1050,1680,940,1120,1080], kpis:{ gross:'$18,165', orders:284, aov:'$63.96', views:'6,760' } } }; let _analyticsPeriod = 'month'; function setAnalyticsPeriod(period, btn) { _analyticsPeriod = period; document.querySelectorAll('#sec-analytics-adv .btn-primary, #sec-analytics-adv .btn-secondary').forEach(b => { b.className = b.getAttribute('onclick')?.includes(period) ? 'btn-primary' : 'btn-secondary'; b.style.fontSize = '.75rem'; }); renderAdvAnalytics(); } function renderAdvKPIs() { const el = document.getElementById('analyticsKPIs'); if (!el) return; const d = ANALYTICS_DATA[_analyticsPeriod].kpis; el.innerHTML = [ { label:'Gross Revenue', value:d.gross, color:'var(--cream)' }, { label:'Orders', value:d.orders, color:'var(--cream)' }, { label:'Avg Order Value',value:d.aov, color:'var(--gold)' }, { label:'Page Views', value:d.views, color:'var(--cream)' }, ].map(k => `
${k.label}
${k.value}
`).join(''); } function renderBarChart(containerId, data, labels, color) { const el = document.getElementById(containerId); if (!el) return; const max = Math.max(...data); el.innerHTML = data.map((v, i) => { const pct = max ? Math.round(v / max * 100) : 0; return `
${v >= 1000 ? (v/1000).toFixed(1)+'k' : v}
${labels[i]}
`; }).join(''); } function renderAdvAnalytics() { const d = ANALYTICS_DATA[_analyticsPeriod]; const lbl = document.getElementById('analyticsPeriodLabel'); if (lbl) lbl.textContent = _analyticsPeriod === 'week' ? 'Weekly View (last 7 days)' : 'Monthly View (last 6 months)'; // Traffic change const tc = document.getElementById('trafficChange'); if (tc) tc.textContent = _analyticsPeriod === 'week' ? '+8%' : '+14%'; renderAdvKPIs(); setTimeout(() => { renderBarChart('advRevenueChart', d.revenue, d.labels, 'var(--gold)'); renderBarChart('advTrafficChart', d.traffic, d.labels, 'var(--blue)'); }, 50); } /* ═══════════════════════════════════════════════════════ INIT HOOKS FOR NEW VENDOR SECTIONS ═══════════════════════════════════════════════════════ */ const _origVendorShowSection = typeof showSection === 'function' ? showSection : null; function showSection(id) { document.querySelectorAll('.portal-section').forEach(s => s.classList.remove('active')); document.querySelector(`#sec-${id}`)?.classList.add('active'); document.querySelectorAll('.sb-nav a').forEach(a => a.classList.remove('active')); const link = [...document.querySelectorAll('.sb-nav a')].find(a => a.getAttribute('onclick')?.includes("'"+id+"'")); if (link) link.classList.add('active'); if (id === 'payouts') { renderPayoutHistory(); } if (id === 'restock') { renderRestockList(); } if (id === 'analytics-adv') { renderAdvAnalytics(); } } document.addEventListener('DOMContentLoaded', () => { renderInvTable(); renderVendorOrders(); });