ระบบ SaaS แบบ multi-tenant สำหรับธุรกิจขนาดเล็ก เช่น คาเฟ่หรือร้านอาหาร โฟกัสที่ attendance, payroll, subscription gating และ operational safety
- Multi-tenant พร้อม tenant isolation
- Subscription gating ระดับ tenant
- RBAC สำหรับ
OWNER,ADMIN,HR,FINANCE,EMPLOYEE - Attendance tracking พร้อม
workedMinutesและlateMinutes - Payroll รองรับ
MONTHLY,DAILY,HOURLY - Payroll save / lock / unlock พร้อม audit
- Attendance correction request / approval พร้อม audit trail
- Audit log viewer ภายในระบบ
- Health endpoint สำหรับ production checks
- Next.js 16
- Prisma
- PostgreSQL
- NextAuth
- Tailwind CSS 4
คัดลอกจาก .env.example แล้วใส่ค่าจริง:
DATABASE_URL="postgresql://USER:PASSWORD@HOST:5432/DBNAME?sslmode=require"
DIRECT_URL="postgresql://USER:PASSWORD@HOST:5432/DBNAME?sslmode=require"
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="replace-with-a-long-random-secret"
CRON_SECRET="replace-with-a-long-random-cron-secret"
ATTENDANCE_PHOTO_STORAGE_BACKEND="r2"
R2_ATTENDANCE_PHOTO_ENDPOINT="https://<account-id>.r2.cloudflarestorage.com"
R2_ATTENDANCE_PHOTO_BUCKET="cafe-saas-check-in-photos"
R2_ATTENDANCE_PHOTO_ACCESS_KEY_ID="..."
R2_ATTENDANCE_PHOTO_SECRET_ACCESS_KEY="..."ตรวจ environment ได้ด้วย:
npm run verify:envnpm install
npx prisma generate
npx prisma migrate deploy
npm run devถ้าต้องการบัญชีเดโมกลับมาใช้ทดสอบ:
npm run seed:demonpm install
npx prisma generate
npx prisma migrate deploy
npm run build
npm run startตรวจสภาพพร้อมใช้งานแบบรวมได้ด้วย:
npm run verifyตรวจ smoke test กับระบบที่กำลังรันอยู่ได้ด้วย:
npm run verify:smokeถ้าต้องการให้ระบบเปิดแอปบนพอร์ตชั่วคราวแล้วรัน smoke test ให้อัตโนมัติ:
npm run verify:runtimeถ้าจะยิง environment อื่น:
SMOKE_BASE_URL="https://your-domain.com" npm run verify:smokePowerShell wrapper:
.\scripts\verify-smoke.ps1 -BaseUrl "https://your-domain.com"CI พื้นฐานถูกเพิ่มไว้ที่: .github/workflows/ci.yml
Deploy workflow สำหรับ Vercel อยู่ที่: .github/workflows/deploy-vercel.yml
หมายเหตุ:
prebuildและprestartจะตรวจ env ให้อัตโนมัติก่อนรัน- Health check ใช้ที่ http://localhost:3000/api/health
- Owner:
owner@demo.local - Admin:
admin@demo.local - Dev:
dev@epayroll.cloud - Password:
@Epayroll2026
คู่มือ deploy แบบละเอียดอยู่ที่ DEPLOY_VERCEL_NEON_R2.md
Checklist วันขึ้นระบบจริงอยู่ที่ GO_LIVE_CHECKLIST.md
- ใช้ PostgreSQL managed service เช่น Neon, Supabase, RDS
- เปิด SSL
- ตั้ง
DATABASE_URL - รัน:
npx prisma generate
npx prisma migrate deployแนะนำ:
- Vercel สำหรับ app
- Managed PostgreSQL สำหรับ database
Environment ที่ต้องใส่บน Vercel:
DATABASE_URLDIRECT_URLNEXTAUTH_URLNEXTAUTH_SECRETCRON_SECRETATTENDANCE_PHOTO_STORAGE_BACKENDR2_ATTENDANCE_PHOTO_ENDPOINTR2_ATTENDANCE_PHOTO_BUCKETR2_ATTENDANCE_PHOTO_ACCESS_KEY_IDR2_ATTENDANCE_PHOTO_SECRET_ACCESS_KEY
Build command:
npm run buildStart command:
npm run start- ตรวจ
/api/health - ทดสอบ login
- ทดสอบ check-in / check-out
- ทดสอบ payroll save / lock / unlock
- ทดสอบ attendance correction request / approval
- ทดสอบ audit log page
PowerShell script:
.\scripts\backup-db.ps1หรือกำหนด output directory:
.\scripts\backup-db.ps1 -OutputDir .\backupsPrerequisites:
- ต้องมี
pg_dumpอยู่ใน PATH - ต้องตั้ง
DATABASE_URL
PowerShell script:
.\scripts\restore-db.ps1 -BackupFile .\backups\backup_YYYYMMDD_HHMMSS.sqlPrerequisites:
- ต้องมี
psqlอยู่ใน PATH - ต้องตั้ง
DATABASE_URL
ระบบมี monitoring hooks ระดับพื้นฐานแล้ว:
- startup env validation
- health check endpoint
- security headers
- structured server logs สำหรับ startup/health
- audit log สำหรับ business-critical actions
สิ่งที่ควรทำต่อเมื่อขึ้น production จริง:
- ผูก log aggregation เช่น Better Stack, Datadog, Axiom
- ตั้ง uptime monitor ยิง
/api/health - ตั้ง database backup schedule อย่างน้อยวันละครั้ง
ตอนนี้ระบบพร้อมสำหรับ:
- pilot customers
- internal production usage
- early paid operations
ยังควรเพิ่มต่อในอนาคต:
- external monitoring/alerting เต็มรูป
- PDF reporting
- billing integration
- scheduled backup automation
ตรวจล่าสุดบนโฟลเดอร์หลัก cafe-saas แล้วผ่านดังนี้:
npm run lintnpm run typechecknpm run buildhttp://localhost:3000/api/health- owner login + owner pages/APIs หลัก
- employee login + employee self-service + RBAC restrictions
- reversible request workflow: employee submit leave -> owner reject -> employee เห็นสถานะอัปเดต