Overview
Store systems
Checking live services…
📌 Your alerts
📈 14-day revenue
🏆 Top SKUs
📋 Operations log
👋 Welcome to your store admin
This is your control center. The job is simple: customers place orders and pay (by Zelle and/or card), you fulfill them (print a label and ship), you answer questions (tickets), and you keep products, prices and stock up to date. Everything lives in the left sidebar.
The 60-second tour of the sidebar:
- Sell — Orders, Products, Subscriptions, Reviews, Abandoned carts.
- People — Customers, Wholesale, Institutional, Affiliates, Staff.
- Grow — Marketing, Newsletter, Rewards, Leads.
- Operations — Tickets, Returns/RMA, Webhook log, Tax/1099, Lots & docs, Health.
- Setup — Integrations, Settings.
Tip: the 🔍 search button at the top-right (⌘K) jumps you anywhere, and the small ? next to a page title gives quick help for that page.
✅ Your daily routine
Do these in order each day and nothing slips through the cracks:
- Open 📦 Orders → click the To Ship tab. These are paid orders waiting to ship — your work queue. Work it top to bottom.
- Open each order, print the label (or paste a tracking number) and it marks itself shipped. (Full steps in Shipping.)
- Open 🎫 Tickets → Open tab → reply to any waiting customers.
- Glance at 🏠 Home for new revenue, open orders, open tickets and low stock.
- Now and then, check 🛒 Abandoned carts and send a recovery reminder.
📦 Orders
Find an order
Click Orders in the sidebar. The tabs at the top filter the list: All · New · Paid · To Ship · Processing · Waiting for lab · Shipping · Shipped · Delivered · Cancelled. To Ship = paid orders not yet shipped (your queue). The search box matches order number, customer name and email.
Open an order
Click any row to open the order. You'll see cards for Payment, Shipping, Items, Notes, Customer and Ship to. Little badges on the list mean: 🛡️ insurance requested, 📸 a customer uploaded a Zelle screenshot that needs review, 📸✓ proof already accepted.
Take a payment / refund
In the order's 💳 Payment card: ✅ Mark paid, 💰 Partial, ✕ Cancel, ↩ Refund full or Refund partial. If the customer paid by Zelle and uploaded a screenshot, open the payment event and click ✅ Accept & mark paid.
Notes
The 📝 Notes card shows anything the customer left at checkout, plus notes staff add. To add/edit a note, use ✏️ Edit order → Notes.
Edit an order
✏️ Edit order lets you change the shipping address, add/remove items & quantities (unpaid orders only), set an affiliate or coupon code, and the shipping charge. Catalog prices auto-apply the correct bulk tier; type a custom price on a line to override just that line.
Add a new order / send an invoice
+ New Order → pick an existing customer or enter a new one, add products, set shipping/coupon, then Create & send invoice. The customer receives a payment invoice and the server prices it (you can't accidentally under/over-charge).
🚚 Shipping & printing labels
Two ways to ship: (A) buy a label right here, or (B) paste a tracking number for a label you bought elsewhere (e.g. Pirate Ship).
A) Buy & print a label here
- Orders → To Ship → click the paid order.
- In the 📦 Shipping card, choose a Service (Standard / Ground / 3-Day / Express).
- Click 🖨️ Print Label. It buys the cheapest label for that service and opens a 4×6 PDF — send it to your label printer.
- Prefer one click? Use ⚡ USPS Priority or ⚡ UPS Ground. Want to choose an exact rate? Click 📦 See rates and pick one.
- Done — the order is marked Shipped with tracking and the customer is emailed automatically.
B) Already have a tracking number? (Pirate Ship, etc.)
- Open the order → 📦 Shipping → find ✏️ Add tracking number.
- Pick the Carrier and paste the Tracking number.
- Click 📦 Ship it. It saves the tracking, marks the order shipped, and emails the customer.
Re-print, track & packing slips
Once a label exists you'll see 🖨 Print Label (4×6) and 📄 Download label to re-print, and 🔍 Track to open the carrier's tracking page. 🗃️ Print packing slip prints a slip to drop in the box.
Insurance & status
If the customer paid for 🛡️ insurance, it's added automatically when you buy the label. To set status by hand, use the Fulfillment status dropdown → Update status.
🎫 Tickets & support
Click Tickets in the sidebar (the badge shows how many are open). Tabs filter by All / Open / Pending / Resolved, plus a category filter (Support / Payments / Sales / Affiliates) and a search box.
Where tickets come from
The storefront chat widget (when a chat is escalated), customer emails to your support inbox, or created manually. The category is auto-detected from the message.
Reply to a customer
- Open a ticket from the Actions column.
- Type your reply and send — it's emailed to the customer.
- Set the status to Pending (waiting on the customer) or Resolved when it's handled.
👥 Customers
Click Customers, search by name or email, and click a row to open that customer — their orders, lifetime spend, tier and contact details.
- + Add Customer creates one by hand.
- Open a customer to edit contact info, set a Wholesale tier (unlocks wholesale pricing), or block them.
- New wholesale applications appear under 🏢 Wholesale — approve or deny there.
🧪 Products
Click Products. Search by name, SKU or category; click + New Product to add one. Click a product (or Edit) to change it.
What a product has
Name, amount/size, price, compare-at price, SKU, category, stock, description, image + gallery, and optional COA / SDS documents.
Pricing & bulk tiers
Set the base price. Quantity-break (bulk) tiers apply automatically at checkout and in admin order math. Inside an order edit you can override a single line's price for a special deal.
Stock, publish & ordering
- Edit stock or click ± Adjust stock. Out-of-stock items auto-hide from the storefront (unless backorders are allowed).
- 👁️ Publish/unpublish shows or hides a product on the storefront. ⧉ Duplicate clones it; Delete removes it.
- ↕ Organize lets you drag-reorder how products appear to shoppers.
- Batch COAs are managed under 📋 Lots & docs.
⚙️ Settings
Click Settings. The subtabs cover:
- Branding — logo and colors.
- Legal — disclaimer, refund policy, terms, privacy.
- Shipping — rate tiers, free-shipping threshold, your from-address and default parcel size. These power both the rates customers see and the labels you buy.
- Email templates — edit the emails customers receive; pick a template, edit, Preview, Save.
- Payments — your Zelle recipient details shown on invoices.
- Notifications — which events email you.
🔌 Integrations & keys
Click Integrations. The Status tab shows each service (green = connected, amber = partial, red = not connected). The API Keys & Payments tab is where you connect them:
- Square — card checkout (use Connect with Square, or paste keys).
- Shippo — discounted USPS/UPS rates & labels.
- USPS / UPS direct — carrier labels with your own account.
- Resend — outgoing email.
- PayPal — affiliate payouts.
- Shipping provider selector — which carrier powers rates & labels (Auto recommended).
🧰 Everything else (quick reference)
- 🔁 Subscriptions — recurring orders and their status.
- ⭐ Reviews — approve/feature customer reviews.
- 🛒 Abandoned carts — carts that didn't finish; send a recovery email.
- 💸 Affiliates — affiliates, their codes and commissions; Payouts pay them (PayPal or mark manual).
- 🎯 Leads — lead database + workers you grant access to.
- 🏢 Wholesale / 🔬 Institutional — wholesale applications & institutional buyers.
- ↩️ Returns / RMA — open and track returns; link a ticket.
- 🎁 Rewards · 📨 Newsletter · 📣 Marketing — loyalty, broadcasts, announcements/coupons.
- 📋 Lots & docs — batch lots and their Certificates of Analysis.
- 🧾 Tax / 1099 · 📡 Webhook log · 💚 Health — tax exports, incoming webhook debug log, and system health.
🐞 Report a bug / get help
Something looks wrong or broke? Send it straight to the team below — this opens a ticket in 🎫 Tickets and emails support, so you don't need an email app. The more detail, the faster it gets fixed.
🤝 Agent Program & Proposals
The Agent Program turns a prospect into a fully set-up authorized agent of WIN69 — with their own branded storefront, wholesale pricing, and store credit to order from day one. The whole process happens inside 🤝 Agent Packages and 📋 Proposals in the sidebar.
How the pipeline works
- Prospect submits interest — they fill in the "Authorized Agent Program" section at the bottom of
win69.app/products.html, pick a package (Starter / Growth / Enterprise) and hit Apply. A hyTickets ticket fires to the sales team automatically. - Sales follows up — open 🎫 Tickets and look for
[Agent Program Interest]tickets. Call or email the prospect to qualify them. - Send the proposal — go to 📋 Proposals → find the row (status =
Interested) → click 📤 Send Proposal. This emails a branded proposal document to the prospect via Resend (from [email protected]). Status changes toProposal Sent. - Prospect signs — once they confirm they've signed or reply agreeing, click ✍️ Mark Signed on the proposal row. Status →
Signed. - Collect payment — ask them to send payment via Zelle / wire (see the package price). Once you have the money, click 💳 Mark Paid & Activate.
- Automatic activation — the system instantly: adds store credit to their WIN69 customer account, sets their custom wholesale pricing tier, creates an agent invitation record, and fires a build ticket so the team can spin up their branded storefront.
Package tiers
- Starter — $10,000 — $10k store credit, 15% discount from standard prices (t2 pricing).
- Growth — $25,000 — $25k store credit, 25% discount (t3 pricing) + branding kit.
- Enterprise — $50,000 — $50k store credit, 35% discount (t4 custom pricing) + branding kit + dedicated support.
Managing existing agents
- 📋 Proposals — full status pipeline. Click any row to see the detail panel. Use filter chips to slice by status.
- 🤝 Agent Packages — shows the tier cards and a live table of all provisioned agents with their credit balance and store slug. Use + Provision Agent to manually activate an agent (skipping the proposal step).
- Adjust credit — in the Agent Accounts table, click + Credit next to any agent to add or remove store credit.
How ordering works after activation
Once activated, the agent logs into win69.app with their email. The catalog shows their custom tier prices. At checkout they'll see a 🎁 Store Credit toggle — checking it applies their credit balance to the order, reducing what they owe to zero (until the credit runs out). Orders placed this way appear in 📦 Orders just like any other order; you fulfill and ship them the same way.
Status reference
- interested — catalog form submitted; sales ticket created.
- proposal_sent — proposal email sent, awaiting signature.
- signed — prospect has confirmed they're in; awaiting payment.
- paid — money received (intermediate if mark-paid is pending activation).
- activated — fully live: credit added, pricing set, build ticket fired.
📖 Glossary
Payment statuses
paid awaiting payment partial refunded cancelled
Fulfillment statuses
new processing waiting for lab shipped partially shipped delivered cancelled
Terms
- RUO — Research Use Only. All products are sold strictly for in-vitro lab research.
- Zelle — bank-to-bank payment; customer sends it and includes the order number.
- Shippo — the service that fetches carrier rates and prints labels.
- COA / SDS — Certificate of Analysis / Safety Data Sheet for a product or lot.
- SKU — the unique code for a product variant.
- Affiliate / referral code — a code that credits a partner and may discount the order.
- Wholesale tier — a customer flag that unlocks wholesale pricing.
- Abandoned cart — a checkout that captured an email but never completed.
- Webhook — an automatic message from Square/Shippo/PayPal (e.g. “payment received”).
| Product | Amount | Price | SKU | Stock | Actions | |
|---|---|---|---|---|---|---|
| Loading products… | ||||||
| Cart value | Items | Status | Created | Updated | Action | |
|---|---|---|---|---|---|---|
| Loading abandoned carts… | ||||||
| Name | Tier | Rep | Orders | Lifetime Spend | Status | |
|---|---|---|---|---|---|---|
| Loading customers… | ||||||
Admins sign in with Google. Roles: admin (full access) · staff (read-only). Anyone can enable TOTP 2FA from their own card.
Applications
Activity log
Approving a wholesale application flips the customer's tier to wholesale, which unlocks per-product bulk pricing and the Request Quote flow on the storefront. Bulk pricing tiers are edited on each product — open any product and scroll to the "Wholesale bulk pricing" section.
| Applicant | Code | Applied | Actions | |
|---|---|---|---|---|
| Loading… | ||||
Program settings
Commission rates apply to the order subtotal. L1 is the direct referrer; L2/L3 walk up the sponsor chain. PayPal credentials are managed in Integrations.
PayPal Payouts
Enables the PayPal Payouts API (server-to-server) AND the Log In With PayPal OAuth flow affiliates use to attach their PayPal. The client secret lives in an environment variable on the server — never stored on disk.
Affiliates
| Affiliate | Code | Sponsor | Status | Balance | Lifetime | Actions |
|---|---|---|---|---|---|---|
| Loading affiliates… | ||||||
Payouts
| ID | Affiliate | Amount | Method | Status | Created | Actions |
|---|---|---|---|---|---|---|
| Loading payouts… | ||||||
Commissions post here once per paid order via the daily win69-affiliates.timer (or the “Run tick” button). Affiliates request payouts from their storefront dashboard; you either fire them via PayPal or mark them paid manually (Zelle, wire, check). RUO-only context applies to all program promotion.
Recent activity
| Business | Type | City / State | Score | Status | Assigned to | Last contact | Actions |
|---|---|---|---|---|---|---|---|
| Loading leads… | |||||||
| Person | Leads claimed | Calls | Emails | Last active | Actions |
|---|---|---|---|---|---|
| Loading workers… | |||||
Workers are people you've granted lead access. They can search, claim, and contact leads from the affiliate dashboard. Revoking access unclaims all their leads.
| ID | Category | Subject | Customer | Status | Source | Updated | Actions |
|---|---|---|---|---|---|---|---|
| Loading tickets… | |||||||
Tickets are created from the chat widget (escalation), customer emails to [email protected], or manually. Reply sends an email to the customer. Category is auto-detected from the message content.
Use Connect with Square for one-click setup, or paste keys manually below.
For webhooks, subscribe to
payment.updated, refund.updated, dispute.created and point at https://win69.app/api/ideas/store/win69/square/webhook.
Manual key entry (advanced)
Static shipping rates always remain as a fallback so checkout never breaks.
→ Get your API key from EasyPost → API Keys
Test keys begin with
EZTK. Live keys begin with EZT. Set Shipping provider → EasyPost above to make it the default.
→ Get your API token from Shippo → API Settings
Copy the Live Token (
shippo_live_…) or Test Token for development. Shippo auto-creates tracking webhooks when you buy labels.
To use: set Shipping provider → PirateShip above, Save, then Test.
→ Get your API key from Resend → API Keys → Create API Key
Copy the key (re_…). The sending domain win69.app must be verified in Resend.
→ Register at developer.usps.com → My Apps → Create App
Copy the Consumer Key (client_id) and Consumer Secret (client_secret) from your USPS app.
Label buying (USPS Ship enrollment)
Required to buy + print USPS labels directly. Get these from your USPS Business Customer Gateway → Customer Onboarding Portal.
Use Connect with UPS to authorize via your UPS account, or paste keys manually below.
→ Register at developer.ups.com → My Apps → Add App (set callback URL to
https://win69.app/api/ideas/store/win69/oauth/ups/callback)
→ Get credentials from PayPal Developer → My Apps & Credentials → Create App
Paste the Client ID and Secret below, choose the mode, then Connect to verify the OAuth handshake.
→ Google Cloud Console → APIs & Services → Credentials → Create OAuth 2.0 Client ID
Set the authorized redirect URI to
https://win69.app/api/ideas/store/win69/auth/google/callback.
📬 Announcement bar
Shown at the very top of win69.app. Up to 10 rotating blurbs. Keep RUO — no medical or efficacy claims.
🎟️ Coupons & Global Promos
Discount codes customers enter at checkout. Global Promo codes automatically apply their discount rate to customers using any affiliate code too. Affiliate Passthrough codes credit the last affiliate a customer used when they redeem the global code.
| Code | Type / value | Min | Uses | Flags | Expires | Active | |
|---|---|---|---|---|---|---|---|
| Loading coupons… | |||||||
Recent campaigns
| Subject | Audiences | Recipients | Sent OK / Err | Date |
|---|---|---|---|---|
| Loading campaigns… | ||||
{{name}} to personalise.| Name | Tags | Source | Subscribed | Status | |
|---|---|---|---|---|---|
| Loading subscribers… | |||||
To send a broadcast to newsletter subscribers, go to Mass Mail → Newsletter audience chip. Export CSV to back up the list.
📦 Shipping
Your from-address and default parcel. Customer-selected insurance is applied at label-buy time. RUO only.
Default parcel
🚚 Shipping rates & free shipping
Choose Flat rate to charge one flat shipping price (set it to 0 for always-free), or Live carrier to quote USPS/UPS at checkout. Free shipping kicks in at/above the threshold (set threshold to 0 to disable, or to always-free when the flat rate is 0).
🛡️ Insurance pricing
In Schedule mode the first “Free coverage” of order value is insured free, and every “Bracket size” of value above that adds “Rate per bracket”. Default: $100 free, then $50 per $500. Carrier mode uses the live insured-rate delta instead.
📦 Package templates
Boxes & envelopes offered when buying a label and for live checkout rate quotes. Pick the Default used when no package is chosen. Flat-rate rows carry a Shippo carrier-template token (leave blank for a plain dimensional parcel).
| Default | Name | Type | L | W | H | Wt oz | Flat-rate token | |
|---|---|---|---|---|---|---|---|---|
| Loading templates… | ||||||||
🚚 Carrier & service filtering
Control which shipping options appear when fetching rates. Shippo returns all available rates — these filters restrict what your team sees. Use * for "allow all".
* for all)
Common tokens: usps_priority usps_ground_advantage usps_priority_express usps_first usps_media_mail ups_ground ups_3_day_select ups_2nd_day_air ups_next_day_air
Requires SHIPPO_API_TOKEN in the store's admin keys or env. Tracking updates arrive via Shippo webhooks at /api/ideas/store/{slug}/shippo/webhook.
🖼 Storefront template
Choose a layout template for your storefront. Your colors, logo, banner, and branding settings apply on top of whichever template is active.
Store identity
🎨 Colors & theme
Choose a preset or customize individual colors. The preview strip updates live so you can see how your storefront will look.
🔧 Border, status & button colors
📢 Announcement banner colors
✉️ Email branding colors
⏳ Loading & splash screen
Brand assets
Upload once — served directly from nginx, no CDN required. Max 4 MB each. PNG / SVG / JPG / WebP accepted.
🌟 Storefront hero
Headline + sub-headline + the big call-to-action button on the storefront landing. Hero image is optional; leave blank for the default gradient. Saves to settings.hero_* — the storefront reads them on its next reload.
⚙️ Advanced theme
Fine-grained control over every CSS token on the storefront. Most admins only need the Branding tab — this is for power users who want pixel-level control.
✉️ Email template editor
Pick a transactional template, edit the subject + HTML, and preview the rendered email live. Saving creates an editable override; the built-in default is used until you save one.
✉️ Email overrides (legacy)
Override the default transactional emails. Leave blank to use the built-in copy. Available variables: {{customer_name}} {{order_id}} {{tracking_url}} {{total}} {{company}} {{support_email}}.
Order confirmation
Shipped
Refund issued
🔔 Notifications
Pick which events email a digest to your operations inbox. Sender wiring will roll into a follow-up; for now WIN69 stores your preferences and the registry below documents which subsystem fires each event.
💱 Currencies
USD remains the base currency for orders and Stripe charges. Adding currencies here exposes a header switcher on the storefront and converts displayed prices using the FX rate. Customers checkout in USD; the multi-currency display is informational.
Legal
📢 Announcement bar
Announcements are now managed under Marketing → Announcement, alongside coupons and broadcasts. This keeps a single source of truth for the rotating storefront banner.
| ID | Customer | Product | Cadence | Qty | Status | Next ship | Actions |
|---|---|---|---|---|---|---|---|
| Loading subscriptions… | |||||||
Auto-restock cadences are 4 / 8 / 12 / 26 weeks.
Reviews focus on purity, packaging, shipping, and documentation — the storefront RUO efficacy guard already strips medical, dosing, and human-use language at submission. Approved reviews appear immediately on the storefront.
Approved institutions can be enabled for Net-30 with a credit limit. Tax-exempt status is tracked per institution and applied at checkout.
Customers open RMAs from the storefront with their order ID + email; this queue is your decision point. Approving an RMA does not issue a refund automatically — it lets the customer ship the items back. Complete the RMA when the items arrive, optionally recording the refund amount, and run the actual refund from the Order detail (Stripe handles money movement).
| When | Source | Event | Status | ID | Actions |
|---|---|---|---|---|---|
| Loading delivery log… | |||||
Square checkout, Shippo tracker, and PayPal payouts append every delivery to state/stores/win69/webhook-log.jsonl through store_webhook_log_v1. Use “Replay” to re-inject a recorded payload locally; the new delivery is logged with a (replay) marker so you can tell them apart.
📈 Tax-year summary
Aggregates paid orders into a per-state breakdown using the rates in state/tax-rates.json. Use this as a shortcut into your CPA’s state-by-state filings.
📄 Affiliate 1099-NEC export
IRS requires a 1099-NEC for any non-employee paid ≥ $600 in a calendar year. This pulls from the per-store affiliate_payouts/ directory and emits a CSV your bookkeeper can hand to the 1099 service.
Manual award / deduct
Points ledger
| Customer | Balance | Lifetime earned | Redeemed | Last activity |
|---|---|---|---|---|
| Loading rewards… | ||||
Points are earned on paid orders via the daily win69-rewards.timer (or Run tick). Redemption is handled by the admin issuing a coupon; customers cannot spend points directly at checkout yet.
➕ New lot
⏰ Scheduled jobs
🏦 ACH Bank Transfer
Customers will see these details at checkout and initiate the transfer from their own bank. Money arrives in 1–3 business days. BOA/Chase deposit notifications auto-detect payment.
Webhook:
https://win69.app/api/ideas/store/win69/square/webhookManual key entry (advanced)
📂 Wallet Backups
📋 Recent payment events
📋 Agent Proposals
| Prospect | Package | Status | Ticket | Submitted | Actions |
|---|---|---|---|---|---|
| Loading... | |||||