尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Nền tảng web P2P cho người chơi TCG ở Nhật (Pokémon / One Piece) trao đổi thẻ trực tiếp, không thu phí. Mục tiêu cốt lõi: thu thập giá đóng (closing price) đáng tin cậy qua cơ chế give-to-get — muốn xem dữ liệu giá thị trường thì phải đóng góp ít nhất 1 giao dịch đã xác nhận. Core loop MVP: List thẻ → Chat → Xác nhận giao dịch → Lưu giá (nhãn confirmed / self-reported).查看完整 README ↗
Nền tảng web P2P cho người chơi TCG ở Nhật (Pokémon / One Piece) trao đổi thẻ trực tiếp, không thu phí. Mục tiêu cốt lõi: thu thập giá đóng (closing price) đáng tin cậy qua cơ chế give-to-get — muốn xem dữ liệu giá thị trường thì phải đóng góp ít nhất 1 giao dịch đã xác nhận.
Core loop MVP: List thẻ → Chat → Xác nhận giao dịch → Lưu giá (nhãn confirmed / self-reported).
DATABASE_URLYêu cầu: Node.js 20+.
cd deal
npm install
npx prisma migrate dev # tạo db + generate client + seed tự động
npm run dev # → http://localhost:3000
Tài khoản demo (seed sẵn): [email protected] / password123
(4 tài khoản khác: taro|hanako|kenji|[email protected], cùng mật khẩu.)
Lệnh khác:
npm test # unit tests (vitest)
npm run build # production build + typecheck
npm run db:seed # chạy lại seed (idempotent)
deal/
├── CLAUDE.md ← bản đồ dự án: làm gì đọc file nào
├── docs/ ← tài liệu theo chủ đề; docs/api/ = API contract (nguồn chân lý)
├── prisma/
│ ├── schema.prisma ← 8 bảng (users, cards, listings, conversations,
│ │ messages, trades, price_records, sessions)
│ └── seed.ts ← 5 users, 38 thẻ, 10 listing, 66 price records
├── src/
│ ├── app/ ← pages (App Router) + API route handlers
│ │ └── api/ ← routes: CHỈ validate + gọi service
│ ├── server/
│ │ ├── services/ ← business logic (unit test ở tests/)
│ │ ├── repositories/ ← mọi truy cập Prisma
│ │ ├── session.ts ← session cookie (bảng sessions)
│ │ ├── validation.ts ← zod schemas + "enum" values
│ │ └── errors.ts ← ApiError + error response thống nhất
│ ├── components/ ← React components (client)
│ └── lib/
│ ├── api-client.ts ← tầng gọi API duy nhất của frontend
│ └── types.ts ← DTO dùng chung FE/BE
└── tests/ ← vitest (28 tests)
| Biến | Mặc định | Ghi chú |
|---|---|---|
DATABASE_URL | file:./dev.db | SQLite dev; Postgres khi deploy |
APP_URL | http://localhost:3000 | URL gốc dùng trong link email |
SMTP_HOST/PORT/USER/PASS/FROM | (trống) | Trống → email vào hộp thư dev /dev/mailbox. Muốn gửi Gmail thật: bật 2FA → tạo App Password tại myaccount.google.com/apppasswords → điền SMTP_HOST=smtp.gmail.com, SMTP_PORT=465, SMTP_USER=địa chỉ Gmail, SMTP_PASS=app password |
Xem .env.example.
/dev/mailbox để xem mail và bấm link.PRICE_MISMATCH nếu lệch).self_reported (lazy-check khi có request, không cần cron).price_records không có cột user nào.GET /api/prices/:cardId trả 403 NEED_CONTRIBUTION (kèm teaser số record) nếu user chưa đóng góp giao dịch nào.cards, condition là field bắt buộc./terms + /privacy (bản mẫu, nên nhờ luật sư rà trước khi vận hành thật); đồng ý bắt buộc khi đăng ký + modal re-accept khi đổi TERMS_VERSION (src/lib/terms.ts — nhớ sync bản hardcode trong prisma/seed.ts); server chặn 403 TERMS_NOT_ACCEPTED.Lỗi 500 ngẫu nhiên khi npm run dev (log: SyntaxError: Unexpected end of JSON input): dự án nằm trong thư mục OneDrive — OneDrive khóa file trong .next khi sync. Cách xử lý: tạm dừng OneDrive sync khi dev (icon OneDrive → 一時停止), hoặc bỏ sync thư mục deal (OneDrive 設定 → アカウント → フォルダーの選択), hoặc chuyển dự án ra ngoài OneDrive (vd C:\dev\deal) sau khi đã đưa code lên GitHub. Không chạy npm run build khi dev server đang chạy (cả hai cùng ghi .next).
LINE Login · SMS OTP chống Sybil · push/email notification nhắc xác nhận · tích hợp Pokémon TCG API · cloud storage cho ảnh · deploy Vercel + Supabase · AI dự đoán giá.