Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
abf0864
Merge pull request #2 from RateBox/main
JOY Aug 24, 2025
1749bac
feat(strapi): implement Redis Stream integration for Shopee data proc…
Aug 24, 2025
43a6aa5
feat(ui): integrate Radiant 1:1 homepage + pages\n\n- Use exact Radia…
Aug 26, 2025
e06c9dd
feat(strapi): add Platform.AppLocale and update listingProcessor\n\n-…
Aug 26, 2025
c2bdf75
* Update UI
Aug 26, 2025
3f16e1e
feat: Complete rename from ui to web + integrate ListingHub template
Aug 27, 2025
742d7d7
fix: Replace placeholder images with actual images from template
Aug 28, 2025
74a3392
fix: update lint-staged config to handle files with brackets in path
Aug 28, 2025
4f58bc9
feat: update homepage layout with home-6 style and category-two
Aug 28, 2025
c7a9525
fix: configure Next.js dev server to always run on port 3000
Aug 28, 2025
23341a5
fix: adjust hero section content positioning higher
Aug 28, 2025
c3e21ea
fix: Redis worker now successfully reads and processes messages
Sep 2, 2025
5e6b7ee
fix: Set correct locale (vi) for categories and listings from Shopee …
Sep 2, 2025
d2b7aaf
fix: Map Category relation and UsageCount in listing creation
Sep 2, 2025
14cd170
fix: Parse soldCount from Shopee product page correctly
Sep 2, 2025
4d478af
fix: Improve extension robustness and use Platform locale correctly
Sep 2, 2025
a2c1804
fix: Parse product description and soldCount from Shopee correctly
Sep 2, 2025
a72a0e1
fix: Use exact Shopee HTML classes for description parsing
Sep 2, 2025
c3d7658
fix: Sửa lỗi upload hình và tạo listing trùng
Sep 3, 2025
f893fa4
fix: Sửa lỗi mapping dữ liệu stock, images và likedCount từ extension
Sep 3, 2025
170e1ed
fix: Sửa lỗi upload ảnh trong listingProcessor
Sep 3, 2025
fae9193
fix: Sử dụng file tạm thời để upload ảnh vào Strapi
Sep 3, 2025
e7610de
fix: Sửa lỗi upload hình ảnh và TypeScript errors
Sep 3, 2025
985f817
fix: Sửa lỗi tempFilePath undefined khi upload hình thất bại
Sep 3, 2025
a2cea22
* Finised crawl shopee page
Sep 4, 2025
98c01f1
WIP UI integration
Sep 4, 2025
a4c8280
fix: Cải thiện upload hình sản phẩm từ Shopee
Sep 5, 2025
8b24ceb
feat: Thêm nhiều tính năng mới cho Rate Platform
Sep 5, 2025
ee0adff
fix: Sửa lỗi data validation và URL format
Sep 9, 2025
606df76
fix: Sửa lỗi duplicate items và title encoding
Sep 14, 2025
479abd9
feat: Cải thiện hệ thống Rate Platform với nhiều tính năng mới
Sep 18, 2025
7c6e670
feat: Tự động upload hình ảnh vào Strapi Media Library khi refresh li…
Sep 18, 2025
20e191a
fix: Cập nhật extension để lấy Favorite count từ Shopee
Sep 18, 2025
4a9a6a6
feat: tích hợp rest cache plugin với redis cho strapi 5
Sep 27, 2025
9ac3120
feat: Migrate to Supabase stack với PostgreSQL 17
Oct 2, 2025
44995ed
feat: Add rate-admin TypeScript plugin with SDK
Oct 6, 2025
0b1389a
feat: Add rate-admin custom field plugin for property selection
Oct 12, 2025
3b3c5e5
feat(strapi-plugin): property list custom field; fix admin register; …
Oct 12, 2025
6ab5a26
feat: migrate from Strapi to PostgreSQL pure on Supabase Cloud, add 1…
Sep 25, 2026
a5e664a
build: configure vercel monorepo deploy and add missing react-select …
Sep 30, 2026
0945230
feat(web): upgrade to ListingHub v1.1.0, Next.js 16 and React 19
Oct 1, 2026
bf132fe
fix(web): migrate next-intl to v4 for Turbopack & Next.js 16 and add …
Oct 1, 2026
06787af
chore: organize vendor tracking in vendor/listinghub and untrack lega…
Oct 1, 2026
6e9a1da
chore(deps): upgrade workspace packages to latest compatible versions
Oct 1, 2026
783a5f8
feat(i18n): set Vietnamese as default locale and add in-page Language…
Oct 1, 2026
a8d0542
fix(ui): align language switcher with SVG flags and localize homepage…
Oct 1, 2026
8bf5d2f
fix(importer): dedupe Shopee reviews client-side to match partial uni…
Oct 4, 2026
873a794
fix(importer): read MPROXY_* env vars in ProxyManager with hardcoded …
Oct 4, 2026
d6bc0fc
fix(importer): embed proxy credentials in Chrome --proxy-server URL
Oct 4, 2026
daadc39
fix(importer): route CDP Chrome through local proxy-chain forwarder f…
Oct 4, 2026
52b4b80
fix(importer,web): apply domain plan section 5 code fixes (#3)
JOY Oct 6, 2026
c941957
merge: origin/dev (PR #3 squash); keep reviewed in-batch review dedupe
Oct 7, 2026
461e557
feat(importer): wire crawler to the rate.crawl_jobs queue (#4)
JOY Oct 7, 2026
107dee7
fix(importer): enqueue CLI closes its crawl run (#5)
JOY Oct 8, 2026
6f777fd
feat(importer): add provider-agnostic AI Spec Enricher (10 Field Grou…
Oct 13, 2026
dff18e1
refactor(architecture): split sensitive scrapers/captcha/proxy to pri…
Oct 13, 2026
ef6529b
docs: add AGENTS.md multi-agent workflow, update CLAUDE.md, README.md…
Oct 13, 2026
a483c2a
feat(importer): add AI Review Analyzer with JReviews weighting, 5 rev…
Oct 13, 2026
91946be
docs(proposal): merchant risk score separation from DOSafe (#15)
Oct 13, 2026
54f7ccf
feat(db,importer): add rate.review_votes per-user voting & trigger re…
Oct 14, 2026
074c72c
docs(agents): embed user-level hard rules & DOS-Me migration authorit…
Oct 14, 2026
142416b
fix(importer): chunk LLM review batches by 25, track per-row detector…
Oct 14, 2026
6f0bec1
feat(importer,db): separate merchant review_risk_score from DOSafe th…
Oct 14, 2026
89b772f
chore(lint): pin TypeScript 5.9.3 and ESLint 8.57.0 to fix husky pre-…
Oct 14, 2026
c512a2b
feat(web): add JReviews dual rating, AI review synthesis, flag badges…
Oct 14, 2026
9720c1a
feat(web): add category-driven 10-field-groups filter sidebar and fix…
Oct 14, 2026
b46a288
feat(web): add price history chart, fake discount detector, and fix /…
Oct 14, 2026
8f838dc
docs(audit): add full-stack tech stack and architecture audit report
Oct 14, 2026
53c81da
refactor(arch): upgrade to TS 7.0.2, add 4-layer backend & REST API v…
Oct 14, 2026
0c50e34
feat(web): add interactive /compare workspace, autocomplete & tray (C…
Oct 14, 2026
4714309
feat(web,db): upgrade homepage to live rate data, add /tablets, /lapt…
Oct 14, 2026
f1ff6f4
feat(web,db): add /tablets/[slug], /laptops/[slug], 5-criteria JRevie…
Oct 14, 2026
426820d
feat(extension): implement 2026 MV3 Browser Extension & Two-Speed Hyb…
Oct 14, 2026
44cef80
feat(web,shared-data): add /developers REST API v1 portal, full vi/en…
Oct 14, 2026
ab93dd3
feat(web): complete 5/5 categories (/smartwatches, /earbuds), REST AP…
Oct 14, 2026
1f50b20
feat(web): purge remaining Strapi env/auth/components, integrate Supa…
Oct 14, 2026
43901e9
feat(web): add Deep URL & Fake Discount Inspector (/inspect), Cloud W…
Oct 14, 2026
c940ef3
feat(web): add multi-locale i18n for categories, merchants & product …
Oct 14, 2026
82358c3
feat(web,crawlers): add merchant directory explorer, navbar inspect &…
Oct 15, 2026
b765dc7
feat(extension,web): add 10-platform support, sidepanel quick inspect…
Oct 15, 2026
af56bed
feat(web,api): add OpenAPI 3.1.0 spec route & upgrade API Playground …
Oct 15, 2026
f5631e7
feat(web): add WatchlistQuickToggle & inspect actions to product card…
Oct 15, 2026
ee7a8a3
feat(web,docs): add CommunityQuarantineSubmitForm & sync ROADMAP (#29)
Oct 15, 2026
a0edad0
feat(web): add 1-click rival compare & head-to-head verdict card (#30)
Oct 15, 2026
3b723cf
feat(web): define DESIGN.md v2.0, strip locale URL slugs, render all …
Oct 15, 2026
4b3c082
feat(web): modernize Hero & Telemetry per DESIGN.md v2.0, add locale …
Oct 15, 2026
745115b
feat(web): align Category & Merchant headers to DESIGN.md v2.0, strip…
Oct 15, 2026
6b6c36d
docs(roadmap): record Issues #30-#33 DESIGN.md v2.0 & unprefixed loca…
Oct 15, 2026
24fca88
feat(crawlers): sync 5-platform normalization, backfill CLI and roadm…
Oct 15, 2026
f8de58a
chore(db): sync hardened Open-Core reference migrations with DOS-Me l…
Oct 15, 2026
224e029
fix(rate): enforce non-empty anonymous fingerprint and prevent cross-…
Oct 15, 2026
fd13b02
docs(roadmap): record DOS-Me PR #1189 rate schema migration ledger sy…
Oct 15, 2026
8123136
fix(web,ci): replace residual next-auth imports with Supabase Auth
Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
57 changes: 11 additions & 46 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -1,57 +1,22 @@
{
"permissions": {
"allow": [
"Bash(yarn dev)",
"Bash(docker:*)",
"Bash(ForEach-Object { Stop-Process -Id $_d -Force })",
"Bash(yarn strapi:*)",
"Bash(netstat:*)",
"Bash(findstr:*)",
"Bash(taskkill:*)",
"Bash(yarn build)",
"Bash(yarn install)",
"Bash(yarn --version)",
"Bash(curl:*)",
"Bash(yarn upgrade:*)",
"Bash(rm:*)",
"Bash(yarn list:*)",
"Bash(yarn remove:*)",
"Bash(yarn strapi:dev:*)",
"Bash(yarn dev:strapi:*)",
"Bash(yarn add:*)",
"Bash(yarn workspace @app/strapi add:*)",
"Bash(yarn workspace @repo/strapi add:*)",
"Bash(yarn playwright install:*)",
"Read(//c//**)",
"Bash(tee:*)",
"Bash(awk:*)",
"Bash(node:*)",
"Bash(yarn workspace @app/strapi dev:*)",
"Bash(git submodule:*)",
"Bash(git fetch:*)",
"Bash(git checkout:*)",
"Bash(git pull:*)",
"Bash(git add:*)",
"mcp__playwright__browser_navigate",
"mcp__playwright__browser_snapshot",
"Bash(psql:*)",
"Bash(where psql)",
"Bash(yarn info:*)",
"Bash(npm view:*)",
"Bash(yarn strapi:*)",
"mcp__playwright__browser_wait_for",
"mcp__playwright__browser_take_screenshot",
"Bash(yarn start)",
"WebFetch(domain:github.com)",
"WebFetch(domain:raw.githubusercontent.com)",
"Bash(iconv:*)",
"mcp__playwright__browser_type",
"mcp__playwright__browser_click",
"Bash(powershell:*)",
"mcp__playwright__browser_close",
"Bash(yarn cache:*)",
"mcp__playwright__browser_console_messages",
"Bash(grep:*)",
"Bash(yarn install:*)",
"Bash(yarn:*)",
"Bash(timeout:*)",
"mcp__playwright__browser_evaluate",
"Bash(git clone:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(move:*)",
"Bash(dir:*)"
"Bash(yarn eslint:*)",
"Bash(git push:*)"
],
"deny": [],
"ask": [],
Expand Down
18 changes: 11 additions & 7 deletions .cursor/rules/turborepo-workflow.mdc
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
---
description:
globs:
description:
globs:
alwaysApply: true
---

Rate-New Turborepo development workflow and commands
globs: ["package.json", "turbo.json", "yarn.lock"]


# Rate-New Turborepo Workflow

## Core Commands

- **Start dev**: `yarn dev` từ root directory
- **Build project**: `yarn build`
- **Build project**: `yarn build`
- **NEVER use npm**: Chỉ sử dụng yarn commands
- **PowerShell syntax**: Tránh bash commands

## Project Structure

- `apps/strapi/`: Strapi CMS backend với PostgreSQL
- `apps/ui/`: Next.js frontend
- `apps/web/`: Next.js frontend
- `packages/`: Shared components và configs
- `Docs/`: Project documentation, guides, platform resources
- `Docs/Modules/`: Module-specific documentation
Expand All @@ -31,14 +33,16 @@ globs: ["package.json", "turbo.json", "yarn.lock"]
- Luôn chạy commands từ D:\Projects\JOY\Rate

## Documentation Workflow

- **Check existing docs** trước khi tạo solutions mới
- **Reference Modules/** cho similar functionality patterns
- **Update Docs/** với new discoveries
- **Maintain consistency** với established patterns

## Development Rules
## Development Rules

- Kiểm tra port conflicts trước khi start
- Strapi admin: localhost:1337
- Next.js UI: localhost:3000

- Auto-restart services khi cần thiết
- Auto-restart services khi cần thiết
3 changes: 0 additions & 3 deletions .czrc

This file was deleted.

17 changes: 12 additions & 5 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
# ========================================
# DATABASE
# ========================================
DATABASE_URL=postgresql://JOY:password@localhost:5432/rate_db
DATABASE_URL=postgresql://joy:password@localhost:5432/rate
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=rate_db
DATABASE_USERNAME=JOY
DATABASE_NAME=rate
DATABASE_USERNAME=joy
DATABASE_PASSWORD=password

# ========================================
Expand All @@ -23,9 +23,16 @@ REDIS_PASSWORD=
REDIS_DB=0

# ========================================
# AI SERVICE (OpenAI)
# AI SERVICE (Provider-Agnostic: OpenAI / DOS-AI / Gemini / DeepSeek / Groq / OpenRouter / Ollama)
# ========================================
# IMPORTANT: Get your API key from https://platform.openai.com/api-keys
# Options: openai | dos-ai | gemini | deepseek | groq | openrouter | ollama
AI_PROVIDER=openai
AI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Optional custom OpenAI-compatible endpoint (e.g. https://api.dos.me/v1 or http://localhost:11434/v1)
AI_BASE_URL=
AI_MODEL=gpt-4o-mini

# Legacy OpenAI variables (also supported as fallback)
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_MODEL=gpt-4o-mini
OPENAI_TEMPERATURE=0.3
Expand Down
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ module.exports = {
"apps/strapi/.cache/**",
"apps/strapi/public/admin/**",
"apps/strapi/types/generated/**",
"apps/ui/next-env.d.ts",
"apps/web/next-env.d.ts",
],
}

Expand Down
4 changes: 2 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ updates:
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
- package-ecosystem: "yarn"
directory: "/apps/ui"
- package-ecosystem: "npm"
directory: "/apps/web"
schedule:
interval: "weekly"
- package-ecosystem: "yarn"
Expand Down
4 changes: 2 additions & 2 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
area:frontend:
- 'apps/ui/**'
- 'apps/web/**'
- 'packages/design-system/**'

area:backend:
Expand All @@ -13,7 +13,7 @@ area:shared:

feature:
- 'Docs/**'
- 'apps/ui/src/app/(features)/**'
- 'apps/web/src/app/(features)/**'

breaking:api:
- any: ['packages/shared-data/**']
Expand Down
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@
## Screenshots (optional)

## Notes
- Affected areas: `apps/ui`, `apps/strapi`, `packages/*`, `Docs/*`
- Affected areas: `apps/web`, `apps/strapi`, `packages/*`, `Docs/*`
- Reviewers: @agent-frontend @agent-backend
95 changes: 40 additions & 55 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,94 +1,79 @@
name: Verify build
name: Verify Build & Typecheck (Zero-Strapi 2026)

on:
workflow_dispatch:
push:
branches:
- main
- dev
pull_request:
branches:
- main
- dev

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

env:
STRAPI_REST_READONLY_API_KEY: random-value-just-for-build
NEXT_PUBLIC_SUPABASE_URL: https://example.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY: ci-placeholder-anon-key
SUPABASE_URL: https://example.supabase.co
SUPABASE_SERVICE_ROLE_KEY: ci-placeholder-service-role-key

jobs:
lint:
name: Lint
verify:
name: Typecheck & Build Monorepo
timeout-minutes: 15
runs-on: ubuntu-latest
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 2

- name: Cache turbo build setup
uses: actions/cache@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
path: .turbo
key: '${{ runner.os }}-turbo-${{ github.sha }}'
restore-keys: |
${{ runner.os }}-turbo-
version: 10.34.5

- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 22
cache: yarn

- name: Install dependencies
run: yarn

- name: Prepare Environment Variables
run: |
cp apps/strapi/.env.example apps/strapi/.env
cp apps/ui/.env.local.example apps/ui/.env.local

- name: yarn format:check
run: yarn format:check

- name: yarn lint
run: yarn lint

build:
name: Build all apps
timeout-minutes: 15
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 2
cache: pnpm

- name: Cache turbo build setup
- name: Cache Turborepo
uses: actions/cache@v4
with:
path: .turbo
key: '${{ runner.os }}-turbo-${{ github.sha }}'
restore-keys: |
${{ runner.os }}-turbo-

- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 22
cache: yarn

- name: Install dependencies
run: yarn

- name: Prepare Environment Variables
run: |
cp apps/strapi/.env.example apps/strapi/.env
cp apps/ui/.env.local.example apps/ui/.env.local

- name: Build UI
run: yarn build:ui

- name: Build Strapi
run: yarn build:strapi
run: pnpm install --frozen-lockfile

- name: Build @repo/shared-data
run: pnpm --filter @repo/shared-data build

- name: Build & Typecheck @repo/crawlers
run: pnpm --filter @repo/crawlers build

- name: Run @repo/crawlers Open-Core Intelligence Tests
run: pnpm --filter @repo/crawlers test

- name: Build & Typecheck @repo/extension (MV3)
run: pnpm --filter @repo/extension build

- name: Run @repo/extension E2E Pipeline Tests
run: pnpm --filter @repo/extension test

- name: Typecheck @repo/web
run: pnpm --filter @repo/web typecheck

- name: Run @repo/web Core Architecture Tests
run: pnpm --filter @repo/web test

- name: Build @repo/web (Next.js 16)
run: pnpm --filter @repo/web build
4 changes: 0 additions & 4 deletions .github/workflows/labels-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ jobs:
permissions:
issues: write
contents: read
pull-requests: write
repository-projects: write
metadata: read
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -27,4 +24,3 @@ jobs:
skip_delete: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

20 changes: 18 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ dist/

# Backup directory
/Backup/
crawler_test/
test-results/
scratch/
**/scratch/

# debug
npm-debug.log*
Expand Down Expand Up @@ -55,7 +59,7 @@ packages/*/.env

#jetbrains IDEs
.idea

.claude/
.cache

.strapi-updater.json
Expand Down Expand Up @@ -85,11 +89,23 @@ quick-*.js
# Node modules backups
node_modules_backup_*
node_modules_old_*
node_modules.bak_*
**/node_modules.bak_*

# Strapi compiled config files (keep only TypeScript sources)
apps/strapi/config/*.js
node_modules_*
node_modules_*

# backup trash directories
/.trash/
**/.trash/

# ignore compiled Strapi admin assets
apps/strapi/public/admin/
apps/strapi/public/admin/
apps/web/node_modules*
node_modules*
volumes
.env*
ListingHub_NextJs_*
vendor/
Loading
Loading