Skip to content

feat(release): sync Zero-Strapi 2026 architecture, 5 categories & MV3 extension (#35) - #36

Merged
JOY (JOY) merged 93 commits into
mainfrom
dev
Oct 15, 2026
Merged

JOY (JOY) merged 93 commits into
mainfrom
dev

Conversation

@JOY

Copy link
Copy Markdown
Contributor

Summary

  • Zero-Strapi 2026 Architecture & TypeScript 7.0.2: 4-Layer Composable Backend, React 19.3, Next.js 16.3.8 Server Data Layer (src/server/rate/) & REST API v1 (/api/v1/rate/*, OpenAPI 3.1.0 /api/v1/rate/openapi.json).
  • 5/5 Tech Categories & 10 Field Groups: Full support for /smartphones, /tablets, /laptops, /smartwatches, /earbuds with PhoneArena + GSMArena 10-Field-Group taxonomy, multi-camera separation, and Supabase Cloud backfill (13 master products, 8 merchants, 60-day price history).
  • Dual Merchant Risk Score & JReviews Community Voting: Separate dosafe_risk_score and
    eview_risk_score, 5-criteria JReviews submission, and per-user voting (
    ate.review_votes).
  • Multi-Platform Normalization & Browser Extension MV3: Support for Shopee, Lazada, Tiki, CellphoneS, TGDĐ, TikTok Shop, FPT Shop, Viettel Store, Hoàng Hà Mobile, Di Động Việt, Shadow DOM Trust Pill, Side Panel, and Two-Speed Hybrid Lookup/Quarantine Ingest API.
  • DESIGN.md v2.0 & Full i18n (�i/�n/cs): Dark Obsidian Precision UI, unprefixed locale URLs (localePrefix: 'never'), /compare, /inspect, /watchlist, /merchants, /developers.

Closes #35

JOY (JOY) and others added 30 commits August 24, 2025 17:33
Merge pull request #1 from RateBox/dev
…essing

- Added Redis Stream service for message queue management
- Created listing processor to handle Shopee product data
- Implemented background worker to consume validation requests
- Set up data flow: Extension → Redis Stream → Strapi → Listings
- Fixed TypeScript compilation issues and package dependencies
- Configured proper Status enum values for Strapi listings
- Successfully creates Listing records without creating Reviews

The system now processes Shopee data from the browser extension through Redis Streams
and creates Listing records in Strapi with product metadata stored for reference.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
…nt template for home\n- Add pricing & company pages\n- Strapi: platform identifier cleanup, productId extract unify\n- chore(lint-staged): add root config for Windows
… Rename custom Locale -> AppLocale to avoid i18n conflict\n- Adjust service logic and creation defaults\n\ndocs(guides): add UI Architecture & Coding Conventions\n\nchore: rebuild admin and restart dev
- Rename apps/ui to apps/web for Vercel template consistency
- Update all config files: package.json, turbo.json, .eslintrc.js, .vscode/settings.json
- Update documentation: README, COLLABORATION.md, Development-Setup.md
- Update Git config: CODEOWNERS, .github/workflows, .github/labeler.yml
- Integrate ListingHub template as main homepage
- Copy ListingHub source files to apps/web/src/app/[locale]
- Fix layout conflicts and restore ListingHub template display
- Add react-icons dependency for ListingHub components
- Test web app running successfully on port 3000
- Copy all images from ListingHub template to public/img directory
- Fix image loading issue where all images were only 1328 bytes placeholders
- Images now display correctly on frontend
- Remove unused test JS files

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Remove quotes from file paths to let ESLint handle escaping
- Fix issue where files with brackets like [locale] were not found
- Add check for empty file list to prevent errors

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Update hero section to use home-6 style with simple search bar
- Replace FormOne with simple search input and magnifying glass button
- Keep Explore Popular Categories buttons below search
- Change CategoryOne to CategoryTwo from home-2 for carousel layout
- Keep brand logos section from original home-1

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Update package.json dev script to force port 3000
- Ensures consistent development environment

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Reduce padding and margins for better vertical positioning
- Content now positioned closer to top of viewport

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed xRange syntax for node-redis library (not ioredis)
- Worker can now read messages from Redis stream
- Successfully processes extension data and creates listings
- Changed from xReadGroup to simpler xRange polling approach

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
…Vietnam

- Add locale parameter to findOrCreateCategory function
- Pass locale when creating new categories
- Ensure categories are created with Vietnamese locale for shopee.vn
- Fix issue where categories were defaulting to English locale

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add Category relation mapping using category.id
- UsageCount already mapped from product.soldCount
- Add logging for Category and UsageCount values
- Note: Extension currently sends soldCount=0, needs investigation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add soldCount parsing in content-script.js from "Đã bán" element
- Support multiple selectors as Shopee often changes class names
- Parse formats like "71", "1.2k", "1,2k" correctly
- Pass soldCount to background.js for API submission
- Map to UsageCount field in Strapi

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Extension improvements:
- Use text-based search for "Đã bán" instead of hardcoded classes
- Three strategies: text search, regex pattern, fallback to classes
- More resilient to Shopee HTML structure changes

Strapi improvements:
- Use PlatformLocale from Platform table directly
- No hardcoded locale logic
- Platform controls listing locale

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Extension improvements:
- Parse actual product description from "Mô tả sản phẩm" section
- Two strategies: find by section title or longest pre-wrap div
- Add description to product data object
- Use real description instead of product title

Backend improvements:
- Remove duplicate Category field in listing data
- Use actual description from extension

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Use .e8lZp3 and .QN2lPu classes from actual Shopee HTML
- Parse all p tags and join with newlines
- Three strategies: exact class, heading search, text fallback
- More reliable description extraction

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Upload hình vào thư mục Items trong Strapi
- Ngăn tạo listing tiếng Anh trùng, chỉ tạo bản tiếng Việt
- Sửa mapping field Media thay vì Images
- Thêm kiểm tra strapi instance trước khi upload hình
- Extension v1.0.48: giữ nguyên extractors đã hoạt động

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
- Sửa redisWorker.ts để đọc đúng cấu trúc data từ extension
- Extension gửi data dạng item.product.field, không phải nested thêm
- Fix mapping: stock, images array, và likedCount (FavoriteCount)
- Đảm bảo parse đúng kiểu dữ liệu số với parseInt()

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Sửa cấu trúc data gửi cho Strapi upload service
- Tách riêng fileInfo và file object
- Thêm path: null để Strapi nhận diện dùng buffer

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Strapi upload service yêu cầu file path thực, không chấp nhận buffer trực tiếp
- Ghi buffer ra file tạm trong temp folder
- Upload từ file path, sau đó xóa file tạm
- Import fs, path, os modules để xử lý file

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Sửa upload hình dùng temp file thay vì buffer trực tiếp
- Fix TypeScript error với Media field trong log
- Images được extract và upload đúng cách từ Shopee

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
- Khai báo tempFilePath bên ngoài try block
- Kiểm tra tempFilePath trước khi cleanup trong catch
- Continue với hình tiếp theo nếu upload thất bại

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
- Sửa logic upload để không skip khi listing đã có hình cũ
- Thêm smart filename với ListingID để tránh trùng lặp
- Lọc hình overlay/badge không phải product (vn-11134004, vn-11134258, 32-char hex)
- Giảm ngưỡng kích thước tối thiểu xuống 5KB
- Cải thiện extension để lấy đủ hình từ các blocks sản phẩm
- Thêm deduplication trong cả extension và Strapi

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Media Organizer: API quản lý và tổ chức media library
- Item Validator: Service validate dữ liệu sản phẩm
- Title Normalizer: Service chuẩn hóa tiêu đề sản phẩm
- Cleanup Duplicate Media: Service dọn dẹp media trùng lặp
- Business components cho Strapi
- Docker monitoring scripts cho PostgreSQL và Redis
- UI cải tiến cho web app (items page, navbar)
- Cập nhật content types và generated types
- Cải thiện listing processor và upload images

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Loại bỏ tất cả fallback values giả (title, description)
- Thêm validation nghiêm ngặt trước khi tạo listing
- Cải thiện extension để lấy title từ nhiều selectors
- Sửa lỗi URL format shopee/vn thành shopee.vn
- Thêm CRITICAL RULES vào CLAUDE.md về không hardcode data
- Sửa lỗi tạo duplicate items bằng cách dùng $startsWith filter thay vì exact match
- Thêm logic extract brand từ title khi extension chưa crawl được field brand
- Sửa lỗi title hiển thị hoa thường lộn xộn (ĐIệN ThoạI) bằng cách bỏ auto-capitalize
- Cải thiện matching logic cho items với suffix timestamps

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
JOY added 24 commits October 14, 2026 20:13
…ops, /merchants trust profiles, URL lookup API & DB hardening (#18)
…ws submission API & RPC, /watchlist price alerts, JSON-LD & purge 56 dead template routes (#19)
…/cs i18n, cross-category links & purge 63 dead template components (#20)
…I v1 (/stats, /compare) & automated core tests (#21)
…atchlist Alert API (/api/v1/rate/watchlist) & price_alerts migration (#23)
@coderabbitai

coderabbitai Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f4efdc56-e0b6-48e5-b0f2-93b2cc89141f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@dos

dos Bot commented Oct 15, 2026

Copy link
Copy Markdown

DOS describe: could not start

Your Code Review quota or credits do not allow this command. Check your quota or credits before trying again. No model call was made.

@JOY
JOY (JOY) merged commit d713ef7 into main Oct 15, 2026
3 of 6 checks passed
@JOY JOY (JOY) changed the title release: Zero-Strapi 2026 Architecture, 5 Categories, 10-Field-Group Specs, Multi-Platform Scrapers & MV3 Extension (#35) feat(release): sync Zero-Strapi 2026 architecture, 5 categories & MV3 extension (#35) Oct 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant