Release notes
Changelog
What shipped, what changed, and what's coming next. Subscribe to the newsletter for weekly recaps.
10 most recent releases
- v3.21.16LATEST
Bank transfer checkout tidy-up
- Bank transfer checkout pieces renamed to match how payments work today; checkout and payment pages behave the same
- Removed an unused transfer QR component
- v3.21.15
Security update for the storefront platform and runtime
- Core web platform patched to the latest security release
- Server runtime moved to a supported long-term version with current system security fixes
- Unused package tooling removed from the production image
- Test tooling upgraded to a patched major version
- Code-quality tooling no longer depends on an unpatched pattern-matching library
- Production releases now wait for the security scans to pass
- v3.21.14
VND bank transfers go straight to our account
- VND payments are now a direct bank transfer via VietQR to our Techcombank account
- Order confirmation happens once the transfer is received; the payment page updates on its own
- Payment method descriptions, FAQ, pricing, status, terms and privacy pages updated to match
- v3.21.5
Hotfix: product detail pages no longer crash when an SEO field is missing
- Resolved a 500 error on every product page caused by a missing identifier in the SEO metadata builder
- v3.21.4
Recover legacy crawled URLs (locale prefixes + nested category paths)
- Older crawled URLs with locale prefixes the site no longer ships now permanently redirect to the matching default-language route instead of returning a generic 404
- The list of accepted languages is now driven by the admin-configured language list, not a hardcoded code constant
- Older crawled URLs with extra category/subcategory path segments under source-code, game-assets, and market-app now permanently redirect to the flat slug route they should have
- Net effect: stale inbound links and old search-engine results land on the correct live page instead of an error page
- v3.21.3
Search indexing fixes โ cleaner sitemap + accurate product canonicals
- Sitemap now lists only canonical, indexable URLs (drops noindex, redirected, and disallowed paths)
- Blog post entries point to the live blog detail route instead of a redirect target
- Product detail pages emit canonical URLs and structured data that match their real route, removing stale 404 references
- Product identifier in structured data capped to a search-engine-safe length
- Mobile app detail page now ships full SEO metadata (title, canonical, social tags, structured data)
- Cross-category slug redirects upgraded to permanent so search engines forward link signals to the correct route
- Silenced expected inline-style noise from the policy violation log so real signals remain visible
- v3.21.2
Mobile app deep-linking + ad network verification metadata
- Published Apple universal link association file so iOS app opens matching web links directly
- Published ad network app verification file for the mobile app inventory
- v3.21.1
Quieter ops logs โ inline-style CSP reports no longer spam the collector
- CSP report endpoint now filters out known inline-style violations so actionable signals (script, frame, connect violations) are easy to spot
- Ops log volume drops ~95% on the frontend pods during normal browsing
- v3.21.0
Richer product structured data for Google โ clears Search Console warnings
- Product pages now emit schema.org brand, SKU, merchant return policy, and shipping details so Google Merchant listings validate cleanly
- Product image is always emitted as an array with a valid absolute URL โ fixes "image field missing" Search Console errors
- Breadcrumb structured data now uses absolute URLs on every rung โ fixes "URL in id field invalid" warning
- Aggregate rating still only emits when real review data exists โ Google never shows a fake rating
- v3.20.1
Real 30-day view history on product detail pages
- View History chart on product detail pages now draws from the real per-day view counts recorded on the backend, not a synthesised shape
- Chart falls back to an indicative distribution only when the new endpoint is unreachable, so the page never shows an empty chart
- Mobile-app, source-code, and game-asset detail pages all share the same history source
