尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Ứng dụng web (cài được ra màn hình chính điện thoại) để hai người ghi và chia chi tiêu chung, kèm sổ chi tiêu cá nhân.
/api/import/notify; giao dịch
nằm ở Chờ xác nhận để xếp vào Cá nhân hay Sổ chung. Cài ở Liên kết → Tự động nhập.Next.js 16 (App Router) · React 19 · Prisma 7 · PostgreSQL (Neon). Triển khai trên Vercel: push lên main là tự build
(prisma generate && prisma db push && next build) và lên production.
Cần Node 22+ và Docker Desktop.
npm install
npm run db:up # Postgres trong Docker, cổng 5544 (compose.yaml)
npm run db:push # tạo bảng theo prisma/schema.prisma
npm run db:seed # dữ liệu mẫu: 3 người dùng, 2 sổ chung, ~6 tháng chi tiêu — XOÁ SẠCH dữ liệu cũ trong database ở máy
npm run dev # http://localhost:4000
npm test # bộ thử (Vitest): đọc thông báo ngân hàng / MoMo, đoán danh mục
Đổi gói thì dùng npm 10: npx npm@10 install <gói>. npm 11 (tới 11.6) làm rơi các gói biên dịch theo nền tảng khỏi
package-lock.json (binding của rolldown cho máy khác, lightningcss-* riêng của vite) — kể cả npm install không đổi gì.
Chỉ npm ci thì npm nào cũng được. optionalDependencies ghi sẵn @rolldown/binding-* cho Windows và Linux để lỡ dùng npm 11
thì Vitest vẫn chạy; nâng Vitest thì nâng các gói này cùng phiên bản rolldown.
db:push, db:seed, dev:login đọc .env.local; seed và dev:login từ chối chạy nếu DATABASE_URL không phải localhost.
Prisma 7: client sinh vào src/generated/prisma (không commit, tạo lại ở postinstall) — import từ
@/generated/prisma/client, không phải @prisma/client. Kết nối qua @prisma/adapter-pg (src/lib/db.ts); chuỗi kết nối
cho CLI nằm ở prisma.config.ts. Prisma 7 không tự đọc .env và db push không tự generate — các lệnh npm run db:* đã lo
việc đó. Script ở scripts/ import client TypeScript nên chạy qua tsx.
.env.localNext.js ưu tiên file này hơn .env. Không commit (.gitignore đã chặn .env*).
DATABASE_URL="postgresql://postgres:postgres@localhost:5544/chi_tieu"
AUTH_SECRET="<chuỗi ngẫu nhiên bất kỳ>" # node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
Muốn đăng nhập Google thật ở máy thì thêm GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET (đặt trong .env hay .env.local đều được).
npm run dev:login # Quốc Thiệu ([email protected])
npm run dev:login -- [email protected] # người còn lại trong sổ
Lệnh in ra một dòng JavaScript. Mở http://localhost:4000/login, F12 → Console, dán dòng đó là vào app. Cookie ký bằng
AUTH_SECRET của .env.local nên không dùng được trên production; app không có đường đăng nhập nào thêm.
Tắt database: docker compose stop (dữ liệu giữ trong volume chi-tieu-db).
| Biến | Dùng cho |
|---|---|
DATABASE_URL | Postgres production |
AUTH_SECRET | ký cookie đăng nhập |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | đăng nhập Google |
APP_URL (tùy chọn) | origin cố định cho địa chỉ callback Google, khi chạy sau proxy làm sai origin |
Đổi schema: chỉ thêm cột/bảng có giá trị mặc định hoặc cho phép null, và không thêm @unique vào bảng đã có dữ
liệu (dùng @@index) — prisma db push chạy thẳng lên database thật mỗi lần deploy, gặp cảnh báo mất dữ liệu là hỏng build.
docs/_internal/viec-con-treo.md — việc chưa làmdocs/_internal/nhat-ky-lam-viec.md — nhật ký làm việcAGENTS.md — quy ước mở / đóng phiên cho Claude