Welcome to your ECStores Admin Panel. This is where you manage everything about your online store — products, orders, appearance, and payment settings. Your customers never see this panel; they only see your store at your-store.ecstores.ca.
What's in the sidebar?
| Menu Item | What it does |
|---|---|
| 📦 Products | Add, edit, and manage everything you sell. |
| 📁 Categories | Group your products so customers can filter by type. |
| 🚚 Suppliers | Track the businesses you buy your products from. |
| 📬 Shipping Methods | Set up shipping options. Flat rate on all plans; weight-based pricing and free shipping threshold on Growth and Pro. |
| 🏷️ Coupons | Create coupon codes and discounts for customers. Available on Growth and Pro plans. |
| 🧾 Orders | View and manage every order placed in your store. Issue refunds and manage returns directly from the order page (Pro plan). |
| 👤 Customers | View customer profiles, purchase history, and lifetime value. CLV analytics require Pro plan. |
| ↩️ Returns (RMA) | View all return requests across your store — RMA numbers, statuses, and linked refunds. Pro plan only. |
| ⚙️ Site Settings | Configure store name, currency, tax rate, free shipping threshold, and policies. |
| 🎨 Branding Studio | Customize colours, fonts, logo, and style. |
| 💳 Payments | View your Stripe connection status (you connect in your ECW portal). |
| 📊 Financial Reports | View sales stats, top-selling products, and export reports. Detail level and exports depend on your subscription plan. |
| ❓ Help Center | This page — step-by-step guides for everything. |
✅ First-Time Setup Checklist
Work through these in order to get your store ready to sell:
Products are the items you sell. Each product can have images, a price, description, inventory count, and variants (like sizes or colours).
Viewing Your Products
Click Products in the sidebar to see a table of all your products. From here you can:
Restoring a Deleted Product
Deleting a product moves it to the Trash — it disappears from your storefront and product list, but its details (name, price, images, variants) are kept so you can bring it back.
Adding a New Product
Click New Product (top right). Fill in the form sections from top to bottom:
@foreach([ ['Images', 'Upload photos. Drag to reorder — the first image is the main photo. Up to 10 images per product.'], ['Name', 'The display name customers see on your storefront. Keep it clear and descriptive.'], ['Slug', 'Auto-filled from the name when you first create the product — used in the product\'s web address. It then stays the same even if you rename the product, so existing links keep working. You can edit it manually if you really need to change the URL.'], ['Category', 'Assign a category (e.g., "Accessories"). Set up categories first for best results.'], ['SKU', 'Optional internal product code (e.g., "WS-BUR-001"). Useful for real-world inventory tracking.'], ['Description', 'Tell customers what the product is, what it\'s made of, and why they\'ll love it.'], ] as [$field, $desc]){{ $field }}
{{ $desc }}
Pricing & Sale Prices
Regular Price *
The normal selling price. Enter a number without the dollar sign (e.g., 24.99). Always required.
Sale Price
Optional. Must be lower than the Regular Price. On your storefront the sale price shows highlighted and the regular price appears crossed out.
Is On Sale toggle
Turn On to activate the sale price on your storefront. Turn Off to show only the regular price — even if a sale price is saved. Lets you prepare a sale in advance.
Inventory Tracking
Units in Stock
How many you have available. Decrements automatically when a customer buys (only if Track Inventory is on).
Track Inventory
Turn On to show "Out of Stock" when stock reaches zero. Turn Off for unlimited/made-to-order products.
Allow Overselling
Only applies when Track Inventory is On. Allows orders even when stock is zero — useful for pre-orders or quick-restock items.
📬 Per-Product Shipping Settings
Each product has three shipping options in the Shipping section of the product form (scroll down past Inventory):
Ships Free
When On, this product does not trigger a base shipping charge. If every item in the cart is set to Ship Free, base shipping is waived entirely at checkout.
Count Toward Free Shipping Threshold
When On (default), this item's price counts toward the store-wide free shipping threshold. Turn Off for items you do not want to trigger free shipping on the rest of the cart.
Separate Shipment Cost
Adds a fixed per-quantity shipping charge regardless of the normal shipping method (e.g., $25.00 for an oversized item that ships on its own). Shown as a separate line at checkout. Leave blank to use standard shipping rules for this product.
Product Variants (Sizes, Colours, etc.)
Variants let a single product be offered in multiple options (e.g., a T-shirt in Small/Medium/Large). The Variants section in the product form is collapsed by default — click to expand.
Variant Group
A dimension of choice — e.g., "Size", "Colour", "Scent". You can have multiple groups on one product.
Variant Option
A value within a group — e.g., "Small", "Medium", "Large" within a "Size" group.
Featured & Discontinued
⭐ Featured
Shows the product in a "Featured Products" spotlight section at the top of your homepage.
🚫 Discontinued
Hides the product from your storefront. The product stays saved in your admin so you can bring it back later.
Categories are groupings for your products. Customers can click a category name on your storefront to filter the product grid — e.g., "Candles", "Jewellery", "Home Decor".
Creating a Category
Deleting a Category
Open the category and click Delete (confirm when prompted). Any products in that category are not deleted — they simply become uncategorised (their Category field is cleared) and stay visible on your storefront. Re-assign them to another category from each product's form when you're ready.
Suppliers are the companies or people you purchase products from. This is for your own reference only — customers never see supplier information. You can link a supplier to a product to always know at a glance where it comes from.
Adding a Supplier
Deleting a Supplier
Deleting a supplier does not delete its products. Any products linked to it simply have their Supplier field cleared and remain in your catalogue.
Shipping Methods are the delivery options customers choose at checkout. All plans support flat-rate methods. Growth and Pro plans also support weight-based pricing, a free-shipping threshold, and per-product separate shipment costs.
Flat Rate Shipping
Available on all plans. A single fixed price is charged regardless of cart contents.
0 for free.Free Shipping
Name: "Free Shipping"
Description: "3–5 business days"
Price: $0.00
Flat Rate
Name: "Standard Shipping"
Description: "Via Canada Post"
Price: $12.99
Local Pickup
Name: "Local Pickup"
Description: "Pick up in Halifax"
Price: $0.00
Weight-Based Shipping Growth+
Charge different rates depending on the total weight of items in the cart. Define weight tiers — each tier has a minimum weight, an optional maximum weight, and a price.
Free Shipping Threshold Growth+
Set a minimum order amount that, once reached, waives the base shipping charge automatically. Configure this in Site Settings → Free Shipping.
How Threshold Works
When the qualifying items in the cart reach or exceed the threshold (e.g., $75), base shipping becomes free. Items with Count Toward Threshold turned off are excluded from this calculation. Items with their own Separate Shipment Cost are still charged those costs even when the threshold is met.
Coupons let you offer customers a discount code they enter at checkout. You control the amount, whether it is a flat dollar discount or a percentage, and when it expires.
Creating a Coupon
SUMMER20). Codes are stored in uppercase automatically.Coupon Fields Explained
Minimum Order Amount
Optional. The coupon will only apply if the cart subtotal is at or above this amount. Leave blank to allow the coupon on any order value.
Expiry Date
Optional. After this date the coupon is invalid and customers will see an "expired" error at checkout. Leave blank for no expiry.
Max Uses
Optional. Limits how many total times the coupon can be used across all orders. Once the limit is reached, the coupon stops working automatically. Leave blank for unlimited uses.
How Customers Use Coupons
At checkout, Step 3 (Order Review) shows a coupon code field. Customers type their code and click Apply. The discount appears immediately in the order summary. Only one coupon can be applied per order.
When a customer completes checkout, an order is created here. This is where you manage fulfillment, update statuses, and communicate with customers.
Reading the Order List
Order Statuses Explained
| Status | What it means | What to do |
|---|---|---|
| Pending | Order placed, payment not confirmed yet. | Wait for payment. If never received, cancel the order. |
| Processing | Payment received, order being prepared. | Pick, pack, and prepare items for shipping. |
| Shipped | Order has been dispatched. | Use the Mark as shipped button to record the carrier + tracking and email the customer automatically. |
| Cancelled | Order was cancelled. | Contact customer and arrange a refund if they paid. |
| Return Requested | A return (RMA) has been created and is waiting for the items to arrive. | Share return shipping instructions with the customer. Click Mark Return Received when items arrive. |
| Return Received | Returned items have been received and inspected. | Issue a refund using the Refund button. The return request closes automatically. |
| Partially Refunded | A partial refund has been issued — the order is still partially paid. | Issue additional refunds if needed from the order page. |
| Refunded | The full order amount has been refunded. | No further action needed. Refund was processed through your admin. |
Opening and Updating an Order
📦 Marking an Order Shipped (with Tracking)
Instead of changing the status by hand, use the Mark as shipped button (on the order page and in the orders list; it appears while an order is Pending or Processing). It does three things at once:
Notes to Customers
The Note to Buyer field on the order edit page shows the customer a message when they check their order history — useful for delivery estimates or anything the automatic emails don't cover.
💸 Issuing a Refund Pro
To issue a refund, open the order and click the Refund button at the top right of the page. A panel opens with these options:
Stripe — Original Payment
Returns money to the customer's card via Stripe automatically. Requires that the order was paid via Stripe. The refund appears on their bank statement within 5–10 business days.
Manual — E-transfer / Cash
Records a refund that you process yourself outside the system (e-transfer, cash, cheque). No automatic Stripe action is taken.
Store Credit — Generates a Coupon Code
Automatically creates a single-use coupon code worth the refund amount. The code is emailed to the customer (if you enable the notification) and also appears in your Coupons list. The customer enters it at checkout like any coupon. The code is locked to that customer — only the email it was issued to can redeem it, so a forwarded or leaked code won't work for anyone else.
Enter the Refund Amount (up to the unpaid balance), choose a Reason, and optionally turn on Notify customer by email to send them a refund confirmation. Click Issue Refund to confirm.
📥 Returning Items to Inventory
The Refund panel has a Return items to inventory switch. Turn it on to add the refunded items back to your stock counts:
↩️ Requesting a Return (RMA) Pro
When a customer needs to return items, open their order and click Request Return (visible on Processing, Shipped, and Partially Refunded orders). This creates an RMA (Return Merchandise Authorization). See the ↩️ Returns (RMA) section below for full details.
An RMA (Return Merchandise Authorization) is a tracked return request. When a customer needs to send something back, you create an RMA on their order. The system assigns a unique RMA number (e.g., RMA-AB12CD), tracks the items coming back, and links to the refund once it is processed.
Return Workflow — Step by Step
| Step | What you do | Order status after |
|---|---|---|
| 1. Request Return | Open the order → click Request Return. Fill in the reason, select items and quantities, optionally email the customer. | Return Requested |
| 2. Mark Return Received | When the items arrive, open the order → click Mark Return Received. Confirm quantities received. Optionally email the customer. | Return Received |
| 3. Issue Refund | Click Refund → choose Stripe, Manual, or Store Credit. The return request closes automatically. | Refunded or Partially Refunded |
Step 1 — Creating a Return Request
Step 2 — Marking Items as Received
Returns (RMA) List Page
Click Returns (RMA) in the sidebar to see all return requests across all orders in one place. You can filter by status:
Requested
Return created — awaiting the physical items.
Return Received
Items are in your hands — ready to refund.
Completed
Refund issued and return closed.
Rejected
Return was declined.
Each row links to the original order where you can take action.
Go to Settings → Site Settings. After making changes, always click Save Settings at the bottom.
Store Information
Store Name — Appears in the header and customer emails.
Contact Phone — Shown to customers in the storefront footer. Optional.
Use my account email as the storefront contact email — When this toggle is On, your storefront shows your login email as the contact. Turn it Off to enter a separate Contact Email that displays instead.
Slogan — Short tagline shown below your store name. Optional.
Contact / Business Address — Shown to customers in the storefront footer. Optional.
Currency & Tax
Currency — CAD, USD, EUR, or GBP. Changing it auto-fills the symbol.
Currency Symbol — Shown next to prices (e.g., CA$, £). You can override it.
Collect Tax (toggle) — Enable to automatically add tax to every order at checkout.
Tax Rate (%) — The percentage to add (e.g., 15 for 15% Nova Scotia HST).
Tax Registration Number — Optional. Shown on order receipts if set.
Free Shipping Threshold Growth+
Enter a dollar amount (e.g., 75.00). When qualifying items in the cart reach or exceed this total, base shipping is automatically waived at checkout. Leave blank to disable. Items with Count Toward Threshold turned off on their product page are excluded from the calculation.
Require Account to Check Out
Off (default): Customers check out as guests — no account needed. Recommended for most stores.
On: A customer who reaches checkout without being signed in is asked to sign in or create an account first, then returns straight to checkout. The cart page also tells guests an account will be needed.
Policies
Enter your Shipping Policy, Return Policy, and Privacy Policy. They appear (each in its own section) on your storefront's Store Policies page (/policies), linked in the footer of every page; while all three are blank the page and link are hidden. Be specific — clear policies reduce disputes and build trust.
Privacy Policy — explain what customer data you collect, why, and how you protect it. Strongly recommended if you collect personal information, and expected under Canada's PIPEDA if you use analytics or marketing pixels (e.g. Google Analytics or a Meta pixel).
Go to Settings → Branding Studio. After changes, click Save and visit your store to see the result.
🎨 Brand Colours
Five colour slots. Click to open a colour wheel or type a 6-digit hex code (e.g., #005888). Hex codes must be a # followed by exactly six characters 0–9/A–F — if you enter anything else, you'll see a "6-digit hex colour" prompt and the colour won't save.
{{ $name }} Colour
{{ $desc }}
🔤 Fonts
Set a Heading Font and Body Font. Type any Google Font name (e.g., Playfair Display, Lato). Default is Inter — clean and professional.
🔲 Button Style
Clean and modern.
Friendly and trendy.
Bold and professional.
🖼️ Logo, Favicon & Banner
Logo — Top-left of every page. PNG/WebP with transparent background is best.
Favicon — Tiny icon in the browser tab. Upload a square image (32×32 or 64×64 pixels).
Banner — Full-width image at the top of your homepage. Landscape format, at least 1400×400 pixels.
📐 Image Guidelines (Logo, Favicon, Banner & Products)
For fast page loads and crisp display, follow these recommendations. Uploads must be image files — JPG, PNG, WebP, or GIF (PDFs, SVGs and other file types are rejected).
| Image | Recommended size | Max file size |
|---|---|---|
| Logo | ~300 × 100 px, transparent PNG | 4 MB |
| Favicon | Square, 32 × 32 or 64 × 64 px | 1 MB |
| Homepage banner | Landscape, ≥ 1400 × 400 px | 4 MB |
| Product images | Square-ish, ~1000 × 1000 px, up to 10 per product | 4 MB each |
When a customer pays, their money goes directly into your own connected Stripe account — EastCoast WebCraft never touches your funds. It's a full Stripe account that belongs to you (it goes with you if you ever leave). Stripe is free to sign up for. {{ $feeCountText }} (see the breakdown below), so there is nothing for you to pay separately or invoice for.
💰 The fees on each sale
Because the payment is charged straight to your own Stripe account, this is what is deducted from every sale:
| Fee | Amount | Goes to |
|---|---|---|
| Stripe processing fee | 2.9% + $0.30 per sale (Stripe's standard rate) | Stripe — for handling the card payment |
| Platform fee | {{ $feeAmountText }} | EastCoast WebCraft — for running your store |
Example on a $100.00 order: {!! $feeExample !!}
Connecting Your Stripe Account
You connect Stripe in your EastCoast WebCraft client portal — not in this admin panel.
Understanding Your Stripe Status
The Settings → Payments page in this panel is read-only — it shows your status and links back to your ECW portal. It does not onboard or change anything.
Charges Enabled ✅
Stripe can process card payments. This must show Enabled before your store can accept orders.
Payouts Enabled
Collected funds can transfer to your bank. Stripe typically uses a rolling payout schedule (e.g., 2-day rolling). Check your Stripe dashboard for your schedule.
Your Stripe Dashboard
Once connected, the Open Stripe Dashboard link on the Payments page takes you to your own full Stripe dashboard (dashboard.stripe.com) where you can view payment history, see payout amounts, look up transactions by Payment Intent ID, issue refunds, and respond to disputes.
Your storefront is the public-facing website at your-store.ecstores.ca. Here's what customers experience:
🏠 Homepage (Product Grid)
Shows all products in a grid. Banner image at the top if uploaded. Featured products in a spotlight section. Customers search by name or filter by category. Products are paginated — 12 per page.
📄 Product Page
Full description, images, price, and variant options. Customer selects variants, sets quantity, and clicks "Add to Cart".
🛒 Cart
Shows all added items with the ability to change quantities or remove items, then proceeds to checkout.
✅ Checkout (4 Steps)
(1) Contact & Billing → (2) Shipping selection → (3) Order review → (4) Secure payment via Stripe. Ends on an "Order Confirmed" page.
👤 Customer Accounts
Customers can optionally register to view order history, manage their wishlist, and save their address. No account is required to purchase (unless you enable that in Site Settings).
The Staff page (under Store in the sidebar) is where you add and manage the people who can sign in to your admin panel. Everyone you add gets full admin access for now.
Inviting a Staff Member
Deactivate vs. Delete
Deactivate
The person can no longer sign in, but their account and history are kept — and it frees a seat. Use it when someone leaves; Reactivate restores access later (if you have a free seat).
Delete
Permanently removes the account.
The Reviews page (under Store in the sidebar) is your moderation queue for customer product reviews. Reviews are available on every plan. Only customers who have purchased a product can review it, and nothing appears on your storefront until you approve it.
Approving or Rejecting a Review
Each row shows the product, the customer, their star rating, whether it's a Verified purchase (linked to a real order), the review text, and its status.
You can connect Google Analytics 4 and/or a Meta (Facebook) Pixel to see how visitors find and use your store. This is available on every plan. Both are optional — leave a field blank and nothing is added to your storefront.
Connecting your accounts
G-, e.g. G-ABC1234567). Find it in Google Analytics under Admin → Data Streams → your web stream (shown top-right).To turn tracking off, clear the field and save. If you enter something that isn't a valid ID, the form tells you and won't save it.
The REST API lets you read your store's products and orders from your own tools and scripts. It's a Pro plan feature — the API page (under Settings in the sidebar) shows an upgrade prompt on Starter and Growth.
1. Create an API key
2. Make a request
Send your key as a Bearer token in the Authorization header. The base URL is your store address followed by /api/v1:
curl https://your-store.ecstores.ca/api/v1/products \
-H "Authorization: Bearer ecs_xxxxxxxx_your_key_here" \
-H "Accept: application/json"
3. What you can read
| Method & path | Returns |
|---|---|
GET /api/v1/products | Your live products (discontinued ones are hidden), newest id first, paginated. |
GET /api/v1/products/{id} | A single product. |
GET /api/v1/orders | Your orders, newest first, paginated (line items omitted for speed). |
GET /api/v1/orders/{id} | A single order with its line items and shipping details. |
The API is read-only for now — it never changes your data. Order responses include what you need to fulfil (contact, shipping address, totals, items) but never raw card or Stripe payment identifiers.
4. Pagination
List endpoints return 25 records per page. Add ?per_page=50 (max 100) to change the page size and ?page=2 to move through pages. Each response includes a meta block (total, per_page, current_page) and links (first/last/prev/next).
5. Rate limit & errors
429 Too Many Requests — wait a moment and retry.401 Unauthorized — missing, mistyped, or revoked key.403 Forbidden — your plan doesn't include the API (upgrade to Pro), or your store is temporarily unavailable.6. Order webhooks
Rather than polling for new orders, have your store push you a signed message the instant an order is placed. Open Settings → Webhooks and add the URL on your server that should receive it. Webhooks are part of the same Pro plan feature as the API.
https:// — order notifications carry customer names and addresses, so we never send them over an insecure connection (this is checked when you save and again right before every send).Each delivery is a POST with a JSON body { "event": "order.created", "created_at": …, "data": { …the order… } } (the same order shape as GET /orders/{id} — no payment identifiers) and these headers:
| Header | Meaning |
|---|---|
X-ECStores-Event | The event name, e.g. order.created. |
X-ECStores-Timestamp | Unix time the message was signed. |
X-ECStores-Signature | HMAC-SHA256 of timestamp | body, keyed with your signing secret. |
Verify every message before trusting it, then return a 2xx to acknowledge:
$payload = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_ECSTORES_TIMESTAMP'] ?? '';
$signature = $_SERVER['HTTP_X_ECSTORES_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $timestamp . '|' . $payload, 'YOUR_SIGNING_SECRET');
if (! hash_equals($expected, $signature)) {
http_response_code(400); // reject: bad signature
exit;
}
http_response_code(200); // 2xx = delivered
CREDIT-AB12CD). The code is valid in your store at checkout. It also appears in your Coupons list. Email the code to your customer using the Notify option in the Refund panel. The code is locked to that customer's email — only they can redeem it, so a forwarded or leaked code won't work for anyone else."],
["How do I start a return / RMA?", "Open the order (must be Shipped, Processing, or Partially Refunded) → click Request Return. Choose a reason, set return quantities for each item, then click Create. The order moves to Return Requested. See the ↩️ Returns (RMA) section in this Help Center for the full workflow."],
["Where do I see all my return requests?", "Click Returns (RMA) in the sidebar. All return requests across all orders are listed with their RMA number, status, reason, and linked order. You can filter by status. This is a Pro plan feature."],
["A customer says they paid but I see no order.", "Check the Orders list without any status filters. Ask the customer for their confirmation email. You can also search for the payment in your Stripe dashboard. If payment was taken but no order exists, contact EastCoast WebCraft support."],
["I made changes in Branding Studio but my store looks the same.", "Make sure you clicked Save. Then do a hard refresh: Ctrl+Shift+R on Windows, Cmd+Shift+R on Mac."],
["How do I change my store's web address?", "Your store address (yourname.ecstores.ca) is set at creation and cannot be self-changed. Contact EastCoast WebCraft if you need it updated."],
["Who do I contact for help?", "Contact EastCoast WebCraft at info@eastcoastwebcraft.ca. Include your store name and a description of the issue."],
];
@endphp
@foreach($faqs as $i => $faq)
Still need help?
EastCoast WebCraft is here to support you. Don't hesitate to reach out.
Email info@eastcoastwebcraft.ca