Changelog
What's new on Plixstar — improvements, fixes, and updates, newest first.
What's new on Plixstar. Newest updates first.
August 5, 2026
New · Apply a shipping voucher per seller
When your order includes items from more than one seller, you can now apply a different shipping voucher for each seller, instead of only one for the whole order.
Fixed · Auto-applied vouchers now respect combinability rules
The best-voucher auto-apply at checkout no longer combines a platform voucher with a seller voucher or KOL code when the platform voucher isn't marked as combinable with them.
New · Privacy policy page
Added a Privacy Policy page, linked from checkout, sign-up, and the site footer, explaining what information we collect and how it's used.
Fixed · Videos attached to a return request now play inline
Videos uploaded as evidence for a return now play directly on the return detail page for customers, sellers, and admin, instead of showing a broken image.
Fixed · Admins can create seller-specific vouchers with stacking rules again
Creating or editing a voucher from admin no longer fails with a database error when the combinability settings are involved.
Fixed · Order search now finds orders with multiple sellers
Searching by order ID in the seller and admin order lists now works for orders that include items from more than one seller.
Fixed · Order IDs now match on internal support tools too
A few internal tools our support team uses showed a different reference number for an order than what sellers and customers see on their own pages. They now show the same one.
Fixed · Reviews and returns now work correctly when an order has multiple sellers
Writing a review or requesting a return for a delivered item no longer fails just because a different seller's item in the same order was cancelled. Each seller's items are now judged on their own delivery status.
Fixed · Shipping vouchers now apply correctly on multi-seller orders
A shipping voucher restricted to one seller now applies correctly even when your order also includes items from other sellers, instead of being rejected because another seller happened to be listed first.
Fixed · Seller can now be chosen when creating a seller-specific voucher
The seller dropdown when creating or editing a seller-restricted shipping voucher now lists all approved sellers, instead of appearing empty.
August 4, 2026
Improved · Sellers now schedule their own pickup
Sellers pick a pickup date and time before a shipment is booked, instead of it happening automatically the moment an order is paid. Tracking only appears once pickup is actually arranged, and sellers can move the date if plans change, right up until the courier collects it.
Fixed · Clearer messaging on reviews and returns before delivery
Writing a review or requesting a return now explains that it unlocks once your order is delivered, instead of the option just disappearing with no explanation. This also applies to past orders.
Improved · Simpler e-invoice request, always after delivery
Requesting a tax e-invoice is now a single, consistent step: from your order once it's delivered, instead of an extra option at checkout. If it's not delivered yet, the order page now clearly explains you can request one once it arrives.
Fixed · Order ID now matches across seller, customer, and admin views
The order ID a seller sees on their order list and detail page now matches the one the customer and our support team reference for the same order — previously it showed a different identifier.
Fixed · Order records keep the email used at the time of purchase
Order payment details on the seller and admin side now show the email address that was on file when the order was placed, instead of silently updating to whatever email is on the account today.
Improved · Lower minimum photo resolution
Product photos now only need to be 200px on the shortest side, down from 800px, making it easier to list products with smaller source images.
New · Notifications when an order is cancelled or refunded
You'll now get an in-app notification (in addition to email) when your order is cancelled or refunded, showing that the payment — including shipping — has been returned to you.
Sellers are also now notified by email and in-app when one of their orders is cancelled or refunded, so they're never left finding out by checking a stale order list.
New · Country field in your profile
You can now set your country in Profile settings.
New · Print your own invoice
You can now download and print the invoice for your order directly from your account, instead of asking the seller for it.
New · Cart reminder emails
If you leave items sitting in your cart, we'll send a reminder email after about a day so you don't lose track of them. You can turn this off anytime from Email Preferences in your account.
Improved · Order page combines items and shipping
Items and shipping/tracking details now live on a single page per order, instead of two separate tabs that mostly repeated each other.
Fixed · Review and return blocked incorrectly on split orders
When an order includes items from more than one seller, cancelling one seller's item no longer blocks you from reviewing or returning items from a different seller that were actually delivered.
New · Add videos to a return request
When requesting a return, you can now attach short videos alongside photos as evidence, not just photos.
Improved · Cancel an item even after it's been booked for pickup
You can now cancel an item up until the courier actually collects it — previously, cancellation locked as soon as the seller booked the pickup, even if the courier hadn't shown up yet.
New · Bulky orders now split into separate parcels automatically
Sellers can mark a product as bulky/irregular-shaped ("loose") when listing it. Orders that mix bulky and regular items now automatically ship as separate parcels instead of being forced into one package.
July 30, 2026
New · Multiple family delivery addresses
Family checkout now lets you save and choose between several delivery addresses, instead of being limited to one. Manage them from Family Settings, and pick whichever one fits when you check out.
Fixed · Family spending overview showed inflated numbers
Orders that split across multiple sellers were being counted more than once on the family Financial Overview page, inflating both the order count and total spend. It now shows the real numbers.
Improved · Clearer, more flexible refunds
Sellers can now propose a specific refund amount — item price, shipping, tax, or any combination — when forwarding a refund for approval, instead of only requesting the item's full price. Our team reviewing the request sees exactly the same breakdown and can adjust it before approving. Refund totals now also correctly include tax where it applies.
Improved · Order details show your coupon and referral
Order details now show the coupon code you used, and — if you shopped through a creator's link — who the order is credited to, alongside the discount already shown there.
Improved · Product pages show volumetric weight
Product pages now show an estimated volumetric weight alongside the item's actual weight, so it's clearer up front which one a courier may charge shipping on for bulkier items. The exact figure is still confirmed at checkout.
Improved · Address fields fill themselves in, and check what you type
Every form with a phone number, postcode, city, or state — checkout, account addresses, vendor pickup address, B2B, family, KOL — now behaves the same way: type a postcode and city and state fill in automatically, and picking a city fills in the matching state.
Phone numbers and postcodes are now checked for a valid format everywhere they're collected, not just on some forms. A few forms had gaps where an invalid number or postcode could slip through — those are now closed.
Fixed · Chat crash when opening full chat alongside the widget
Opening the full chat page while the chat widget was also open on the same conversation could throw an error and break the online/typing indicator.
Both views now share one connection for that indicator instead of fighting over it.
New · Optional shipping insurance at checkout
You can now opt in to shipping insurance for your order at checkout, for a small added premium (1% of your item subtotal, minimum RM2).
Insured orders are declared as insured to the courier (Pos Laju or Ninja Van) at booking time, so a lost or damaged parcel is covered.
July 29, 2026
Improved · Tax invoices issue on delivery
Your tax e-invoice is now issued once your order has actually been delivered, rather than as soon as payment goes through.
Requesting one at checkout works exactly as before — the request is recorded straight away and simply waits, then issues on its own once the order arrives. Nothing needs to be re-requested.
Improved · Family checkout says whose tax number it used
When a family order pre-fills a tax number, checkout now says it came from your family account, and that changing it applies to that order only.
Previously a member saw a tax number with no indication of whose it was.
Improved · Finding where to save your tax number
Your saved tax number now has its own entry under Account, next to Profile and Security.
The page existed but nothing linked to it, so the only way in was knowing the address. Checkout also pointed you to "Account → Tax Info" without that being anywhere to click — that hint is now a working link.
New · Vendors can now see photos customers attach to reviews
Product review photos were only visible on the storefront, not to the vendor who needed to act on the feedback.
The vendor reviews page now shows a photo count next to each review with attachments, and the full photos when replying.
New · Partial refunds
Admins can now issue a refund for less than the full computed amount — useful for a restocking-fee compromise or goodwill gesture that doesn't need the customer to return the item in full.
The refund dialog is pre-filled with the full amount; lowering it sends only that amount to the customer while the returned items are still accounted for as usual.
New · Choose your courier pickup date and time
Booking a Pos Laju or Ninja Van pickup used to always default to the next working day, 9am–12pm, with no way to change it.
Vendors can now pick a pickup date (Ninja Van) and time window (both carriers) before booking a shipment.
New · Bulk print picking slips
The bulk order page can now print packing slips for every selected order at once, instead of one at a time.
New · Order status tracks packing and pickup
Printing a self-fulfilled order's packing slip now moves it to "Processing" automatically, and a new "Ready for pickup" button confirms it's packed and waiting for the courier — matching the same stage an integrated-carrier order reaches once its label is booked.
Fixed · Resubmitting a rejected product now requires an edit
A rejected product listing could be resubmitted for review completely unchanged, with the same issue that got it rejected.
Vendors now have to edit the listing before it can go back for review — editing already returns it to Draft, so review always sees an updated listing.
New · Single item vs. variants, made explicit
Adding a product now starts with a clear choice: "Single item" (one price, one stock count) or "Has variants" (each variant gets its own price, stock, weight, and dimensions).
Previously price and stock could be entered at both the product level and the variant level with no clear relationship between them. Now only one applies, depending on which you pick — no more duplicate bookkeeping.
New · Weight and dimensions are now required for shipping
Product weight, length, width, and height are now required (unless shipping is disabled for that listing), for both single-item products and each variant.
Shipping quotes were silently inaccurate for any product missing this — the underlying field existed but no form ever collected it.
New · Minimum photo resolution
Product photos must now be at least 800px on the shortest side.
Smaller images looked noticeably blurry once a customer zoomed in on the product gallery.
New · Attach new photos when appealing a rejected return
If a seller rejects a return because the evidence photos weren't good enough, you can now attach new ones directly when you appeal — instead of only being able to add them in the return's message thread.
The new photos join the return's evidence, and show up on their own in the return's activity timeline so the seller can see exactly what was added with the appeal.
New · B2B quotes now record shipping method
Sending a B2B quote now requires choosing a shipping method — own transport (with a required transport company, e.g. DHL or GDEX) or Plixstar's standard shipping — plus package weight and dimensions.
Buyers see this on the quote alongside the price breakdown, instead of shipping cost being the only shipping information on a quote.
Improved · Order # now shown on B2B invoices
The order number now appears on the issued invoice document, next to the PO number.
July 28, 2026
Fixed · Support tickets now accept the order # you actually see
Attaching an order to a support ticket used to require pasting the full order ID.
Customers only ever see the short order # (e.g. "A1B2C3D4") elsewhere in the app, so that's now what the ticket form accepts — and if it still can't be matched, you'll get a clear error instead of the ticket silently going in unattached.
New · Remove your profile avatar
You can now remove your profile photo, not just replace it.
Improved · Return request dialog shows which order it's for
The Request Return dialog now shows the order # in its title, so you can confirm you picked the right order before submitting.
New · Admin tools for account recovery and addresses
Admins can now resend a customer's verification email, send them a password-reset link, and add, edit, or delete a customer's saved addresses — all from the Admin > Users detail page.
Previously these all required the customer to sort it out themselves, even when they'd reached out to support for help.
New · Return history timeline
Every return now keeps a full activity history.
The return detail page shows each step that has happened — submitted, reviewed, rejected, appealed, received, refunded — with its reason and any attached photos. Appealing a rejected return no longer erases the seller's original reason for rejecting it.
New · Photos in return messages
You can now attach a photo to a message in a return conversation.
Images only. A message can be a photo on its own, or text with a photo attached.
New · Variant photos
Products with colour or style options can now show a different photo for each one.
Tapping a variant on the product page swaps the main image to that variant's photo. Vendors and admins can upload one image per variant when editing a product.
New · Postcode management
Admins can now manage Malaysia's postcode list from the admin area.
Add, edit, delete, search by postcode or city, filter by state, and import or export in bulk with CSV.
New · Eco tag icons
Eco tags can now have an icon image, set from the admin eco-tags page.
Fixed · Print Invoice no longer errors
Print Invoice showed a not-found page on orders that were never paid.
The Print Invoice and Packing Slip links are now hidden until an order has something to actually invoice.
July 27, 2026
Feature: vendors can now see the purchase order once a B2B buyer issues one against their accepted quotation. Previously the vendor's RFQ page had no indication a PO existed at all — the buyer side had it, but the vendor side never surfaced it. Feature: family cart quantities can now be typed directly, not just clicked up/down one at a time. Changing a quantity from 2 to 20 used to mean 18 clicks on the "+" button — there's now a quantity box you can type into directly, alongside the existing +/- buttons.
New · Type a family cart quantity
Family cart quantities can be typed in directly.
Changing a quantity from 2 to 20 used to mean 18 taps on the "+" button. There is now a box you can type into, alongside the existing buttons.
getVendorRFQ() (b2b-rfq-vendor.ts) now also looks up b2b_purchase_orders by accepted_quotation_id against the vendor's own quotations on this RFQ, via the service-role client (there's no vendor-facing RLS policy on that table — only a buyer-side and an admin-only one). The vendor RFQ detail page renders a "Purchase order issued" card (PO number, status, total, buyer reference, issued date) when one exists.
FamCartTable.tsx's qty cell now renders a real <input type="number"> (committing on blur/Enter, keyed per-row draft state) instead of a plain <span>, alongside the existing +/- steppers — updateFamCartItemQuantity already accepted any integer ≥ 1, only the UI was stepper-only. Removed the invite-code join flow end to end: CopyInviteLink.tsx, JoinFamilyCard.tsx, joinFamilyByCode(), the ?code= branch on /family-activate, and family_accounts.invite_code (migration drops the column). The owner-initiated email invite (inviteFamilyMember) is unchanged.
Some orders never got their per-vendor store_id stamped — completePaymentSuccess() and createManualOrder() both call the idempotent split_order_into_subs RPC but deliberately swallow its failure ("admin can rerun via future tooling", which was never built), leaving orders.store_id permanently NULL on an otherwise-real, paid order. getInvoiceData() treated a missing store_id as "order not found" and 404'd. It now retries split_order_into_subs once for an unsplit parent row (no parent_order_id of its own) before giving up, self-healing the common single-vendor/manual-order case instead of 404ing on an order that plainly exists.
Improved · Family invite links removed
Family members are now added only by direct email invite.
The owner or a co-owner sends the invite from Family → Members. The shareable link and its join page have been removed.
Fixed · Chat opens on your latest message
Opening a conversation now scrolls to the newest message.
It used to land at the top of the history, with the message you came to read scrolled out of view.
Fixed · Cancellations and returns shown up front
A cancelled order now shows a clear banner with the date and reason, whatever tab you are on.
Return request status appears the same way instead of only showing after you click into Items. Cancelling one vendor's item in a multi-vendor order also shows the reason on that vendor's shipping card.
Fixed · B2B certificate uploads and pending applications
Large certificate uploads during B2B registration could fail on submit.
Admins also had no indicator anywhere for B2B applications waiting for review — the dashboard's "Needs your attention" row only counted vendor applications, so a submitted B2B application was easy to miss.
New · Cancel one vendor's item
You can now cancel a single vendor's item in a multi-vendor order.
Cancelling used to be all-or-nothing: if one vendor's item had shipped, the whole order was blocked. Each item can now be cancelled independently, right up until it ships.
Fixed · E-invoices for every vendor in an order
Multi-vendor orders only ever produced one e-invoice.
When an order split across several vendors, requesting an e-invoice at checkout produced a single document and the rest never appeared.
Fixed · The e-invoice checkbox no longer fails silently
Requesting an e-invoice with a blank or invalid tax number gave no error.
The order went through as though the box had never been ticked, rolling into the monthly consolidated invoice instead. Opening the order later showed nothing, with no explanation.
Improved · Order number on returns
The returns list now shows each request's order number on the card.
It was previously only visible by hovering.
Improved · Shipping label link removed for customers
Printing a shipping label is a seller and courier task.
The link had been showing on the customer order page by mistake.
New · Full payment breakdown on orders
Order payment details now show tax, shipping, shipping tax, and discounts, not just the total.
The customer, B2B, and Family order pages previously showed only the grand total and payment method. B2B cart orders had no breakdown at all.
New · Terms must be accepted at checkout
Every checkout now has a Terms & Conditions checkbox that must be ticked before ordering.
Applies to the customer, B2B, and Family checkouts.
New · Per-variant weight and bulky-parcel pricing
A variant can now define its own unit, weight, and dimensions.
Every variant used to share the product's single weight, which was wrong whenever pack sizes differed — a carton of 12 versus a single tin. Shipping quotes now also compare actual weight against volumetric weight and charge whichever is higher, so a large-but-light box no longer undercharges against what the courier actually bills.
Fixed · Vendor order CSV export fixed
Exporting vendor orders returned a server error instead of a file.
Improved · Courier e-invoices in the sidebar
Courier e-invoices now have their own admin sidebar entry.
The only way in used to be a small link tucked inside the main E-Invoices page.
Fixed · Onboarding phone validation
The customer onboarding form accepted any phone number.
A stale copy of the validation rules skipped the format check, so it never verified the number looked like a Malaysian mobile.
Improved · City fills in your state
Choosing a recognised city during onboarding now fills in its state automatically.
Town names that exist in more than one state are left for you to fill in rather than guessed.
Fixed · Consistent phone rules everywhere
Some numbers rejected by the site's own forms could still be saved.
Phone validation is now the same across every route into your account.
July 24, 2026
Redesign: creating or editing a voucher is now a full page with tabs, not a cramped dialog. The voucher form had grown to cover code/discount/limits/eligibility restrictions all in one long scrolling dialog. It's now a dedicated page (/admin/vouchers/new, /vendor/vouchers/new, and the matching edit routes) organized into Basics, Limits, and Eligibility tabs.
Fix: a KOL code's category/product restriction was invisible everywhere except the checkout math. The restriction was stored and correctly enforced when a customer checked out, but neither the KOL's own code-detail page nor the admin KOL codes list ever showed what a code was actually restricted to.
Feature: a KOL's share link now tracks how many times it's been clicked. Previously there was no way to tell whether a KOL's shared link was actually getting clicked — copying it just put the raw URL on the clipboard with no tracking at all. The KOL's profile page now shows a running click count above their shareable codes.
Feature: each commission log entry now shows what it was earned on. The KOL's commission history previously showed only the code, order, and amount — with no way to tell at a glance whether a given line came from a category-restricted code, a product-restricted code, or a plain order-wide discount. Fix: seller info and buttons overlapped on mobile. On the product page, the seller's logo/name/rating and the "Chat"/"Visit Store" buttons crowded into the same row on narrow screens. On a store's public profile page, the same thing happened with the logo, store name, and "Chat"/"Follow" buttons.
Feature: added a "Back to top" button on long-scroll pages. The storefront catalog and store profile pages now show a small floating button once you've scrolled down a bit, so you don't have to scroll all the way back up manually as more products get added over time. Fix: a voucher restricted to specific products/categories, or to first-time customers, could actually be redeemed on anything by anyone. The "eligible products", "eligible categories", and "first-order only" rules on a voucher were only checked in the on-screen preview before checkout — the database function that actually creates the order never checked them. In practice this meant a "10% off Electronics only" voucher discounted the customer's entire cart regardless of what was in it, and a first-order voucher could be redeemed by repeat customers.
Feature: admin can now control whether a platform voucher stacks with a vendor voucher or KOL discount code. Previously there was no such control at all — any platform + vendor + KOL combination was always allowed. New checkboxes on a platform voucher (default off — not combinable) let admin opt a specific voucher in. The checkout page now proactively greys out the incompatible slot once a non-stackable platform voucher is applied, rather than only rejecting it after the customer tries to place the order. Fix: customers weren't notified about an abandoned cart until the next day. The "your payment didn't go through" reminder (in-app notification + email) only ran once a day, so a customer who abandoned checkout in the morning got no signal — no banner, no notification bell entry, nothing — until the next day's run, even though their items and pending order were both still sitting there waiting. Fix: cancelling a paid order didn't claw back the loyalty points it earned. Loyalty points were correctly reversed when an admin refunded an order or a return was processed, but not when a customer cancelled their own paid-but-unshipped order, an admin cancelled a paid order directly, or a vendor's cancellation request was approved — those three paths refunded the money but left the earned points in the customer's balance.
Technical details
VoucherForm.tsx keeps its single useForm() instance and submit handler unchanged — the restructuring only wraps the existing field groups in Tabs/TabsContent, following the same pattern already used on the admin order-detail page (AdminOrderTabs.tsx). The /new and /id/edit routes (previously redirect stubs pointing back to the list, per the old "CRUD lives in a dialog" convention) now render real pages; CreateVoucherButton.tsx on both admin and vendor is a plain link instead of a dialog trigger, and the list tables' row-level "Edit" action navigates to the edit route instead of opening CrudFormDialog. This is a deliberate, one-off exception to the dialog convention for this specific form given its size — noted in the PR so it doesn't read as reintroducing a bespoke pattern.
KolCodeDetailView.tsx and the admin KolCodeTable.tsx now render the code's category name and/or "restricted to N products" chip, resolved server-side in kol.ts (getKolCodeDetail, getAllKolCodesPaginated/getAllKolCodes). Kept kol_codes.category_id singular rather than extending to multi-category — the schema already went single-category + multi-product in last week's restriction work, and category_percentage conceptually pairs one code with one category; flagging this call explicitly rather than silently deviating from a broader "multi-category" ask.
New kol_link_clicks table (migration 20260724000500_kol_link_clicks.sql) — one row per real /creator/[handle] pageview, logged server-side (recordKolLinkClick) from the page component only (not generateMetadata, which also resolves the same profile but isn't a real pageview, to avoid double-counting). Shown via getKolLinkClickCount on /kol/profile. Deliberately not the old ?ref=code query-param scheme — that was already tried and abandoned (see the comment in KolShareLinks.tsx) because nothing consumed it; this logs directly server-side instead.
KolCommissionRow (kol-payouts.ts) gained a computed basis field — e.g. "10% off Electronics", "RM5 off 2 products", "10% off order" — derived from the same discount_type/category_id/product_ids the discount and commission were computed against, rendered as a new column in KolCommissionView.tsx.
Both overlap fixes were the same root cause: the outer flex container never switched to flex-col on mobile even though the inner button group already did, so the two blocks fought for the same row at narrow widths. Fixed in the product page's vendor card (storefront/products/[slug]/page.tsx) and the store profile header (stores/[slug]/page.tsx). New BackToTopButton component follows the existing BottomNav/CompareBar positioning convention so it never stacks on top of either.
New migration 20260724000400_voucher_eligibility_stacking_enforcement.sql: create_order_transaction now (1) narrows the platform/vendor voucher discount to the eligible-lines subtotal via a new voucher_eligible_base() helper (joins voucher_product_restrictions/voucher_category_restrictions, same OR-of-product-or-category logic the client preview already used) and rejects outright if the eligible base is 0, instead of silently discounting the whole cart; (2) checks first_order_only against the customer's order history, respecting the existing voucher_fraud_settings.first_order_only_enforce master switch; (3) checks new vouchers.allow_stack_with_vendor / allow_stack_with_kol columns (platform-tier only, default false) against p_vendor_voucher_id / p_kol_code_id. The same "zero eligible items → reject" hardening was applied to the existing KOL product/category restriction (previously computed a silent RM0 discount instead of rejecting — same class of gap). VoucherForm.tsx gained the two stacking checkboxes (platform tier only); the checkout's VoucherSection/KolCodeInput now pass a stackingContext into the existing soft-check (validateVoucher/validateKolCode in cart.ts) so an incompatible combination is caught immediately rather than only at final submit. The admin manual-order form (NewOrderForm.tsx) previously skipped even the soft eligibility check entirely — now passes cartProductIds like the real checkout does.
Known deferred issue found while in this code, not fixed here: a vendor-tier voucher's discount is computed against the whole cart subtotal, not just that vendor's own line items, when the cart spans multiple vendors — voucher.store_id is validated for ownership but never used to scope the discount base. Flagging for a follow-up.
/api/internal/notifications/reminders (the cron backing this, plus two other reminder types) was already correctly gated on "order pending 30+ minutes" and already idempotent per-order, but vercel.json's cron schedule for it was "0 9 * * *" — once daily — not actually every 30 minutes. Changed to "*/15 * * * *". No route code changes needed; the existing idempotency check (skip if a matching notifications row already exists) makes the higher frequency safe as-is.
reverseOrderRewards() (lib/actions/refund-rewards.ts) was only called from refundOrder()'s own full-order path. Added the same call, proportional to the sub-order's share of the parent order's total, to refundSubOrder() (admin-orders.ts — covers cancelMyPaidOrder) and to the separate cancelSubOrder() admin path (shipment.ts — covers admin cancels and approveCancellation, which delegates to it). Voucher-usage reversal (withVoucher) only fires once every sibling sub-order of the parent has reached a terminal status, so a voucher applied across a multi-vendor cart isn't revoked while other vendors' sub-orders are still active. refundOrder()'s own per-sub-order calls pass skipRewardsReversal: true since it still does one full-order reversal itself afterward, keeping its admin-facing "X points deducted" summary accurate.
Feature: KOLs now have an independent commission rate, and a new admin KOL List page. Previously a KOL's earnings were just a pass-through of whatever discount they configured on their own code — there was no way to pay a KOL a rate independent of how generous their code was. Admins can now set each KOL's commission rate individually from a new KOL section in the admin sidebar (KOL List, KOL Codes, KOL Payouts, grouped together), and payouts are computed from that rate going forward.
New · Vendor-scoped shipping vouchers with tiers
Shipping vouchers can now be limited to one vendor, and can grow with cart size.
Admins can restrict a shipping voucher to a specific vendor, and vendors can create their own. Either can define a ladder — 1–2 items gets RM5 off, 3–5 gets RM10, 6+ gets free shipping — instead of one flat amount. A vendor-scoped voucher only ever discounts that vendor's own delivery fee.
Fixed · Payment email item names fixed
Every item in the payment confirmation email showed the word "undefined" instead of its name, with no photo.
Improved · Complete payment email summary
The payment confirmation email now shows subtotal, discount, tax, shipping, and shipping tax on their own lines.
Each appears only when it isn't zero, so the numbers add up to the amount paid.
Fixed · No Change Password on social sign-ins
Accounts created through Google or Facebook have no Plixstar password.
The Security page now explains that, instead of showing password fields that could only fail.
Improved · Family reachable on mobile
"Start Family" only existed in a bar hidden on phone-sized screens.
Phone users had no visible way to create or join a family group.
Fixed · Shipping voucher discount matched the total
An auto-applied shipping voucher could show one discount under Vouchers and deduct a different amount from the total.
Fixed · Three mobile layout fixes
Admin carrier rate card buttons could be cut off on narrow screens, the Returns table's status column crowded the layout, and the navbar could render underneath an iPhone's Dynamic Island when installed to the home screen.
New · KOL commission rates and a KOL list
Each creator can now have their own commission rate, set from a new admin KOL section.
A creator's earnings used to be a pass-through of whatever discount they set on their own code, so there was no way to pay a rate independent of how generous the code was. KOL List, KOL Codes, and KOL Payouts are now grouped together in the sidebar.
Improved · Profile photo updates everywhere
Updating your avatar only refreshed the profile page.
An already-open tab elsewhere in your account kept showing the old photo until a hard reload.
Fixed · "First order only" vouchers work
The checkbox silently depended on a separate master switch that defaulted to off.
Ticking it had no effect unless an admin had also found and enabled an unrelated setting.
New · Cap a percentage discount
Vouchers and creator codes can now set a maximum discount — "20% off, capped at RM50".
Applies to admin, vendor, shipping, and creator codes, and is enforced when the order is created rather than only in the on-screen preview.
New · Duplicate or resubmit a code request
A rejected code request used to be a dead end.
Every request now has a Duplicate action, and rejected ones get Resubmit — both open the form pre-filled and editable.
New · Creator codes for specific products
A creator's code could only be platform-wide or limited to a whole category.
Admins and creators can now pick specific eligible products instead.
New · Share a creator code to more apps
Instagram, TikTok, and RedBook have been added, with the caption shown up front.
The caption is now visible with its own copy button. These three apps don't support pre-filled captions, so those buttons copy the caption and open the app for you to paste.
Fixed · Notification dropdown fits mobile
The panel could run off the left edge of the screen and hide its own contents.
Fixed · E-invoice status fits order cards
The status badge and footer didn't wrap on narrow screens, so content bled past the card border.
Fixed · Creator accounts keep their footer links
Tapping Wishlist in the footer redirected creators away to their own dashboard.
The footer showed customer account links regardless of your account type.
July 23, 2026
Improved · Honest shipping tax and voucher amounts
Shipping tax is now always shown, and a covering voucher shows its true saving.
The tax line no longer hides or shrinks because a voucher covers it. Instead the voucher's own discount grows to match — a RM20 voucher on a RM10 fee plus RM0.60 tax now reads "−RM10.60". The tax is real, and the saving is the full amount. Applies to the customer, B2B, and family checkouts and to invoices.
Improved · Courier tax setup edits in a dialog
The Courier tax identities page showed both couriers' full forms expanded at once.
It's now a compact list with an Edit action per row, matching every other admin edit screen.
Improved · E-invoice dashboard links and pagination
The admin E-Invoices page had no route to courier tax identities and listed up to 200 rows on one screen.
There's now a Couriers button, and the table pages 25 rows at a time.
New · Courier self-billed invoice viewer
A new page shows courier self-billed e-invoices once that feature is switched on.
It shows both parties, the delivery-services line for the month, and submission status.
Fixed · Correct delivery tax on invoices
Invoices recalculated shipping tax from the delivery fee with no knowledge that a voucher had reduced it.
An order with free shipping could show a tax charge the customer was never billed. Invoices now show exactly what was charged.
July 22, 2026
Improved · Free shipping waives the delivery tax
A voucher that fully covers delivery now clearly zeroes its tax too.
Tax is calculated on the original shipping fee, and the same voucher extends onto that tax. A 100%-off voucher zeroes both, so free shipping really is free. A partial voucher reduces the tax proportionally.
New · Self-billed courier invoices
Plixstar can now self-bill couriers that don't issue their own e-invoice.
Finance enters each courier's tax details, and a monthly job totals the previous month's shipping cost per courier into one invoice. It stays off for each courier until its details are verified and marked active.
New · Service tax on delivery
Checkout now charges service tax on the shipping fee, so RM10 delivery shows as RM10.60.
It appears as its own line in the order summary and on the invoice, and is calculated after any free-shipping voucher. Admins can set the rate under Settings → Financial.
New · Full transaction reconciliation
A new Reconciliation export lists every order with its complete breakdown.
Order id, customer, vendors, subtotal, shipping, discount, voucher and creator codes, loyalty, tax, total, commission, and vendor net — so finance can verify each transaction end to end. Order ids now show in full and can be clicked to copy.
New · Commission and payouts by vendor
A new "By vendor" page breaks earnings down per vendor.
Each vendor has a detail view listing every order with its commission, tax, and net. Report tables now page instead of stopping at 100 rows, and every finance export downloads with a timestamped filename so files sort by date and never overwrite each other.
Improved · Invoices reflect what was paid
The printable invoice now shows the discount and the exact amount charged.
It previously left out discounts and could overstate the total. Tax and shipping are shown too. Vendor order pages gain a commission column. Tax e-invoices can now only be requested once an order is delivered, and the amount sent reflects the after-discount total.
July 21, 2026
Fixed · Finance and Reports now agree
Revenue, commission, and tax on the Finance page now match the Reports pages.
Revenue was being double-counted on multi-vendor orders, and different pages disagreed on which order statuses count. Commission and tax are now calculated the same way however an order was created.
Improved · Stronger validation across the site
Passwords now need at least 8 characters with upper and lower case, a number, and a symbol.
Phone numbers must be valid Malaysian numbers and accept digits only. Postcodes accept exactly 5 digits, and the city field suggests Malaysian cities as you type while still letting you enter your own.
Improved · Signup address is saved automatically
An address entered during onboarding now appears as your default in Addresses.
Vendors provide a postcode and state at signup, which becomes their default pickup address once approved.
Fixed · Profile photo appears instantly
A new avatar now replaces the old one straight away, with no hard refresh, and stays in sync everywhere.
New · Accounts stay Pending until verified
New accounts now show as Pending until the email is confirmed.
After verifying you get a confirmation and are taken to login. The verification email is redesigned with step-by-step instructions and notes that the link expires in 24 hours. Trying to log in before verifying shows a clear notice with a resend option. Admins can see each account's status and activate a pending account manually, and people are emailed when their account is suspended or reactivated.
New · Chat deletion, recall limit, and live sync
You can now delete a conversation from your inbox.
The other person keeps their copy, and it reappears if they message you again. Unsending is now limited to 10 minutes after sending. Messages, edits, and unsends update live between the full chat page and the popup.
Improved · Cart clears after checkout
Items you buy are now removed from your cart once payment succeeds.
A partial checkout leaves the items you didn't buy. You also stay signed in when returning from the payment page.
Improved · Interface touch-ups
The header cart uses a shopping-cart icon, the currency switcher shows full names like "Malaysian Ringgit (RM)", and checkout shows brand marks for the supported payment methods.
Improved · Chat PDFs and a steadier popup
You can now attach a PDF as well as images.
The composer shows the supported types and size limit. Opening the popup refreshes so you see the latest message, and having chat open in two places no longer causes sync glitches.
July 14, 2026
B2B account applications now keep everyone in the loop. When you submit a B2B account, our team is alerted right away so it doesn't sit unseen. Once it's approved or rejected, you'll get both an in-app notification and an email — sent to the email address on your application and your account email, so you never miss the outcome.
Technical details
registerB2BCompany now calls notifyAllAdmins (in-app bell to every admin) plus a new sendB2BSubmissionAdminEmail template to the ops inbox (ADMIN_EMAIL/SUPPORT_EMAIL; no-op if unset). approveB2BCompany/rejectB2BCompany now notify() the submitting owner and email the applicant at a deduped set of both contact_email and the owner's account profiles.email (new b2bApplicantEmails helper). All notification/email steps are best-effort and never block the underlying status change.
Family e-invoice PDF download and links now work for every family member. A family co-owner can now download the tax invoice PDF and follow the "View" link on any family order — previously these only worked for the exact member who placed the order.
Technical details
The e-invoice PDF route (/api/einvoice/[uuid]/pdf) now widens authorization to family owner/co-owner via canViewFamilyOrderDetail, matching getOrderDetail/requestEinvoiceForOrder. requestEinvoiceForOrder returns a viewPath so RequestEinvoiceButton's success toast links to /family/history/[id] for family orders instead of the customer route that 404s for them.
July 12, 2026
New · Tax e-invoice status on B2B invoices
Open any B2B invoice and use the e-Invoice button to see its status.
Request one if it hasn't been filed, or request again if it was rejected — with the rejection reason shown.
New · Family tax documents and per-order tax numbers
Family orders now have the same Tax documents tab as regular order history.
At checkout, the family's saved tax number is pre-filled but can be changed for that specific order.
Fixed · B2B teammates can open each other's orders
Opening an order's tracking tab could wrongly show "not found" if you weren't the person who placed it.
Fixed · Order tracking timestamps
Carrier tracking times could briefly flash or disagree as the page loaded.
Fixed · No more "Login" flash in the header
On refresh, the account button now shows a loading indicator instead of briefly showing the signed-out state.
July 10, 2026
Fixed · Vendor payout ledger shows transactions again
The ledger came up empty for every date range because of a date-filter bug.
It now lists order earnings, balance adjustments, and payouts for the period you pick.
Improved · Payout ledger filter is now a View menu
The Orders / Adjustments / Payouts toggles are a single View button with checkboxes, matching the list pages. All three show by default.
New · Printable B2B invoices
The invoice detail page now has a Print button that produces a proper invoice document.
Vendor and buyer details, invoice number and dates, itemised lines, and totals — instead of a screenshot of the web page. Menus and the language bar no longer appear in the printout.
Fixed · B2B invoice downloads
The download link for a B2B tax e-invoice never appeared, because of a mismatch in how orders were looked up.
New · Separate B2B billing address
B2B checkout only captured a delivery address.
You can now set a separate billing address in Company Settings, or keep it the same as delivery, and confirm it at checkout. Each order records the address used.
New · Creators can request a payout
Creators with unpaid commission and a verified payout account can now request a payout.
Requests appear in the admin KOL Payouts page to approve, mark paid, or reject.
Fixed · Told when a refund needs help
If an automatic refund fails you now get a notification and an email letting you know the team will handle it manually, instead of silence.
Improved · Creator code removed from B2B checkout
B2B orders use negotiated pricing, so the creator code field has been removed.
Improved · Channels page hidden
The unused marketplace sync entry has been removed from the admin sidebar.
July 9, 2026
New · Shipping labels for customers and admins
The label download is no longer vendor-only.
Once a shipment has a courier and tracking number, the link appears on the customer order page and the admin order page too. All three now only offer it for orders actually booked through an integrated courier — a self-fulfilled order with a manually typed tracking number has no label to download.
Improved · Clearer courier booking failures
When a booking fails because the courier account is missing a permission, the notification now says so directly.
It used to show the raw courier error and imply that retrying might help.
Fixed · Order dates in your own timezone
Order dates on the customer, vendor, and admin pages were rendered in the server's timezone, so they could read hours off.
Fixed · No more label errors on incomplete orders
The download button appeared on shipped orders even when tracking data was never recorded, so clicking it just errored.
Fixed · Pending orders show their items
An order awaiting payment showed "0 items" and no photo in Order History, even though it had items.
New · Notified on every e-invoice outcome
You now get an email and an in-app notification whichever way an e-invoice comes back.
Only successful validation used to send anything, and there was no in-app notification at all. Validated, rejected, and cancelled all notify you now.
Improved · Account sidebar stays in view
The left sidebar on account pages used to scroll away. It now stays put while the content scrolls.
Improved · Refund buttons on one row
"Process refund" and "Flag as fraud" could wrap onto two lines and look like an accidental double button.
Fixed · Automatic shipment booking is reliable again
Some paid orders sat on "Booking with courier…" indefinitely.
The courier was either never booked, or booked without the tracking number making it back onto the order.
Fixed · Variant stock no longer blocked by product stock
A variant with plenty of stock could be rejected as out of stock.
Checkout was checking the product's overall stock first. Variant purchases now check only that variant's stock.
Improved · No vouchers on B2B checkout
B2B orders use negotiated pricing, so voucher stacking didn't make sense.
The voucher section is removed, and a B2B order with a voucher attached is now rejected outright rather than relying on the page simply not offering one.
Improved · Unused B2B Invoice tab removed
It let admins set an invoice logo, header, footer, and notes, but nothing read those fields into any output.
Removed for now; it can return once invoices actually use it.
Fixed · Safer B2B quote-to-order flow
A round of fixes to the request-for-quote process.
Only company admins, finance, and approvers can award a quotation or issue a purchase order. Accepted quotations carry their products and tax through to the order, so vendors see the right items and commission is recorded correctly. Expired quotations can no longer be accepted, cancelling can't collide with awarding, issuing a purchase order twice no longer creates a duplicate, and editing a request no longer duplicates its lines.
Improved · Safer buttons, dialogs, and forms
Confirmation dialogs across every portal now show a working state, can't be double-clicked, and can't be dismissed mid-action.
Long forms in pop-ups ask before discarding what you typed. On phones, buttons and inputs meet comfortable touch sizes, and sellers can finally reach the photo-delete button when managing images. Wide tables hint that they scroll and show fewer columns by default. Screen readers hear real names on row links and form fields. Filtered lists that come up empty now say so with a one-tap clear, instead of looking like an empty queue. And a crash in the B2B or Family portal keeps you inside the app with navigation intact.
Improved · Return risk hints in Malay and Chinese
The automatic risk badge on the admin returns queue showed English for every language.
Its title, note, risk levels, and reasons are now translated, along with the Customer column in the refunds queue.
Fixed · Thirteen broken links and dead ends fixed
Seller team members can now open the pages their role grants — orders, payouts, products, vouchers, reports — instead of hitting a missing page.
Family order links no longer show "not found", and a co-owner checking out without a saved family address is told to ask the owner. Buying one item with Buy Now no longer empties your saved cart. Creator share links now point at your public page, which finally has a "Shop on Plixstar" button. Plus fixes to B2B request creation, admin team access, voucher sorting, and B2B login destinations.
Improved · Admin returns queue tabs cleaned up
Twelve scrolling status tabs are now five: All, Needs approval, In progress, Closed, and Fraud.
Needs approval and In progress carry live counts. Any individual status is still available from the Status filter. The sidebar count now shows the approval queue, so the number in the nav is the number of decisions waiting.
July 8, 2026
Improved · Seller returns page is easier to scan
Eleven status tabs that scrolled off screen are now five.
All, Needs action, Awaiting return, Admin approval, and Closed. The three summary cards are gone since the tab counts carry the same information, and you can still filter by any individual status. The sidebar count now matches Needs action, so appealed and received returns don't slip by.
New · Who placed each family order
The family Order History table has a new "Added by" column.
Improved · Admin refund queue tidied up
Processing a refund now opens a focused dialog instead of expanding inline.
The table shows fewer columns by default with the rest behind the View menu, so there's no sideways scrolling, and the whole row opens the request.
Improved · Faster refund approvals
The five-item checklist that had to be fully ticked is now a short set of review reminders you can scan.
The refund confirms whenever you're ready. Fault attribution and notes are unchanged.
Improved · Bulk status page shows only actionable orders
It used to list every order, including delivered and cancelled ones that can't move.
It now lists only orders that can still be advanced, and lets you filter by each of those statuses.
Fixed · Order tracking works as expected
Several shipping fixes landed together.
The customer tracking history now shows manual shipped and delivered updates, not just courier scans. For parcels already booked with a courier, sellers can mark them shipped in one click instead of retyping details they never entered. Bulk updates no longer error on orders already at that status and can't push an order backwards. Refunds for online banking and e-wallet payments route to the manual queue with a clear next step.
July 7, 2026
Improved · A clearer refund process
Requesting money back is now a straightforward flow.
You choose Return & refund (send the item back) or Refund only (keep it). The seller decides whether they need the item returned, and every refund gets a final check by our team before money moves. At each step you, the seller, and our team see a plain note explaining what happens next. For a swap, start a refund request and arrange the exchange with the seller in chat.
Fixed · Homepage categories link somewhere
"Organic Beauty", "Eco Home", and "Ethical Fashion" pointed at categories that never existed.
Fixed · Orders findable by short ID
Searching with the shortened ID shown on an order page could wrongly say the order doesn't exist.
Fixed · B2B purchase orders aren't payable at checkout
Purchase orders are paid later by invoice, so they no longer appear in the pending payment banner.
Fixed · E-invoice requests work first time
Toggling the request at checkout silently failed after payment, so it had to be repeated from the order page.
Fixed · Vendor order summary shows the discount
Where a voucher, creator code, or loyalty points were used, the vendor's figures didn't add up to the total.
The discount is now shown so the maths reconciles, and multi-vendor totals include tax and each vendor's share of the discount.
Fixed · Admin sees the customer's chosen shipping
The admin order page only showed the override control, not what the customer actually picked.
Admin's own courier and tracking overrides also didn't reappear on admin's own page, though vendors and customers already saw them.
July 5, 2026
Fixed · Clearer B2B purchasing and admin details
Approvers now see the product photo of each item they're approving.
Quote requests show the buyer contact, so vendors know who they're quoting for. Admin order details show the vendor's store name again instead of a blank.
Fixed · E-invoices issue reliably
When an order is paid, or you request one, the document is submitted and automatically checked until it's issued — instead of occasionally sticking on "processing".
New · See your return window
A delivered order now shows the date you have until to return it, plus a live countdown.
Improved · Invited-account form accessibility
Address and billing fields on the account-setup screen now have properly connected labels, and support autofill.
New · See your refund amount
Your return detail page now shows how much you're getting back, that it's going to your original payment method, and whether it's still processing.
New · Stronger password requirement
New passwords must be at least 8 characters when you sign up or reset. Existing passwords are unaffected at sign-in.
Fixed · Order confirmation email adds up
The email listed items but left out discount and shipping, so the prices didn't match the amount paid.
Fixed · Clearer sign-in link failures
An expired or already-used link now explains what happened, instead of dropping you at a blank sign-in screen.
Improved · Bulk actions show progress
A bulk action now shows "Processing 3 of 20…" and a success summary instead of looking frozen.
Multi-step forms point you at the exact field to fix, and the header search box is fully keyboard-navigable.
Improved · Safer notification emails
Emails now carry a language tag for screen readers and better inbox handling.
Names and notes typed by a vendor or customer are shown as plain text, so unusual characters can't affect how a staff email renders.
Improved · More of the app speaks your language
The top bar and notification labels are now translated.
The onboarding address form supports autofill, portal charts follow dark mode, counts read grammatically ("1 order" vs "2 orders"), and the product-page back link returns you to your filtered search.
Fixed · Clearer feedback in onboarding and support
If your profile photo can't upload during signup we now tell you, and your profile still saves.
Support staff changing a ticket's status see it revert if the save fails, instead of a misleading value. Screen-reader users can tell which shipping option is selected.
Fixed · Support attachments and same-day vouchers
Adding a second attachment to a ticket no longer discards the first.
Vouchers can start and end on the same day, and a family account with no delivery address now links you straight to where to add one.
Improved · Coupons, feed, and compare fixes
Coupon dates now show in your language and Malaysia time.
Signing in from the Feed returns you to the Feed, and the "maximum 4 products" compare message appears in your language.
Fixed · Navigation and resilience fixes
Portal sidebars highlight the current Dashboard, breadcrumbs are clickable, and there's a "Back to store" link.
The "Vendors near me" tab survives a refresh and can be linked to, the wishlist heart responds instantly, a failed export tells you, some dialogs submit on Enter, and pages say so if the database hiccups instead of looking empty.
Fixed · Faster product pages
Product pages load quicker, and images download right-sized.
Chat images no longer make the conversation jump as they load, and the cart, compare, and payment pages show a fitting loading skeleton.
Fixed · Cleaner printed invoices
Invoices no longer split an item row or the totals block across two pages, and the status prints in your language.
Fixed · Clearer returns and cancellations
Appealing a rejected return no longer shows a contradictory "already reviewed" state.
Cancelling a paid order tells you if any part needs manual refund review. Return photo uploads reject oversized or non-image files up front.
Improved · A big accessibility pass
Sort direction is announced on portal tables, tap targets on table controls are bigger, and partially-selected checkboxes look distinct.
Proper labels were added to "Remember me", the category tree, the creator-code box, product-image remove buttons, and search price fields, plus a descriptive alt on the main product photo.
Fixed · Cleaner packing slips and accurate voucher reports
Setup reminders and tax banners no longer print onto packing slips and invoices.
Voucher analytics now record each voucher's real discount — every voucher used to be logged with the whole order's discount, inflating the reports.
Fixed · Sharper focus outlines
Keyboard focus rings on buttons now stand out instead of blending into green.
Catalog filter options show an outline, and several faint labels are darker and easier to read.
Improved · Localized sign-in and account setup
An expired verification link now explains itself and tells you how to get a new one.
Sign-in, sign-up, and password-reset messages appear in your language, and the invited-staff form is properly accessible.
Fixed · Order emails link to the right place
The "Track your order" button led to a page that didn't exist.
It now opens your actual order and routes B2B and Family orders to their own history. Vendors who turned off announcement emails no longer receive them.
Fixed · Softer shadows
Shadows on menus, dialogs, and cards now carry a subtle olive tint suited to the cream background, instead of a flat grey.
Improved · Returns speak your language
Return reasons and the return conversation — role labels, prompts, and buttons — now appear in Bahasa Melayu and 中文.
New · Approved returns say what to do next
An approved return now shows a "Ship your item back" card.
It includes who pays return shipping and any cost the seller entered. You can see the photos you attached, and sellers get a confirmation prompt before marking an item received.
Fixed · Cart badge visible again
The number on the cart icon was the same dark colour as the header behind it.
It's now the same red as the wishlist and message badges, and chat uses the brand green so it matches everything else.
Fixed · Support ticket replies notify staff
Replying to a ticket now emails the support team, so it doesn't sit unnoticed.
Previously only their replies notified you. The attachment picker is now keyboard-reachable and errors are announced to screen readers.
Fixed · Add to cart from Compare
"Add to cart" from the Compare page built a broken cart line that could disrupt checkout.
It now adds the item properly, and products needing a size or colour take you to the product page to choose.
Improved · Easier keyboard navigation in portals
Every portal now has a "Skip to main content" link — press Tab on page load.
Greyed-out pagination arrows are properly skipped by keyboard and screen readers instead of acting like live links.
Improved · CSV imports are keyboard-accessible
The file pickers in the order and product import tools can now be opened with the keyboard.
In the order importer, one invalid row no longer cancels the whole import — what imports now matches what the preview marked "Will import".
Fixed · Shipping vouchers show the correct total
A shipping voucher was subtracted from your cart subtotal, so the total shown could be far below what you were charged.
Shipping discounts now apply only to the shipping fee, so the summary and the amount you pay always match.
Fixed · Bulk-select count stays accurate
Selecting rows then paging or filtering left a count that no longer matched what was on screen, so a bulk action could touch nothing.
Fixed · B2B and Family payment returns
After paying, "View order" led to a page not found, making it look like the order had vanished.
It now opens the correct order history, and paying from those accounts no longer clears your personal cart.
Fixed · Admin packing slips print again
The packing-slip page had been returning "page not found" for every order.
July 4, 2026
New · Choose how many rows to show
Portal list pages now have a "Rows per page" selector — 10, 25, 50, or 100.
Your choice is kept as you move between pages.
Improved · Confirmation pop-ups speak your language
The default Confirm, Cancel, and Working buttons now appear in Bahasa Melayu and 中文.
Fixed · Hidden prices stay hidden
For products priced only for signed-in shoppers, "Add to Cart" as a guest now opens the sign-in dialog.
It used to quietly add the item and reveal the price in your cart.
Fixed · No contradictory stock line
Picking a sold-out option now shows a single consistent "Out of stock".
A second line at the bottom could still say "In Stock" in green, contradicting the greyed-out button just above.
Fixed · One colour language for status labels
Badges for e-invoices, support tickets, creator codes, B2B companies, and license keys now use the same palette.
"Approved", "Pending", and "Failed" read the same across every screen instead of a different colour per feature.
Fixed · Consistent prices with thousands separators
Ringgit amounts now format one way everywhere: "RM 12,999.00".
Some screens showed "RM 12999" and others "RM12,999.00". Order totals, payouts, reports, invoices, and emails all match now.
Improved · Dates follow your language in every portal
Order lists, payouts, returns, reviews, tickets, charts, and packing slips now show dates as "4 Julai 2026" or "2026年7月4日".
Improved · Order status looks the same everywhere
An order marked Shipped now shows the same colour whether you're a customer, vendor, or admin.
Fixed · Honest payment status and safer cart clearing
The payment result page no longer says "Payment successful" when it doesn't yet know.
It now says we're confirming, and links to your order. "Remove selected" in the cart asks before deleting, since items are all selected by default and one tap could empty it. Error pages now speak plainly and offer a way back.
Fixed · Form errors announced everywhere
Screen readers now announce field errors across your account, returns, reviews, and every portal tool.
Fixed · Form errors announced at sign-up and checkout
Screen readers announce which field failed and why, and the failing field is outlined in red at the input.
New · Autofill for delivery addresses
Address forms now let your browser fill in name, phone, address, city, postcode, and state in one tap.
Fixed · E-invoice links work inside tables
Links inside a clickable row — like the invoice PDF and verify buttons — now open correctly instead of navigating to the row.
The floating bulk-action bar also wraps to fit narrow phone screens.
Improved · B2B and Family portals on phones
Members can now open their portal from the phone menu — the switcher only existed on desktop.
Those pages also show a loading skeleton instead of a blank screen, and banner carousels pause on hover or touch and stay still if your device asks for reduced motion.
Fixed · Dates and payment errors in your language
Dates across your account now render in your chosen language, and payment errors join the checkout errors that already did.
Fixed · iPhones no longer zoom on tap
Tapping the search box, a quantity field, or the chat box used to zoom the whole page in and leave it there.
Fixed · Checkout and voucher errors in your language
An expired voucher, an out-of-stock item, or not enough loyalty points now appear in Malay or Chinese.
Improved · Going back keeps your place
Pressing Back after opening a product returns you exactly where you were, with everything you'd scrolled through still loaded.
Fixed · Variant choice announced to screen readers
Picking an option on a product page now announces which is selected instead of staying silent.
The red used for delete actions is slightly deeper so red text on light-red buttons is legible.
Improved · Clearer focus and readable labels
Keyboard users get a clearly visible focus outline on buttons and fields.
Status labels like "Pending" are darker and easier to read at small sizes, and warning buttons use a deeper shade so their white text is legible.
Fixed · Pages appear the moment they load
Every page used to stay blank until the site's scripts finished, which could take seconds on a slow connection.
Content now paints immediately. On slower phones this makes the whole store feel dramatically faster.
Fixed · Chat alerts open the right conversation
Tapping a new-message notification now goes straight into that conversation instead of the inbox.
Fixed · Edit forms protected from accidental closes
Pressing Escape or clicking outside a part-filled form no longer throws away your work.
You're asked whether to keep editing or discard. Untouched forms still close instantly.
New · Message editing time limit
Like WhatsApp, you can edit a message only within 24 hours of sending it. Unsending still works anytime.
Fixed · A snappier chat inbox
Your conversation list now loads in a fixed couple of queries instead of a couple per conversation.
New · Safer against double orders
Place Order stays locked until you're handed to the payment page, so a second tap can't create a duplicate.
Switching delivery address mid-checkout also resets the shipping options, so you always confirm the rate for the new address.
New · See when someone is online or typing
The chat header shows a green dot when the other person is online, and a typing hint while they write.
New · Chats show what you're asking about
"Chat with seller" on a product opens the conversation with that product attached.
Your first message carries a small product card. Sellers messaging from an order get the same with the order number. You can remove the attachment before sending.
New · Save a product edit from any step
A Save changes button is now on every step of the edit form, so you can tweak one field and save right away.
Creating a new product still walks through the steps.
New · Images in product descriptions
The description editor now has an image button.
Upload a size chart or lifestyle shot and it drops into the description. Images are compressed automatically and stay within the page width on mobile.
Improved · A faster description editor
The rich-text editor has been rebuilt, keeping the same formatting with undo and redo. Existing descriptions are unchanged.
July 3, 2026
Fixed · Description length counts your text
The minimum and maximum now measure what you typed rather than hidden formatting.
Short descriptions are still caught, and long formatted ones aren't cut off early.
Fixed · Product pages working again
A recent update to rich-text descriptions was crashing every product page.
Fixed · Chat history kept for disputes
Deleting an account or store no longer erases the conversations tied to it.
Messages are preserved and remain visible to admins for support and dispute resolution. There's also a light anti-spam limit on very rapid sending.
New · Read receipts, date dividers, and chat search
You can see a Read marker once the other person opens your message.
Messages are grouped under Today / Yesterday / date dividers, your conversation list has a search box, and the pop-up widget fits small phones properly.
Fixed · Chat photos are private
Images shared in a conversation are no longer reachable by public link — only the two people in that chat and admins can open them.
Improved · Notifications link to what changed
Submitting a return or appeal now shows a View link that opens it, and requesting a tax invoice links to its order.
Improved · Creator profile links to your page
Saving your public creator profile now shows a View link that opens it.
New · Admins can review conversations
A new Chat page lets admins read every customer-to-seller conversation, read-only, for support and moderation.
Improved · B2B notifications link to records
Issuing a purchase order, approving or rejecting a request, submitting a request, and creating an RFQ now include a View link.
New · Sellers can start a chat
Vendors can now open a conversation with a customer from an order. Previously only customers could start one.
Improved · Seller notifications link to records
Sending or voiding an invoice, creating an order, publishing to a marketplace, answering a question, and updating a return policy now include a View link.
New · Archive conversations
Archiving moves a conversation out of your inbox into an Archived area you can reopen anytime. It only affects your own view.
Improved · Admin notifications link to records
Actions on vendors, orders, products, users, B2B companies, and promotions now include a View link that opens that record.
New · Edit or unsend chat messages
You can edit the text of a message you sent — it shows a small "edited" note — or unsend it entirely, and the other person sees the change right away.
Improved · Docs layout improvements
The navigation sidebar now stays pinned, and the width toggle switches only the article between a centered column and full width.
Fixed · B2B invoices in one place
The separate Invoice and RFQ Payment pages showed the same invoices.
They're now a single Invoices page with All / Unpaid / Paid / Void tabs. Paying an invoice is limited to Finance and Company Admin roles.
Improved · Notifications that point somewhere
After updating a live product the confirmation now has a View product link.
Form errors now name the exact fields to fix — "Please fix: Product name, Price" — instead of a vague "check the highlighted fields".
Improved · Chats stay in order and can't be altered
Your conversation list now floats the most recently active chat to the top.
A message's text and photo are locked once sent, so neither side can quietly change what the other said.
New · Rich text product descriptions
The description field is now a proper editor with headings, bold and italic, lists, and links.
Your formatting shows on the product page. Existing descriptions keep working unchanged.
New · More media formats, several at once
You can now select multiple files in one go, and we accept GIF, AVIF, and MOV on top of the usual formats.
Animated GIFs stay animated. Files your browser can't display are turned away with a clear message.
Improved · More reliable chats
Long conversations open on your most recent messages, with a "Load earlier messages" link.
A message you send no longer occasionally appears twice, the unread badge stops counting the conversation you're reading, and a failed send keeps your text and photo so you can retry.
Improved · A friendlier address book
Saved addresses show in a cleaner list with your default pinned to the top, and the add/edit form has a "Set as default" toggle built in.
Improved · A cleaner Profile and Security page
Profile shows your details at a glance and switches to editing only when you tap Edit.
Security shows your email and password with a Change button on each. Both move to a roomier two-column layout.
Fixed · Opening Chats doesn't jump the page
The chat now scrolls only inside the conversation view, so the page stays where you left it.
Fixed · Plixstar icon in your browser tab
The site icon in tabs and bookmarks is now the Plixstar mark instead of a generic placeholder.
Fixed · Product videos load faster
Clips stay cached far longer, and a clip's data doesn't load until you play it — noticeably lighter on mobile.
Improved · Uploaded photos are shrunk automatically
Avatars, logos, banners, review photos, and chat images are compressed the moment you pick them, with no visible loss of quality.
Fixed · Cart no longer doubles on refresh
Reloading while signed in could add your cart items on top of themselves — 2 became 4, then 8.
July 2, 2026
Fixed · E-invoice without a tax number
Leaving the tax number blank now files a General Public e-invoice and issues it, instead of quietly reusing a number you'd entered before.
Improved · A tidier Returns page
Returns filters now live in the same slide-in panel as Orders.
Each return's detail page is reorganised: a progress timeline up top, details and items on the left, your conversation with the vendor on the right.
Improved · Clearer e-invoice status
The Tax Documents tab now shows exactly where your e-invoice stands — issued with its QR code and PDF, still validating, or rejected.
If rejected it tells you why and lets you request again. While validating, the request button is hidden so you can't file a duplicate.
July 1, 2026
Improved · A cleaner Orders page
The toolbar keeps search, sort, per-page, and view, and tucks every filter into a panel that slides in from the side.
Opening an order and heading back keeps your filters and sort exactly as you left them.
Fixed · Guest e-invoices pass validation
An e-invoice for a customer who didn't request a tax invoice is now filed under the general-public category required by LHDN.
Fixed · E-invoices record correctly
A field-name mismatch recorded every successful submission as failed, even though it had been accepted.
June 30, 2026
Clearer messages when a shipment can't be booked. If a Pos Laju or Ninja Van booking fails, the order page now explains why in plain language — for example, that the carrier account isn't authorized to create shipments yet, or that a pickup address is missing — instead of showing a raw technical error. The full technical detail is still available under a "Technical details" toggle. — 8:30 PM
Technical details
shipment_bookings.last_error holds the raw carrier error (e.g. Ninja Van's 403 ... insufficient permissions (required scopes: ...)), which the vendor failure banner and ShippingForm previously rendered verbatim in a <pre> — reading as a bug to testers. New classifyBookingError() (lib/shipping/booking-errors.ts) maps the raw text to a stable kind (auth / address / validation / temporary / generic) + carrier label; both vendor surfaces now show a friendly i18n message (en/ms/zh vendorOrders.bookingBanner.cause*) with the raw text moved behind a <details> "Technical details" expander. AdminShippingOverride keeps the raw error unchanged for debugging. Note the Ninja Van sandbox 403 itself is a carrier-account scope gap, not a code bug.
Vendor order screen stays put after booking a shipment. When a seller books a Pos Laju or Ninja Van shipment, the order page now keeps them on the Shipping tab they were working in, instead of jumping back to the Items tab. — 8:20 PM Faster, more reliable online-banking payments. Paying by online banking (FPX) now confirms your order the moment your bank approves it, instead of occasionally showing "pending" for a while as the behind-the-scenes steps catch up. — 8:20 PM
Fixed · Orders mark themselves Shipped
Once a courier scans a parcel as picked up, the order moves to Shipped on its own and the customer gets the email.
Vendors no longer have to mark it manually, though they still can.
Fixed · Vendor order screen stays put
Booking a shipment now keeps you on the Shipping tab instead of jumping back to Items.
Fixed · Faster online-banking payments
Paying by online banking now confirms your order the moment your bank approves it, instead of showing "pending" for a while.
Fixed · Unpublished products leave the spotlight
The creator spotlight on the home page now hides any product that's been unpublished or moved back to draft.
Improved · Edit product steps in any order
You can jump straight to any section — Basics, Pricing, Media, Details, Review — instead of stepping through one at a time.
Fixed · Logging in takes you to the right place
Signing in now lands you in your own area based on your account, instead of the home page.
Signing in to finish something you were doing still keeps you where you were.
Fixed · Tidier checkout address
Saved addresses no longer stack up as a tall list — checkout shows a single searchable picker.
June 29, 2026
Improved · Shopping and account improvements
A batch of upgrades across browsing, your cart, and your account.
Add wishlist items straight to your cart, see each shop's name on product cards and its rating on the product page, jump from the search bar into the full catalogue, view recent orders on your account overview, give a reason when you cancel, and get a reference number when you request a return.
Improved · A cleaner cart
The slide-out cart has a tidier layout: items scroll in the middle, with the total and Checkout button pinned to the bottom.
Improved · Cleaner product cards
Each card shows price, rating, eco-certification, and a save heart — tap anywhere to open the product. The shop name links straight to that shop.
Improved · Confirm before removing a cart item
Tapping the ✕ now asks you to confirm, so an accidental tap won't clear something you meant to keep.
Improved · Wishlist updates right away
Items you heart appear in the slide-out wishlist the moment you open it, with no refresh.
New · Manage who runs your family
Owners can hand ownership to another member, or step a co-owner back down to member, from the Members page.
New · Add to cart from the listings
Product cards now have a quantity box and an Add to Cart button, so you can grab an item without opening it.
Items with options still open the product page so you can choose. The same editable quantity box appears in your cart.
New · Name your family account
Owners can set and later change a name for their family account, shown on the dashboard and order history.
Improved · Zoom product photos
Hover any photo to magnify it under your cursor, and click for a larger view with every photo lined up beside it.
Improved · Shop filter and star rating stick
Filtering to a shop while searching by keyword now narrows to that shop, and a minimum star rating hides lower-rated items as expected.
New · Easier sharing, and saved counts
The Share button opens a tidy pop-up with one-tap sharing to WhatsApp, Facebook, X, Telegram, email, or LinkedIn, plus copy link.
The heart shows how many shoppers have saved a product, so you can tell at a glance what's popular.
Improved · Filters work while you search
Eco-certification, rating, and product-type filters now apply to search results, not just browsing.
Improved · See why an order was cancelled
A cancelled order shows the date it was cancelled and, if you gave one, your reason — right on the order card.
Fixed · Fixes from testing
You can change your profile photo after one is set, adjust quantities inside your Family shared cart, and see a per-member spending breakdown.
For business accounts, a request's rejection reason now appears in the staff Requests list, not only in the email.
Improved · Your wishlist everywhere
The heart sits at the top of every product page and shows for everyone.
Tap it and, if you're not signed in, a quick sign-in pops up and your save goes through. The heart in the top bar shows how many items you've saved and opens a slide-out list.
Improved · Smoother shopping touches
Add to cart from the wishlist with a confirmation, see recent orders and seller ratings at a glance, and friendlier shipping and return labels.
Improved · More admin tools
Six additions to the admin console.
Shipping Settlements reconciles each carrier bill against the shipping quoted at checkout, with per-row variance highlighted when it's off. Support tickets can be assigned to a staff member. The e-invoice view gains an invoice details panel. Returns carry an automatic advisory risk flag, separate from the manual fraud flag. Platform settings expose the loyalty redemption rate and points expiry. Vendors get a publish-to-marketplace action.
Improved · Save favourites from the product page
Tap the heart next to Add to Cart — no need to head back to the listing. It shows filled when an item is already saved.
Improved · Filter from the toolbar
Filters now sit inline as quick dropdown chips instead of behind a slide-out panel.
Order history and returns filter this way on desktop, with the panel kept for phones. Admin cancellations, e-invoice, and RFQ lists gain new filters.
Fixed · Admin console improvements
Retry every stuck carrier booking in one click, see which customer each refund belongs to, and search orders by vendor name.
The vendor leaderboard can be filtered by date range, the RFQ view shows the purchase order created when an RFQ is awarded, and rejecting a cancellation now notifies the customer.
New · Zoom photos and watch product videos
Tap a photo to open a full-screen view you can zoom and pan, and sellers can add short videos that play in the gallery.
Photos and videos are resized as they upload, so pages stay sharp and load fast.
Improved · Sign in without losing your place
Tapping the wishlist heart, Buy Now, following a store, or chatting with a seller now opens a quick sign-in right where you are.
Once you sign in, whatever you were doing carries on.
Fixed · See every family order
Owners and co-owners can open the full details of any order placed by a member.
Previously only the person who placed it could, even though all family orders showed in the shared history.
New · Ask for the same item again
When returning a faulty product you can choose Replacement to have an identical item reshipped, alongside Refund and Exchange.
New · All your cancellations in one place
A new Cancellations page lists every cancellation for your store, with the order, customer, amount, and reason.
Improved · Choose your courier when booking
On an order's Shipping tab you can pick the courier and book the label yourself, instead of only retrying the one the customer chose.
June 28, 2026
Improved · Filters, sort, and view on one line
Management tables show the View menu on the same row as Filters and Sort, for a tidier toolbar across every list.
Improved · Clearer B2B quotes and invoices
Each quote request shows a short reference code so you can spot it at a glance, and an invoice's detail page lists every item with quantity and price.
Improved · Family portal fixes
Out-of-stock options can no longer be added to a shared cart, and the members list refreshes correctly after you invite, promote, or remove someone.
Fixed · More reliable e-invoicing
Submitted invoices are automatically checked and confirmed, transient network errors retry instead of failing for good, and refund and exchange documents carry the correct tax details.
Improved · Swipe and drag through photos
On a computer the main product image has arrows, and you can drag the photo itself to flip through.
On mobile the swipe is smoother and no longer bounces the page.
Improved · Push notifications
Opt in to get order and account updates on your phone or desktop even when Plixstar isn't open.
Improved · Show only the columns you care about
Portal tables have a View menu to hide or show columns, and your choices are remembered.
Improved · Handle many at once
Select multiple rows and act on them together from a floating action bar that appears when you make a selection.
Fixed · Imported product photos display
Pictures pulled in from a connected shop were sometimes saved with a broken link and showed a placeholder.
Improved · Clearer search suggestions
The instant search drop-down shows names and prices in readable contrast, and hides prices on login-only products with a "Login to view price" note.
New · E-invoices live on your orders
Status, requests, and PDF downloads have moved onto each order, so everything sits in one place.
The separate Invoices and bulk pages are gone. You can filter orders by e-invoice status and request several at once.
Improved · A guided builder for longer forms
Creating a product, flash sale, or manual order now walks you through clear steps with a live preview, and a final review before you save.
Fixed · Return photos upload reliably
Attaching evidence photos no longer fails for screenshots or files with spaces and special characters in their names.
Improved · A much better experience on your phone
A mobile-first overhaul brings app-like navigation at the bottom, sticky add-to-cart and checkout bars, swipeable photos, and a catalog that loads as you scroll.
You can also install Plixstar to your home screen and browse key pages offline.
Improved · Filter by more than one thing
List filters now let you select several options at once, and downloaded reports match exactly what you've filtered.
Fixed · Sharing works everywhere
The Share button opens your phone's native share sheet on mobile and copies the link on desktop, and is no longer missing on larger screens.
Improved · Store picker fixed
Admins can choose a store again — the list was showing "No results" even when approved stores existed.
Improved · Quicker edits without leaving the page
Creating or editing products, vouchers, banners, and tickets now opens in a pop-up on top of the list, so you keep your place.
Improved · Creator portal polish
Payout pages refresh correctly after changes, a code's redemption list matches its totals, and tickets can only be linked to your own orders.
New · Developer docs linked
A new Developer link in the footer takes you to our documentation and API reference.
Improved · Stay up to date automatically
When we ship a new version you'll see a gentle "refresh to update" prompt, so you're never stuck on an old version.
June 27, 2026
Improved · Now in your language
Sign-in and account pages for shoppers are now available in multiple languages.
Improved · Fewer accidental clicks
Added a confirmation step before payout balance adjustments and before retrying a refund.
Improved · Smoother behind the scenes
Speed and reliability improvements across the app.
June 26, 2026
Improved · Safer checkout and payments
We strengthened how order totals, payments, and refunds are calculated and processed.
Improved · Your data stays yours
Tightened access controls so account, order, and payout details are only visible to the people they belong to.
